diff --git a/.gitignore b/.gitignore index cdd4e7899..28ffa5af2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ node_modules/ #Outputs -dist/ coverage/ /.nyc_output /examples/blender/*.png diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100755 index c160a7712..000000000 --- a/.husky/commit-msg +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npx --no -- commitlint --edit ${1} diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index f1ef303b0..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npm run format:check && npm run lint diff --git a/dist/activity/activity.d.ts b/dist/activity/activity.d.ts new file mode 100644 index 000000000..3a6696e51 --- /dev/null +++ b/dist/activity/activity.d.ts @@ -0,0 +1,41 @@ +import { Agreement, ProviderInfo } from "../market/agreement"; +export declare enum ActivityStateEnum { + New = "New", + Initialized = "Initialized", + Deployed = "Deployed", + Ready = "Ready", + Unresponsive = "Unresponsive", + Terminated = "Terminated", + /** In case when we couldn't establish the in on yagna */ + Unknown = "Unknown" +} +export type ActivityUsageInfo = { + currentUsage?: number[]; + timestamp: number; +}; +export interface IActivityRepository { + getById(id: string): Promise; + getStateOfActivity(id: string): Promise; +} +/** + * Activity module - an object representing the runtime environment on the provider in accordance with the `Package` specification. + * As part of a given activity, it is possible to execute exe script commands and capture their results. + */ +export declare class Activity { + readonly id: string; + readonly agreement: Agreement; + protected readonly currentState: ActivityStateEnum; + protected readonly previousState: ActivityStateEnum; + protected readonly usage: ActivityUsageInfo; + /** + * @param id The ID of the activity in Yagna + * @param agreement The agreement that's related to this activity + * @param currentState The current state as it was obtained from yagna + * @param previousState The previous state (or New if this is the first time we're creating the activity) + * @param usage Current resource usage vector information + */ + constructor(id: string, agreement: Agreement, currentState: ActivityStateEnum, previousState: ActivityStateEnum, usage: ActivityUsageInfo); + get provider(): ProviderInfo; + getState(): ActivityStateEnum; + getPreviousState(): ActivityStateEnum; +} diff --git a/dist/activity/activity.module.d.ts b/dist/activity/activity.module.d.ts new file mode 100644 index 000000000..8b34d8e4f --- /dev/null +++ b/dist/activity/activity.module.d.ts @@ -0,0 +1,101 @@ +import { EventEmitter } from "eventemitter3"; +import { Agreement } from "../market"; +import { Activity, ActivityEvents, Result } from "./index"; +import { GolemServices } from "../golem-network"; +import { ExeUnit, ExeUnitOptions } from "./exe-unit"; +import { ExecutionOptions, ExeScriptExecutor, ExeScriptRequest } from "./exe-script-executor"; +import { Observable } from "rxjs"; +import { StreamingBatchEvent } from "./results"; +export interface ActivityModule { + events: EventEmitter; + /** + * Create and start a new activity on the provider for the supplied agreement + * + * @return The resulting activity on the provider for further use + */ + createActivity(agreement: Agreement): Promise; + /** + * Definitely terminate any work on the provider + * + * @return The activity that was permanently terminated + */ + destroyActivity(activity: Activity): Promise; + /** + * Fetches the latest state of the activity. It's recommended to use this method + * before performing any actions on the activity to make sure it's in the correct state. + * If the fetched activity's state is different from the one you have, an event will be emitted. + */ + refreshActivity(staleActivity: Activity): Promise; + /** + * Fetches the activity by its ID from yagna. If the activity doesn't exist, an error will be thrown. + */ + findActivityById(activityId: string): Promise; + /** + * Create a exe-unit "within" the activity so that you can perform commands on the rented resources + * + * @return An ExeUnit that's fully commissioned and the user can execute their commands + */ + createExeUnit(activity: Activity, options?: ExeUnitOptions): Promise; + /** + * Factory method for creating a script executor for the activity + */ + createScriptExecutor(activity: Activity, options?: ExecutionOptions): ExeScriptExecutor; + /** + * Execute a script on the activity. + */ + executeScript(activity: Activity, script: ExeScriptRequest): Promise; + /** + * Fetch the results of a batch execution. + */ + getBatchResults(activity: Activity, batchId: string, commandIndex?: number, timeout?: number): Promise; + /** + * Create an observable that will emit events from the streaming batch. + */ + observeStreamingBatchEvents(activity: Activity, batchId: string, commandIndex?: number): Observable; +} +/** + * Information about a file that has been published via the FileServer + */ +export type FileServerEntry = { + /** The URL of the file, that the clients can use to reach and download the file */ + fileUrl: string; + /** The checksum that can be used by clients to validate integrity of the downloaded file */ + fileHash: string; +}; +/** + * An abstract interface describing a File Server that can be used to expose files from the Requestor to the Golem Network + */ +export interface IFileServer { + /** + * Exposes a file that can be accessed via Golem Network and GFTP + */ + publishFile(sourcePath: string): Promise; + /** + * Tells if the file was already published on the server + */ + isFilePublished(sourcePath: string): boolean; + /** + * Returns publishing information for a file that has been already served + */ + getPublishInfo(sourcePath: string): FileServerEntry | undefined; + /** + * Tells if the server is currently serving any files + */ + isServing(): boolean; +} +export declare class ActivityModuleImpl implements ActivityModule { + private readonly services; + readonly events: EventEmitter; + private readonly logger; + private readonly activityApi; + constructor(services: GolemServices); + createScriptExecutor(activity: Activity, options?: ExecutionOptions): ExeScriptExecutor; + executeScript(activity: Activity, script: ExeScriptRequest): Promise; + getBatchResults(activity: Activity, batchId: string, commandIndex?: number | undefined, timeout?: number | undefined): Promise; + observeStreamingBatchEvents(activity: Activity, batchId: string, commandIndex?: number | undefined): Observable; + createActivity(agreement: Agreement): Promise; + destroyActivity(activity: Activity): Promise; + refreshActivity(staleActivity: Activity): Promise; + findActivityById(activityId: string): Promise; + createExeUnit(activity: Activity, options?: ExeUnitOptions): Promise; +} diff --git a/dist/activity/api.d.ts b/dist/activity/api.d.ts new file mode 100644 index 000000000..f5d7803d6 --- /dev/null +++ b/dist/activity/api.d.ts @@ -0,0 +1,81 @@ +import { Activity, ActivityStateEnum } from "./activity"; +import { Agreement } from "../market"; +import { ExeScriptRequest } from "./exe-script-executor"; +import { Result, StreamingBatchEvent } from "./results"; +import { Observable } from "rxjs"; +export type ActivityEvents = { + activityCreated: (event: { + activity: Activity; + }) => void; + errorCreatingActivity: (event: { + error: Error; + }) => void; + activityDestroyed: (event: { + activity: Activity; + }) => void; + errorDestroyingActivity: (event: { + activity: Activity; + error: Error; + }) => void; + exeUnitInitialized: (event: { + activity: Activity; + }) => void; + errorInitializingExeUnit: (event: { + activity: Activity; + error: Error; + }) => void; + activityStateChanged: (event: { + activity: Activity; + previousState: ActivityStateEnum; + }) => void; + errorRefreshingActivity: (event: { + activity: Activity; + error: Error; + }) => void; + scriptSent: (event: { + activity: Activity; + script: ExeScriptRequest; + }) => void; + scriptExecuted: (event: { + activity: Activity; + script: ExeScriptRequest; + result: string; + }) => void; + errorExecutingScript: (event: { + activity: Activity; + script: ExeScriptRequest; + error: Error; + }) => void; + batchResultsReceived: (event: { + activity: Activity; + batchId: string; + results: Result[]; + }) => void; + errorGettingBatchResults: (event: { + activity: Activity; + batchId: string; + error: Error; + }) => void; + batchEventsReceived: (event: { + activity: Activity; + batchId: string; + event: StreamingBatchEvent; + }) => void; + errorGettingBatchEvents: (event: { + activity: Activity; + batchId: string; + error: Error; + }) => void; +}; +/** + * Represents a set of use cases related to managing the lifetime of an activity + */ +export interface IActivityApi { + getActivity(id: string): Promise; + createActivity(agreement: Agreement): Promise; + destroyActivity(activity: Activity): Promise; + getActivityState(id: string): Promise; + executeScript(activity: Activity, script: ExeScriptRequest): Promise; + getExecBatchResults(activity: Activity, batchId: string, commandIndex?: number, timeout?: number): Promise; + getExecBatchEvents(activity: Activity, batchId: string, commandIndex?: number): Observable; +} diff --git a/dist/activity/config.d.ts b/dist/activity/config.d.ts new file mode 100644 index 000000000..9fc9612c9 --- /dev/null +++ b/dist/activity/config.d.ts @@ -0,0 +1,9 @@ +import { ExecutionOptions } from "./exe-script-executor"; +/** + * @internal + */ +export declare class ExecutionConfig { + readonly activityExeBatchResultPollIntervalSeconds: number; + readonly activityExeBatchResultMaxRetries: number; + constructor(options?: ExecutionOptions); +} diff --git a/dist/activity/exe-script-executor.d.ts b/dist/activity/exe-script-executor.d.ts new file mode 100644 index 000000000..d1597e042 --- /dev/null +++ b/dist/activity/exe-script-executor.d.ts @@ -0,0 +1,54 @@ +import { Logger } from "../shared/utils"; +import { Result } from "./results"; +import { Activity } from "./activity"; +import { ActivityModule } from "./activity.module"; +import { Observable } from "rxjs"; +/** + * Information needed to fetch the results of a script execution + */ +export interface ScriptExecutionMetadata { + batchId: string; + batchSize: number; +} +export interface ExeScriptRequest { + text: string; +} +export interface ExecutionOptions { + /** interval for fetching batch results while polling */ + activityExeBatchResultPollIntervalSeconds?: number; + /** maximum number of retries retrieving results when an error occurs, default: 10 */ + activityExeBatchResultMaxRetries?: number; + /** The timeout in milliseconds or an AbortSignal that will be used to cancel the execution */ + signalOrTimeout?: number | AbortSignal; +} +export declare class ExeScriptExecutor { + readonly activity: Activity; + private readonly activityModule; + private readonly logger; + private readonly options; + private readonly abortSignal; + constructor(activity: Activity, activityModule: ActivityModule, logger: Logger, options?: ExecutionOptions); + /** + * Executes the provided script and returns the batch id and batch size that can be used + * to fetch it's results + * @param script + * @returns script execution metadata - batch id and batch size that can be used to fetch results using `getResultsObservable` + */ + execute(script: ExeScriptRequest): Promise; + /** + * Given a batch id and batch size collect the results from yagna. You can choose to either + * stream them as they go or poll for them. When a timeout is reached (by either the timeout provided + * as an argument here or in the constructor) the observable will emit an error. + * + * + * @param batch - batch id and batch size + * @param stream - define type of getting results from execution (polling or streaming) + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the execution + * @param maxRetries - maximum number of retries retrieving results when an error occurs, default: 10 + */ + getResultsObservable(batch: ScriptExecutionMetadata, stream?: boolean, signalOrTimeout?: number | AbortSignal, maxRetries?: number): Observable; + protected send(script: ExeScriptRequest): Promise; + private pollingBatch; + private streamingBatch; + private parseEventToResult; +} diff --git a/dist/activity/exe-unit/batch.d.ts b/dist/activity/exe-unit/batch.d.ts new file mode 100644 index 000000000..225f617bb --- /dev/null +++ b/dist/activity/exe-unit/batch.d.ts @@ -0,0 +1,35 @@ +import { Result } from "../index"; +import { StorageProvider } from "../../shared/storage"; +import { Logger } from "../../shared/utils"; +import { ExeScriptExecutor } from "../exe-script-executor"; +import { Observable } from "rxjs"; +export declare class Batch { + private executor; + private storageProvider; + private logger; + private readonly script; + constructor(executor: ExeScriptExecutor, storageProvider: StorageProvider, logger: Logger); + /** + * Execute a command on provider using a shell (/bin/sh). + * + * @param commandLine Shell command to execute. + */ + run(commandLine: string): Batch; + /** + * Execute an executable on provider. + * + * @param executable Executable to run. + * @param args Executable arguments. + */ + run(executable: string, args: string[]): Batch; + transfer(from: string, to: string): Batch; + uploadFile(src: string, dst: string): Batch; + uploadJson(json: object, dst: string): Batch; + uploadData(data: Uint8Array, dst: string): Batch; + downloadFile(src: string, dst: string): Batch; + /** + * Executes the batch of commands added via {@link run} returning result for each of the steps. + */ + end(): Promise; + endStream(): Promise>; +} diff --git a/dist/activity/exe-unit/error.d.ts b/dist/activity/exe-unit/error.d.ts new file mode 100644 index 000000000..f0f1d7c2c --- /dev/null +++ b/dist/activity/exe-unit/error.d.ts @@ -0,0 +1,24 @@ +import { GolemModuleError } from "../../shared/error/golem-error"; +import { Agreement, ProviderInfo } from "../../market/agreement"; +import { Activity } from "../index"; +export declare enum WorkErrorCode { + ServiceNotInitialized = "ServiceNotInitialized", + ScriptExecutionFailed = "ScriptExecutionFailed", + ActivityDestroyingFailed = "ActivityDestroyingFailed", + ActivityResultsFetchingFailed = "ActivityResultsFetchingFailed", + ActivityCreationFailed = "ActivityCreationFailed", + NetworkSetupMissing = "NetworkSetupMissing", + ScriptInitializationFailed = "ScriptInitializationFailed", + ActivityDeploymentFailed = "ActivityDeploymentFailed", + ActivityStatusQueryFailed = "ActivityStatusQueryFailed", + ActivityResetFailed = "ActivityResetFailed" +} +export declare class GolemWorkError extends GolemModuleError { + #private; + code: WorkErrorCode; + previous?: Error | undefined; + constructor(message: string, code: WorkErrorCode, agreement?: Agreement, activity?: Activity, provider?: ProviderInfo, previous?: Error | undefined); + getAgreement(): Agreement | undefined; + getActivity(): Activity | undefined; + getProvider(): ProviderInfo | undefined; +} diff --git a/dist/activity/exe-unit/exe-unit.d.ts b/dist/activity/exe-unit/exe-unit.d.ts new file mode 100644 index 000000000..d6bc1e0a6 --- /dev/null +++ b/dist/activity/exe-unit/exe-unit.d.ts @@ -0,0 +1,131 @@ +import { Activity, ActivityModule, Result } from "../"; +import { Capture } from "../script"; +import { StorageProvider } from "../../shared/storage"; +import { Logger, YagnaOptions } from "../../shared/utils"; +import { Batch } from "./batch"; +import { NetworkNode } from "../../network"; +import { RemoteProcess } from "./process"; +import { Agreement, ProviderInfo } from "../../market"; +import { TcpProxy } from "../../network/tcp-proxy"; +import { ExecutionOptions } from "../exe-script-executor"; +export type LifecycleFunction = (exe: ExeUnit) => Promise; +export type VolumeSpec = { + /** Size of the volume to mount */ + sizeGib: number; + /** Location of the volume */ + path: string; +}; +export interface ExeUnitOptions { + activityDeployingTimeout?: number; + storageProvider?: StorageProvider; + networkNode?: NetworkNode; + logger?: Logger; + yagnaOptions?: YagnaOptions; + /** this function is called as soon as the exe unit is ready */ + setup?: LifecycleFunction; + /** this function is called before the exe unit is destroyed */ + teardown?: LifecycleFunction; + executionOptions?: ExecutionOptions; + signalOrTimeout?: number | AbortSignal; + volumes?: Record; +} +export interface CommandOptions { + signalOrTimeout?: number | AbortSignal; + maxRetries?: number; + env?: object; + capture?: Capture; +} +export interface ActivityDTO { + provider: ProviderInfo; + id: string; + agreement: Agreement; +} +/** + * Groups most common operations that the requestors might need to implement their workflows + */ +export declare class ExeUnit { + readonly activity: Activity; + readonly activityModule: ActivityModule; + private options?; + readonly provider: ProviderInfo; + private readonly logger; + private readonly storageProvider; + private readonly networkNode?; + private executor; + private readonly abortSignal; + constructor(activity: Activity, activityModule: ActivityModule, options?: ExeUnitOptions | undefined); + private fetchState; + /** + * This function initializes the exe unit by deploying the image to the remote machine + * and preparing and running the environment. + * This process also includes running setup function if the user has defined it + */ + setup(): Promise; + /** + * This function starts the teardown function if the user has defined it. + * It is run before the machine is destroyed. + */ + teardown(): Promise; + private deployActivity; + private setupActivity; + /** + * Execute a command on provider using a shell (/bin/sh). + * + * @param commandLine Shell command to execute. + * @param options Additional run options. + */ + run(commandLine: string, options?: CommandOptions): Promise; + /** + * Execute an executable on provider. + * + * @param executable Executable to run. + * @param args Executable arguments. + * @param options Additional run options. + */ + run(executable: string, args: string[], options?: CommandOptions): Promise; + /** + * Run an executable on provider and return {@link RemoteProcess} that will allow streaming + * that contain stdout and stderr as Readable + * + * @param commandLine Shell command to execute. + * @param options Additional run options. + */ + runAndStream(commandLine: string, options?: Omit): Promise; + /** + * @param executable Executable to run. + * @param args Executable arguments. + * @param options Additional run options. + */ + runAndStream(executable: string, args: string[], options?: CommandOptions): Promise; + /** + * Generic transfer command, requires the user to provide a publicly readable transfer source + * + * @param from - publicly available resource for reading. Supported protocols: file, http, ftp or gftp + * @param to - file path + * @param options Additional run options. + */ + transfer(from: string, to: string, options?: CommandOptions): Promise; + uploadFile(src: string, dst: string, options?: CommandOptions): Promise; + uploadJson(json: any, dst: string, options?: CommandOptions): Promise; + uploadData(data: Uint8Array, dst: string, options?: CommandOptions): Promise; + downloadFile(src: string, dst: string, options?: CommandOptions): Promise; + downloadData(src: string, options?: CommandOptions): Promise>; + downloadJson(src: string, options?: CommandOptions): Promise; + beginBatch(): Batch; + /** + * Provides a WebSocket URI that allows communicating with a remote process listening on the target port + * + * @param port The port number used by the service running within an activity on the provider + */ + getWebsocketUri(port: number): string; + getIp(): string; + /** + * Creates a new TCP proxy that will allow tunnelling the TPC traffic from the provider via the requestor + * + * @param portOnProvider The port that the service running on the provider is listening to + */ + createTcpProxy(portOnProvider: number): TcpProxy; + getDto(): ActivityDTO; + private runOneCommand; + private getVolumeDeploymentArg; +} diff --git a/dist/activity/exe-unit/index.d.ts b/dist/activity/exe-unit/index.d.ts new file mode 100644 index 000000000..1affadbf9 --- /dev/null +++ b/dist/activity/exe-unit/index.d.ts @@ -0,0 +1,5 @@ +export { ExeUnit, LifecycleFunction, ExeUnitOptions } from "./exe-unit"; +export { Batch } from "./batch"; +export { RemoteProcess } from "./process"; +export { GolemWorkError, WorkErrorCode } from "./error"; +export { TcpProxy } from "../../network/tcp-proxy"; diff --git a/dist/activity/exe-unit/process.d.ts b/dist/activity/exe-unit/process.d.ts new file mode 100644 index 000000000..543cc78d5 --- /dev/null +++ b/dist/activity/exe-unit/process.d.ts @@ -0,0 +1,33 @@ +import { Activity, ActivityModule, Result } from "../index"; +import { Logger } from "../../shared/utils"; +import { Observable, Subject } from "rxjs"; +/** + * RemoteProcess class representing the process spawned on the provider by {@link ExeUnit.runAndStream} + */ +export declare class RemoteProcess { + private readonly activityModule; + private activity; + private readonly logger; + /** + * Stream connected to stdout from provider process + */ + readonly stdout: Subject; + /** + * Stream connected to stderr from provider process + */ + readonly stderr: Subject; + private lastResult?; + private streamError?; + private subscription; + constructor(activityModule: ActivityModule, activityResult$: Observable, activity: Activity, logger: Logger); + /** + * Waits for the process to complete and returns the last part of the command's results as a {@link Result} object. + * If the timeout is reached, the return promise will be rejected. + * @param timeout - maximum waiting time im ms for the final result (default: 20_000) + */ + waitForExit(timeout?: number): Promise; + /** + * Checks if the exe-script batch from Yagna has completed, reflecting all work and streaming to be completed + */ + isFinished(): boolean; +} diff --git a/dist/activity/index.d.ts b/dist/activity/index.d.ts new file mode 100644 index 000000000..3965651e5 --- /dev/null +++ b/dist/activity/index.d.ts @@ -0,0 +1,6 @@ +export { Activity, ActivityStateEnum } from "./activity"; +export { Result } from "./results"; +export { ExecutionConfig } from "./config"; +export * from "./activity.module"; +export * from "./exe-unit"; +export * from "./api"; diff --git a/dist/activity/results.d.ts b/dist/activity/results.d.ts new file mode 100644 index 000000000..449ac1c0d --- /dev/null +++ b/dist/activity/results.d.ts @@ -0,0 +1,53 @@ +import { ActivityApi } from "ya-ts-client"; +export interface ResultData { + /** Index of script command */ + index: number; + /** The datetime of the event on which the result was received */ + eventDate: string; + /** If is success */ + result: ActivityApi.ExeScriptCommandResultDTO["result"]; + /** stdout of script command */ + stdout?: string | ArrayBuffer | null; + /** stderr of script command */ + stderr?: string | ArrayBuffer | null; + /** an error message if the result is not successful */ + message?: string | null; + /** Is batch of already finished */ + isBatchFinished?: boolean; + /** In case the command was related to upload or download, this will contain the transferred data */ + data?: T; +} +export declare class Result implements ResultData { + index: number; + eventDate: string; + result: ActivityApi.ExeScriptCommandResultDTO["result"]; + stdout?: string | ArrayBuffer | null; + stderr?: string | ArrayBuffer | null; + message?: string | null; + isBatchFinished?: boolean; + data?: TData; + constructor(props: ResultData); + /** + * Helper method making JSON-like output results more accessible + */ + getOutputAsJson(): Output; +} +export interface StreamingBatchEvent { + batch_id: string; + index: number; + timestamp: string; + kind: RuntimeEventKind; +} +export interface RuntimeEventKind { + started?: RuntimeEventStarted; + stdout?: string | ArrayBuffer; + stderr?: string | ArrayBuffer; + finished?: RuntimeEventFinished; +} +export interface RuntimeEventStarted { + command: object; +} +export interface RuntimeEventFinished { + return_code: number; + message: string | null; +} diff --git a/dist/activity/script/command.d.ts b/dist/activity/script/command.d.ts new file mode 100644 index 000000000..49da42131 --- /dev/null +++ b/dist/activity/script/command.d.ts @@ -0,0 +1,134 @@ +import { ActivityApi } from "ya-ts-client"; +import { StorageProvider } from "../../shared/storage"; +import { Result } from "../results"; +/** + * Generic command that can be send to an exe-unit via yagna's API + */ +export declare class Command { + private commandName; + protected args: Record; + constructor(commandName: string, args?: Record); + /** + * Serializes the command to a JSON representation + */ + toJson(): { + [x: string]: Record; + }; + /** + * Converts the command into + */ + toExeScriptRequest(): ActivityApi.ExeScriptRequestDTO; + /** + * Setup local environment for executing this command. + */ + before(): Promise; + /** + * Cleanup local setup that was needed for the command to run. + * + * It is called after the command was sent to the activity, and the command was processed. + * + * When run within scripts or batch commands, after() might be called without any results, as one of the previous + * commands might have failed. In this case, the command should still cleanup its local setup and return an empty + * error result. + * + * @param result + */ + after(result?: Result): Promise>; +} +export type DeployArgs = { + net?: DeployNetworkArgs[]; + volumes?: DeployVolumesArgs; +}; +type DeployNetworkArgs = { + id: string; + ip: string; + mask: string; + gateway?: string; + nodes: { + [ip: string]: string; + }; + nodeIp: string; +}; +type DeployVolumesArgs = { + [path: string]: { + storage: { + /** @example 7000m */ + size: string; + errors?: "panic"; + }; + }; +}; +export declare class Deploy extends Command { + constructor(args?: DeployArgs); +} +export declare class Start extends Command { + constructor(args?: Record); +} +export type Capture = { + stdout?: CaptureMode; + stderr?: CaptureMode; +}; +export type CaptureMode = { + atEnd: { + part?: CapturePart; + format?: CaptureFormat; + }; +} | { + stream: { + limit?: number; + format?: CaptureFormat; + }; +}; +export type CapturePart = { + head: number; +} | { + tail: number; +} | { + headTail: number; +}; +export type CaptureFormat = "string" | "binary"; +export declare class Run extends Command { + constructor(cmd: string, args?: string[] | null, env?: object | null, capture?: Capture); +} +export declare class Terminate extends Command { + constructor(args?: Record); +} +export declare class Transfer extends Command { + protected from?: string | undefined; + protected to?: string | undefined; + constructor(from?: string | undefined, to?: string | undefined, args?: object); +} +export declare class UploadFile extends Transfer { + private storageProvider; + private src; + private dstPath; + constructor(storageProvider: StorageProvider, src: string, dstPath: string); + before(): Promise; + after(result: Result): Promise; +} +export declare class UploadData extends Transfer { + private storageProvider; + private src; + private dstPath; + constructor(storageProvider: StorageProvider, src: Uint8Array, dstPath: string); + before(): Promise; + after(result: Result): Promise; +} +export declare class DownloadFile extends Transfer { + private storageProvider; + private srcPath; + private dstPath; + constructor(storageProvider: StorageProvider, srcPath: string, dstPath: string); + before(): Promise; + after(result: Result): Promise; +} +export declare class DownloadData extends Transfer { + private storageProvider; + private srcPath; + private chunks; + constructor(storageProvider: StorageProvider, srcPath: string); + before(): Promise; + after(result: Result): Promise>; + private combineChunks; +} +export {}; diff --git a/dist/activity/script/index.d.ts b/dist/activity/script/index.d.ts new file mode 100644 index 000000000..37288c75d --- /dev/null +++ b/dist/activity/script/index.d.ts @@ -0,0 +1,2 @@ +export { Script } from "./script"; +export { Command, Run, Deploy, Start, Transfer, Terminate, UploadFile, UploadData, DownloadFile, DownloadData, Capture, } from "./command"; diff --git a/dist/activity/script/script.d.ts b/dist/activity/script/script.d.ts new file mode 100644 index 000000000..9d18ee38c --- /dev/null +++ b/dist/activity/script/script.d.ts @@ -0,0 +1,15 @@ +import { ActivityApi } from "ya-ts-client"; +import { Command } from "./command"; +import { Result } from "../index"; +/** + * Represents a series of Commands that can be sent to exe-unit via yagna's API + */ +export declare class Script { + private commands; + constructor(commands?: Command[]); + static create(commands?: Command[]): Script; + add(command: Command): void; + before(): Promise; + after(results: Result[]): Promise; + getExeScriptRequest(): ActivityApi.ExeScriptRequestDTO; +} diff --git a/dist/experimental/deployment/builder.d.ts b/dist/experimental/deployment/builder.d.ts new file mode 100644 index 000000000..44db0d0c4 --- /dev/null +++ b/dist/experimental/deployment/builder.d.ts @@ -0,0 +1,22 @@ +import { NetworkOptions } from "../../network"; +import { Deployment } from "./deployment"; +import { GolemNetwork, MarketOrderSpec } from "../../golem-network"; +export interface DeploymentOptions { + replicas: number | { + min: number; + max: number; + }; + network?: string; +} +export interface CreateResourceRentalPoolOptions extends MarketOrderSpec { + deployment: DeploymentOptions; +} +export declare class GolemDeploymentBuilder { + private glm; + private components; + reset(): void; + constructor(glm: GolemNetwork); + createResourceRentalPool(name: string, options: CreateResourceRentalPoolOptions): this; + createNetwork(name: string, options?: NetworkOptions): this; + getDeployment(): Deployment; +} diff --git a/dist/experimental/deployment/deployment.d.ts b/dist/experimental/deployment/deployment.d.ts new file mode 100644 index 000000000..e432b2d37 --- /dev/null +++ b/dist/experimental/deployment/deployment.d.ts @@ -0,0 +1,73 @@ +import { Logger, YagnaApi } from "../../shared/utils"; +import { EventEmitter } from "eventemitter3"; +import { ActivityModule } from "../../activity"; +import { Network, NetworkModule, NetworkOptions } from "../../network"; +import { MarketModule } from "../../market"; +import { PaymentModule } from "../../payment"; +import { CreateResourceRentalPoolOptions } from "./builder"; +import { RentalModule, ResourceRentalPool } from "../../resource-rental"; +export declare enum DeploymentState { + INITIAL = "INITIAL", + STARTING = "STARTING", + READY = "READY", + STOPPING = "STOPPING", + STOPPED = "STOPPED", + ERROR = "ERROR" +} +export interface DeploymentEvents { + /** + * Fires when backend is started. + */ + ready: () => void; + /** + * Fires when a new instance encounters an error during initialization. + * @param error + */ + /** + * Fires when backend is about to be stopped. + */ + beforeEnd: () => void; + /** + * Fires when backend is completely terminated. + */ + end: () => void; +} +export type DeploymentComponents = { + resourceRentalPools: { + name: string; + options: CreateResourceRentalPoolOptions; + }[]; + networks: { + name: string; + options: NetworkOptions; + }[]; +}; +/** + * @experimental This feature is experimental!!! + */ +export declare class Deployment { + private readonly components; + readonly events: EventEmitter; + private state; + private readonly logger; + private readonly abortController; + private readonly yagnaApi; + private readonly pools; + private readonly networks; + private readonly modules; + constructor(components: DeploymentComponents, deps: { + logger: Logger; + yagna: YagnaApi; + market: MarketModule; + activity: ActivityModule; + payment: PaymentModule; + network: NetworkModule; + rental: RentalModule; + }); + getState(): DeploymentState; + start(): Promise; + stop(): Promise; + getResourceRentalPool(name: string): ResourceRentalPool; + getNetwork(name: string): Network; + private waitForDeployment; +} diff --git a/dist/experimental/deployment/index.d.ts b/dist/experimental/deployment/index.d.ts new file mode 100644 index 000000000..29409cf08 --- /dev/null +++ b/dist/experimental/deployment/index.d.ts @@ -0,0 +1,2 @@ +export * from "./deployment"; +export * from "./builder"; diff --git a/dist/experimental/deployment/validate-deployment.d.ts b/dist/experimental/deployment/validate-deployment.d.ts new file mode 100644 index 000000000..21bcf887e --- /dev/null +++ b/dist/experimental/deployment/validate-deployment.d.ts @@ -0,0 +1,2 @@ +import { DeploymentComponents } from "./deployment"; +export declare function validateDeployment(components: DeploymentComponents): void; diff --git a/dist/experimental/index.d.ts b/dist/experimental/index.d.ts new file mode 100644 index 000000000..b6d6d6a30 --- /dev/null +++ b/dist/experimental/index.d.ts @@ -0,0 +1,3 @@ +export * from "./job"; +export * from "./reputation"; +export * from "./deployment"; diff --git a/dist/experimental/job/index.d.ts b/dist/experimental/job/index.d.ts new file mode 100644 index 000000000..58aac5c3c --- /dev/null +++ b/dist/experimental/job/index.d.ts @@ -0,0 +1,2 @@ +export { Job, JobState } from "./job"; +export { JobManager, JobManagerConfig } from "./job_manager"; diff --git a/dist/experimental/job/job.d.ts b/dist/experimental/job/job.d.ts new file mode 100644 index 000000000..5e559eace --- /dev/null +++ b/dist/experimental/job/job.d.ts @@ -0,0 +1,86 @@ +import { ExeUnit } from "../../activity/exe-unit"; +import { EventEmitter } from "eventemitter3"; +import { GolemNetwork, MarketOrderSpec } from "../../golem-network/golem-network"; +import { Logger } from "../../shared/utils"; +export declare enum JobState { + New = "new", + Queued = "queued", + Pending = "pending", + Done = "done", + Retry = "retry", + Rejected = "rejected" +} +export type WorkFunction = (exe: ExeUnit) => Promise; +export interface JobEventsDict { + /** + * Emitted immediately after the job is created and initialization begins. + */ + created: () => void; + /** + * Emitted when the job finishes initialization and work begins. + */ + started: () => void; + /** + * Emitted when the job completes successfully and cleanup begins. + */ + success: () => void; + /** + * Emitted when the job fails and cleanup begins. + */ + error: (error: Error) => void; + /** + * Emitted when the job is canceled by the user. + */ + canceled: () => void; + /** + * Emitted when the job finishes cleanup after success, error or cancelation. + */ + ended: () => void; +} +/** + * @experimental This API is experimental and subject to change. Use at your own risk. + * + * The Job class represents a single self-contained unit of work that can be run on the Golem Network. + * It is responsible for managing the lifecycle of the work and providing information about its state. + * It also provides an event emitter that can be used to listen for state changes. + */ +export declare class Job { + readonly id: string; + private readonly glm; + private readonly order; + private readonly logger; + readonly events: EventEmitter; + private abortController; + results: Output | undefined; + error: Error | undefined; + state: JobState; + /** + * @param id + * @param glm + * @param order + * @param logger + */ + constructor(id: string, glm: GolemNetwork, order: MarketOrderSpec, logger: Logger); + isRunning(): boolean; + /** + * Run your worker function on the Golem Network. This method will synchronously initialize all internal services and validate the job options. The work itself will be run asynchronously in the background. + * You can use the {@link experimental/job/job.Job.events} event emitter to listen for state changes. + * You can also use {@link experimental/job/job.Job.waitForResult} to wait for the job to finish and get the results. + * If you want to cancel the job, use {@link experimental/job/job.Job.cancel}. + * If you want to run multiple jobs in parallel, you can use {@link experimental/job/job_manager.JobManager.createJob} to create multiple jobs and run them in parallel. + * + * @param workOnGolem - Your worker function that will be run on the Golem Network. + */ + startWork(workOnGolem: WorkFunction): void; + private runWork; + /** + * Cancel the job. This method will stop the activity and wait for it to finish. + * Throws an error if the job is not running. + */ + cancel(): Promise; + /** + * Wait for the job to finish and return the results. + * Throws an error if the job was not started. + */ + waitForResult(): Promise; +} diff --git a/dist/experimental/job/job_manager.d.ts b/dist/experimental/job/job_manager.d.ts new file mode 100644 index 000000000..5ca62a435 --- /dev/null +++ b/dist/experimental/job/job_manager.d.ts @@ -0,0 +1,39 @@ +import { Job } from "./job"; +import { Logger, YagnaOptions } from "../../shared/utils"; +import { GolemNetworkOptions, MarketOrderSpec } from "../../golem-network/golem-network"; +export type JobManagerConfig = Partial & { + /** + * @deprecated This field is deprecated and will be removed in future versions. Please use the 'api.key` and `api.url' instead. + */ + yagna?: YagnaOptions; +}; +/** + * @experimental This API is experimental and subject to change. Use at your own risk. + * + * The Golem Network class provides a high-level API for running jobs on the Golem Network. + */ +export declare class JobManager { + private readonly logger; + private glm; + private jobs; + /** + * @param config - Configuration options that will be passed to all jobs created by this instance. + * @param logger + */ + constructor(config?: JobManagerConfig, logger?: Logger); + isInitialized(): boolean; + init(): Promise; + /** + * Create a new job and add it to the list of jobs managed by this instance. + * This method does not start any work on the network, use {@link experimental/job/job.Job.startWork} for that. + * + * @param order + */ + createJob(order: MarketOrderSpec): Job; + getJobById(id: string): Job | undefined; + /** + * Close the connection to the Yagna service and cancel all running jobs. + */ + close(): Promise; + private checkInitialization; +} diff --git a/dist/experimental/reputation/error.d.ts b/dist/experimental/reputation/error.d.ts new file mode 100644 index 000000000..9b8952e16 --- /dev/null +++ b/dist/experimental/reputation/error.d.ts @@ -0,0 +1,4 @@ +import { GolemModuleError } from "../../shared/error/golem-error"; +export declare class GolemReputationError extends GolemModuleError { + constructor(message: string, cause?: Error); +} diff --git a/dist/experimental/reputation/index.d.ts b/dist/experimental/reputation/index.d.ts new file mode 100644 index 000000000..312e0e7e6 --- /dev/null +++ b/dist/experimental/reputation/index.d.ts @@ -0,0 +1,7 @@ +export { ReputationSystem, DEFAULT_AGREEMENT_WEIGHTS, DEFAULT_PROPOSAL_WEIGHTS, DEFAULT_PROPOSAL_MIN_SCORE, DEFAULT_REPUTATION_URL, DEFAULT_AGREEMENT_TOP_POOL_SIZE, } from "./system"; +export { ReputationWeights } from "./types"; +export { ProposalSelectorOptions } from "./types"; +export { ProposalFilterOptions } from "./types"; +export { ReputationData } from "./types"; +export { ReputationProviderEntry } from "./types"; +export { ReputationProviderScores } from "./types"; diff --git a/dist/experimental/reputation/system.d.ts b/dist/experimental/reputation/system.d.ts new file mode 100644 index 000000000..7167d34f2 --- /dev/null +++ b/dist/experimental/reputation/system.d.ts @@ -0,0 +1,178 @@ +import { OfferProposalFilter, OfferProposal, OfferProposalSelector } from "../../market"; +import { ProposalSelectorOptions, ProposalFilterOptions, ReputationConfig, ReputationData, ReputationPresetName, ReputationPresets, ReputationProviderEntry, ReputationProviderScores, ReputationWeights } from "./types"; +/** + * Default minimum score for proposals. + * @experimental + */ +export declare const DEFAULT_PROPOSAL_MIN_SCORE = 0.8; +/** + * Default weights used to calculate the score for proposals. + * @experimental + */ +export declare const DEFAULT_PROPOSAL_WEIGHTS: ReputationWeights; +/** + * Default weights used to calculate the score for agreements. + * @experimental + */ +export declare const DEFAULT_AGREEMENT_WEIGHTS: ReputationWeights; +/** + * Default reputation service URL. + * @experimental + */ +export declare const DEFAULT_REPUTATION_URL = "https://reputation.golem.network/v2/providers/scores"; +/** + * The number of top scoring providers to consider when selecting an agreement. + * + * Default for `topPoolSize` agreement selector option. + */ +export declare const DEFAULT_AGREEMENT_TOP_POOL_SIZE = 2; +/** + * Predefined presets for reputation system. + */ +export declare const REPUTATION_PRESETS: ReputationPresets; +/** + * Reputation system client. + * + * This class is responsible for fetching and applying reputation data to Golem SDK's market management class. + * + * Currently, it includes a proposal filter you can use to filter out providers with low reputation scores. + * + * Reputation data is gathered by the following project: https://github.com/golemfactory/reputation-auditor + * + * You can adjust the weights used to calculate the score for proposals by using the `setProposalWeights` method. + * + * NOTE: This class is currently experimental and subject to change. + * + * NOTE: Only providers from polygon network are being tested, so using this class on testnet will not work. + * + * @experimental + */ +export declare class ReputationSystem { + private config?; + /** + * Reputation data. + */ + private data; + /** + * Weights used to calculate the score for proposals. + */ + private proposalWeights; + /** + * Weights used to calculate the score for agreements. + */ + private agreementWeights; + /** + * The payment network currently used. + */ + readonly paymentNetwork: string; + /** + * Map of provider IDs to their reputation data. + */ + private readonly providersScoreMap; + /** + * Map of provider IDs to their rejected status. + * @private + */ + private readonly rejectedProvidersMap; + /** + * Map of operators (by wallet address) to their rejected status. + * @private + */ + private readonly rejectedOperatorsMap; + /** + * Reputation service URL. + */ + private readonly url; + /** + * Local logger instance. + * @private + */ + private readonly logger; + /** + * Default options used when creating proposal filter. + * @private + */ + private defaultProposalFilterOptions; + /** + * Default options used when creating agreement selector. + * @private + */ + private defaultAgreementSelectorOptions; + /** + * Create a new reputation system client and fetch the reputation data. + */ + static create(config?: ReputationConfig): Promise; + constructor(config?: ReputationConfig | undefined); + /** + * Apply preset to current reputation system configuration. + * @param presetName Preset name to use. + */ + usePreset(presetName: ReputationPresetName): void; + /** + * Set reputation data. + * + * This is useful if you want to cache the date locally, or you have an alternative source of data. + */ + setData(data: ReputationData): void; + /** + * Returns current reputation data. + */ + getData(): ReputationData; + /** + * Fetch data from the reputation service. + */ + fetchData(): Promise; + /** + * Set weights used to calculate the score for proposals. + */ + setProposalWeights(weights: ReputationWeights): void; + /** + * Returns current proposal weights. + */ + getProposalWeights(): ReputationWeights; + /** + * Set weights used to calculate the score for agreements. + */ + setAgreementWeights(weights: ReputationWeights): void; + /** + * Returns current agreement weights. + */ + getAgreementWeights(): ReputationWeights; + /** + * Returns scores for a provider or undefined if the provider is unlisted. + * @param providerId + */ + getProviderScores(providerId: string): ReputationProviderScores | undefined; + /** + * Returns a proposal filter that can be used to filter out providers with low reputation scores. + * @param opts + */ + offerProposalFilter(opts?: ProposalFilterOptions): OfferProposalFilter; + /** + * Returns an agreement selector that can be used to select providers based on their reputation scores. + * + * The outcome of this function is determined by current provider scores and the agreement weights set. + * + * For best results, make sure you test the performance or stability of your workload using different weights. + * + * @see setAgreementWeights + * + * @param opts + */ + offerProposalSelector(opts?: ProposalSelectorOptions): OfferProposalSelector; + /** + * Calculate a normalized score based on the given scores and weights. + * @param scores + * @param weights + */ + calculateScore(scores: Partial, weights: ReputationWeights): number; + /** + * Based on the current reputation data, calculate a list of providers that meet the minimum score requirement. + * + * This method is useful to validate you filter and weights vs the available provider market. + * + * @param opts + */ + calculateProviderPool(opts?: ProposalFilterOptions): ReputationProviderEntry[]; + sortCandidatesByScore(proposals: OfferProposal[], scoresMap: Map): OfferProposal[]; +} diff --git a/dist/experimental/reputation/types.d.ts b/dist/experimental/reputation/types.d.ts new file mode 100644 index 000000000..d0965bf55 --- /dev/null +++ b/dist/experimental/reputation/types.d.ts @@ -0,0 +1,159 @@ +import { Logger } from "../../shared/utils"; +import { ProviderInfo } from "../../market/agreement"; +/** + * Set of normalized scores for a provider. + * + * All values are between 0 and 1. + * + * Higher score is better. + * + * @experimental + */ +export interface ReputationProviderScores { + /** Percentage of successful tasks in the last "period" (last N test runs?) */ + successRate: number; + /** Ping percentage that got responses. */ + uptime: number; + /** CPU single threaded benchmark score. */ + cpuSingleThreadScore: number; + /** CPU multi-thread benchmark score. */ + cpuMultiThreadScore: number; +} +/** + * Reputation provider entry. + * @experimental + */ +export interface ReputationProviderEntry { + provider: ProviderInfo; + scores: ReputationProviderScores; +} +/** + * Information about a rejected operator. + * @experimental + */ +export interface ReputationRejectedOperator { + operator: { + walletAddress: string; + }; + reason?: string; +} +/** + * Information about a rejected provider. + * @experimental + */ +export interface ReputationRejectedProvider { + provider: ProviderInfo; + reason?: string; +} +/** + * Information about untested provider. + * @experimental + */ +export interface ReputationUntestedProvider { + provider: ProviderInfo; + scores: { + uptime: number; + }; +} +/** + * Reputation data. + * @experimental + */ +export interface ReputationData { + testedProviders: ReputationProviderEntry[]; + rejectedProviders?: ReputationRejectedProvider[]; + rejectedOperators?: ReputationRejectedOperator[]; + untestedProviders?: ReputationUntestedProvider[]; +} +/** + * Options for the proposal filter. + * @experimental + */ +export interface ProposalFilterOptions { + /** + * Should providers with no reputation data be accepted. + * + * Default is false if there are listed providers, true if there are no listed providers. + */ + acceptUnlisted?: boolean; + /** + * Minimum weighted score a provider on the list needs to have in order to not get rejected. + * + * Default is `DEFAULT_PROPOSAL_MIN_SCORE`. + */ + min?: number; +} +/** + * Options for the agreement selector. + * @experimental + */ +export interface ProposalSelectorOptions { + /** + * The size of top provider pool used to pick a random one. + * + * If you want to just use the best available one, set this to 1. + * + * Default is `DEFAULT_AGREEMENT_TOP_POOL_SIZE`. + */ + topPoolSize?: number; +} +/** + * Weights used to calculate the score for providers. + * @experimental + */ +export type ReputationWeights = Partial; +/** + * Mixin for objects with reputation weights. + * @experimental + */ +export interface ReputationWeightsMixin { + weights?: ReputationWeights; +} +/** + * Preset configuration for reputation system. + * + * @experimental + */ +export interface ReputationPreset { + offerProposalFilter?: ProposalFilterOptions & ReputationWeightsMixin; + offerProposalSelector?: ProposalSelectorOptions & ReputationWeightsMixin; +} +/** + * Interface for predefined reputation presets. + * + * @experimental + */ +export interface ReputationPresets { + compute: ReputationPreset; + service: ReputationPreset; +} +/** + * Names of predefined reputation presets. + * + * @experimental + */ +export type ReputationPresetName = keyof ReputationPresets; +/** + * Configuration for ReputationSystem class. + * + * @experimental + */ +export interface ReputationConfig { + /** + * Reputation service URL + */ + url?: string; + /** + * Network to query data for. + * + * This is the main filter for the data. + * + * You can leave it empty if you are controlling the payment network through `PAYMENT_NETWORK` environment variable. + */ + paymentNetwork?: string; + /** + * Logger to use. + */ + logger?: Logger; + preset?: ReputationPresetName; +} diff --git a/dist/golem-js-experimental.js b/dist/golem-js-experimental.js new file mode 100644 index 000000000..560a90a02 --- /dev/null +++ b/dist/golem-js-experimental.js @@ -0,0 +1,823 @@ +'use strict'; + +var eventemitter3 = require('eventemitter3'); +var golemNetwork = require('./shared-BNnsKKpM.js'); +var uuid = require('uuid'); +require('ya-ts-client'); +require('semver/functions/satisfies.js'); +require('semver/functions/coerce.js'); +require('rxjs'); +require('eventsource'); +require('debug'); +require('async-lock'); +require('decimal.js-light'); +require('path'); +require('fs'); +require('cross-spawn'); +require('flatbuffers/js/flexbuffers.js'); +require('js-sha3'); +require('ws'); +require('net'); +require('buffer'); +require('async-retry'); +require('ip-num'); + +exports.JobState = void 0; +(function (JobState) { + JobState["New"] = "new"; + JobState["Queued"] = "queued"; + JobState["Pending"] = "pending"; + JobState["Done"] = "done"; + JobState["Retry"] = "retry"; + JobState["Rejected"] = "rejected"; +})(exports.JobState || (exports.JobState = {})); +/** + * @experimental This API is experimental and subject to change. Use at your own risk. + * + * The Job class represents a single self-contained unit of work that can be run on the Golem Network. + * It is responsible for managing the lifecycle of the work and providing information about its state. + * It also provides an event emitter that can be used to listen for state changes. + */ +class Job { + /** + * @param id + * @param glm + * @param order + * @param logger + */ + constructor(id, glm, order, logger) { + this.id = id; + this.glm = glm; + this.order = order; + this.logger = logger; + this.events = new eventemitter3.EventEmitter(); + this.abortController = new AbortController(); + this.state = exports.JobState.New; + } + isRunning() { + const inProgressStates = [exports.JobState.Pending, exports.JobState.Retry]; + return inProgressStates.includes(this.state); + } + /** + * Run your worker function on the Golem Network. This method will synchronously initialize all internal services and validate the job options. The work itself will be run asynchronously in the background. + * You can use the {@link experimental/job/job.Job.events} event emitter to listen for state changes. + * You can also use {@link experimental/job/job.Job.waitForResult} to wait for the job to finish and get the results. + * If you want to cancel the job, use {@link experimental/job/job.Job.cancel}. + * If you want to run multiple jobs in parallel, you can use {@link experimental/job/job_manager.JobManager.createJob} to create multiple jobs and run them in parallel. + * + * @param workOnGolem - Your worker function that will be run on the Golem Network. + */ + startWork(workOnGolem) { + this.logger.debug("Staring work in a Job"); + if (this.isRunning()) { + throw new golemNetwork.GolemUserError(`Job ${this.id} is already running`); + } + this.state = exports.JobState.Pending; + this.events.emit("created"); + // reset abort controller + this.abortController = new AbortController(); + this.runWork({ + workOnGolem, + signal: this.abortController.signal, + }) + .then((results) => { + this.logger.debug("Finished work in job", { results }); + this.results = results; + this.state = exports.JobState.Done; + this.events.emit("success"); + }) + .catch((error) => { + this.logger.error("Running work in job failed due to", error); + this.error = error; + this.state = exports.JobState.Rejected; + this.events.emit("error", error); + }) + .finally(async () => { + this.events.emit("ended"); + }); + } + async runWork({ workOnGolem, signal }) { + if (signal.aborted) { + this.events.emit("canceled"); + throw new golemNetwork.GolemAbortError("Canceled"); + } + const rental = await this.glm.oneOf({ order: this.order, signalOrTimeout: signal }); + try { + const exeUnit = await rental.getExeUnit(signal); + this.events.emit("started"); + if (signal.aborted) { + this.events.emit("canceled"); + throw new golemNetwork.GolemAbortError("Canceled"); + } + signal.addEventListener("abort", () => this.events.emit("canceled"), { once: true }); + // remember to `await` here so that the `finally` block is executed AFTER the work is done + return await workOnGolem(exeUnit); + } + finally { + await rental.stopAndFinalize(); + } + } + /** + * Cancel the job. This method will stop the activity and wait for it to finish. + * Throws an error if the job is not running. + */ + async cancel() { + if (!this.isRunning) { + throw new golemNetwork.GolemUserError(`Job ${this.id} is not running`); + } + this.abortController.abort(); + return new Promise((resolve) => { + this.events.once("ended", resolve); + }); + } + /** + * Wait for the job to finish and return the results. + * Throws an error if the job was not started. + */ + async waitForResult() { + if (this.state === exports.JobState.Done) { + return this.results; + } + if (this.state === exports.JobState.Rejected) { + throw this.error; + } + if (!this.isRunning()) { + throw new golemNetwork.GolemUserError(`Job ${this.id} is not running`); + } + return new Promise((resolve, reject) => { + this.events.once("ended", () => { + if (this.state === exports.JobState.Done) { + resolve(this.results); + } + else { + reject(this.error); + } + }); + }); + } +} + +/** + * @experimental This API is experimental and subject to change. Use at your own risk. + * + * The Golem Network class provides a high-level API for running jobs on the Golem Network. + */ +class JobManager { + /** + * @param config - Configuration options that will be passed to all jobs created by this instance. + * @param logger + */ + constructor(config, logger = golemNetwork.defaultLogger("jobs")) { + var _a, _b; + this.logger = logger; + this.jobs = new Map(); + this.glm = new golemNetwork.GolemNetwork({ + api: { + key: (_a = config === null || config === void 0 ? void 0 : config.yagna) === null || _a === void 0 ? void 0 : _a.apiKey, + url: (_b = config === null || config === void 0 ? void 0 : config.yagna) === null || _b === void 0 ? void 0 : _b.basePath, + }, + logger: this.logger, + ...config, + }); + } + isInitialized() { + return this.glm.isConnected(); + } + async init() { + await this.glm.connect(); + } + /** + * Create a new job and add it to the list of jobs managed by this instance. + * This method does not start any work on the network, use {@link experimental/job/job.Job.startWork} for that. + * + * @param order + */ + createJob(order) { + this.checkInitialization(); + const jobId = uuid.v4(); + const job = new Job(jobId, this.glm, order, this.logger); + this.jobs.set(jobId, job); + return job; + } + getJobById(id) { + this.checkInitialization(); + return this.jobs.get(id); + } + /** + * Close the connection to the Yagna service and cancel all running jobs. + */ + async close() { + const pendingJobs = Array.from(this.jobs.values()).filter((job) => job.isRunning()); + await Promise.allSettled(pendingJobs.map((job) => job.cancel())); + await this.glm.disconnect(); + } + checkInitialization() { + if (!this.isInitialized()) { + throw new golemNetwork.GolemUserError("GolemNetwork not initialized, please run init() first"); + } + } +} + +class GolemReputationError extends golemNetwork.GolemModuleError { + constructor(message, cause) { + super(message, 0, cause); + } +} + +/** + * Default minimum score for proposals. + * @experimental + */ +const DEFAULT_PROPOSAL_MIN_SCORE = 0.8; +/** + * Default weights used to calculate the score for proposals. + * @experimental + */ +const DEFAULT_PROPOSAL_WEIGHTS = { + uptime: 0.5, + successRate: 0.5, +}; +/** + * Default weights used to calculate the score for agreements. + * @experimental + */ +const DEFAULT_AGREEMENT_WEIGHTS = { + uptime: 0.5, + successRate: 0.5, +}; +/** + * Default reputation service URL. + * @experimental + */ +const DEFAULT_REPUTATION_URL = "https://reputation.golem.network/v2/providers/scores"; +/** + * The number of top scoring providers to consider when selecting an agreement. + * + * Default for `topPoolSize` agreement selector option. + */ +const DEFAULT_AGREEMENT_TOP_POOL_SIZE = 2; +/** + * Predefined presets for reputation system. + */ +const REPUTATION_PRESETS = { + /** + * Preset for short CPU intensive compute tasks. + */ + compute: { + offerProposalFilter: { + min: 0.5, + weights: { + cpuSingleThreadScore: 1, + }, + }, + offerProposalSelector: { + weights: { + cpuSingleThreadScore: 1, + }, + topPoolSize: DEFAULT_AGREEMENT_TOP_POOL_SIZE, + }, + }, + /** + * Preset for long-running services, where uptime is important. + */ + service: { + offerProposalFilter: { + min: DEFAULT_PROPOSAL_MIN_SCORE, + weights: { + uptime: 0.8, + cpuMultiThreadScore: 0.2, + }, + }, + offerProposalSelector: { + weights: { + uptime: 0.5, + cpuMultiThreadScore: 0.5, + }, + topPoolSize: DEFAULT_AGREEMENT_TOP_POOL_SIZE, + }, + }, +}; +/** + * Reputation system client. + * + * This class is responsible for fetching and applying reputation data to Golem SDK's market management class. + * + * Currently, it includes a proposal filter you can use to filter out providers with low reputation scores. + * + * Reputation data is gathered by the following project: https://github.com/golemfactory/reputation-auditor + * + * You can adjust the weights used to calculate the score for proposals by using the `setProposalWeights` method. + * + * NOTE: This class is currently experimental and subject to change. + * + * NOTE: Only providers from polygon network are being tested, so using this class on testnet will not work. + * + * @experimental + */ +class ReputationSystem { + /** + * Create a new reputation system client and fetch the reputation data. + */ + static async create(config) { + const system = new ReputationSystem(config); + await system.fetchData(); + return system; + } + constructor(config) { + var _a, _b, _c, _d, _e, _f, _g, _h; + this.config = config; + /** + * Reputation data. + */ + this.data = { + testedProviders: [], + }; + /** + * Weights used to calculate the score for proposals. + */ + this.proposalWeights = DEFAULT_PROPOSAL_WEIGHTS; + /** + * Weights used to calculate the score for agreements. + */ + this.agreementWeights = DEFAULT_AGREEMENT_WEIGHTS; + /** + * Map of provider IDs to their reputation data. + */ + this.providersScoreMap = new Map(); + /** + * Map of provider IDs to their rejected status. + * @private + */ + this.rejectedProvidersMap = new Map(); + /** + * Map of operators (by wallet address) to their rejected status. + * @private + */ + this.rejectedOperatorsMap = new Map(); + this.url = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : DEFAULT_REPUTATION_URL; + this.logger = (_e = (_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.logger) === null || _d === void 0 ? void 0 : _d.child("reputation")) !== null && _e !== void 0 ? _e : golemNetwork.nullLogger(); + this.paymentNetwork = (_g = (_f = this.config) === null || _f === void 0 ? void 0 : _f.paymentNetwork) !== null && _g !== void 0 ? _g : golemNetwork.getPaymentNetwork(); + this.defaultProposalFilterOptions = { + min: DEFAULT_PROPOSAL_MIN_SCORE, + acceptUnlisted: undefined, + }; + this.defaultAgreementSelectorOptions = { + topPoolSize: DEFAULT_AGREEMENT_TOP_POOL_SIZE, + }; + if ((_h = this.config) === null || _h === void 0 ? void 0 : _h.preset) { + this.usePreset(this.config.preset); + } + } + /** + * Apply preset to current reputation system configuration. + * @param presetName Preset name to use. + */ + usePreset(presetName) { + var _a, _b, _c, _d, _e, _f, _g; + const presetConfig = REPUTATION_PRESETS[presetName]; + if (!presetConfig) { + throw new GolemReputationError(`Reputation preset not found: ${presetName}`); + } + if ((_a = presetConfig.offerProposalFilter) === null || _a === void 0 ? void 0 : _a.weights) { + this.setProposalWeights(presetConfig.offerProposalFilter.weights); + } + if ((_b = presetConfig.offerProposalSelector) === null || _b === void 0 ? void 0 : _b.weights) { + this.setAgreementWeights(presetConfig.offerProposalSelector.weights); + } + this.defaultProposalFilterOptions = { + min: (_d = (_c = presetConfig.offerProposalFilter) === null || _c === void 0 ? void 0 : _c.min) !== null && _d !== void 0 ? _d : this.defaultProposalFilterOptions.min, + acceptUnlisted: (_e = presetConfig.offerProposalFilter) === null || _e === void 0 ? void 0 : _e.acceptUnlisted, // undefined is meaningful + }; + this.defaultAgreementSelectorOptions = { + topPoolSize: (_g = (_f = presetConfig.offerProposalSelector) === null || _f === void 0 ? void 0 : _f.topPoolSize) !== null && _g !== void 0 ? _g : this.defaultAgreementSelectorOptions.topPoolSize, + // TODO: to be discussed with the reputation team + // agreementBonus: + // presetConfig.proposalSelector?.agreementBonus ?? this.defaultAgreementSelectorOptions.agreementBonus, + }; + } + /** + * Set reputation data. + * + * This is useful if you want to cache the date locally, or you have an alternative source of data. + */ + setData(data) { + var _a, _b; + this.data = data; + this.providersScoreMap.clear(); + this.rejectedProvidersMap.clear(); + this.rejectedOperatorsMap.clear(); + this.data.testedProviders.forEach((entry) => { + this.providersScoreMap.set(entry.provider.id, entry); + }); + (_a = this.data.rejectedProviders) === null || _a === void 0 ? void 0 : _a.forEach((entry) => { + this.rejectedProvidersMap.set(entry.provider.id, entry); + }); + (_b = this.data.rejectedOperators) === null || _b === void 0 ? void 0 : _b.forEach((entry) => { + this.rejectedOperatorsMap.set(entry.operator.walletAddress, entry); + }); + } + /** + * Returns current reputation data. + */ + getData() { + return this.data; + } + /** + * Fetch data from the reputation service. + */ + async fetchData() { + let result; + try { + // Add payment network to the URL. + const url = new URL(this.url); + url.searchParams.set("network", this.paymentNetwork); + result = await fetch(url); + } + catch (e) { + throw new GolemReputationError("Failed to fetch reputation data", e); + } + if (result.ok) { + try { + const data = await result.json(); + this.setData(data); + } + catch (e) { + throw new GolemReputationError("Failed to fetch reputation data: Invalid data", e); + } + } + else { + throw new GolemReputationError(`Failed to fetch reputation data: ${result.statusText}`); + } + } + /** + * Set weights used to calculate the score for proposals. + */ + setProposalWeights(weights) { + this.proposalWeights = weights; + } + /** + * Returns current proposal weights. + */ + getProposalWeights() { + return this.proposalWeights; + } + /** + * Set weights used to calculate the score for agreements. + */ + setAgreementWeights(weights) { + this.agreementWeights = weights; + } + /** + * Returns current agreement weights. + */ + getAgreementWeights() { + return this.agreementWeights; + } + /** + * Returns scores for a provider or undefined if the provider is unlisted. + * @param providerId + */ + getProviderScores(providerId) { + var _a; + return (_a = this.providersScoreMap.get(providerId)) === null || _a === void 0 ? void 0 : _a.scores; + } + /** + * Returns a proposal filter that can be used to filter out providers with low reputation scores. + * @param opts + */ + offerProposalFilter(opts) { + return (proposal) => { + var _a, _b, _c, _d; + // Filter out rejected operators. + const operatorEntry = this.rejectedOperatorsMap.get(proposal.provider.walletAddress); + if (operatorEntry) { + this.logger.debug(`Proposal from ${proposal.provider.id} rejected due to rejected operator`, { + reason: operatorEntry.reason, + provider: proposal.provider, + }); + return false; + } + // Filter out rejected providers. + const providerEntry = this.rejectedProvidersMap.get(proposal.provider.id); + if (providerEntry) { + this.logger.debug(`Proposal from ${proposal.provider.id} rejected due to rejected provider`, { + reason: providerEntry.reason, + provider: proposal.provider, + }); + return false; + } + // Filter based on reputation scores. + const scoreEntry = this.providersScoreMap.get(proposal.provider.id); + if (scoreEntry) { + const min = (_b = (_a = opts === null || opts === void 0 ? void 0 : opts.min) !== null && _a !== void 0 ? _a : this.defaultProposalFilterOptions.min) !== null && _b !== void 0 ? _b : DEFAULT_PROPOSAL_MIN_SCORE; + const score = this.calculateScore(scoreEntry.scores, this.proposalWeights); + this.logger.debug(`Proposal score for ${proposal.provider.id}: ${score} - min ${min}`, { + provider: proposal.provider, + scores: scoreEntry.scores, + weights: this.proposalWeights, + score, + min, + }); + return score >= min; + } + this.logger.debug(`Proposal from unlisted provider ${proposal.provider.id} (known providers: ${this.data.testedProviders.length})`, { + provider: proposal.provider, + }); + // Use the acceptUnlisted option if provided, otherwise allow only if there are no known providers. + return ((_d = (_c = opts === null || opts === void 0 ? void 0 : opts.acceptUnlisted) !== null && _c !== void 0 ? _c : this.defaultProposalFilterOptions.acceptUnlisted) !== null && _d !== void 0 ? _d : this.data.testedProviders.length === 0); + }; + } + /** + * Returns an agreement selector that can be used to select providers based on their reputation scores. + * + * The outcome of this function is determined by current provider scores and the agreement weights set. + * + * For best results, make sure you test the performance or stability of your workload using different weights. + * + * @see setAgreementWeights + * + * @param opts + */ + offerProposalSelector(opts) { + var _a, _b; + const poolSize = (_b = (_a = opts === null || opts === void 0 ? void 0 : opts.topPoolSize) !== null && _a !== void 0 ? _a : this.defaultAgreementSelectorOptions.topPoolSize) !== null && _b !== void 0 ? _b : DEFAULT_AGREEMENT_TOP_POOL_SIZE; + return (proposals) => { + // Cache scores for providers. + const scoresMap = new Map(); + proposals.forEach((c) => { + var _a, _b; + const data = (_b = (_a = this.providersScoreMap.get(c.provider.id)) === null || _a === void 0 ? void 0 : _a.scores) !== null && _b !== void 0 ? _b : {}; + const score = this.calculateScore(data, this.agreementWeights); + // TODO: to be discussed with the reputation team + // if (c.agreement) score += opts?.agreementBonus ?? this.defaultAgreementSelectorOptions.agreementBonus ?? 0; + scoresMap.set(c.provider.id, score); + }); + const array = this.sortCandidatesByScore(proposals, scoresMap); + const topPool = Math.min(poolSize, array.length); + const index = topPool === 1 ? 0 : Math.floor(Math.random() * topPool); + return array[index]; + }; + } + /** + * Calculate a normalized score based on the given scores and weights. + * @param scores + * @param weights + */ + calculateScore(scores, weights) { + let totalWeight = 0; + let score = 0; + Object.keys(weights).forEach((key) => { + var _a, _b; + const weight = (_a = weights[key]) !== null && _a !== void 0 ? _a : 0; + const value = (_b = scores[key]) !== null && _b !== void 0 ? _b : 0; + totalWeight += weight; + score += weight * value; + }); + // Return normalized score. + return score / totalWeight; + } + /** + * Based on the current reputation data, calculate a list of providers that meet the minimum score requirement. + * + * This method is useful to validate you filter and weights vs the available provider market. + * + * @param opts + */ + calculateProviderPool(opts) { + var _a, _b; + const min = (_b = (_a = opts === null || opts === void 0 ? void 0 : opts.min) !== null && _a !== void 0 ? _a : this.defaultProposalFilterOptions.min) !== null && _b !== void 0 ? _b : DEFAULT_PROPOSAL_MIN_SCORE; + return this.data.testedProviders.filter((entry) => { + const score = this.calculateScore(entry.scores, this.proposalWeights); + return score >= min; + }); + } + sortCandidatesByScore(proposals, scoresMap) { + const array = Array.from(proposals); + array.sort((a, b) => { + var _a, _b; + const aId = a.provider.id; + const bId = b.provider.id; + // Get the score values. + const aScoreValue = (_a = scoresMap.get(aId)) !== null && _a !== void 0 ? _a : 0; + const bScoreValue = (_b = scoresMap.get(bId)) !== null && _b !== void 0 ? _b : 0; + return bScoreValue - aScoreValue; + }); + return array; + } +} + +function validateNetworks(components) { + var _a; + const networkNames = new Set(components.networks.map((network) => network.name)); + for (const pool of components.resourceRentalPools) { + if (!((_a = pool.options.deployment) === null || _a === void 0 ? void 0 : _a.network)) { + continue; + } + if (!networkNames.has(pool.options.deployment.network)) { + throw new golemNetwork.GolemConfigError(`Activity pool ${pool.name} references non-existing network ${pool.options.deployment.network}`); + } + } +} +function validateDeployment(components) { + validateNetworks(components); + // ... other validations +} + +exports.DeploymentState = void 0; +(function (DeploymentState) { + DeploymentState["INITIAL"] = "INITIAL"; + DeploymentState["STARTING"] = "STARTING"; + DeploymentState["READY"] = "READY"; + DeploymentState["STOPPING"] = "STOPPING"; + DeploymentState["STOPPED"] = "STOPPED"; + DeploymentState["ERROR"] = "ERROR"; +})(exports.DeploymentState || (exports.DeploymentState = {})); +/** + * @experimental This feature is experimental!!! + */ +class Deployment { + constructor(components, deps) { + this.components = components; + this.events = new eventemitter3.EventEmitter(); + this.state = exports.DeploymentState.INITIAL; + this.abortController = new AbortController(); + this.pools = new Map(); + this.networks = new Map(); + validateDeployment(components); + const { logger, yagna, ...modules } = deps; + this.logger = logger !== null && logger !== void 0 ? logger : golemNetwork.defaultLogger("deployment"); + this.yagnaApi = yagna; + this.modules = modules; + this.abortController.signal.addEventListener("abort", () => { + this.logger.info("Abort signal received"); + this.stop().catch((e) => { + this.logger.error("stop() error on abort", { error: e }); + }); + }); + } + getState() { + return this.state; + } + async start() { + var _a, _b, _c, _d, _e, _f; + if (this.abortController.signal.aborted) { + throw new golemNetwork.GolemAbortError("Calling start after abort signal received"); + } + if (this.state != exports.DeploymentState.INITIAL) { + throw new golemNetwork.GolemUserError(`Cannot start backend, expected backend state INITIAL, current state is ${this.state}`); + } + for (const network of this.components.networks) { + const networkInstance = await this.modules.network.createNetwork(network.options); + this.networks.set(network.name, networkInstance); + } + // Allocation is re-used for all demands so the expiration date should + // be the equal to the longest expiration date of all demands + const longestExpiration = Math.round(Math.max(...this.components.resourceRentalPools.map((pool) => pool.options.market.rentHours)) * 3600); + const totalBudget = this.components.resourceRentalPools.reduce((acc, pool) => { + var _a, _b; + const replicas = pool.options.deployment.replicas; + const maxAgreements = typeof replicas === "number" ? replicas : ((_b = (_a = replicas === null || replicas === void 0 ? void 0 : replicas.max) !== null && _a !== void 0 ? _a : replicas === null || replicas === void 0 ? void 0 : replicas.min) !== null && _b !== void 0 ? _b : 1); + return (acc + + this.modules.market.estimateBudget({ + order: pool.options, + maxAgreements, + })); + }, 0); + const allocation = await this.modules.payment.createAllocation({ + budget: totalBudget, + expirationSec: longestExpiration, + }); + for (const pool of this.components.resourceRentalPools) { + const network = ((_b = (_a = pool.options) === null || _a === void 0 ? void 0 : _a.deployment) === null || _b === void 0 ? void 0 : _b.network) + ? this.networks.get((_c = pool.options) === null || _c === void 0 ? void 0 : _c.deployment.network) + : undefined; + const demandSpecification = await this.modules.market.buildDemandDetails(pool.options.demand, pool.options.market, allocation); + const proposalPool = new golemNetwork.DraftOfferProposalPool({ + logger: this.logger, + validateOfferProposal: pool.options.market.offerProposalFilter, + selectOfferProposal: pool.options.market.offerProposalSelector, + }); + const draftProposal$ = this.modules.market.collectDraftOfferProposals({ + demandSpecification, + pricing: pool.options.market.pricing, + filter: pool.options.market.offerProposalFilter, + }); + const proposalSubscription = proposalPool.readFrom(draftProposal$); + const resourceRentalPool = this.modules.rental.createResourceRentalPool(proposalPool, allocation, { + poolSize: (_d = pool.options.deployment) === null || _d === void 0 ? void 0 : _d.replicas, + network, + resourceRentalOptions: { + activity: (_e = pool.options) === null || _e === void 0 ? void 0 : _e.activity, + payment: (_f = pool.options) === null || _f === void 0 ? void 0 : _f.payment, + }, + agreementOptions: { + expirationSec: Math.round(pool.options.market.rentHours * 3600), + }, + }); + this.pools.set(pool.name, { + proposalPool, + proposalSubscription, + resourceRentalPool, + }); + } + await this.waitForDeployment(); + this.events.emit("ready"); + } + async stop() { + if (this.state === exports.DeploymentState.STOPPING || this.state === exports.DeploymentState.STOPPED) { + return; + } + this.state = exports.DeploymentState.STOPPING; + this.events.emit("beforeEnd"); + try { + this.abortController.abort(); + const stopPools = Array.from(this.pools.values()).map((pool) => Promise.allSettled([pool.proposalSubscription.unsubscribe(), pool.resourceRentalPool.drainAndClear()])); + await Promise.allSettled(stopPools); + const stopNetworks = Array.from(this.networks.values()).map((network) => this.modules.network.removeNetwork(network)); + await Promise.allSettled(stopNetworks); + this.state = exports.DeploymentState.STOPPED; + } + catch (err) { + this.logger.error("The deployment failed with an error", err); + this.state = exports.DeploymentState.ERROR; + throw err; + } + this.events.emit("end"); + } + getResourceRentalPool(name) { + const pool = this.pools.get(name); + if (!pool) { + throw new golemNetwork.GolemUserError(`ResourceRentalPool ${name} not found`); + } + return pool.resourceRentalPool; + } + getNetwork(name) { + const network = this.networks.get(name); + if (!network) { + throw new golemNetwork.GolemUserError(`Network ${name} not found`); + } + return network; + } + async waitForDeployment() { + this.logger.info("Waiting for all components to be deployed..."); + const readyPools = [...this.pools.values()].map((component) => component.resourceRentalPool.ready()); + await Promise.all(readyPools); + this.logger.info("Components deployed and ready to use"); + } +} + +class GolemDeploymentBuilder { + reset() { + this.components = { + resourceRentalPools: [], + networks: [], + }; + } + constructor(glm) { + this.glm = glm; + this.components = { + resourceRentalPools: [], + networks: [], + }; + } + createResourceRentalPool(name, options) { + if (this.components.resourceRentalPools.some((pool) => pool.name === name)) { + throw new golemNetwork.GolemConfigError(`Resource Rental Pool with name ${name} already exists`); + } + this.components.resourceRentalPools.push({ name, options }); + return this; + } + createNetwork(name, options = {}) { + if (this.components.networks.some((network) => network.name === name)) { + throw new golemNetwork.GolemConfigError(`Network with name ${name} already exists`); + } + this.components.networks.push({ name, options }); + return this; + } + getDeployment() { + validateDeployment(this.components); + const deployment = new Deployment(this.components, { + logger: this.glm.services.logger, + yagna: this.glm.services.yagna, + payment: this.glm.payment, + market: this.glm.market, + activity: this.glm.activity, + network: this.glm.network, + rental: this.glm.rental, + }); + this.reset(); + return deployment; + } +} + +exports.DEFAULT_AGREEMENT_TOP_POOL_SIZE = DEFAULT_AGREEMENT_TOP_POOL_SIZE; +exports.DEFAULT_AGREEMENT_WEIGHTS = DEFAULT_AGREEMENT_WEIGHTS; +exports.DEFAULT_PROPOSAL_MIN_SCORE = DEFAULT_PROPOSAL_MIN_SCORE; +exports.DEFAULT_PROPOSAL_WEIGHTS = DEFAULT_PROPOSAL_WEIGHTS; +exports.DEFAULT_REPUTATION_URL = DEFAULT_REPUTATION_URL; +exports.Deployment = Deployment; +exports.GolemDeploymentBuilder = GolemDeploymentBuilder; +exports.Job = Job; +exports.JobManager = JobManager; +exports.ReputationSystem = ReputationSystem; +//# sourceMappingURL=golem-js-experimental.js.map diff --git a/dist/golem-js-experimental.js.map b/dist/golem-js-experimental.js.map new file mode 100644 index 000000000..3f8b6ea24 --- /dev/null +++ b/dist/golem-js-experimental.js.map @@ -0,0 +1 @@ +{"version":3,"file":"golem-js-experimental.js","sources":["../src/experimental/job/job.ts","../src/experimental/job/job_manager.ts","../src/experimental/reputation/error.ts","../src/experimental/reputation/system.ts","../src/experimental/deployment/validate-deployment.ts","../src/experimental/deployment/deployment.ts","../src/experimental/deployment/builder.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["JobState","EventEmitter","GolemUserError","GolemAbortError","defaultLogger","GolemNetwork","v4","GolemModuleError","nullLogger","getPaymentNetwork","GolemConfigError","DeploymentState","DraftOfferProposalPool"],"mappings":"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"} \ No newline at end of file diff --git a/dist/golem-js-experimental.mjs b/dist/golem-js-experimental.mjs new file mode 100644 index 000000000..2de65dbec --- /dev/null +++ b/dist/golem-js-experimental.mjs @@ -0,0 +1,812 @@ +import { EventEmitter } from 'eventemitter3'; +import { L as GolemUserError, Q as GolemAbortError, a as GolemNetwork, $ as defaultLogger, Y as GolemModuleError, _ as nullLogger, ak as getPaymentNetwork, U as GolemConfigError, g as DraftOfferProposalPool } from './shared-BES5zO0i.mjs'; +import { v4 } from 'uuid'; +import 'ya-ts-client'; +import 'semver/functions/satisfies.js'; +import 'semver/functions/coerce.js'; +import 'rxjs'; +import 'eventsource'; +import 'debug'; +import 'async-lock'; +import 'decimal.js-light'; +import 'path'; +import 'fs'; +import 'cross-spawn'; +import 'flatbuffers/js/flexbuffers.js'; +import 'js-sha3'; +import 'ws'; +import 'net'; +import 'buffer'; +import 'async-retry'; +import 'ip-num'; + +var JobState; +(function (JobState) { + JobState["New"] = "new"; + JobState["Queued"] = "queued"; + JobState["Pending"] = "pending"; + JobState["Done"] = "done"; + JobState["Retry"] = "retry"; + JobState["Rejected"] = "rejected"; +})(JobState || (JobState = {})); +/** + * @experimental This API is experimental and subject to change. Use at your own risk. + * + * The Job class represents a single self-contained unit of work that can be run on the Golem Network. + * It is responsible for managing the lifecycle of the work and providing information about its state. + * It also provides an event emitter that can be used to listen for state changes. + */ +class Job { + /** + * @param id + * @param glm + * @param order + * @param logger + */ + constructor(id, glm, order, logger) { + this.id = id; + this.glm = glm; + this.order = order; + this.logger = logger; + this.events = new EventEmitter(); + this.abortController = new AbortController(); + this.state = JobState.New; + } + isRunning() { + const inProgressStates = [JobState.Pending, JobState.Retry]; + return inProgressStates.includes(this.state); + } + /** + * Run your worker function on the Golem Network. This method will synchronously initialize all internal services and validate the job options. The work itself will be run asynchronously in the background. + * You can use the {@link experimental/job/job.Job.events} event emitter to listen for state changes. + * You can also use {@link experimental/job/job.Job.waitForResult} to wait for the job to finish and get the results. + * If you want to cancel the job, use {@link experimental/job/job.Job.cancel}. + * If you want to run multiple jobs in parallel, you can use {@link experimental/job/job_manager.JobManager.createJob} to create multiple jobs and run them in parallel. + * + * @param workOnGolem - Your worker function that will be run on the Golem Network. + */ + startWork(workOnGolem) { + this.logger.debug("Staring work in a Job"); + if (this.isRunning()) { + throw new GolemUserError(`Job ${this.id} is already running`); + } + this.state = JobState.Pending; + this.events.emit("created"); + // reset abort controller + this.abortController = new AbortController(); + this.runWork({ + workOnGolem, + signal: this.abortController.signal, + }) + .then((results) => { + this.logger.debug("Finished work in job", { results }); + this.results = results; + this.state = JobState.Done; + this.events.emit("success"); + }) + .catch((error) => { + this.logger.error("Running work in job failed due to", error); + this.error = error; + this.state = JobState.Rejected; + this.events.emit("error", error); + }) + .finally(async () => { + this.events.emit("ended"); + }); + } + async runWork({ workOnGolem, signal }) { + if (signal.aborted) { + this.events.emit("canceled"); + throw new GolemAbortError("Canceled"); + } + const rental = await this.glm.oneOf({ order: this.order, signalOrTimeout: signal }); + try { + const exeUnit = await rental.getExeUnit(signal); + this.events.emit("started"); + if (signal.aborted) { + this.events.emit("canceled"); + throw new GolemAbortError("Canceled"); + } + signal.addEventListener("abort", () => this.events.emit("canceled"), { once: true }); + // remember to `await` here so that the `finally` block is executed AFTER the work is done + return await workOnGolem(exeUnit); + } + finally { + await rental.stopAndFinalize(); + } + } + /** + * Cancel the job. This method will stop the activity and wait for it to finish. + * Throws an error if the job is not running. + */ + async cancel() { + if (!this.isRunning) { + throw new GolemUserError(`Job ${this.id} is not running`); + } + this.abortController.abort(); + return new Promise((resolve) => { + this.events.once("ended", resolve); + }); + } + /** + * Wait for the job to finish and return the results. + * Throws an error if the job was not started. + */ + async waitForResult() { + if (this.state === JobState.Done) { + return this.results; + } + if (this.state === JobState.Rejected) { + throw this.error; + } + if (!this.isRunning()) { + throw new GolemUserError(`Job ${this.id} is not running`); + } + return new Promise((resolve, reject) => { + this.events.once("ended", () => { + if (this.state === JobState.Done) { + resolve(this.results); + } + else { + reject(this.error); + } + }); + }); + } +} + +/** + * @experimental This API is experimental and subject to change. Use at your own risk. + * + * The Golem Network class provides a high-level API for running jobs on the Golem Network. + */ +class JobManager { + /** + * @param config - Configuration options that will be passed to all jobs created by this instance. + * @param logger + */ + constructor(config, logger = defaultLogger("jobs")) { + var _a, _b; + this.logger = logger; + this.jobs = new Map(); + this.glm = new GolemNetwork({ + api: { + key: (_a = config === null || config === void 0 ? void 0 : config.yagna) === null || _a === void 0 ? void 0 : _a.apiKey, + url: (_b = config === null || config === void 0 ? void 0 : config.yagna) === null || _b === void 0 ? void 0 : _b.basePath, + }, + logger: this.logger, + ...config, + }); + } + isInitialized() { + return this.glm.isConnected(); + } + async init() { + await this.glm.connect(); + } + /** + * Create a new job and add it to the list of jobs managed by this instance. + * This method does not start any work on the network, use {@link experimental/job/job.Job.startWork} for that. + * + * @param order + */ + createJob(order) { + this.checkInitialization(); + const jobId = v4(); + const job = new Job(jobId, this.glm, order, this.logger); + this.jobs.set(jobId, job); + return job; + } + getJobById(id) { + this.checkInitialization(); + return this.jobs.get(id); + } + /** + * Close the connection to the Yagna service and cancel all running jobs. + */ + async close() { + const pendingJobs = Array.from(this.jobs.values()).filter((job) => job.isRunning()); + await Promise.allSettled(pendingJobs.map((job) => job.cancel())); + await this.glm.disconnect(); + } + checkInitialization() { + if (!this.isInitialized()) { + throw new GolemUserError("GolemNetwork not initialized, please run init() first"); + } + } +} + +class GolemReputationError extends GolemModuleError { + constructor(message, cause) { + super(message, 0, cause); + } +} + +/** + * Default minimum score for proposals. + * @experimental + */ +const DEFAULT_PROPOSAL_MIN_SCORE = 0.8; +/** + * Default weights used to calculate the score for proposals. + * @experimental + */ +const DEFAULT_PROPOSAL_WEIGHTS = { + uptime: 0.5, + successRate: 0.5, +}; +/** + * Default weights used to calculate the score for agreements. + * @experimental + */ +const DEFAULT_AGREEMENT_WEIGHTS = { + uptime: 0.5, + successRate: 0.5, +}; +/** + * Default reputation service URL. + * @experimental + */ +const DEFAULT_REPUTATION_URL = "https://reputation.golem.network/v2/providers/scores"; +/** + * The number of top scoring providers to consider when selecting an agreement. + * + * Default for `topPoolSize` agreement selector option. + */ +const DEFAULT_AGREEMENT_TOP_POOL_SIZE = 2; +/** + * Predefined presets for reputation system. + */ +const REPUTATION_PRESETS = { + /** + * Preset for short CPU intensive compute tasks. + */ + compute: { + offerProposalFilter: { + min: 0.5, + weights: { + cpuSingleThreadScore: 1, + }, + }, + offerProposalSelector: { + weights: { + cpuSingleThreadScore: 1, + }, + topPoolSize: DEFAULT_AGREEMENT_TOP_POOL_SIZE, + }, + }, + /** + * Preset for long-running services, where uptime is important. + */ + service: { + offerProposalFilter: { + min: DEFAULT_PROPOSAL_MIN_SCORE, + weights: { + uptime: 0.8, + cpuMultiThreadScore: 0.2, + }, + }, + offerProposalSelector: { + weights: { + uptime: 0.5, + cpuMultiThreadScore: 0.5, + }, + topPoolSize: DEFAULT_AGREEMENT_TOP_POOL_SIZE, + }, + }, +}; +/** + * Reputation system client. + * + * This class is responsible for fetching and applying reputation data to Golem SDK's market management class. + * + * Currently, it includes a proposal filter you can use to filter out providers with low reputation scores. + * + * Reputation data is gathered by the following project: https://github.com/golemfactory/reputation-auditor + * + * You can adjust the weights used to calculate the score for proposals by using the `setProposalWeights` method. + * + * NOTE: This class is currently experimental and subject to change. + * + * NOTE: Only providers from polygon network are being tested, so using this class on testnet will not work. + * + * @experimental + */ +class ReputationSystem { + /** + * Create a new reputation system client and fetch the reputation data. + */ + static async create(config) { + const system = new ReputationSystem(config); + await system.fetchData(); + return system; + } + constructor(config) { + var _a, _b, _c, _d, _e, _f, _g, _h; + this.config = config; + /** + * Reputation data. + */ + this.data = { + testedProviders: [], + }; + /** + * Weights used to calculate the score for proposals. + */ + this.proposalWeights = DEFAULT_PROPOSAL_WEIGHTS; + /** + * Weights used to calculate the score for agreements. + */ + this.agreementWeights = DEFAULT_AGREEMENT_WEIGHTS; + /** + * Map of provider IDs to their reputation data. + */ + this.providersScoreMap = new Map(); + /** + * Map of provider IDs to their rejected status. + * @private + */ + this.rejectedProvidersMap = new Map(); + /** + * Map of operators (by wallet address) to their rejected status. + * @private + */ + this.rejectedOperatorsMap = new Map(); + this.url = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : DEFAULT_REPUTATION_URL; + this.logger = (_e = (_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.logger) === null || _d === void 0 ? void 0 : _d.child("reputation")) !== null && _e !== void 0 ? _e : nullLogger(); + this.paymentNetwork = (_g = (_f = this.config) === null || _f === void 0 ? void 0 : _f.paymentNetwork) !== null && _g !== void 0 ? _g : getPaymentNetwork(); + this.defaultProposalFilterOptions = { + min: DEFAULT_PROPOSAL_MIN_SCORE, + acceptUnlisted: undefined, + }; + this.defaultAgreementSelectorOptions = { + topPoolSize: DEFAULT_AGREEMENT_TOP_POOL_SIZE, + }; + if ((_h = this.config) === null || _h === void 0 ? void 0 : _h.preset) { + this.usePreset(this.config.preset); + } + } + /** + * Apply preset to current reputation system configuration. + * @param presetName Preset name to use. + */ + usePreset(presetName) { + var _a, _b, _c, _d, _e, _f, _g; + const presetConfig = REPUTATION_PRESETS[presetName]; + if (!presetConfig) { + throw new GolemReputationError(`Reputation preset not found: ${presetName}`); + } + if ((_a = presetConfig.offerProposalFilter) === null || _a === void 0 ? void 0 : _a.weights) { + this.setProposalWeights(presetConfig.offerProposalFilter.weights); + } + if ((_b = presetConfig.offerProposalSelector) === null || _b === void 0 ? void 0 : _b.weights) { + this.setAgreementWeights(presetConfig.offerProposalSelector.weights); + } + this.defaultProposalFilterOptions = { + min: (_d = (_c = presetConfig.offerProposalFilter) === null || _c === void 0 ? void 0 : _c.min) !== null && _d !== void 0 ? _d : this.defaultProposalFilterOptions.min, + acceptUnlisted: (_e = presetConfig.offerProposalFilter) === null || _e === void 0 ? void 0 : _e.acceptUnlisted, // undefined is meaningful + }; + this.defaultAgreementSelectorOptions = { + topPoolSize: (_g = (_f = presetConfig.offerProposalSelector) === null || _f === void 0 ? void 0 : _f.topPoolSize) !== null && _g !== void 0 ? _g : this.defaultAgreementSelectorOptions.topPoolSize, + // TODO: to be discussed with the reputation team + // agreementBonus: + // presetConfig.proposalSelector?.agreementBonus ?? this.defaultAgreementSelectorOptions.agreementBonus, + }; + } + /** + * Set reputation data. + * + * This is useful if you want to cache the date locally, or you have an alternative source of data. + */ + setData(data) { + var _a, _b; + this.data = data; + this.providersScoreMap.clear(); + this.rejectedProvidersMap.clear(); + this.rejectedOperatorsMap.clear(); + this.data.testedProviders.forEach((entry) => { + this.providersScoreMap.set(entry.provider.id, entry); + }); + (_a = this.data.rejectedProviders) === null || _a === void 0 ? void 0 : _a.forEach((entry) => { + this.rejectedProvidersMap.set(entry.provider.id, entry); + }); + (_b = this.data.rejectedOperators) === null || _b === void 0 ? void 0 : _b.forEach((entry) => { + this.rejectedOperatorsMap.set(entry.operator.walletAddress, entry); + }); + } + /** + * Returns current reputation data. + */ + getData() { + return this.data; + } + /** + * Fetch data from the reputation service. + */ + async fetchData() { + let result; + try { + // Add payment network to the URL. + const url = new URL(this.url); + url.searchParams.set("network", this.paymentNetwork); + result = await fetch(url); + } + catch (e) { + throw new GolemReputationError("Failed to fetch reputation data", e); + } + if (result.ok) { + try { + const data = await result.json(); + this.setData(data); + } + catch (e) { + throw new GolemReputationError("Failed to fetch reputation data: Invalid data", e); + } + } + else { + throw new GolemReputationError(`Failed to fetch reputation data: ${result.statusText}`); + } + } + /** + * Set weights used to calculate the score for proposals. + */ + setProposalWeights(weights) { + this.proposalWeights = weights; + } + /** + * Returns current proposal weights. + */ + getProposalWeights() { + return this.proposalWeights; + } + /** + * Set weights used to calculate the score for agreements. + */ + setAgreementWeights(weights) { + this.agreementWeights = weights; + } + /** + * Returns current agreement weights. + */ + getAgreementWeights() { + return this.agreementWeights; + } + /** + * Returns scores for a provider or undefined if the provider is unlisted. + * @param providerId + */ + getProviderScores(providerId) { + var _a; + return (_a = this.providersScoreMap.get(providerId)) === null || _a === void 0 ? void 0 : _a.scores; + } + /** + * Returns a proposal filter that can be used to filter out providers with low reputation scores. + * @param opts + */ + offerProposalFilter(opts) { + return (proposal) => { + var _a, _b, _c, _d; + // Filter out rejected operators. + const operatorEntry = this.rejectedOperatorsMap.get(proposal.provider.walletAddress); + if (operatorEntry) { + this.logger.debug(`Proposal from ${proposal.provider.id} rejected due to rejected operator`, { + reason: operatorEntry.reason, + provider: proposal.provider, + }); + return false; + } + // Filter out rejected providers. + const providerEntry = this.rejectedProvidersMap.get(proposal.provider.id); + if (providerEntry) { + this.logger.debug(`Proposal from ${proposal.provider.id} rejected due to rejected provider`, { + reason: providerEntry.reason, + provider: proposal.provider, + }); + return false; + } + // Filter based on reputation scores. + const scoreEntry = this.providersScoreMap.get(proposal.provider.id); + if (scoreEntry) { + const min = (_b = (_a = opts === null || opts === void 0 ? void 0 : opts.min) !== null && _a !== void 0 ? _a : this.defaultProposalFilterOptions.min) !== null && _b !== void 0 ? _b : DEFAULT_PROPOSAL_MIN_SCORE; + const score = this.calculateScore(scoreEntry.scores, this.proposalWeights); + this.logger.debug(`Proposal score for ${proposal.provider.id}: ${score} - min ${min}`, { + provider: proposal.provider, + scores: scoreEntry.scores, + weights: this.proposalWeights, + score, + min, + }); + return score >= min; + } + this.logger.debug(`Proposal from unlisted provider ${proposal.provider.id} (known providers: ${this.data.testedProviders.length})`, { + provider: proposal.provider, + }); + // Use the acceptUnlisted option if provided, otherwise allow only if there are no known providers. + return ((_d = (_c = opts === null || opts === void 0 ? void 0 : opts.acceptUnlisted) !== null && _c !== void 0 ? _c : this.defaultProposalFilterOptions.acceptUnlisted) !== null && _d !== void 0 ? _d : this.data.testedProviders.length === 0); + }; + } + /** + * Returns an agreement selector that can be used to select providers based on their reputation scores. + * + * The outcome of this function is determined by current provider scores and the agreement weights set. + * + * For best results, make sure you test the performance or stability of your workload using different weights. + * + * @see setAgreementWeights + * + * @param opts + */ + offerProposalSelector(opts) { + var _a, _b; + const poolSize = (_b = (_a = opts === null || opts === void 0 ? void 0 : opts.topPoolSize) !== null && _a !== void 0 ? _a : this.defaultAgreementSelectorOptions.topPoolSize) !== null && _b !== void 0 ? _b : DEFAULT_AGREEMENT_TOP_POOL_SIZE; + return (proposals) => { + // Cache scores for providers. + const scoresMap = new Map(); + proposals.forEach((c) => { + var _a, _b; + const data = (_b = (_a = this.providersScoreMap.get(c.provider.id)) === null || _a === void 0 ? void 0 : _a.scores) !== null && _b !== void 0 ? _b : {}; + const score = this.calculateScore(data, this.agreementWeights); + // TODO: to be discussed with the reputation team + // if (c.agreement) score += opts?.agreementBonus ?? this.defaultAgreementSelectorOptions.agreementBonus ?? 0; + scoresMap.set(c.provider.id, score); + }); + const array = this.sortCandidatesByScore(proposals, scoresMap); + const topPool = Math.min(poolSize, array.length); + const index = topPool === 1 ? 0 : Math.floor(Math.random() * topPool); + return array[index]; + }; + } + /** + * Calculate a normalized score based on the given scores and weights. + * @param scores + * @param weights + */ + calculateScore(scores, weights) { + let totalWeight = 0; + let score = 0; + Object.keys(weights).forEach((key) => { + var _a, _b; + const weight = (_a = weights[key]) !== null && _a !== void 0 ? _a : 0; + const value = (_b = scores[key]) !== null && _b !== void 0 ? _b : 0; + totalWeight += weight; + score += weight * value; + }); + // Return normalized score. + return score / totalWeight; + } + /** + * Based on the current reputation data, calculate a list of providers that meet the minimum score requirement. + * + * This method is useful to validate you filter and weights vs the available provider market. + * + * @param opts + */ + calculateProviderPool(opts) { + var _a, _b; + const min = (_b = (_a = opts === null || opts === void 0 ? void 0 : opts.min) !== null && _a !== void 0 ? _a : this.defaultProposalFilterOptions.min) !== null && _b !== void 0 ? _b : DEFAULT_PROPOSAL_MIN_SCORE; + return this.data.testedProviders.filter((entry) => { + const score = this.calculateScore(entry.scores, this.proposalWeights); + return score >= min; + }); + } + sortCandidatesByScore(proposals, scoresMap) { + const array = Array.from(proposals); + array.sort((a, b) => { + var _a, _b; + const aId = a.provider.id; + const bId = b.provider.id; + // Get the score values. + const aScoreValue = (_a = scoresMap.get(aId)) !== null && _a !== void 0 ? _a : 0; + const bScoreValue = (_b = scoresMap.get(bId)) !== null && _b !== void 0 ? _b : 0; + return bScoreValue - aScoreValue; + }); + return array; + } +} + +function validateNetworks(components) { + var _a; + const networkNames = new Set(components.networks.map((network) => network.name)); + for (const pool of components.resourceRentalPools) { + if (!((_a = pool.options.deployment) === null || _a === void 0 ? void 0 : _a.network)) { + continue; + } + if (!networkNames.has(pool.options.deployment.network)) { + throw new GolemConfigError(`Activity pool ${pool.name} references non-existing network ${pool.options.deployment.network}`); + } + } +} +function validateDeployment(components) { + validateNetworks(components); + // ... other validations +} + +var DeploymentState; +(function (DeploymentState) { + DeploymentState["INITIAL"] = "INITIAL"; + DeploymentState["STARTING"] = "STARTING"; + DeploymentState["READY"] = "READY"; + DeploymentState["STOPPING"] = "STOPPING"; + DeploymentState["STOPPED"] = "STOPPED"; + DeploymentState["ERROR"] = "ERROR"; +})(DeploymentState || (DeploymentState = {})); +/** + * @experimental This feature is experimental!!! + */ +class Deployment { + constructor(components, deps) { + this.components = components; + this.events = new EventEmitter(); + this.state = DeploymentState.INITIAL; + this.abortController = new AbortController(); + this.pools = new Map(); + this.networks = new Map(); + validateDeployment(components); + const { logger, yagna, ...modules } = deps; + this.logger = logger !== null && logger !== void 0 ? logger : defaultLogger("deployment"); + this.yagnaApi = yagna; + this.modules = modules; + this.abortController.signal.addEventListener("abort", () => { + this.logger.info("Abort signal received"); + this.stop().catch((e) => { + this.logger.error("stop() error on abort", { error: e }); + }); + }); + } + getState() { + return this.state; + } + async start() { + var _a, _b, _c, _d, _e, _f; + if (this.abortController.signal.aborted) { + throw new GolemAbortError("Calling start after abort signal received"); + } + if (this.state != DeploymentState.INITIAL) { + throw new GolemUserError(`Cannot start backend, expected backend state INITIAL, current state is ${this.state}`); + } + for (const network of this.components.networks) { + const networkInstance = await this.modules.network.createNetwork(network.options); + this.networks.set(network.name, networkInstance); + } + // Allocation is re-used for all demands so the expiration date should + // be the equal to the longest expiration date of all demands + const longestExpiration = Math.round(Math.max(...this.components.resourceRentalPools.map((pool) => pool.options.market.rentHours)) * 3600); + const totalBudget = this.components.resourceRentalPools.reduce((acc, pool) => { + var _a, _b; + const replicas = pool.options.deployment.replicas; + const maxAgreements = typeof replicas === "number" ? replicas : ((_b = (_a = replicas === null || replicas === void 0 ? void 0 : replicas.max) !== null && _a !== void 0 ? _a : replicas === null || replicas === void 0 ? void 0 : replicas.min) !== null && _b !== void 0 ? _b : 1); + return (acc + + this.modules.market.estimateBudget({ + order: pool.options, + maxAgreements, + })); + }, 0); + const allocation = await this.modules.payment.createAllocation({ + budget: totalBudget, + expirationSec: longestExpiration, + }); + for (const pool of this.components.resourceRentalPools) { + const network = ((_b = (_a = pool.options) === null || _a === void 0 ? void 0 : _a.deployment) === null || _b === void 0 ? void 0 : _b.network) + ? this.networks.get((_c = pool.options) === null || _c === void 0 ? void 0 : _c.deployment.network) + : undefined; + const demandSpecification = await this.modules.market.buildDemandDetails(pool.options.demand, pool.options.market, allocation); + const proposalPool = new DraftOfferProposalPool({ + logger: this.logger, + validateOfferProposal: pool.options.market.offerProposalFilter, + selectOfferProposal: pool.options.market.offerProposalSelector, + }); + const draftProposal$ = this.modules.market.collectDraftOfferProposals({ + demandSpecification, + pricing: pool.options.market.pricing, + filter: pool.options.market.offerProposalFilter, + }); + const proposalSubscription = proposalPool.readFrom(draftProposal$); + const resourceRentalPool = this.modules.rental.createResourceRentalPool(proposalPool, allocation, { + poolSize: (_d = pool.options.deployment) === null || _d === void 0 ? void 0 : _d.replicas, + network, + resourceRentalOptions: { + activity: (_e = pool.options) === null || _e === void 0 ? void 0 : _e.activity, + payment: (_f = pool.options) === null || _f === void 0 ? void 0 : _f.payment, + }, + agreementOptions: { + expirationSec: Math.round(pool.options.market.rentHours * 3600), + }, + }); + this.pools.set(pool.name, { + proposalPool, + proposalSubscription, + resourceRentalPool, + }); + } + await this.waitForDeployment(); + this.events.emit("ready"); + } + async stop() { + if (this.state === DeploymentState.STOPPING || this.state === DeploymentState.STOPPED) { + return; + } + this.state = DeploymentState.STOPPING; + this.events.emit("beforeEnd"); + try { + this.abortController.abort(); + const stopPools = Array.from(this.pools.values()).map((pool) => Promise.allSettled([pool.proposalSubscription.unsubscribe(), pool.resourceRentalPool.drainAndClear()])); + await Promise.allSettled(stopPools); + const stopNetworks = Array.from(this.networks.values()).map((network) => this.modules.network.removeNetwork(network)); + await Promise.allSettled(stopNetworks); + this.state = DeploymentState.STOPPED; + } + catch (err) { + this.logger.error("The deployment failed with an error", err); + this.state = DeploymentState.ERROR; + throw err; + } + this.events.emit("end"); + } + getResourceRentalPool(name) { + const pool = this.pools.get(name); + if (!pool) { + throw new GolemUserError(`ResourceRentalPool ${name} not found`); + } + return pool.resourceRentalPool; + } + getNetwork(name) { + const network = this.networks.get(name); + if (!network) { + throw new GolemUserError(`Network ${name} not found`); + } + return network; + } + async waitForDeployment() { + this.logger.info("Waiting for all components to be deployed..."); + const readyPools = [...this.pools.values()].map((component) => component.resourceRentalPool.ready()); + await Promise.all(readyPools); + this.logger.info("Components deployed and ready to use"); + } +} + +class GolemDeploymentBuilder { + reset() { + this.components = { + resourceRentalPools: [], + networks: [], + }; + } + constructor(glm) { + this.glm = glm; + this.components = { + resourceRentalPools: [], + networks: [], + }; + } + createResourceRentalPool(name, options) { + if (this.components.resourceRentalPools.some((pool) => pool.name === name)) { + throw new GolemConfigError(`Resource Rental Pool with name ${name} already exists`); + } + this.components.resourceRentalPools.push({ name, options }); + return this; + } + createNetwork(name, options = {}) { + if (this.components.networks.some((network) => network.name === name)) { + throw new GolemConfigError(`Network with name ${name} already exists`); + } + this.components.networks.push({ name, options }); + return this; + } + getDeployment() { + validateDeployment(this.components); + const deployment = new Deployment(this.components, { + logger: this.glm.services.logger, + yagna: this.glm.services.yagna, + payment: this.glm.payment, + market: this.glm.market, + activity: this.glm.activity, + network: this.glm.network, + rental: this.glm.rental, + }); + this.reset(); + return deployment; + } +} + +export { DEFAULT_AGREEMENT_TOP_POOL_SIZE, DEFAULT_AGREEMENT_WEIGHTS, DEFAULT_PROPOSAL_MIN_SCORE, DEFAULT_PROPOSAL_WEIGHTS, DEFAULT_REPUTATION_URL, Deployment, DeploymentState, GolemDeploymentBuilder, Job, JobManager, JobState, ReputationSystem }; +//# sourceMappingURL=golem-js-experimental.mjs.map diff --git a/dist/golem-js-experimental.mjs.map b/dist/golem-js-experimental.mjs.map new file mode 100644 index 000000000..194b969cb --- /dev/null +++ b/dist/golem-js-experimental.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"golem-js-experimental.mjs","sources":["../src/experimental/job/job.ts","../src/experimental/job/job_manager.ts","../src/experimental/reputation/error.ts","../src/experimental/reputation/system.ts","../src/experimental/deployment/validate-deployment.ts","../src/experimental/deployment/deployment.ts","../src/experimental/deployment/builder.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/golem-js.js b/dist/golem-js.js new file mode 100644 index 000000000..8d2ef92f4 --- /dev/null +++ b/dist/golem-js.js @@ -0,0 +1,214 @@ +'use strict'; + +var golemNetwork = require('./shared-BNnsKKpM.js'); +var Decimal = require('decimal.js-light'); +require('debug'); +require('ya-ts-client'); +require('uuid'); +require('semver/functions/satisfies.js'); +require('semver/functions/coerce.js'); +require('rxjs'); +require('eventsource'); +require('eventemitter3'); +require('async-lock'); +require('path'); +require('fs'); +require('cross-spawn'); +require('flatbuffers/js/flexbuffers.js'); +require('js-sha3'); +require('ws'); +require('net'); +require('buffer'); +require('async-retry'); +require('ip-num'); + +/** Default Proposal filter that accept all proposal coming from the market */ +const acceptAll = () => () => true; +/** Proposal filter blocking every offer coming from a provider whose id is in the array */ +const disallowProvidersById = (providerIds) => (proposal) => !providerIds.includes(proposal.provider.id); +/** Proposal filter blocking every offer coming from a provider whose name is in the array */ +const disallowProvidersByName = (providerNames) => (proposal) => !providerNames.includes(proposal.provider.name); +/** Proposal filter blocking every offer coming from a provider whose name match to the regexp */ +const disallowProvidersByNameRegex = (regexp) => (proposal) => !proposal.provider.name.match(regexp); +/** Proposal filter that only allows offers from a provider whose id is in the array */ +const allowProvidersById = (providerIds) => (proposal) => providerIds.includes(proposal.provider.id); +/** Proposal filter that only allows offers from a provider whose name is in the array */ +const allowProvidersByName = (providerNames) => (proposal) => providerNames.includes(proposal.provider.name); +/** Proposal filter that only allows offers from a provider whose name match to the regexp */ +const allowProvidersByNameRegex = (regexp) => (proposal) => !!proposal.provider.name.match(regexp); +/** + * Proposal filter only allowing offers that do not exceed the defined usage + * + * @param priceLimits.start The maximum start price in GLM + * @param priceLimits.cpuPerSec The maximum price for CPU usage in GLM/s + * @param priceLimits.envPerSec The maximum price for the duration of the activity in GLM/s + */ +const limitPriceFilter = (priceLimits) => (proposal) => { + return (proposal.pricing.cpuSec <= priceLimits.cpuPerSec && + proposal.pricing.envSec <= priceLimits.envPerSec && + proposal.pricing.start <= priceLimits.start); +}; + +var strategy$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + acceptAll: acceptAll, + allowProvidersById: allowProvidersById, + allowProvidersByName: allowProvidersByName, + allowProvidersByNameRegex: allowProvidersByNameRegex, + disallowProvidersById: disallowProvidersById, + disallowProvidersByName: disallowProvidersByName, + disallowProvidersByNameRegex: disallowProvidersByNameRegex, + limitPriceFilter: limitPriceFilter +}); + +/** + * Helps to obtain a whitelist of providers which were health-tested. + * + * Important: This helper requires internet access to function properly. + * + * @return An array with Golem Node IDs of the whitelisted providers. + */ +async function getHealthyProvidersWhiteList() { + try { + const response = await fetch("https://reputation.golem.network/v1/provider-whitelist"); + if (response.ok) { + return response.json(); + } + else { + const body = await response.text(); + throw new golemNetwork.GolemInternalError(`Request to download healthy provider whitelist failed: ${body}`); + } + } + catch (err) { + throw new golemNetwork.GolemInternalError(`Failed to download healthy provider whitelist due to an error: ${err}`, err); + } +} + +var helpers = /*#__PURE__*/Object.freeze({ + __proto__: null, + getHealthyProvidersWhiteList: getHealthyProvidersWhiteList +}); + +/** Default DebitNotes filter that accept all debit notes without any validation */ +const acceptAllDebitNotesFilter = () => async () => true; +/** Default Invoices filter that accept all invoices without any validation */ +const acceptAllInvoicesFilter = () => async () => true; +/** A custom filter that only accepts debit notes below a given value */ +const acceptMaxAmountDebitNoteFilter = (maxAmount) => async (debitNote) => new Decimal(debitNote.totalAmountDue).lte(maxAmount); +/** A custom filter that only accepts invoices below a given value */ +const acceptMaxAmountInvoiceFilter = (maxAmount) => async (invoice) => new Decimal(invoice.amount).lte(maxAmount); + +var strategy = /*#__PURE__*/Object.freeze({ + __proto__: null, + acceptAllDebitNotesFilter: acceptAllDebitNotesFilter, + acceptAllInvoicesFilter: acceptAllInvoicesFilter, + acceptMaxAmountDebitNoteFilter: acceptMaxAmountDebitNoteFilter, + acceptMaxAmountInvoiceFilter: acceptMaxAmountInvoiceFilter +}); + +function createDefaultStorageProvider(yagnaApi, logger) { + return new golemNetwork.WebSocketStorageProvider(yagnaApi, { + logger: logger === null || logger === void 0 ? void 0 : logger.child("storage"), + }); +} + +exports.Activity = golemNetwork.Activity; +exports.ActivityModuleImpl = golemNetwork.ActivityModuleImpl; +Object.defineProperty(exports, "ActivityStateEnum", { + enumerable: true, + get: function () { return golemNetwork.ActivityStateEnum; } +}); +exports.Agreement = golemNetwork.Agreement; +exports.Allocation = golemNetwork.Allocation; +exports.BasicDemandDirector = golemNetwork.BasicDemandDirector; +exports.Batch = golemNetwork.Batch; +exports.DebitNote = golemNetwork.DebitNote; +exports.DebitNoteRepository = golemNetwork.DebitNoteRepository; +exports.Demand = golemNetwork.Demand; +exports.DemandSpecification = golemNetwork.DemandSpecification; +exports.DraftOfferProposalPool = golemNetwork.DraftOfferProposalPool; +exports.EnvUtils = golemNetwork.env; +exports.EventReader = golemNetwork.EventReader; +exports.ExeUnit = golemNetwork.ExeUnit; +exports.ExecutionConfig = golemNetwork.ExecutionConfig; +exports.GftpStorageProvider = golemNetwork.GftpStorageProvider; +exports.GolemAbortError = golemNetwork.GolemAbortError; +exports.GolemConfigError = golemNetwork.GolemConfigError; +exports.GolemError = golemNetwork.GolemError; +exports.GolemInternalError = golemNetwork.GolemInternalError; +exports.GolemMarketError = golemNetwork.GolemMarketError; +exports.GolemModuleError = golemNetwork.GolemModuleError; +exports.GolemNetwork = golemNetwork.GolemNetwork; +exports.GolemNetworkError = golemNetwork.GolemNetworkError; +exports.GolemPaymentError = golemNetwork.GolemPaymentError; +exports.GolemPlatformError = golemNetwork.GolemPlatformError; +exports.GolemTimeoutError = golemNetwork.GolemTimeoutError; +exports.GolemUserError = golemNetwork.GolemUserError; +exports.GolemWorkError = golemNetwork.GolemWorkError; +exports.Invoice = golemNetwork.Invoice; +exports.InvoiceProcessor = golemNetwork.InvoiceProcessor; +exports.InvoiceRepository = golemNetwork.InvoiceRepository; +exports.MIN_SUPPORTED_YAGNA = golemNetwork.MIN_SUPPORTED_YAGNA; +exports.MarketApiAdapter = golemNetwork.MarketApiAdapter; +Object.defineProperty(exports, "MarketErrorCode", { + enumerable: true, + get: function () { return golemNetwork.MarketErrorCode; } +}); +exports.MarketModuleImpl = golemNetwork.MarketModuleImpl; +exports.Network = golemNetwork.Network; +Object.defineProperty(exports, "NetworkErrorCode", { + enumerable: true, + get: function () { return golemNetwork.NetworkErrorCode; } +}); +exports.NetworkModuleImpl = golemNetwork.NetworkModuleImpl; +exports.NetworkNode = golemNetwork.NetworkNode; +Object.defineProperty(exports, "NetworkState", { + enumerable: true, + get: function () { return golemNetwork.NetworkState; } +}); +exports.NullStorageProvider = golemNetwork.NullStorageProvider; +exports.OfferProposal = golemNetwork.OfferProposal; +exports.PaymentApiAdapter = golemNetwork.PaymentApiAdapter; +exports.PaymentDemandDirector = golemNetwork.PaymentDemandDirector; +Object.defineProperty(exports, "PaymentErrorCode", { + enumerable: true, + get: function () { return golemNetwork.PaymentErrorCode; } +}); +exports.PaymentModuleImpl = golemNetwork.PaymentModuleImpl; +Object.defineProperty(exports, "RejectionReason", { + enumerable: true, + get: function () { return golemNetwork.RejectionReason; } +}); +exports.RemoteProcess = golemNetwork.RemoteProcess; +exports.RentalModuleImpl = golemNetwork.RentalModuleImpl; +exports.ResourceRental = golemNetwork.ResourceRental; +exports.ResourceRentalPool = golemNetwork.ResourceRentalPool; +exports.Result = golemNetwork.Result; +exports.ScanDirector = golemNetwork.ScanDirector; +exports.ScannedOffer = golemNetwork.ScannedOffer; +exports.TcpProxy = golemNetwork.TcpProxy; +exports.WebSocketStorageProvider = golemNetwork.WebSocketStorageProvider; +Object.defineProperty(exports, "WorkErrorCode", { + enumerable: true, + get: function () { return golemNetwork.WorkErrorCode; } +}); +exports.WorkloadDemandDirector = golemNetwork.WorkloadDemandDirector; +exports.YagnaApi = golemNetwork.YagnaApi; +exports.anyAbortSignal = golemNetwork.anyAbortSignal; +exports.checkAndThrowUnsupportedInBrowserError = golemNetwork.checkAndThrowUnsupportedInBrowserError; +exports.createAbortSignalFromTimeout = golemNetwork.createAbortSignalFromTimeout; +exports.defaultLogger = golemNetwork.defaultLogger; +exports.isBrowser = golemNetwork.isBrowser; +exports.isNode = golemNetwork.isNode; +exports.isWebWorker = golemNetwork.isWebWorker; +exports.mergeUntilFirstComplete = golemNetwork.mergeUntilFirstComplete; +exports.nullLogger = golemNetwork.nullLogger; +exports.runOnNextEventLoopIteration = golemNetwork.runOnNextEventLoopIteration; +exports.sleep = golemNetwork.sleep; +exports.waitAndCall = golemNetwork.waitAndCall; +exports.waitFor = golemNetwork.waitFor; +exports.MarketHelpers = helpers; +exports.OfferProposalFilterFactory = strategy$1; +exports.PaymentFilters = strategy; +exports.createDefaultStorageProvider = createDefaultStorageProvider; +//# sourceMappingURL=golem-js.js.map diff --git a/dist/golem-js.js.map b/dist/golem-js.js.map new file mode 100644 index 000000000..dd83bd87d --- /dev/null +++ b/dist/golem-js.js.map @@ -0,0 +1 @@ +{"version":3,"file":"golem-js.js","sources":["../src/market/strategy.ts","../src/market/helpers.ts","../src/payment/strategy.ts","../src/shared/storage/default.ts"],"sourcesContent":[null,null,null,null],"names":["GolemInternalError","WebSocketStorageProvider"],"mappings":"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"} \ No newline at end of file diff --git a/dist/golem-js.min.js b/dist/golem-js.min.js new file mode 100644 index 000000000..c9fb5df27 --- /dev/null +++ b/dist/golem-js.min.js @@ -0,0 +1,4 @@ +const e=(e,t=!1)=>new Promise((r=>setTimeout(r,e*(t?1:1e3))));class t extends Error{constructor(e,t){super(e),this.previous=t}}class r extends t{}class i extends r{}class n extends r{}class o extends t{}class s extends t{}class a extends t{}class c extends t{constructor(e,t,r){super(e,r),this.code=t}}const u="undefined"!=typeof window&&void 0!==window.document,l="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,h="object"==typeof self&&self.constructor&&"DedicatedWorkerGlobalScope"===self.constructor.name;function d(e){if(u)throw new o(`Feature ${e} is unsupported in the browser.`)}function p(){const e=()=>{};return{child:()=>p(),debug:e,info:e,warn:e,error:e}}var f="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function g(){throw new Error("setTimeout has not been defined")}function v(){throw new Error("clearTimeout has not been defined")}var m=g,y=v;function w(e){if(m===setTimeout)return setTimeout(e,0);if((m===g||!m)&&setTimeout)return m=setTimeout,setTimeout(e,0);try{return m(e,0)}catch(t){try{return m.call(null,e,0)}catch(t){return m.call(this,e,0)}}}"function"==typeof f.setTimeout&&(m=setTimeout),"function"==typeof f.clearTimeout&&(y=clearTimeout);var b,E=[],S=!1,I=-1;function A(){S&&b&&(S=!1,b.length?E=b.concat(E):I=-1,E.length&&P())}function P(){if(!S){var e=w(A);S=!0;for(var t=E.length;t;){for(b=E,E=[];++I1)for(var r=1;r=1.5*r;return Math.round(e/r)+" "+i+(n?"s":"")}return U=function(a,c){c=c||{};var u=typeof a;if("string"===u&&a.length>0)return function(s){if((s=String(s)).length>100)return;var a=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(!a)return;var c=parseFloat(a[1]);switch((a[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*o;case"weeks":case"week":case"w":return c*n;case"days":case"day":case"d":return c*i;case"hours":case"hour":case"hrs":case"hr":case"h":return c*r;case"minutes":case"minute":case"mins":case"min":case"m":return c*t;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(a);if("number"===u&&isFinite(a))return c.long?function(n){var o=Math.abs(n);if(o>=i)return s(n,o,i,"day");if(o>=r)return s(n,o,r,"hour");if(o>=t)return s(n,o,t,"minute");if(o>=e)return s(n,o,e,"second");return n+" ms"}(a):function(n){var o=Math.abs(n);if(o>=i)return Math.round(n/i)+"d";if(o>=r)return Math.round(n/r)+"h";if(o>=t)return Math.round(n/t)+"m";if(o>=e)return Math.round(n/e)+"s";return n+"ms"}(a);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(a))}}var G=function(e){function t(e){let i,n,o,s=null;function a(...e){if(!a.enabled)return;const r=a,n=Number(new Date),o=n-(i||n);r.diff=o,r.prev=i,r.curr=n,i=n,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((i,n)=>{if("%%"===i)return"%";s++;const o=t.formatters[n];if("function"==typeof o){const t=e[s];i=o.call(r,t),e.splice(s,1),s--}return i})),t.formatArgs.call(r,e);(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(n!==t.namespaces&&(n=t.namespaces,o=t.enabled(e)),o),set:e=>{s=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,r){const i=t(this.namespace+(void 0===r?":":r)+e);return i.log=this.log,i}function i(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){if(e instanceof Error)return e.stack||e.message;return e},t.disable=function(){const e=[...t.names.map(i),...t.skips.map(i).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let r;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const i=("string"==typeof e?e:"").split(/[\s,]+/),n=i.length;for(r=0;r{t[r]=e[r]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t{"%%"!==e&&(i++,"%c"===e&&(n=i))})),t.splice(n,0,r)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}!e&&void 0!==$&&"env"in $&&(e=$.env.DEBUG);return e},t.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=G(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}(z,z.exports);var Y=L(z.exports);function K(e,t={disableAutoPrefix:!1}){const r=function(e,t){return t||e.startsWith("golem-js:")?e:`golem-js:${e}`}(e,t.disableAutoPrefix),i=Y(r);function n(e,t,r){r?i(`[${e}] ${t} %o`,r):i(`[${e}] ${t}`)}return{child:e=>K(`${r}:${e}`,t),info:function(e,t){n("INFO",e,t)},error:function(e,t){n("ERROR",e,t)},warn:function(e,t){n("WARN",e,t)},debug:function(e,t){n("DEBUG",e,t)}}}function J(){return(l?null===process||void 0===process?void 0:process.env.YAGNA_API_URL:"")||"http://127.0.0.1:7465"}function X(){var e;return l&&null!==(e=null===process||void 0===process?void 0:process.env.YAGNA_APPKEY)&&void 0!==e?e:""}function Q(){var e;return l&&null!==(e=null===process||void 0===process?void 0:process.env.YAGNA_SUBNET)&&void 0!==e?e:"public"}function Z(){var e;return l&&null!==(e=null===process||void 0===process?void 0:process.env.GOLEM_REGISTRY_URL)&&void 0!==e?e:"https://registry.golem.network"}function ee(){var e;return l&&null!==(e=process.env.PAYMENT_NETWORK)&&void 0!==e?e:"holesky"}function te(){return!!l&&"true"===(null===process||void 0===process?void 0:process.env.GOLEM_DEV_MODE)}var re=Object.freeze({__proto__:null,getPaymentNetwork:ee,getRepoUrl:Z,getYagnaApiUrl:J,getYagnaAppKey:X,getYagnaSubnet:Q,isDevMode:te}),ie={},ne={},oe={},se={},ae={};Object.defineProperty(ae,"__esModule",{value:!0}),ae.BaseHttpRequest=void 0;ae.BaseHttpRequest=class{constructor(e){this.config=e}};var ce=[],ue=[],le="undefined"!=typeof Uint8Array?Uint8Array:Array,he=!1;function de(){he=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0;t<64;++t)ce[t]=e[t],ue[e.charCodeAt(t)]=t;ue["-".charCodeAt(0)]=62,ue["_".charCodeAt(0)]=63}function pe(e,t,r){for(var i,n,o=[],s=t;s>18&63]+ce[n>>12&63]+ce[n>>6&63]+ce[63&n]);return o.join("")}function fe(e){var t;he||de();for(var r=e.length,i=r%3,n="",o=[],s=16383,a=0,c=r-i;ac?c:a+s));return 1===i?(t=e[r-1],n+=ce[t>>2],n+=ce[t<<4&63],n+="=="):2===i&&(t=(e[r-2]<<8)+e[r-1],n+=ce[t>>10],n+=ce[t>>4&63],n+=ce[t<<2&63],n+="="),o.push(n),o.join("")}function ge(e,t,r,i,n){var o,s,a=8*n-i-1,c=(1<>1,l=-7,h=r?n-1:0,d=r?-1:1,p=e[t+h];for(h+=d,o=p&(1<<-l)-1,p>>=-l,l+=a;l>0;o=256*o+e[t+h],h+=d,l-=8);for(s=o&(1<<-l)-1,o>>=-l,l+=i;l>0;s=256*s+e[t+h],h+=d,l-=8);if(0===o)o=1-u;else{if(o===c)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,i),o-=u}return(p?-1:1)*s*Math.pow(2,o-i)}function ve(e,t,r,i,n,o){var s,a,c,u=8*o-n-1,l=(1<>1,d=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,p=i?0:o-1,f=i?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=l):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),(t+=s+h>=1?d/c:d*Math.pow(2,1-h))*c>=2&&(s++,c/=2),s+h>=l?(a=0,s=l):s+h>=1?(a=(t*c-1)*Math.pow(2,n),s+=h):(a=t*Math.pow(2,h-1)*Math.pow(2,n),s=0));n>=8;e[r+p]=255&a,p+=f,a/=256,n-=8);for(s=s<0;e[r+p]=255&s,p+=f,s/=256,u-=8);e[r+p-f]|=128*g}var me={}.toString,ye=Array.isArray||function(e){return"[object Array]"==me.call(e)};function we(){return Ee.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function be(e,t){if(we()=we())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+we().toString(16)+" bytes");return 0|e}function Re(e){return!(null==e||!e._isBuffer)}function Oe(e,t){if(Re(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return tt(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return rt(e).length;default:if(i)return tt(e).length;t=(""+t).toLowerCase(),i=!0}}function Ce(e,t,r){var i=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return He(this,t,r);case"utf8":case"utf-8":return Me(this,t,r);case"ascii":return Ve(this,t,r);case"latin1":case"binary":return Ue(this,t,r);case"base64":return $e(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ze(this,t,r);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function Ne(e,t,r){var i=e[t];e[t]=e[r],e[r]=i}function ke(e,t,r,i,n){if(0===e.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=n?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(n)return-1;r=e.length-1}else if(r<0){if(!n)return-1;r=0}if("string"==typeof t&&(t=Ee.from(t,i)),Re(t))return 0===t.length?-1:_e(e,t,r,i,n);if("number"==typeof t)return t&=255,Ee.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):_e(e,[t],r,i,n);throw new TypeError("val must be string, number or Buffer")}function _e(e,t,r,i,n){var o,s=1,a=e.length,c=t.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||t.length<2)return-1;s=2,a/=2,c/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(n){var l=-1;for(o=r;oa&&(r=a-c),o=r;o>=0;o--){for(var h=!0,d=0;dn&&(i=n):i=n;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");i>o/2&&(i=o/2);for(var s=0;s>8,n=r%256,o.push(n),o.push(i);return o}(t,e.length-r),e,r,i)}function $e(e,t,r){return 0===t&&r===e.length?fe(e):fe(e.slice(t,r))}function Me(e,t,r){r=Math.min(e.length,r);for(var i=[],n=t;n239?4:u>223?3:u>191?2:1;if(n+h<=r)switch(h){case 1:u<128&&(l=u);break;case 2:128==(192&(o=e[n+1]))&&(c=(31&u)<<6|63&o)>127&&(l=c);break;case 3:o=e[n+1],s=e[n+2],128==(192&o)&&128==(192&s)&&(c=(15&u)<<12|(63&o)<<6|63&s)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:o=e[n+1],s=e[n+2],a=e[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(c=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&c<1114112&&(l=c)}null===l?(l=65533,h=1):l>65535&&(l-=65536,i.push(l>>>10&1023|55296),l=56320|1023&l),i.push(l),n+=h}return function(e){var t=e.length;if(t<=Le)return String.fromCharCode.apply(String,e);var r="",i=0;for(;i0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),""},Ee.prototype.compare=function(e,t,r,i,n){if(!Re(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===i&&(i=0),void 0===n&&(n=this.length),t<0||r>e.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&t>=r)return 0;if(i>=n)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(n>>>=0)-(i>>>=0),s=(r>>>=0)-(t>>>=0),a=Math.min(o,s),c=this.slice(i,n),u=e.slice(t,r),l=0;ln)&&(r=n),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return xe(this,e,t,r);case"utf8":case"utf-8":return De(this,e,t,r);case"ascii":return qe(this,e,t,r);case"latin1":case"binary":return Fe(this,e,t,r);case"base64":return Be(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return je(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},Ee.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Le=4096;function Ve(e,t,r){var i="";r=Math.min(e.length,r);for(var n=t;ni)&&(r=i);for(var n="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function Ge(e,t,r,i,n,o){if(!Re(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>n||te.length)throw new RangeError("Index out of range")}function Ye(e,t,r,i){t<0&&(t=65535+t+1);for(var n=0,o=Math.min(e.length-r,2);n>>8*(i?n:1-n)}function Ke(e,t,r,i){t<0&&(t=4294967295+t+1);for(var n=0,o=Math.min(e.length-r,4);n>>8*(i?n:3-n)&255}function Je(e,t,r,i,n,o){if(r+i>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Xe(e,t,r,i,n){return n||Je(e,0,r,4),ve(e,t,r,i,23,4),r+4}function Qe(e,t,r,i,n){return n||Je(e,0,r,8),ve(e,t,r,i,52,8),r+8}Ee.prototype.slice=function(e,t){var r,i=this.length;if((e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(t=void 0===t?i:~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),t0&&(n*=256);)i+=this[e+--t]*n;return i},Ee.prototype.readUInt8=function(e,t){return t||We(e,1,this.length),this[e]},Ee.prototype.readUInt16LE=function(e,t){return t||We(e,2,this.length),this[e]|this[e+1]<<8},Ee.prototype.readUInt16BE=function(e,t){return t||We(e,2,this.length),this[e]<<8|this[e+1]},Ee.prototype.readUInt32LE=function(e,t){return t||We(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},Ee.prototype.readUInt32BE=function(e,t){return t||We(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},Ee.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||We(e,t,this.length);for(var i=this[e],n=1,o=0;++o=(n*=128)&&(i-=Math.pow(2,8*t)),i},Ee.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||We(e,t,this.length);for(var i=t,n=1,o=this[e+--i];i>0&&(n*=256);)o+=this[e+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*t)),o},Ee.prototype.readInt8=function(e,t){return t||We(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},Ee.prototype.readInt16LE=function(e,t){t||We(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},Ee.prototype.readInt16BE=function(e,t){t||We(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},Ee.prototype.readInt32LE=function(e,t){return t||We(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},Ee.prototype.readInt32BE=function(e,t){return t||We(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},Ee.prototype.readFloatLE=function(e,t){return t||We(e,4,this.length),ge(this,e,!0,23,4)},Ee.prototype.readFloatBE=function(e,t){return t||We(e,4,this.length),ge(this,e,!1,23,4)},Ee.prototype.readDoubleLE=function(e,t){return t||We(e,8,this.length),ge(this,e,!0,52,8)},Ee.prototype.readDoubleBE=function(e,t){return t||We(e,8,this.length),ge(this,e,!1,52,8)},Ee.prototype.writeUIntLE=function(e,t,r,i){(e=+e,t|=0,r|=0,i)||Ge(this,e,t,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+n]=e/o&255;return t+r},Ee.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,1,255,0),Ee.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},Ee.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,2,65535,0),Ee.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):Ye(this,e,t,!0),t+2},Ee.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,2,65535,0),Ee.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):Ye(this,e,t,!1),t+2},Ee.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,4,4294967295,0),Ee.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):Ke(this,e,t,!0),t+4},Ee.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,4,4294967295,0),Ee.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Ke(this,e,t,!1),t+4},Ee.prototype.writeIntLE=function(e,t,r,i){if(e=+e,t|=0,!i){var n=Math.pow(2,8*r-1);Ge(this,e,t,r,n-1,-n)}var o=0,s=1,a=0;for(this[t]=255&e;++o=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s|0)-a&255;return t+r},Ee.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,1,127,-128),Ee.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},Ee.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,2,32767,-32768),Ee.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):Ye(this,e,t,!0),t+2},Ee.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,2,32767,-32768),Ee.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):Ye(this,e,t,!1),t+2},Ee.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,4,2147483647,-2147483648),Ee.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):Ke(this,e,t,!0),t+4},Ee.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||Ge(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),Ee.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Ke(this,e,t,!1),t+4},Ee.prototype.writeFloatLE=function(e,t,r){return Xe(this,e,t,!0,r)},Ee.prototype.writeFloatBE=function(e,t,r){return Xe(this,e,t,!1,r)},Ee.prototype.writeDoubleLE=function(e,t,r){return Qe(this,e,t,!0,r)},Ee.prototype.writeDoubleBE=function(e,t,r){return Qe(this,e,t,!1,r)},Ee.prototype.copy=function(e,t,r,i){if(r||(r=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-t=0;--n)e[n+t]=this[n+r];else if(o<1e3||!Ee.TYPED_ARRAY_SUPPORT)for(n=0;n>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!n){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(t-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320)}else n&&(t-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function rt(e){return function(e){var t,r,i,n,o,s;he||de();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[a-2]?2:"="===e[a-1]?1:0,s=new le(3*a/4-o),i=o>0?a-4:a;var c=0;for(t=0,r=0;t>16&255,s[c++]=n>>8&255,s[c++]=255&n;return 2===o?(n=ue[e.charCodeAt(t)]<<2|ue[e.charCodeAt(t+1)]>>4,s[c++]=255&n):1===o&&(n=ue[e.charCodeAt(t)]<<10|ue[e.charCodeAt(t+1)]<<4|ue[e.charCodeAt(t+2)]>>2,s[c++]=n>>8&255,s[c++]=255&n),s}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(Ze,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function it(e,t,r,i){for(var n=0;n=t.length||n>=e.length);++n)t[n+r]=e[n];return n}function nt(e){return null!=e&&(!!e._isBuffer||ot(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&ot(e.slice(0,0))}(e))}function ot(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var st={},at={};Object.defineProperty(at,"__esModule",{value:!0}),at.ApiError=void 0;let ct=class extends Error{constructor(e,t,r){super(r),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}};at.ApiError=ct;var ut,lt,ht,dt,pt,ft,gt,vt={},mt=M&&M.__classPrivateFieldSet||function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,r):n?n.value=r:t.set(e,r),r},yt=M&&M.__classPrivateFieldGet||function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};Object.defineProperty(vt,"__esModule",{value:!0}),vt.CancelablePromise=vt.CancelError=void 0;let wt=class extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}};vt.CancelError=wt;let bt=class{constructor(e){ut.set(this,void 0),lt.set(this,void 0),ht.set(this,void 0),dt.set(this,void 0),pt.set(this,void 0),ft.set(this,void 0),gt.set(this,void 0),mt(this,ut,!1,"f"),mt(this,lt,!1,"f"),mt(this,ht,!1,"f"),mt(this,dt,[],"f"),mt(this,pt,new Promise(((t,r)=>{mt(this,ft,t,"f"),mt(this,gt,r,"f");const i=e=>{yt(this,ut,"f")||yt(this,lt,"f")||yt(this,ht,"f")||yt(this,dt,"f").push(e)};return Object.defineProperty(i,"isResolved",{get:()=>yt(this,ut,"f")}),Object.defineProperty(i,"isRejected",{get:()=>yt(this,lt,"f")}),Object.defineProperty(i,"isCancelled",{get:()=>yt(this,ht,"f")}),e((e=>{yt(this,ut,"f")||yt(this,lt,"f")||yt(this,ht,"f")||(mt(this,ut,!0,"f"),yt(this,ft,"f")&&yt(this,ft,"f").call(this,e))}),(e=>{yt(this,ut,"f")||yt(this,lt,"f")||yt(this,ht,"f")||(mt(this,lt,!0,"f"),yt(this,gt,"f")&&yt(this,gt,"f").call(this,e))}),i)})),"f")}get[(ut=new WeakMap,lt=new WeakMap,ht=new WeakMap,dt=new WeakMap,pt=new WeakMap,ft=new WeakMap,gt=new WeakMap,Symbol.toStringTag)](){return"Cancellable Promise"}then(e,t){return yt(this,pt,"f").then(e,t)}catch(e){return yt(this,pt,"f").catch(e)}finally(e){return yt(this,pt,"f").finally(e)}cancel(){if(!(yt(this,ut,"f")||yt(this,lt,"f")||yt(this,ht,"f"))){if(mt(this,ht,!0,"f"),yt(this,dt,"f").length)try{for(const e of yt(this,dt,"f"))e()}catch(e){return void console.warn("Cancellation threw an error",e)}yt(this,dt,"f").length=0,yt(this,gt,"f")&&yt(this,gt,"f").call(this,new wt("Request aborted"))}}get isCancelled(){return yt(this,ht,"f")}};vt.CancelablePromise=bt,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.request=e.catchErrorCodes=e.getResponseBody=e.getResponseHeader=e.sendRequest=e.getRequestBody=e.getHeaders=e.resolve=e.getFormData=e.getQueryString=e.base64=e.isFormData=e.isBlob=e.isStringWithValue=e.isString=e.isDefined=void 0;const t=at,r=vt;e.isDefined=e=>null!=e;e.isString=e=>"string"==typeof e;e.isStringWithValue=t=>(0,e.isString)(t)&&""!==t;e.isBlob=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]);e.isFormData=e=>e instanceof FormData;e.base64=e=>{try{return btoa(e)}catch(t){return Ee.from(e).toString("base64")}};e.getQueryString=t=>{const r=[],i=(t,n)=>{(0,e.isDefined)(n)&&(Array.isArray(n)?n.forEach((e=>{i(t,e)})):"object"==typeof n?Object.entries(n).forEach((([e,r])=>{i(`${t}[${e}]`,r)})):((e,t)=>{r.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`)})(t,n))};return Object.entries(t).forEach((([e,t])=>{i(e,t)})),r.length>0?`?${r.join("&")}`:""};e.getFormData=t=>{if(t.formData){const r=new FormData,i=(t,i)=>{(0,e.isString)(i)||(0,e.isBlob)(i)?r.append(t,i):r.append(t,JSON.stringify(i))};return Object.entries(t.formData).filter((([t,r])=>(0,e.isDefined)(r))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>i(e,t))):i(e,t)})),r}};e.resolve=async(e,t)=>"function"==typeof t?t(e):t;e.getHeaders=async(t,r)=>{const[i,n,o,s]=await Promise.all([(0,e.resolve)(r,t.TOKEN),(0,e.resolve)(r,t.USERNAME),(0,e.resolve)(r,t.PASSWORD),(0,e.resolve)(r,t.HEADERS)]),a=Object.entries({Accept:"application/json",...s,...r.headers}).filter((([t,r])=>(0,e.isDefined)(r))).reduce(((e,[t,r])=>({...e,[t]:String(r)})),{});if((0,e.isStringWithValue)(i)&&(a.Authorization=`Bearer ${i}`),(0,e.isStringWithValue)(n)&&(0,e.isStringWithValue)(o)){const t=(0,e.base64)(`${n}:${o}`);a.Authorization=`Basic ${t}`}return void 0!==r.body&&(r.mediaType?a["Content-Type"]=r.mediaType:(0,e.isBlob)(r.body)?a["Content-Type"]=r.body.type||"application/octet-stream":(0,e.isString)(r.body)?a["Content-Type"]="text/plain":(0,e.isFormData)(r.body)||(a["Content-Type"]="application/json")),new Headers(a)};e.getRequestBody=t=>{if(void 0!==t.body)return t.mediaType?.includes("/json")?JSON.stringify(t.body):(0,e.isString)(t.body)||(0,e.isBlob)(t.body)||(0,e.isFormData)(t.body)?t.body:JSON.stringify(t.body)};e.sendRequest=async(e,t,r,i,n,o,s)=>{const a=new AbortController,c={headers:o,body:i??n,method:t.method,signal:a.signal};return e.WITH_CREDENTIALS&&(c.credentials=e.CREDENTIALS),s((()=>a.abort())),await fetch(r,c)};e.getResponseHeader=(t,r)=>{if(r){const i=t.headers.get(r);if((0,e.isString)(i))return i}};e.getResponseBody=async e=>{if(204!==e.status)try{const t=e.headers.get("Content-Type");if(t){return["application/json","application/problem+json"].some((e=>t.toLowerCase().startsWith(e)))?await e.json():await e.text()}}catch(e){console.error(e)}};e.catchErrorCodes=(e,r)=>{const i={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[r.status];if(i)throw new t.ApiError(e,r,i);if(!r.ok){const i=r.status??"unknown",n=r.statusText??"unknown",o=(()=>{try{return JSON.stringify(r.body,null,2)}catch(e){return}})();throw new t.ApiError(e,r,`Generic Error: status: ${i}; status text: ${n}; body: ${o}`)}};e.request=(t,i)=>new r.CancelablePromise((async(r,n,o)=>{try{const n=((t,r)=>{const i=t.ENCODE_PATH||encodeURI,n=r.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,((e,t)=>r.path?.hasOwnProperty(t)?i(String(r.path[t])):e)),o=`${t.BASE}${n}`;return r.query?`${o}${(0,e.getQueryString)(r.query)}`:o})(t,i),s=(0,e.getFormData)(i),a=(0,e.getRequestBody)(i),c=await(0,e.getHeaders)(t,i);if(!o.isCancelled){const u=await(0,e.sendRequest)(t,i,n,a,s,c,o),l=await(0,e.getResponseBody)(u),h=(0,e.getResponseHeader)(u,i.responseHeader),d={url:n,ok:u.ok,status:u.status,statusText:u.statusText,body:h??l};(0,e.catchErrorCodes)(i,d),r(d.body)}}catch(e){n(e)}}))}(st),Object.defineProperty(se,"__esModule",{value:!0}),se.FetchHttpRequest=void 0;const Et=ae,St=st;let It=class extends Et.BaseHttpRequest{constructor(e){super(e)}request(e){return(0,St.request)(this.config,e)}};se.FetchHttpRequest=It;var At={};Object.defineProperty(At,"__esModule",{value:!0}),At.ProviderService=void 0;At.ProviderService=class{constructor(e){this.httpRequest=e}getOffers(){return this.httpRequest.request({method:"GET",url:"/offers",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}subscribeOffer(e){return this.httpRequest.request({method:"POST",url:"/offers",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}unsubscribeOffer(e){return this.httpRequest.request({method:"DELETE",url:"/offers/{subscriptionId}",path:{subscriptionId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Already unsubscribed."}})}collectDemands(e,t=5,r=10){return this.httpRequest.request({method:"GET",url:"/offers/{subscriptionId}/events",path:{subscriptionId:e},query:{timeout:t,maxEvents:r},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}queryReplyOffers(e,t,r){return this.httpRequest.request({method:"POST",url:"/offers/{subscriptionId}/propertyQuery/{queryId}",path:{subscriptionId:e,queryId:t},body:r,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}getProposalDemand(e,t){return this.httpRequest.request({method:"GET",url:"/offers/{subscriptionId}/proposals/{proposalId}",path:{subscriptionId:e,proposalId:t},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Proposal rejected."}})}counterProposalOffer(e,t,r){return this.httpRequest.request({method:"POST",url:"/offers/{subscriptionId}/proposals/{proposalId}",path:{subscriptionId:e,proposalId:t},body:r,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Proposal rejected."}})}rejectProposalDemand(e,t,r){return this.httpRequest.request({method:"POST",url:"/offers/{subscriptionId}/proposals/{proposalId}/reject",path:{subscriptionId:e,proposalId:t},body:r,mediaType:"application/json",errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Proposal already rejected."}})}listAgreements(e,t,r,i){return this.httpRequest.request({method:"GET",url:"/agreements",query:{appSessionId:e,state:t,afterDate:r,beforeDate:i},errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}getAgreement(e){return this.httpRequest.request({method:"GET",url:"/agreements/{agreementId}",path:{agreementId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}collectAgreementEvents(e=5,t,r=10,i){return this.httpRequest.request({method:"GET",url:"/agreementEvents",query:{timeout:e,afterTimestamp:t,maxEvents:r,appSessionId:i},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}approveAgreement(e,t,r=5){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/approve",path:{agreementId:e},query:{appSessionId:t,timeout:r},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",408:"Agreement not approved within given timeout. Try again.",410:"Agreement approval failed permanently.\n Attached `ErrorMessage` contains further details:\n - `Rejected` - Indicates that the Provider himself has already\n called `rejectAgreement`.\n - `Cancelled` - Indicates that before Provider approved this Agreement,\n the Requestor has called `cancelAgreement`, thus invalidating the\n Agreement. The Provider may attempt to return to the Negotiation phase\n by sending a new Proposal.\n - `Expired` - Indicates that Agreement validity period elapsed and it was\n not approved, rejected nor cancelled.\n - `Terminated` - Indicates that Agreement is already terminated.\n "}})}rejectAgreement(e,t){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/reject",path:{agreementId:e},body:t,mediaType:"application/json",errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Agreement rejection failed permanently.\n Attached `ErrorMessage` contains further details:\n - `Rejected` - Indicates that the Provider himself has already\n called `rejectAgreement`.\n - `Cancelled` - Indicates that before Provider rejected this Agreement,\n the Requestor has called `cancelAgreement`, thus invalidating the\n Agreement. The Provider may attempt to return to the Negotiation phase\n by sending a new Proposal.\n - `Expired` - Indicates that Agreement validity period elapsed and it was\n not approved, rejected nor cancelled.\n - `Terminated` - Indicates that Agreement is already terminated.\n "}})}terminateAgreement(e,t){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/terminate",path:{agreementId:e},body:t,mediaType:"application/json",errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",409:"Agreement can not be terminated yet (is in `Proposal` or `Pending` state).",410:"Agreement termination failed permanently.\n Attached `ErrorMessage` contains further details:\n - `Rejected` - Indicates that the Provider has rejected this Agreement.\n - `Cancelled` - Indicates the Requestor has called cancelled this Agreement.\n - `Expired` - Indicates that Agreement validity period elapsed and it was\n not approved, rejected nor cancelled.\n - `Terminated` - Indicates that Agreement is already terminated.\n "}})}getTerminateAgreementReason(e){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/terminate/reason",path:{agreementId:e},errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}};var Pt={};Object.defineProperty(Pt,"__esModule",{value:!0}),Pt.RequestorService=void 0;Pt.RequestorService=class{constructor(e){this.httpRequest=e}beginScan(e){return this.httpRequest.request({method:"POST",url:"/scan",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}collectScanResults(e,t=5,r=10,i){return this.httpRequest.request({method:"GET",url:"/scan/{subscriptionId}/events",path:{subscriptionId:e},query:{timeout:t,maxEvents:r,peerId:i},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}endScan(e){return this.httpRequest.request({method:"DELETE",url:"/scan/{subscriptionId}",path:{subscriptionId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}getDemands(){return this.httpRequest.request({method:"GET",url:"/demands",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}subscribeDemand(e){return this.httpRequest.request({method:"POST",url:"/demands",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}unsubscribeDemand(e){return this.httpRequest.request({method:"DELETE",url:"/demands/{subscriptionId}",path:{subscriptionId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Already unsubscribed."}})}collectOffers(e,t=5,r=10){return this.httpRequest.request({method:"GET",url:"/demands/{subscriptionId}/events",path:{subscriptionId:e},query:{timeout:t,maxEvents:r},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}queryReplyDemands(e,t,r){return this.httpRequest.request({method:"POST",url:"/demands/{subscriptionId}/propertyQuery/{queryId}",path:{subscriptionId:e,queryId:t},body:r,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}getProposalOffer(e,t){return this.httpRequest.request({method:"GET",url:"/demands/{subscriptionId}/proposals/{proposalId}",path:{subscriptionId:e,proposalId:t},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Proposal rejected."}})}counterProposalDemand(e,t,r){return this.httpRequest.request({method:"POST",url:"/demands/{subscriptionId}/proposals/{proposalId}",path:{subscriptionId:e,proposalId:t},body:r,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Proposal rejected."}})}rejectProposalOffer(e,t,r){return this.httpRequest.request({method:"POST",url:"/demands/{subscriptionId}/proposals/{proposalId}/reject",path:{subscriptionId:e,proposalId:t},body:r,mediaType:"application/json",errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Proposal already rejected."}})}listAgreements(e,t,r,i){return this.httpRequest.request({method:"GET",url:"/agreements",query:{appSessionId:e,state:t,afterDate:r,beforeDate:i},errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}createAgreement(e){return this.httpRequest.request({method:"POST",url:"/agreements",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",409:"Proposal not negotiated yet (in `Initial` state).",410:"Proposal rejected or expired."}})}getAgreement(e){return this.httpRequest.request({method:"GET",url:"/agreements/{agreementId}",path:{agreementId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}cancelAgreement(e,t){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/cancel",path:{agreementId:e},body:t,mediaType:"application/json",errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Agreement not in `Proposal` nor `Pending` state."}})}confirmAgreement(e,t){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/confirm",path:{agreementId:e},query:{appSessionId:t},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"Agreement not in `Proposal` state."}})}waitForApproval(e,t=5){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/wait",path:{agreementId:e},query:{timeout:t},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",408:"Agreement not approved within given timeout. Try again.",409:"Agreement not confirmed yet by Requestor himself.",410:"Agreement is not approved. This state is permanent.\n Attached `ErrorMessage` contains further details:\n - `Rejected` - Indicates that the Provider has called\n `rejectAgreement`, which effectively stops the Agreement handshake.\n The Requestor may attempt to return to the Negotiation phase by\n sending a new Proposal or to the Agreement phase by creating\n new Agreement.\n - `Cancelled` - Indicates that the Requestor himself has called\n `cancelAgreement`, which effectively stops the Agreement handshake.\n - `Expired` - Indicates that Agreement validity period elapsed and it\n was not approved, rejected nor cancelled.\n - `Terminated` - Indicates that Agreement is already terminated.\n "}})}collectAgreementEvents(e=5,t,r=10,i){return this.httpRequest.request({method:"GET",url:"/agreementEvents",query:{timeout:e,afterTimestamp:t,maxEvents:r,appSessionId:i},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}terminateAgreement(e,t){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/terminate",path:{agreementId:e},body:t,mediaType:"application/json",errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",409:"Agreement can not be terminated yet (is in `Proposal` or `Pending` state).",410:"Agreement termination failed permanently.\n Attached `ErrorMessage` contains further details:\n - `Rejected` - Indicates that the Provider has rejected this Agreement.\n - `Cancelled` - Indicates the Requestor has called cancelled this Agreement.\n - `Expired` - Indicates that Agreement validity period elapsed and it was\n not approved, rejected nor cancelled.\n - `Terminated` - Indicates that Agreement is already terminated.\n "}})}getTerminateAgreementReason(e){return this.httpRequest.request({method:"POST",url:"/agreements/{agreementId}/terminate/reason",path:{agreementId:e},errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}},Object.defineProperty(oe,"__esModule",{value:!0}),oe.Client=void 0;const Tt=se,Rt=At,Ot=Pt;oe.Client=class{constructor(e,t=Tt.FetchHttpRequest){this.request=new t({BASE:e?.BASE??"/market-api/v1",VERSION:e?.VERSION??"1.7.0",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.provider=new Rt.ProviderService(this.request),this.requestor=new Ot.RequestorService(this.request)}};var Ct={};Object.defineProperty(Ct,"__esModule",{value:!0}),Ct.OpenAPI=void 0,Ct.OpenAPI={BASE:"/market-api/v1",VERSION:"1.7.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.FetchHttpRequest=e.RequestorService=e.ProviderService=e.OpenAPI=e.CancelError=e.CancelablePromise=e.BaseHttpRequest=e.ApiError=e.Client=void 0;var t=oe;Object.defineProperty(e,"Client",{enumerable:!0,get:function(){return t.Client}});var r=at;Object.defineProperty(e,"ApiError",{enumerable:!0,get:function(){return r.ApiError}});var i=ae;Object.defineProperty(e,"BaseHttpRequest",{enumerable:!0,get:function(){return i.BaseHttpRequest}});var n=vt;Object.defineProperty(e,"CancelablePromise",{enumerable:!0,get:function(){return n.CancelablePromise}}),Object.defineProperty(e,"CancelError",{enumerable:!0,get:function(){return n.CancelError}});var o=Ct;Object.defineProperty(e,"OpenAPI",{enumerable:!0,get:function(){return o.OpenAPI}});var s=At;Object.defineProperty(e,"ProviderService",{enumerable:!0,get:function(){return s.ProviderService}});var a=Pt;Object.defineProperty(e,"RequestorService",{enumerable:!0,get:function(){return a.RequestorService}});var c=se;Object.defineProperty(e,"FetchHttpRequest",{enumerable:!0,get:function(){return c.FetchHttpRequest}})}(ne);var Nt={},kt={},_t={},xt={};Object.defineProperty(xt,"__esModule",{value:!0}),xt.BaseHttpRequest=void 0;xt.BaseHttpRequest=class{constructor(e){this.config=e}};var Dt={},qt={};Object.defineProperty(qt,"__esModule",{value:!0}),qt.ApiError=void 0;let Ft=class extends Error{constructor(e,t,r){super(r),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}};qt.ApiError=Ft;var Bt,jt,$t,Mt,Lt,Vt,Ut,Ht={},zt=M&&M.__classPrivateFieldSet||function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,r):n?n.value=r:t.set(e,r),r},Wt=M&&M.__classPrivateFieldGet||function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};Object.defineProperty(Ht,"__esModule",{value:!0}),Ht.CancelablePromise=Ht.CancelError=void 0;let Gt=class extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}};Ht.CancelError=Gt;let Yt=class{constructor(e){Bt.set(this,void 0),jt.set(this,void 0),$t.set(this,void 0),Mt.set(this,void 0),Lt.set(this,void 0),Vt.set(this,void 0),Ut.set(this,void 0),zt(this,Bt,!1,"f"),zt(this,jt,!1,"f"),zt(this,$t,!1,"f"),zt(this,Mt,[],"f"),zt(this,Lt,new Promise(((t,r)=>{zt(this,Vt,t,"f"),zt(this,Ut,r,"f");const i=e=>{Wt(this,Bt,"f")||Wt(this,jt,"f")||Wt(this,$t,"f")||Wt(this,Mt,"f").push(e)};return Object.defineProperty(i,"isResolved",{get:()=>Wt(this,Bt,"f")}),Object.defineProperty(i,"isRejected",{get:()=>Wt(this,jt,"f")}),Object.defineProperty(i,"isCancelled",{get:()=>Wt(this,$t,"f")}),e((e=>{Wt(this,Bt,"f")||Wt(this,jt,"f")||Wt(this,$t,"f")||(zt(this,Bt,!0,"f"),Wt(this,Vt,"f")&&Wt(this,Vt,"f").call(this,e))}),(e=>{Wt(this,Bt,"f")||Wt(this,jt,"f")||Wt(this,$t,"f")||(zt(this,jt,!0,"f"),Wt(this,Ut,"f")&&Wt(this,Ut,"f").call(this,e))}),i)})),"f")}get[(Bt=new WeakMap,jt=new WeakMap,$t=new WeakMap,Mt=new WeakMap,Lt=new WeakMap,Vt=new WeakMap,Ut=new WeakMap,Symbol.toStringTag)](){return"Cancellable Promise"}then(e,t){return Wt(this,Lt,"f").then(e,t)}catch(e){return Wt(this,Lt,"f").catch(e)}finally(e){return Wt(this,Lt,"f").finally(e)}cancel(){if(!(Wt(this,Bt,"f")||Wt(this,jt,"f")||Wt(this,$t,"f"))){if(zt(this,$t,!0,"f"),Wt(this,Mt,"f").length)try{for(const e of Wt(this,Mt,"f"))e()}catch(e){return void console.warn("Cancellation threw an error",e)}Wt(this,Mt,"f").length=0,Wt(this,Ut,"f")&&Wt(this,Ut,"f").call(this,new Gt("Request aborted"))}}get isCancelled(){return Wt(this,$t,"f")}};Ht.CancelablePromise=Yt,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.request=e.catchErrorCodes=e.getResponseBody=e.getResponseHeader=e.sendRequest=e.getRequestBody=e.getHeaders=e.resolve=e.getFormData=e.getQueryString=e.base64=e.isFormData=e.isBlob=e.isStringWithValue=e.isString=e.isDefined=void 0;const t=qt,r=Ht;e.isDefined=e=>null!=e;e.isString=e=>"string"==typeof e;e.isStringWithValue=t=>(0,e.isString)(t)&&""!==t;e.isBlob=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]);e.isFormData=e=>e instanceof FormData;e.base64=e=>{try{return btoa(e)}catch(t){return Ee.from(e).toString("base64")}};e.getQueryString=t=>{const r=[],i=(t,n)=>{(0,e.isDefined)(n)&&(Array.isArray(n)?n.forEach((e=>{i(t,e)})):"object"==typeof n?Object.entries(n).forEach((([e,r])=>{i(`${t}[${e}]`,r)})):((e,t)=>{r.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`)})(t,n))};return Object.entries(t).forEach((([e,t])=>{i(e,t)})),r.length>0?`?${r.join("&")}`:""};e.getFormData=t=>{if(t.formData){const r=new FormData,i=(t,i)=>{(0,e.isString)(i)||(0,e.isBlob)(i)?r.append(t,i):r.append(t,JSON.stringify(i))};return Object.entries(t.formData).filter((([t,r])=>(0,e.isDefined)(r))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>i(e,t))):i(e,t)})),r}};e.resolve=async(e,t)=>"function"==typeof t?t(e):t;e.getHeaders=async(t,r)=>{const[i,n,o,s]=await Promise.all([(0,e.resolve)(r,t.TOKEN),(0,e.resolve)(r,t.USERNAME),(0,e.resolve)(r,t.PASSWORD),(0,e.resolve)(r,t.HEADERS)]),a=Object.entries({Accept:"application/json",...s,...r.headers}).filter((([t,r])=>(0,e.isDefined)(r))).reduce(((e,[t,r])=>({...e,[t]:String(r)})),{});if((0,e.isStringWithValue)(i)&&(a.Authorization=`Bearer ${i}`),(0,e.isStringWithValue)(n)&&(0,e.isStringWithValue)(o)){const t=(0,e.base64)(`${n}:${o}`);a.Authorization=`Basic ${t}`}return void 0!==r.body&&(r.mediaType?a["Content-Type"]=r.mediaType:(0,e.isBlob)(r.body)?a["Content-Type"]=r.body.type||"application/octet-stream":(0,e.isString)(r.body)?a["Content-Type"]="text/plain":(0,e.isFormData)(r.body)||(a["Content-Type"]="application/json")),new Headers(a)};e.getRequestBody=t=>{if(void 0!==t.body)return t.mediaType?.includes("/json")?JSON.stringify(t.body):(0,e.isString)(t.body)||(0,e.isBlob)(t.body)||(0,e.isFormData)(t.body)?t.body:JSON.stringify(t.body)};e.sendRequest=async(e,t,r,i,n,o,s)=>{const a=new AbortController,c={headers:o,body:i??n,method:t.method,signal:a.signal};return e.WITH_CREDENTIALS&&(c.credentials=e.CREDENTIALS),s((()=>a.abort())),await fetch(r,c)};e.getResponseHeader=(t,r)=>{if(r){const i=t.headers.get(r);if((0,e.isString)(i))return i}};e.getResponseBody=async e=>{if(204!==e.status)try{const t=e.headers.get("Content-Type");if(t){return["application/json","application/problem+json"].some((e=>t.toLowerCase().startsWith(e)))?await e.json():await e.text()}}catch(e){console.error(e)}};e.catchErrorCodes=(e,r)=>{const i={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[r.status];if(i)throw new t.ApiError(e,r,i);if(!r.ok){const i=r.status??"unknown",n=r.statusText??"unknown",o=(()=>{try{return JSON.stringify(r.body,null,2)}catch(e){return}})();throw new t.ApiError(e,r,`Generic Error: status: ${i}; status text: ${n}; body: ${o}`)}};e.request=(t,i)=>new r.CancelablePromise((async(r,n,o)=>{try{const n=((t,r)=>{const i=t.ENCODE_PATH||encodeURI,n=r.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,((e,t)=>r.path?.hasOwnProperty(t)?i(String(r.path[t])):e)),o=`${t.BASE}${n}`;return r.query?`${o}${(0,e.getQueryString)(r.query)}`:o})(t,i),s=(0,e.getFormData)(i),a=(0,e.getRequestBody)(i),c=await(0,e.getHeaders)(t,i);if(!o.isCancelled){const u=await(0,e.sendRequest)(t,i,n,a,s,c,o),l=await(0,e.getResponseBody)(u),h=(0,e.getResponseHeader)(u,i.responseHeader),d={url:n,ok:u.ok,status:u.status,statusText:u.statusText,body:h??l};(0,e.catchErrorCodes)(i,d),r(d.body)}}catch(e){n(e)}}))}(Dt),Object.defineProperty(_t,"__esModule",{value:!0}),_t.FetchHttpRequest=void 0;const Kt=xt,Jt=Dt;let Xt=class extends Kt.BaseHttpRequest{constructor(e){super(e)}request(e){return(0,Jt.request)(this.config,e)}};_t.FetchHttpRequest=Xt;var Qt={};Object.defineProperty(Qt,"__esModule",{value:!0}),Qt.ProviderService=void 0;Qt.ProviderService=class{constructor(e){this.httpRequest=e}getActivityAgreement(e){return this.httpRequest.request({method:"GET",url:"/activity/{activityId}/agreement",path:{activityId:e},errors:{400:"(400) Bad request",403:"(403) Forbidden.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}collectActivityEvents(e,t,r=5,i=10){return this.httpRequest.request({method:"GET",url:"/events",query:{appSessionId:e,afterTimestamp:t,timeout:r,maxEvents:i},errors:{403:"(403) Forbidden.",500:"(500) Server error."}})}getActivityState(e){return this.httpRequest.request({method:"GET",url:"/activity/{activityId}/state",path:{activityId:e},errors:{404:"(404) The specified resource was not found.",500:"(500) Server error."}})}setActivityState(e,t){return this.httpRequest.request({method:"PUT",url:"/activity/{activityId}/state",path:{activityId:e},body:t,mediaType:"application/json",errors:{404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getActivityUsage(e){return this.httpRequest.request({method:"GET",url:"/activity/{activityId}/usage",path:{activityId:e},errors:{404:"(404) The specified resource was not found.",500:"(500) Server error."}})}};var Zt={};Object.defineProperty(Zt,"__esModule",{value:!0}),Zt.RequestorControlService=void 0;Zt.RequestorControlService=class{constructor(e){this.httpRequest=e}createActivity(e,t=5){return this.httpRequest.request({method:"POST",url:"/activity",query:{timeout:t},body:e,mediaType:"application/json",errors:{400:"(400) Bad request",403:"(403) Forbidden.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}exec(e,t){return this.httpRequest.request({method:"POST",url:"/activity/{activityId}/exec",path:{activityId:e},body:t,mediaType:"application/json",errors:{400:"(400) Bad request",403:"(403) Forbidden.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}callEncrypted(e,t){return this.httpRequest.request({method:"POST",url:"/activity/{activityId}/encrypted",path:{activityId:e},body:t,mediaType:"application/octet-stream",errors:{404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getExecBatchResults(e,t,r,i=5){return this.httpRequest.request({method:"GET",url:"/activity/{activityId}/exec/{batchId}",path:{activityId:e,batchId:t},query:{commandIndex:r,timeout:i},errors:{400:"(400) Bad request",403:"(403) Forbidden.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}destroyActivity(e,t=5){return this.httpRequest.request({method:"DELETE",url:"/activity/{activityId}",path:{activityId:e},query:{timeout:t},errors:{403:"(403) Forbidden.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}};var er={};Object.defineProperty(er,"__esModule",{value:!0}),er.RequestorStateService=void 0;er.RequestorStateService=class{constructor(e){this.httpRequest=e}getActivityAgreement(e){return this.httpRequest.request({method:"GET",url:"/activity/{activityId}/agreement",path:{activityId:e},errors:{400:"(400) Bad request",403:"(403) Forbidden.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getActivityState(e){return this.httpRequest.request({method:"GET",url:"/activity/{activityId}/state",path:{activityId:e},errors:{404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getActivityUsage(e){return this.httpRequest.request({method:"GET",url:"/activity/{activityId}/usage",path:{activityId:e},errors:{404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getRunningCommand(e){return this.httpRequest.request({method:"GET",url:"/activity/{activityId}/command",path:{activityId:e},errors:{404:"(404) The specified resource was not found.",500:"(500) Server error."}})}},Object.defineProperty(kt,"__esModule",{value:!0}),kt.Client=void 0;const tr=_t,rr=Qt,ir=Zt,nr=er;kt.Client=class{constructor(e,t=tr.FetchHttpRequest){this.request=new t({BASE:e?.BASE??"/activity-api/v1",VERSION:e?.VERSION??"1.7.0",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.provider=new rr.ProviderService(this.request),this.requestorControl=new ir.RequestorControlService(this.request),this.requestorState=new nr.RequestorStateService(this.request)}};var or={};Object.defineProperty(or,"__esModule",{value:!0}),or.OpenAPI=void 0,or.OpenAPI={BASE:"/activity-api/v1",VERSION:"1.7.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.FetchHttpRequest=e.RequestorStateService=e.RequestorControlService=e.ProviderService=e.OpenAPI=e.CancelError=e.CancelablePromise=e.BaseHttpRequest=e.ApiError=e.Client=void 0;var t=kt;Object.defineProperty(e,"Client",{enumerable:!0,get:function(){return t.Client}});var r=qt;Object.defineProperty(e,"ApiError",{enumerable:!0,get:function(){return r.ApiError}});var i=xt;Object.defineProperty(e,"BaseHttpRequest",{enumerable:!0,get:function(){return i.BaseHttpRequest}});var n=Ht;Object.defineProperty(e,"CancelablePromise",{enumerable:!0,get:function(){return n.CancelablePromise}}),Object.defineProperty(e,"CancelError",{enumerable:!0,get:function(){return n.CancelError}});var o=or;Object.defineProperty(e,"OpenAPI",{enumerable:!0,get:function(){return o.OpenAPI}});var s=Qt;Object.defineProperty(e,"ProviderService",{enumerable:!0,get:function(){return s.ProviderService}});var a=Zt;Object.defineProperty(e,"RequestorControlService",{enumerable:!0,get:function(){return a.RequestorControlService}});var c=er;Object.defineProperty(e,"RequestorStateService",{enumerable:!0,get:function(){return c.RequestorStateService}});var u=_t;Object.defineProperty(e,"FetchHttpRequest",{enumerable:!0,get:function(){return u.FetchHttpRequest}})}(Nt);var sr={},ar={},cr={},ur={};Object.defineProperty(ur,"__esModule",{value:!0}),ur.BaseHttpRequest=void 0;ur.BaseHttpRequest=class{constructor(e){this.config=e}};var lr={},hr={};Object.defineProperty(hr,"__esModule",{value:!0}),hr.ApiError=void 0;let dr=class extends Error{constructor(e,t,r){super(r),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}};hr.ApiError=dr;var pr,fr,gr,vr,mr,yr,wr,br={},Er=M&&M.__classPrivateFieldSet||function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,r):n?n.value=r:t.set(e,r),r},Sr=M&&M.__classPrivateFieldGet||function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};Object.defineProperty(br,"__esModule",{value:!0}),br.CancelablePromise=br.CancelError=void 0;let Ir=class extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}};br.CancelError=Ir;let Ar=class{constructor(e){pr.set(this,void 0),fr.set(this,void 0),gr.set(this,void 0),vr.set(this,void 0),mr.set(this,void 0),yr.set(this,void 0),wr.set(this,void 0),Er(this,pr,!1,"f"),Er(this,fr,!1,"f"),Er(this,gr,!1,"f"),Er(this,vr,[],"f"),Er(this,mr,new Promise(((t,r)=>{Er(this,yr,t,"f"),Er(this,wr,r,"f");const i=e=>{Sr(this,pr,"f")||Sr(this,fr,"f")||Sr(this,gr,"f")||Sr(this,vr,"f").push(e)};return Object.defineProperty(i,"isResolved",{get:()=>Sr(this,pr,"f")}),Object.defineProperty(i,"isRejected",{get:()=>Sr(this,fr,"f")}),Object.defineProperty(i,"isCancelled",{get:()=>Sr(this,gr,"f")}),e((e=>{Sr(this,pr,"f")||Sr(this,fr,"f")||Sr(this,gr,"f")||(Er(this,pr,!0,"f"),Sr(this,yr,"f")&&Sr(this,yr,"f").call(this,e))}),(e=>{Sr(this,pr,"f")||Sr(this,fr,"f")||Sr(this,gr,"f")||(Er(this,fr,!0,"f"),Sr(this,wr,"f")&&Sr(this,wr,"f").call(this,e))}),i)})),"f")}get[(pr=new WeakMap,fr=new WeakMap,gr=new WeakMap,vr=new WeakMap,mr=new WeakMap,yr=new WeakMap,wr=new WeakMap,Symbol.toStringTag)](){return"Cancellable Promise"}then(e,t){return Sr(this,mr,"f").then(e,t)}catch(e){return Sr(this,mr,"f").catch(e)}finally(e){return Sr(this,mr,"f").finally(e)}cancel(){if(!(Sr(this,pr,"f")||Sr(this,fr,"f")||Sr(this,gr,"f"))){if(Er(this,gr,!0,"f"),Sr(this,vr,"f").length)try{for(const e of Sr(this,vr,"f"))e()}catch(e){return void console.warn("Cancellation threw an error",e)}Sr(this,vr,"f").length=0,Sr(this,wr,"f")&&Sr(this,wr,"f").call(this,new Ir("Request aborted"))}}get isCancelled(){return Sr(this,gr,"f")}};br.CancelablePromise=Ar,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.request=e.catchErrorCodes=e.getResponseBody=e.getResponseHeader=e.sendRequest=e.getRequestBody=e.getHeaders=e.resolve=e.getFormData=e.getQueryString=e.base64=e.isFormData=e.isBlob=e.isStringWithValue=e.isString=e.isDefined=void 0;const t=hr,r=br;e.isDefined=e=>null!=e;e.isString=e=>"string"==typeof e;e.isStringWithValue=t=>(0,e.isString)(t)&&""!==t;e.isBlob=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]);e.isFormData=e=>e instanceof FormData;e.base64=e=>{try{return btoa(e)}catch(t){return Ee.from(e).toString("base64")}};e.getQueryString=t=>{const r=[],i=(t,n)=>{(0,e.isDefined)(n)&&(Array.isArray(n)?n.forEach((e=>{i(t,e)})):"object"==typeof n?Object.entries(n).forEach((([e,r])=>{i(`${t}[${e}]`,r)})):((e,t)=>{r.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`)})(t,n))};return Object.entries(t).forEach((([e,t])=>{i(e,t)})),r.length>0?`?${r.join("&")}`:""};e.getFormData=t=>{if(t.formData){const r=new FormData,i=(t,i)=>{(0,e.isString)(i)||(0,e.isBlob)(i)?r.append(t,i):r.append(t,JSON.stringify(i))};return Object.entries(t.formData).filter((([t,r])=>(0,e.isDefined)(r))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>i(e,t))):i(e,t)})),r}};e.resolve=async(e,t)=>"function"==typeof t?t(e):t;e.getHeaders=async(t,r)=>{const[i,n,o,s]=await Promise.all([(0,e.resolve)(r,t.TOKEN),(0,e.resolve)(r,t.USERNAME),(0,e.resolve)(r,t.PASSWORD),(0,e.resolve)(r,t.HEADERS)]),a=Object.entries({Accept:"application/json",...s,...r.headers}).filter((([t,r])=>(0,e.isDefined)(r))).reduce(((e,[t,r])=>({...e,[t]:String(r)})),{});if((0,e.isStringWithValue)(i)&&(a.Authorization=`Bearer ${i}`),(0,e.isStringWithValue)(n)&&(0,e.isStringWithValue)(o)){const t=(0,e.base64)(`${n}:${o}`);a.Authorization=`Basic ${t}`}return void 0!==r.body&&(r.mediaType?a["Content-Type"]=r.mediaType:(0,e.isBlob)(r.body)?a["Content-Type"]=r.body.type||"application/octet-stream":(0,e.isString)(r.body)?a["Content-Type"]="text/plain":(0,e.isFormData)(r.body)||(a["Content-Type"]="application/json")),new Headers(a)};e.getRequestBody=t=>{if(void 0!==t.body)return t.mediaType?.includes("/json")?JSON.stringify(t.body):(0,e.isString)(t.body)||(0,e.isBlob)(t.body)||(0,e.isFormData)(t.body)?t.body:JSON.stringify(t.body)};e.sendRequest=async(e,t,r,i,n,o,s)=>{const a=new AbortController,c={headers:o,body:i??n,method:t.method,signal:a.signal};return e.WITH_CREDENTIALS&&(c.credentials=e.CREDENTIALS),s((()=>a.abort())),await fetch(r,c)};e.getResponseHeader=(t,r)=>{if(r){const i=t.headers.get(r);if((0,e.isString)(i))return i}};e.getResponseBody=async e=>{if(204!==e.status)try{const t=e.headers.get("Content-Type");if(t){return["application/json","application/problem+json"].some((e=>t.toLowerCase().startsWith(e)))?await e.json():await e.text()}}catch(e){console.error(e)}};e.catchErrorCodes=(e,r)=>{const i={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[r.status];if(i)throw new t.ApiError(e,r,i);if(!r.ok){const i=r.status??"unknown",n=r.statusText??"unknown",o=(()=>{try{return JSON.stringify(r.body,null,2)}catch(e){return}})();throw new t.ApiError(e,r,`Generic Error: status: ${i}; status text: ${n}; body: ${o}`)}};e.request=(t,i)=>new r.CancelablePromise((async(r,n,o)=>{try{const n=((t,r)=>{const i=t.ENCODE_PATH||encodeURI,n=r.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,((e,t)=>r.path?.hasOwnProperty(t)?i(String(r.path[t])):e)),o=`${t.BASE}${n}`;return r.query?`${o}${(0,e.getQueryString)(r.query)}`:o})(t,i),s=(0,e.getFormData)(i),a=(0,e.getRequestBody)(i),c=await(0,e.getHeaders)(t,i);if(!o.isCancelled){const u=await(0,e.sendRequest)(t,i,n,a,s,c,o),l=await(0,e.getResponseBody)(u),h=(0,e.getResponseHeader)(u,i.responseHeader),d={url:n,ok:u.ok,status:u.status,statusText:u.statusText,body:h??l};(0,e.catchErrorCodes)(i,d),r(d.body)}}catch(e){n(e)}}))}(lr),Object.defineProperty(cr,"__esModule",{value:!0}),cr.FetchHttpRequest=void 0;const Pr=ur,Tr=lr;let Rr=class extends Pr.BaseHttpRequest{constructor(e){super(e)}request(e){return(0,Tr.request)(this.config,e)}};cr.FetchHttpRequest=Rr;var Or={};Object.defineProperty(Or,"__esModule",{value:!0}),Or.ProviderService=void 0;Or.ProviderService=class{constructor(e){this.httpRequest=e}issueDebitNote(e){return this.httpRequest.request({method:"POST",url:"/debitNotes",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getDebitNotes(e,t=10){return this.httpRequest.request({method:"GET",url:"/debitNotes",query:{afterTimestamp:e,maxItems:t},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getDebitNote(e){return this.httpRequest.request({method:"GET",url:"/debitNotes/{debitNoteId}",path:{debitNoteId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getPaymentsForDebitNote(e,t,r=10){return this.httpRequest.request({method:"GET",url:"/debitNotes/{debitNoteId}/payments",path:{debitNoteId:e},query:{afterTimestamp:t,maxItems:r},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}sendDebitNote(e,t=5){return this.httpRequest.request({method:"POST",url:"/debitNotes/{debitNoteId}/send",path:{debitNoteId:e},query:{timeout:t},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error.",504:"(504) Ack timeout."}})}cancelDebitNote(e,t=5){return this.httpRequest.request({method:"POST",url:"/debitNotes/{debitNoteId}/cancel",path:{debitNoteId:e},query:{timeout:t},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",409:"The Requestor has refused to cancel the Debit Note.",500:"(500) Server error.",504:"(504) Ack timeout."}})}getDebitNoteEvents(e=5,t,r=10,i){return this.httpRequest.request({method:"GET",url:"/debitNoteEvents",query:{timeout:e,afterTimestamp:t,maxEvents:r,appSessionId:i},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}issueInvoice(e){return this.httpRequest.request({method:"POST",url:"/invoices",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getInvoices(e,t=10){return this.httpRequest.request({method:"GET",url:"/invoices",query:{afterTimestamp:e,maxItems:t},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getInvoice(e){return this.httpRequest.request({method:"GET",url:"/invoices/{invoiceId}",path:{invoiceId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getPaymentsForInvoice(e,t,r=10){return this.httpRequest.request({method:"GET",url:"/invoices/{invoiceId}/payments",path:{invoiceId:e},query:{afterTimestamp:t,maxItems:r},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}sendInvoice(e,t=5){return this.httpRequest.request({method:"POST",url:"/invoices/{invoiceId}/send",path:{invoiceId:e},query:{timeout:t},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error.",504:"(504) Ack timeout."}})}cancelInvoice(e,t=5){return this.httpRequest.request({method:"POST",url:"/invoices/{invoiceId}/cancel",path:{invoiceId:e},query:{timeout:t},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",409:"The Requestor has refused to cancel the Invoice.",500:"(500) Server error.",504:"(504) Ack timeout."}})}getInvoiceEvents(e=5,t,r=10,i){return this.httpRequest.request({method:"GET",url:"/invoiceEvents",query:{timeout:e,afterTimestamp:t,maxEvents:r,appSessionId:i},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getProviderAccounts(){return this.httpRequest.request({method:"GET",url:"/providerAccounts",errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getPayments(e=5,t,r=10,i,n,o){return this.httpRequest.request({method:"GET",url:"/payments",query:{timeout:e,afterTimestamp:t,maxEvents:r,appSessionId:i,network:n,driver:o},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getPayment(e){return this.httpRequest.request({method:"GET",url:"/payments/{paymentId}",path:{paymentId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}paymentsStatus(e,t){return this.httpRequest.request({method:"GET",url:"/payments/status",query:{network:e,driver:t},errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}};var Cr={};Object.defineProperty(Cr,"__esModule",{value:!0}),Cr.RequestorService=void 0;Cr.RequestorService=class{constructor(e){this.httpRequest=e}getDebitNotes(e,t=10){return this.httpRequest.request({method:"GET",url:"/debitNotes",query:{afterTimestamp:e,maxItems:t},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getDebitNote(e){return this.httpRequest.request({method:"GET",url:"/debitNotes/{debitNoteId}",path:{debitNoteId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getPaymentsForDebitNote(e,t,r=10){return this.httpRequest.request({method:"GET",url:"/debitNotes/{debitNoteId}/payments",path:{debitNoteId:e},query:{afterTimestamp:t,maxItems:r},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getDebitNoteEvents(e=5,t,r=10,i){return this.httpRequest.request({method:"GET",url:"/debitNoteEvents",query:{timeout:e,afterTimestamp:t,maxEvents:r,appSessionId:i},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}issueInvoice(e){return this.httpRequest.request({method:"POST",url:"/invoices",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getInvoices(e,t=10){return this.httpRequest.request({method:"GET",url:"/invoices",query:{afterTimestamp:e,maxItems:t},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getInvoice(e){return this.httpRequest.request({method:"GET",url:"/invoices/{invoiceId}",path:{invoiceId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getPaymentsForInvoice(e,t,r=10){return this.httpRequest.request({method:"GET",url:"/invoices/{invoiceId}/payments",path:{invoiceId:e},query:{afterTimestamp:t,maxItems:r},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getInvoiceEvents(e=5,t,r=10,i){return this.httpRequest.request({method:"GET",url:"/invoiceEvents",query:{timeout:e,afterTimestamp:t,maxEvents:r,appSessionId:i},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}acceptDebitNote(e,t,r=5){return this.httpRequest.request({method:"POST",url:"/debitNotes/{debitNoteId}/accept",path:{debitNoteId:e},query:{timeout:r},body:t,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error.",504:"(504) Ack timeout."}})}rejectDebitNote(e,t,r=5){return this.httpRequest.request({method:"POST",url:"/debitNotes/{debitNoteId}/reject",path:{debitNoteId:e},query:{timeout:r},body:t,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error.",504:"(504) Ack timeout."}})}acceptInvoice(e,t,r=5){return this.httpRequest.request({method:"POST",url:"/invoices/{invoiceId}/accept",path:{invoiceId:e},query:{timeout:r},body:t,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error.",504:"(504) Ack timeout."}})}rejectInvoice(e,t,r=5){return this.httpRequest.request({method:"POST",url:"/invoices/{invoiceId}/reject",path:{invoiceId:e},query:{timeout:r},body:t,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error.",504:"(504) Ack timeout."}})}createAllocation(e,t,r=10){return this.httpRequest.request({method:"POST",url:"/allocations",query:{afterTimestamp:t,maxItems:r},body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getAllocations(){return this.httpRequest.request({method:"GET",url:"/allocations",errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getAllocation(e){return this.httpRequest.request({method:"GET",url:"/allocations/{allocationId}",path:{allocationId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}amendAllocation(e,t){return this.httpRequest.request({method:"PUT",url:"/allocations/{allocationId}",path:{allocationId:e},body:t,mediaType:"application/json",errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}releaseAllocation(e){return this.httpRequest.request({method:"DELETE",url:"/allocations/{allocationId}",path:{allocationId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",410:"(410) Gone.",500:"(500) Server error."}})}getPayments(e=5,t,r=10,i,n,o){return this.httpRequest.request({method:"GET",url:"/payments",query:{timeout:e,afterTimestamp:t,maxEvents:r,appSessionId:i,network:n,driver:o},errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getPayment(e){return this.httpRequest.request({method:"GET",url:"/payments/{paymentId}",path:{paymentId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}paymentsStatus(e,t){return this.httpRequest.request({method:"GET",url:"/payments/status",query:{network:e,driver:t},errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found.",500:"(500) Server error."}})}getRequestorAccounts(){return this.httpRequest.request({method:"GET",url:"/requestorAccounts",errors:{401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}getDemandDecorations(e){return this.httpRequest.request({method:"GET",url:"/demandDecorations",query:{allocationIds:e},errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",500:"(500) Server error."}})}},Object.defineProperty(ar,"__esModule",{value:!0}),ar.Client=void 0;const Nr=cr,kr=Or,_r=Cr;ar.Client=class{constructor(e,t=Nr.FetchHttpRequest){this.request=new t({BASE:e?.BASE??"/payment-api/v1",VERSION:e?.VERSION??"1.6.3",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.provider=new kr.ProviderService(this.request),this.requestor=new _r.RequestorService(this.request)}};var xr={};Object.defineProperty(xr,"__esModule",{value:!0}),xr.OpenAPI=void 0,xr.OpenAPI={BASE:"/payment-api/v1",VERSION:"1.6.3",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.FetchHttpRequest=e.RequestorService=e.ProviderService=e.OpenAPI=e.CancelError=e.CancelablePromise=e.BaseHttpRequest=e.ApiError=e.Client=void 0;var t=ar;Object.defineProperty(e,"Client",{enumerable:!0,get:function(){return t.Client}});var r=hr;Object.defineProperty(e,"ApiError",{enumerable:!0,get:function(){return r.ApiError}});var i=ur;Object.defineProperty(e,"BaseHttpRequest",{enumerable:!0,get:function(){return i.BaseHttpRequest}});var n=br;Object.defineProperty(e,"CancelablePromise",{enumerable:!0,get:function(){return n.CancelablePromise}}),Object.defineProperty(e,"CancelError",{enumerable:!0,get:function(){return n.CancelError}});var o=xr;Object.defineProperty(e,"OpenAPI",{enumerable:!0,get:function(){return o.OpenAPI}});var s=Or;Object.defineProperty(e,"ProviderService",{enumerable:!0,get:function(){return s.ProviderService}});var a=Cr;Object.defineProperty(e,"RequestorService",{enumerable:!0,get:function(){return a.RequestorService}});var c=cr;Object.defineProperty(e,"FetchHttpRequest",{enumerable:!0,get:function(){return c.FetchHttpRequest}})}(sr);var Dr={},qr={},Fr={},Br={};Object.defineProperty(Br,"__esModule",{value:!0}),Br.BaseHttpRequest=void 0;Br.BaseHttpRequest=class{constructor(e){this.config=e}};var jr={},$r={};Object.defineProperty($r,"__esModule",{value:!0}),$r.ApiError=void 0;let Mr=class extends Error{constructor(e,t,r){super(r),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}};$r.ApiError=Mr;var Lr,Vr,Ur,Hr,zr,Wr,Gr,Yr={},Kr=M&&M.__classPrivateFieldSet||function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,r):n?n.value=r:t.set(e,r),r},Jr=M&&M.__classPrivateFieldGet||function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};Object.defineProperty(Yr,"__esModule",{value:!0}),Yr.CancelablePromise=Yr.CancelError=void 0;let Xr=class extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}};Yr.CancelError=Xr;let Qr=class{constructor(e){Lr.set(this,void 0),Vr.set(this,void 0),Ur.set(this,void 0),Hr.set(this,void 0),zr.set(this,void 0),Wr.set(this,void 0),Gr.set(this,void 0),Kr(this,Lr,!1,"f"),Kr(this,Vr,!1,"f"),Kr(this,Ur,!1,"f"),Kr(this,Hr,[],"f"),Kr(this,zr,new Promise(((t,r)=>{Kr(this,Wr,t,"f"),Kr(this,Gr,r,"f");const i=e=>{Jr(this,Lr,"f")||Jr(this,Vr,"f")||Jr(this,Ur,"f")||Jr(this,Hr,"f").push(e)};return Object.defineProperty(i,"isResolved",{get:()=>Jr(this,Lr,"f")}),Object.defineProperty(i,"isRejected",{get:()=>Jr(this,Vr,"f")}),Object.defineProperty(i,"isCancelled",{get:()=>Jr(this,Ur,"f")}),e((e=>{Jr(this,Lr,"f")||Jr(this,Vr,"f")||Jr(this,Ur,"f")||(Kr(this,Lr,!0,"f"),Jr(this,Wr,"f")&&Jr(this,Wr,"f").call(this,e))}),(e=>{Jr(this,Lr,"f")||Jr(this,Vr,"f")||Jr(this,Ur,"f")||(Kr(this,Vr,!0,"f"),Jr(this,Gr,"f")&&Jr(this,Gr,"f").call(this,e))}),i)})),"f")}get[(Lr=new WeakMap,Vr=new WeakMap,Ur=new WeakMap,Hr=new WeakMap,zr=new WeakMap,Wr=new WeakMap,Gr=new WeakMap,Symbol.toStringTag)](){return"Cancellable Promise"}then(e,t){return Jr(this,zr,"f").then(e,t)}catch(e){return Jr(this,zr,"f").catch(e)}finally(e){return Jr(this,zr,"f").finally(e)}cancel(){if(!(Jr(this,Lr,"f")||Jr(this,Vr,"f")||Jr(this,Ur,"f"))){if(Kr(this,Ur,!0,"f"),Jr(this,Hr,"f").length)try{for(const e of Jr(this,Hr,"f"))e()}catch(e){return void console.warn("Cancellation threw an error",e)}Jr(this,Hr,"f").length=0,Jr(this,Gr,"f")&&Jr(this,Gr,"f").call(this,new Xr("Request aborted"))}}get isCancelled(){return Jr(this,Ur,"f")}};Yr.CancelablePromise=Qr,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.request=e.catchErrorCodes=e.getResponseBody=e.getResponseHeader=e.sendRequest=e.getRequestBody=e.getHeaders=e.resolve=e.getFormData=e.getQueryString=e.base64=e.isFormData=e.isBlob=e.isStringWithValue=e.isString=e.isDefined=void 0;const t=$r,r=Yr;e.isDefined=e=>null!=e;e.isString=e=>"string"==typeof e;e.isStringWithValue=t=>(0,e.isString)(t)&&""!==t;e.isBlob=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]);e.isFormData=e=>e instanceof FormData;e.base64=e=>{try{return btoa(e)}catch(t){return Ee.from(e).toString("base64")}};e.getQueryString=t=>{const r=[],i=(t,n)=>{(0,e.isDefined)(n)&&(Array.isArray(n)?n.forEach((e=>{i(t,e)})):"object"==typeof n?Object.entries(n).forEach((([e,r])=>{i(`${t}[${e}]`,r)})):((e,t)=>{r.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`)})(t,n))};return Object.entries(t).forEach((([e,t])=>{i(e,t)})),r.length>0?`?${r.join("&")}`:""};e.getFormData=t=>{if(t.formData){const r=new FormData,i=(t,i)=>{(0,e.isString)(i)||(0,e.isBlob)(i)?r.append(t,i):r.append(t,JSON.stringify(i))};return Object.entries(t.formData).filter((([t,r])=>(0,e.isDefined)(r))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>i(e,t))):i(e,t)})),r}};e.resolve=async(e,t)=>"function"==typeof t?t(e):t;e.getHeaders=async(t,r)=>{const[i,n,o,s]=await Promise.all([(0,e.resolve)(r,t.TOKEN),(0,e.resolve)(r,t.USERNAME),(0,e.resolve)(r,t.PASSWORD),(0,e.resolve)(r,t.HEADERS)]),a=Object.entries({Accept:"application/json",...s,...r.headers}).filter((([t,r])=>(0,e.isDefined)(r))).reduce(((e,[t,r])=>({...e,[t]:String(r)})),{});if((0,e.isStringWithValue)(i)&&(a.Authorization=`Bearer ${i}`),(0,e.isStringWithValue)(n)&&(0,e.isStringWithValue)(o)){const t=(0,e.base64)(`${n}:${o}`);a.Authorization=`Basic ${t}`}return void 0!==r.body&&(r.mediaType?a["Content-Type"]=r.mediaType:(0,e.isBlob)(r.body)?a["Content-Type"]=r.body.type||"application/octet-stream":(0,e.isString)(r.body)?a["Content-Type"]="text/plain":(0,e.isFormData)(r.body)||(a["Content-Type"]="application/json")),new Headers(a)};e.getRequestBody=t=>{if(void 0!==t.body)return t.mediaType?.includes("/json")?JSON.stringify(t.body):(0,e.isString)(t.body)||(0,e.isBlob)(t.body)||(0,e.isFormData)(t.body)?t.body:JSON.stringify(t.body)};e.sendRequest=async(e,t,r,i,n,o,s)=>{const a=new AbortController,c={headers:o,body:i??n,method:t.method,signal:a.signal};return e.WITH_CREDENTIALS&&(c.credentials=e.CREDENTIALS),s((()=>a.abort())),await fetch(r,c)};e.getResponseHeader=(t,r)=>{if(r){const i=t.headers.get(r);if((0,e.isString)(i))return i}};e.getResponseBody=async e=>{if(204!==e.status)try{const t=e.headers.get("Content-Type");if(t){return["application/json","application/problem+json"].some((e=>t.toLowerCase().startsWith(e)))?await e.json():await e.text()}}catch(e){console.error(e)}};e.catchErrorCodes=(e,r)=>{const i={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[r.status];if(i)throw new t.ApiError(e,r,i);if(!r.ok){const i=r.status??"unknown",n=r.statusText??"unknown",o=(()=>{try{return JSON.stringify(r.body,null,2)}catch(e){return}})();throw new t.ApiError(e,r,`Generic Error: status: ${i}; status text: ${n}; body: ${o}`)}};e.request=(t,i)=>new r.CancelablePromise((async(r,n,o)=>{try{const n=((t,r)=>{const i=t.ENCODE_PATH||encodeURI,n=r.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,((e,t)=>r.path?.hasOwnProperty(t)?i(String(r.path[t])):e)),o=`${t.BASE}${n}`;return r.query?`${o}${(0,e.getQueryString)(r.query)}`:o})(t,i),s=(0,e.getFormData)(i),a=(0,e.getRequestBody)(i),c=await(0,e.getHeaders)(t,i);if(!o.isCancelled){const u=await(0,e.sendRequest)(t,i,n,a,s,c,o),l=await(0,e.getResponseBody)(u),h=(0,e.getResponseHeader)(u,i.responseHeader),d={url:n,ok:u.ok,status:u.status,statusText:u.statusText,body:h??l};(0,e.catchErrorCodes)(i,d),r(d.body)}}catch(e){n(e)}}))}(jr),Object.defineProperty(Fr,"__esModule",{value:!0}),Fr.FetchHttpRequest=void 0;const Zr=Br,ei=jr;let ti=class extends Zr.BaseHttpRequest{constructor(e){super(e)}request(e){return(0,ei.request)(this.config,e)}};Fr.FetchHttpRequest=ti;var ri={};Object.defineProperty(ri,"__esModule",{value:!0}),ri.DefaultService=void 0;ri.DefaultService=class{constructor(e){this.httpRequest=e}connectTcp(e,t,r){return this.httpRequest.request({method:"GET",url:"/net/{networkId}/tcp/{ip}/{port}",path:{networkId:e,ip:t,port:r},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}};var ii={};Object.defineProperty(ii,"__esModule",{value:!0}),ii.RequestorService=void 0;ii.RequestorService=class{constructor(e){this.httpRequest=e}getNetworks(){return this.httpRequest.request({method:"GET",url:"/net",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}createNetwork(e){return this.httpRequest.request({method:"POST",url:"/net",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}getNetwork(e){return this.httpRequest.request({method:"GET",url:"/net/{networkId}",path:{networkId:e},errors:{401:"(401) Authorization information is missing or invalid.",403:"(403) Forbidden.",404:"(404) The specified resource was not found."}})}removeNetwork(e){return this.httpRequest.request({method:"DELETE",url:"/net/{networkId}",path:{networkId:e},errors:{401:"(401) Authorization information is missing or invalid.",403:"(403) Forbidden.",404:"(404) The specified resource was not found."}})}getAddresses(e){return this.httpRequest.request({method:"GET",url:"/net/{networkId}/addresses",path:{networkId:e},errors:{401:"(401) Authorization information is missing or invalid.",403:"(403) Forbidden.",404:"(404) The specified resource was not found."}})}addAddress(e,t){return this.httpRequest.request({method:"POST",url:"/net/{networkId}/addresses",path:{networkId:e},body:t,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",409:"(409) Conflict."}})}getNodes(e){return this.httpRequest.request({method:"GET",url:"/net/{networkId}/nodes",path:{networkId:e},errors:{401:"(401) Authorization information is missing or invalid.",403:"(403) Forbidden.",404:"(404) The specified resource was not found."}})}addNode(e,t){return this.httpRequest.request({method:"POST",url:"/net/{networkId}/nodes",path:{networkId:e},body:t,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid.",409:"(409) Conflict."}})}removeNode(e,t){return this.httpRequest.request({method:"DELETE",url:"/net/{networkId}/nodes/{nodeId}",path:{networkId:e,nodeId:t},errors:{401:"(401) Authorization information is missing or invalid.",403:"(403) Forbidden.",404:"(404) The specified resource was not found."}})}getConnections(e){return this.httpRequest.request({method:"GET",url:"/net/{networkId}/tcp",path:{networkId:e},errors:{401:"(401) Authorization information is missing or invalid.",403:"(403) Forbidden.",404:"(404) The specified resource was not found."}})}},Object.defineProperty(qr,"__esModule",{value:!0}),qr.Client=void 0;const ni=Fr,oi=ri,si=ii;qr.Client=class{constructor(e,t=ni.FetchHttpRequest){this.request=new t({BASE:e?.BASE??"/net-api/v1",VERSION:e?.VERSION??"0.1.0",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.default=new oi.DefaultService(this.request),this.requestor=new si.RequestorService(this.request)}};var ai={};Object.defineProperty(ai,"__esModule",{value:!0}),ai.OpenAPI=void 0,ai.OpenAPI={BASE:"/net-api/v1",VERSION:"0.1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.FetchHttpRequest=e.RequestorService=e.DefaultService=e.OpenAPI=e.CancelError=e.CancelablePromise=e.BaseHttpRequest=e.ApiError=e.Client=void 0;var t=qr;Object.defineProperty(e,"Client",{enumerable:!0,get:function(){return t.Client}});var r=$r;Object.defineProperty(e,"ApiError",{enumerable:!0,get:function(){return r.ApiError}});var i=Br;Object.defineProperty(e,"BaseHttpRequest",{enumerable:!0,get:function(){return i.BaseHttpRequest}});var n=Yr;Object.defineProperty(e,"CancelablePromise",{enumerable:!0,get:function(){return n.CancelablePromise}}),Object.defineProperty(e,"CancelError",{enumerable:!0,get:function(){return n.CancelError}});var o=ai;Object.defineProperty(e,"OpenAPI",{enumerable:!0,get:function(){return o.OpenAPI}});var s=ri;Object.defineProperty(e,"DefaultService",{enumerable:!0,get:function(){return s.DefaultService}});var a=ii;Object.defineProperty(e,"RequestorService",{enumerable:!0,get:function(){return a.RequestorService}});var c=Fr;Object.defineProperty(e,"FetchHttpRequest",{enumerable:!0,get:function(){return c.FetchHttpRequest}})}(Dr);var ci={},ui={},li={},hi={};Object.defineProperty(hi,"__esModule",{value:!0}),hi.BaseHttpRequest=void 0;hi.BaseHttpRequest=class{constructor(e){this.config=e}};var di={},pi={};Object.defineProperty(pi,"__esModule",{value:!0}),pi.ApiError=void 0;let fi=class extends Error{constructor(e,t,r){super(r),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}};pi.ApiError=fi;var gi,vi,mi,yi,wi,bi,Ei,Si={},Ii=M&&M.__classPrivateFieldSet||function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,r):n?n.value=r:t.set(e,r),r},Ai=M&&M.__classPrivateFieldGet||function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};Object.defineProperty(Si,"__esModule",{value:!0}),Si.CancelablePromise=Si.CancelError=void 0;let Pi=class extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}};Si.CancelError=Pi;let Ti=class{constructor(e){gi.set(this,void 0),vi.set(this,void 0),mi.set(this,void 0),yi.set(this,void 0),wi.set(this,void 0),bi.set(this,void 0),Ei.set(this,void 0),Ii(this,gi,!1,"f"),Ii(this,vi,!1,"f"),Ii(this,mi,!1,"f"),Ii(this,yi,[],"f"),Ii(this,wi,new Promise(((t,r)=>{Ii(this,bi,t,"f"),Ii(this,Ei,r,"f");const i=e=>{Ai(this,gi,"f")||Ai(this,vi,"f")||Ai(this,mi,"f")||Ai(this,yi,"f").push(e)};return Object.defineProperty(i,"isResolved",{get:()=>Ai(this,gi,"f")}),Object.defineProperty(i,"isRejected",{get:()=>Ai(this,vi,"f")}),Object.defineProperty(i,"isCancelled",{get:()=>Ai(this,mi,"f")}),e((e=>{Ai(this,gi,"f")||Ai(this,vi,"f")||Ai(this,mi,"f")||(Ii(this,gi,!0,"f"),Ai(this,bi,"f")&&Ai(this,bi,"f").call(this,e))}),(e=>{Ai(this,gi,"f")||Ai(this,vi,"f")||Ai(this,mi,"f")||(Ii(this,vi,!0,"f"),Ai(this,Ei,"f")&&Ai(this,Ei,"f").call(this,e))}),i)})),"f")}get[(gi=new WeakMap,vi=new WeakMap,mi=new WeakMap,yi=new WeakMap,wi=new WeakMap,bi=new WeakMap,Ei=new WeakMap,Symbol.toStringTag)](){return"Cancellable Promise"}then(e,t){return Ai(this,wi,"f").then(e,t)}catch(e){return Ai(this,wi,"f").catch(e)}finally(e){return Ai(this,wi,"f").finally(e)}cancel(){if(!(Ai(this,gi,"f")||Ai(this,vi,"f")||Ai(this,mi,"f"))){if(Ii(this,mi,!0,"f"),Ai(this,yi,"f").length)try{for(const e of Ai(this,yi,"f"))e()}catch(e){return void console.warn("Cancellation threw an error",e)}Ai(this,yi,"f").length=0,Ai(this,Ei,"f")&&Ai(this,Ei,"f").call(this,new Pi("Request aborted"))}}get isCancelled(){return Ai(this,mi,"f")}};Si.CancelablePromise=Ti,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.request=e.catchErrorCodes=e.getResponseBody=e.getResponseHeader=e.sendRequest=e.getRequestBody=e.getHeaders=e.resolve=e.getFormData=e.getQueryString=e.base64=e.isFormData=e.isBlob=e.isStringWithValue=e.isString=e.isDefined=void 0;const t=pi,r=Si;e.isDefined=e=>null!=e;e.isString=e=>"string"==typeof e;e.isStringWithValue=t=>(0,e.isString)(t)&&""!==t;e.isBlob=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]);e.isFormData=e=>e instanceof FormData;e.base64=e=>{try{return btoa(e)}catch(t){return Ee.from(e).toString("base64")}};e.getQueryString=t=>{const r=[],i=(t,n)=>{(0,e.isDefined)(n)&&(Array.isArray(n)?n.forEach((e=>{i(t,e)})):"object"==typeof n?Object.entries(n).forEach((([e,r])=>{i(`${t}[${e}]`,r)})):((e,t)=>{r.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`)})(t,n))};return Object.entries(t).forEach((([e,t])=>{i(e,t)})),r.length>0?`?${r.join("&")}`:""};e.getFormData=t=>{if(t.formData){const r=new FormData,i=(t,i)=>{(0,e.isString)(i)||(0,e.isBlob)(i)?r.append(t,i):r.append(t,JSON.stringify(i))};return Object.entries(t.formData).filter((([t,r])=>(0,e.isDefined)(r))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>i(e,t))):i(e,t)})),r}};e.resolve=async(e,t)=>"function"==typeof t?t(e):t;e.getHeaders=async(t,r)=>{const[i,n,o,s]=await Promise.all([(0,e.resolve)(r,t.TOKEN),(0,e.resolve)(r,t.USERNAME),(0,e.resolve)(r,t.PASSWORD),(0,e.resolve)(r,t.HEADERS)]),a=Object.entries({Accept:"application/json",...s,...r.headers}).filter((([t,r])=>(0,e.isDefined)(r))).reduce(((e,[t,r])=>({...e,[t]:String(r)})),{});if((0,e.isStringWithValue)(i)&&(a.Authorization=`Bearer ${i}`),(0,e.isStringWithValue)(n)&&(0,e.isStringWithValue)(o)){const t=(0,e.base64)(`${n}:${o}`);a.Authorization=`Basic ${t}`}return void 0!==r.body&&(r.mediaType?a["Content-Type"]=r.mediaType:(0,e.isBlob)(r.body)?a["Content-Type"]=r.body.type||"application/octet-stream":(0,e.isString)(r.body)?a["Content-Type"]="text/plain":(0,e.isFormData)(r.body)||(a["Content-Type"]="application/json")),new Headers(a)};e.getRequestBody=t=>{if(void 0!==t.body)return t.mediaType?.includes("/json")?JSON.stringify(t.body):(0,e.isString)(t.body)||(0,e.isBlob)(t.body)||(0,e.isFormData)(t.body)?t.body:JSON.stringify(t.body)};e.sendRequest=async(e,t,r,i,n,o,s)=>{const a=new AbortController,c={headers:o,body:i??n,method:t.method,signal:a.signal};return e.WITH_CREDENTIALS&&(c.credentials=e.CREDENTIALS),s((()=>a.abort())),await fetch(r,c)};e.getResponseHeader=(t,r)=>{if(r){const i=t.headers.get(r);if((0,e.isString)(i))return i}};e.getResponseBody=async e=>{if(204!==e.status)try{const t=e.headers.get("Content-Type");if(t){return["application/json","application/problem+json"].some((e=>t.toLowerCase().startsWith(e)))?await e.json():await e.text()}}catch(e){console.error(e)}};e.catchErrorCodes=(e,r)=>{const i={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[r.status];if(i)throw new t.ApiError(e,r,i);if(!r.ok){const i=r.status??"unknown",n=r.statusText??"unknown",o=(()=>{try{return JSON.stringify(r.body,null,2)}catch(e){return}})();throw new t.ApiError(e,r,`Generic Error: status: ${i}; status text: ${n}; body: ${o}`)}};e.request=(t,i)=>new r.CancelablePromise((async(r,n,o)=>{try{const n=((t,r)=>{const i=t.ENCODE_PATH||encodeURI,n=r.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,((e,t)=>r.path?.hasOwnProperty(t)?i(String(r.path[t])):e)),o=`${t.BASE}${n}`;return r.query?`${o}${(0,e.getQueryString)(r.query)}`:o})(t,i),s=(0,e.getFormData)(i),a=(0,e.getRequestBody)(i),c=await(0,e.getHeaders)(t,i);if(!o.isCancelled){const u=await(0,e.sendRequest)(t,i,n,a,s,c,o),l=await(0,e.getResponseBody)(u),h=(0,e.getResponseHeader)(u,i.responseHeader),d={url:n,ok:u.ok,status:u.status,statusText:u.statusText,body:h??l};(0,e.catchErrorCodes)(i,d),r(d.body)}}catch(e){n(e)}}))}(di),Object.defineProperty(li,"__esModule",{value:!0}),li.FetchHttpRequest=void 0;const Ri=hi,Oi=di;let Ci=class extends Ri.BaseHttpRequest{constructor(e){super(e)}request(e){return(0,Oi.request)(this.config,e)}};li.FetchHttpRequest=Ci;var Ni={};Object.defineProperty(Ni,"__esModule",{value:!0}),Ni.DefaultService=void 0;Ni.DefaultService=class{constructor(e){this.httpRequest=e}getServiceMessages(e){return this.httpRequest.request({method:"GET",url:"/services/{servicesId}",path:{servicesId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}};var ki={};Object.defineProperty(ki,"__esModule",{value:!0}),ki.RequestorService=void 0;ki.RequestorService=class{constructor(e){this.httpRequest=e}bindServices(e){return this.httpRequest.request({method:"POST",url:"/services",body:e,mediaType:"application/json",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}unbindServices(e){return this.httpRequest.request({method:"DELETE",url:"/services/{servicesId}",path:{servicesId:e},errors:{401:"(401) Authorization information is missing or invalid.",404:"(404) The specified resource was not found."}})}},Object.defineProperty(ui,"__esModule",{value:!0}),ui.Client=void 0;const _i=li,xi=Ni,Di=ki;ui.Client=class{constructor(e,t=_i.FetchHttpRequest){this.request=new t({BASE:e?.BASE??"/gsb-api/v1",VERSION:e?.VERSION??"0.1.0",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.default=new xi.DefaultService(this.request),this.requestor=new Di.RequestorService(this.request)}};var qi={};Object.defineProperty(qi,"__esModule",{value:!0}),qi.OpenAPI=void 0,qi.OpenAPI={BASE:"/gsb-api/v1",VERSION:"0.1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.FetchHttpRequest=e.RequestorService=e.DefaultService=e.OpenAPI=e.CancelError=e.CancelablePromise=e.BaseHttpRequest=e.ApiError=e.Client=void 0;var t=ui;Object.defineProperty(e,"Client",{enumerable:!0,get:function(){return t.Client}});var r=pi;Object.defineProperty(e,"ApiError",{enumerable:!0,get:function(){return r.ApiError}});var i=hi;Object.defineProperty(e,"BaseHttpRequest",{enumerable:!0,get:function(){return i.BaseHttpRequest}});var n=Si;Object.defineProperty(e,"CancelablePromise",{enumerable:!0,get:function(){return n.CancelablePromise}}),Object.defineProperty(e,"CancelError",{enumerable:!0,get:function(){return n.CancelError}});var o=qi;Object.defineProperty(e,"OpenAPI",{enumerable:!0,get:function(){return o.OpenAPI}});var s=Ni;Object.defineProperty(e,"DefaultService",{enumerable:!0,get:function(){return s.DefaultService}});var a=ki;Object.defineProperty(e,"RequestorService",{enumerable:!0,get:function(){return a.RequestorService}});var c=li;Object.defineProperty(e,"FetchHttpRequest",{enumerable:!0,get:function(){return c.FetchHttpRequest}})}(ci);var Fi={},Bi={},ji={},$i={};Object.defineProperty($i,"__esModule",{value:!0}),$i.BaseHttpRequest=void 0;$i.BaseHttpRequest=class{constructor(e){this.config=e}};var Mi={},Li={};Object.defineProperty(Li,"__esModule",{value:!0}),Li.ApiError=void 0;let Vi=class extends Error{constructor(e,t,r){super(r),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}};Li.ApiError=Vi;var Ui,Hi,zi,Wi,Gi,Yi,Ki,Ji={},Xi=M&&M.__classPrivateFieldSet||function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,r):n?n.value=r:t.set(e,r),r},Qi=M&&M.__classPrivateFieldGet||function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};Object.defineProperty(Ji,"__esModule",{value:!0}),Ji.CancelablePromise=Ji.CancelError=void 0;let Zi=class extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}};Ji.CancelError=Zi;let en=class{constructor(e){Ui.set(this,void 0),Hi.set(this,void 0),zi.set(this,void 0),Wi.set(this,void 0),Gi.set(this,void 0),Yi.set(this,void 0),Ki.set(this,void 0),Xi(this,Ui,!1,"f"),Xi(this,Hi,!1,"f"),Xi(this,zi,!1,"f"),Xi(this,Wi,[],"f"),Xi(this,Gi,new Promise(((t,r)=>{Xi(this,Yi,t,"f"),Xi(this,Ki,r,"f");const i=e=>{Qi(this,Ui,"f")||Qi(this,Hi,"f")||Qi(this,zi,"f")||Qi(this,Wi,"f").push(e)};return Object.defineProperty(i,"isResolved",{get:()=>Qi(this,Ui,"f")}),Object.defineProperty(i,"isRejected",{get:()=>Qi(this,Hi,"f")}),Object.defineProperty(i,"isCancelled",{get:()=>Qi(this,zi,"f")}),e((e=>{Qi(this,Ui,"f")||Qi(this,Hi,"f")||Qi(this,zi,"f")||(Xi(this,Ui,!0,"f"),Qi(this,Yi,"f")&&Qi(this,Yi,"f").call(this,e))}),(e=>{Qi(this,Ui,"f")||Qi(this,Hi,"f")||Qi(this,zi,"f")||(Xi(this,Hi,!0,"f"),Qi(this,Ki,"f")&&Qi(this,Ki,"f").call(this,e))}),i)})),"f")}get[(Ui=new WeakMap,Hi=new WeakMap,zi=new WeakMap,Wi=new WeakMap,Gi=new WeakMap,Yi=new WeakMap,Ki=new WeakMap,Symbol.toStringTag)](){return"Cancellable Promise"}then(e,t){return Qi(this,Gi,"f").then(e,t)}catch(e){return Qi(this,Gi,"f").catch(e)}finally(e){return Qi(this,Gi,"f").finally(e)}cancel(){if(!(Qi(this,Ui,"f")||Qi(this,Hi,"f")||Qi(this,zi,"f"))){if(Xi(this,zi,!0,"f"),Qi(this,Wi,"f").length)try{for(const e of Qi(this,Wi,"f"))e()}catch(e){return void console.warn("Cancellation threw an error",e)}Qi(this,Wi,"f").length=0,Qi(this,Ki,"f")&&Qi(this,Ki,"f").call(this,new Zi("Request aborted"))}}get isCancelled(){return Qi(this,zi,"f")}};Ji.CancelablePromise=en,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.request=e.catchErrorCodes=e.getResponseBody=e.getResponseHeader=e.sendRequest=e.getRequestBody=e.getHeaders=e.resolve=e.getFormData=e.getQueryString=e.base64=e.isFormData=e.isBlob=e.isStringWithValue=e.isString=e.isDefined=void 0;const t=Li,r=Ji;e.isDefined=e=>null!=e;e.isString=e=>"string"==typeof e;e.isStringWithValue=t=>(0,e.isString)(t)&&""!==t;e.isBlob=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]);e.isFormData=e=>e instanceof FormData;e.base64=e=>{try{return btoa(e)}catch(t){return Ee.from(e).toString("base64")}};e.getQueryString=t=>{const r=[],i=(t,n)=>{(0,e.isDefined)(n)&&(Array.isArray(n)?n.forEach((e=>{i(t,e)})):"object"==typeof n?Object.entries(n).forEach((([e,r])=>{i(`${t}[${e}]`,r)})):((e,t)=>{r.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`)})(t,n))};return Object.entries(t).forEach((([e,t])=>{i(e,t)})),r.length>0?`?${r.join("&")}`:""};e.getFormData=t=>{if(t.formData){const r=new FormData,i=(t,i)=>{(0,e.isString)(i)||(0,e.isBlob)(i)?r.append(t,i):r.append(t,JSON.stringify(i))};return Object.entries(t.formData).filter((([t,r])=>(0,e.isDefined)(r))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>i(e,t))):i(e,t)})),r}};e.resolve=async(e,t)=>"function"==typeof t?t(e):t;e.getHeaders=async(t,r)=>{const[i,n,o,s]=await Promise.all([(0,e.resolve)(r,t.TOKEN),(0,e.resolve)(r,t.USERNAME),(0,e.resolve)(r,t.PASSWORD),(0,e.resolve)(r,t.HEADERS)]),a=Object.entries({Accept:"application/json",...s,...r.headers}).filter((([t,r])=>(0,e.isDefined)(r))).reduce(((e,[t,r])=>({...e,[t]:String(r)})),{});if((0,e.isStringWithValue)(i)&&(a.Authorization=`Bearer ${i}`),(0,e.isStringWithValue)(n)&&(0,e.isStringWithValue)(o)){const t=(0,e.base64)(`${n}:${o}`);a.Authorization=`Basic ${t}`}return void 0!==r.body&&(r.mediaType?a["Content-Type"]=r.mediaType:(0,e.isBlob)(r.body)?a["Content-Type"]=r.body.type||"application/octet-stream":(0,e.isString)(r.body)?a["Content-Type"]="text/plain":(0,e.isFormData)(r.body)||(a["Content-Type"]="application/json")),new Headers(a)};e.getRequestBody=t=>{if(void 0!==t.body)return t.mediaType?.includes("/json")?JSON.stringify(t.body):(0,e.isString)(t.body)||(0,e.isBlob)(t.body)||(0,e.isFormData)(t.body)?t.body:JSON.stringify(t.body)};e.sendRequest=async(e,t,r,i,n,o,s)=>{const a=new AbortController,c={headers:o,body:i??n,method:t.method,signal:a.signal};return e.WITH_CREDENTIALS&&(c.credentials=e.CREDENTIALS),s((()=>a.abort())),await fetch(r,c)};e.getResponseHeader=(t,r)=>{if(r){const i=t.headers.get(r);if((0,e.isString)(i))return i}};e.getResponseBody=async e=>{if(204!==e.status)try{const t=e.headers.get("Content-Type");if(t){return["application/json","application/problem+json"].some((e=>t.toLowerCase().startsWith(e)))?await e.json():await e.text()}}catch(e){console.error(e)}};e.catchErrorCodes=(e,r)=>{const i={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[r.status];if(i)throw new t.ApiError(e,r,i);if(!r.ok){const i=r.status??"unknown",n=r.statusText??"unknown",o=(()=>{try{return JSON.stringify(r.body,null,2)}catch(e){return}})();throw new t.ApiError(e,r,`Generic Error: status: ${i}; status text: ${n}; body: ${o}`)}};e.request=(t,i)=>new r.CancelablePromise((async(r,n,o)=>{try{const n=((t,r)=>{const i=t.ENCODE_PATH||encodeURI,n=r.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,((e,t)=>r.path?.hasOwnProperty(t)?i(String(r.path[t])):e)),o=`${t.BASE}${n}`;return r.query?`${o}${(0,e.getQueryString)(r.query)}`:o})(t,i),s=(0,e.getFormData)(i),a=(0,e.getRequestBody)(i),c=await(0,e.getHeaders)(t,i);if(!o.isCancelled){const u=await(0,e.sendRequest)(t,i,n,a,s,c,o),l=await(0,e.getResponseBody)(u),h=(0,e.getResponseHeader)(u,i.responseHeader),d={url:n,ok:u.ok,status:u.status,statusText:u.statusText,body:h??l};(0,e.catchErrorCodes)(i,d),r(d.body)}}catch(e){n(e)}}))}(Mi),Object.defineProperty(ji,"__esModule",{value:!0}),ji.FetchHttpRequest=void 0;const tn=$i,rn=Mi;let nn=class extends tn.BaseHttpRequest{constructor(e){super(e)}request(e){return(0,rn.request)(this.config,e)}};ji.FetchHttpRequest=nn;var on={};Object.defineProperty(on,"__esModule",{value:!0}),on.DefaultService=void 0;on.DefaultService=class{constructor(e){this.httpRequest=e}getIdentity(){return this.httpRequest.request({method:"GET",url:"/me",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}},Object.defineProperty(Bi,"__esModule",{value:!0}),Bi.Client=void 0;const sn=ji,an=on;Bi.Client=class{constructor(e,t=sn.FetchHttpRequest){this.request=new t({BASE:e?.BASE??"",VERSION:e?.VERSION??"0.1.0",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.default=new an.DefaultService(this.request)}};var cn={};Object.defineProperty(cn,"__esModule",{value:!0}),cn.OpenAPI=void 0,cn.OpenAPI={BASE:"",VERSION:"0.1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.FetchHttpRequest=e.DefaultService=e.OpenAPI=e.CancelError=e.CancelablePromise=e.BaseHttpRequest=e.ApiError=e.Client=void 0;var t=Bi;Object.defineProperty(e,"Client",{enumerable:!0,get:function(){return t.Client}});var r=Li;Object.defineProperty(e,"ApiError",{enumerable:!0,get:function(){return r.ApiError}});var i=$i;Object.defineProperty(e,"BaseHttpRequest",{enumerable:!0,get:function(){return i.BaseHttpRequest}});var n=Ji;Object.defineProperty(e,"CancelablePromise",{enumerable:!0,get:function(){return n.CancelablePromise}}),Object.defineProperty(e,"CancelError",{enumerable:!0,get:function(){return n.CancelError}});var o=cn;Object.defineProperty(e,"OpenAPI",{enumerable:!0,get:function(){return o.OpenAPI}});var s=on;Object.defineProperty(e,"DefaultService",{enumerable:!0,get:function(){return s.DefaultService}});var a=ji;Object.defineProperty(e,"FetchHttpRequest",{enumerable:!0,get:function(){return a.FetchHttpRequest}})}(Fi);var un={},ln={},hn={},dn={};Object.defineProperty(dn,"__esModule",{value:!0}),dn.BaseHttpRequest=void 0;dn.BaseHttpRequest=class{constructor(e){this.config=e}};var pn={},fn={};Object.defineProperty(fn,"__esModule",{value:!0}),fn.ApiError=void 0;class gn extends Error{constructor(e,t,r){super(r),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}}fn.ApiError=gn;var vn,mn,yn,wn,bn,En,Sn,In={},An=M&&M.__classPrivateFieldSet||function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,r):n?n.value=r:t.set(e,r),r},Pn=M&&M.__classPrivateFieldGet||function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};Object.defineProperty(In,"__esModule",{value:!0}),In.CancelablePromise=In.CancelError=void 0;class Tn extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}}In.CancelError=Tn;class Rn{constructor(e){vn.set(this,void 0),mn.set(this,void 0),yn.set(this,void 0),wn.set(this,void 0),bn.set(this,void 0),En.set(this,void 0),Sn.set(this,void 0),An(this,vn,!1,"f"),An(this,mn,!1,"f"),An(this,yn,!1,"f"),An(this,wn,[],"f"),An(this,bn,new Promise(((t,r)=>{An(this,En,t,"f"),An(this,Sn,r,"f");const i=e=>{Pn(this,vn,"f")||Pn(this,mn,"f")||Pn(this,yn,"f")||Pn(this,wn,"f").push(e)};return Object.defineProperty(i,"isResolved",{get:()=>Pn(this,vn,"f")}),Object.defineProperty(i,"isRejected",{get:()=>Pn(this,mn,"f")}),Object.defineProperty(i,"isCancelled",{get:()=>Pn(this,yn,"f")}),e((e=>{Pn(this,vn,"f")||Pn(this,mn,"f")||Pn(this,yn,"f")||(An(this,vn,!0,"f"),Pn(this,En,"f")&&Pn(this,En,"f").call(this,e))}),(e=>{Pn(this,vn,"f")||Pn(this,mn,"f")||Pn(this,yn,"f")||(An(this,mn,!0,"f"),Pn(this,Sn,"f")&&Pn(this,Sn,"f").call(this,e))}),i)})),"f")}get[(vn=new WeakMap,mn=new WeakMap,yn=new WeakMap,wn=new WeakMap,bn=new WeakMap,En=new WeakMap,Sn=new WeakMap,Symbol.toStringTag)](){return"Cancellable Promise"}then(e,t){return Pn(this,bn,"f").then(e,t)}catch(e){return Pn(this,bn,"f").catch(e)}finally(e){return Pn(this,bn,"f").finally(e)}cancel(){if(!(Pn(this,vn,"f")||Pn(this,mn,"f")||Pn(this,yn,"f"))){if(An(this,yn,!0,"f"),Pn(this,wn,"f").length)try{for(const e of Pn(this,wn,"f"))e()}catch(e){return void console.warn("Cancellation threw an error",e)}Pn(this,wn,"f").length=0,Pn(this,Sn,"f")&&Pn(this,Sn,"f").call(this,new Tn("Request aborted"))}}get isCancelled(){return Pn(this,yn,"f")}}In.CancelablePromise=Rn,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.request=e.catchErrorCodes=e.getResponseBody=e.getResponseHeader=e.sendRequest=e.getRequestBody=e.getHeaders=e.resolve=e.getFormData=e.getQueryString=e.base64=e.isFormData=e.isBlob=e.isStringWithValue=e.isString=e.isDefined=void 0;const t=fn,r=In;e.isDefined=e=>null!=e;e.isString=e=>"string"==typeof e;e.isStringWithValue=t=>(0,e.isString)(t)&&""!==t;e.isBlob=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]);e.isFormData=e=>e instanceof FormData;e.base64=e=>{try{return btoa(e)}catch(t){return Ee.from(e).toString("base64")}};e.getQueryString=t=>{const r=[],i=(t,n)=>{(0,e.isDefined)(n)&&(Array.isArray(n)?n.forEach((e=>{i(t,e)})):"object"==typeof n?Object.entries(n).forEach((([e,r])=>{i(`${t}[${e}]`,r)})):((e,t)=>{r.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`)})(t,n))};return Object.entries(t).forEach((([e,t])=>{i(e,t)})),r.length>0?`?${r.join("&")}`:""};e.getFormData=t=>{if(t.formData){const r=new FormData,i=(t,i)=>{(0,e.isString)(i)||(0,e.isBlob)(i)?r.append(t,i):r.append(t,JSON.stringify(i))};return Object.entries(t.formData).filter((([t,r])=>(0,e.isDefined)(r))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>i(e,t))):i(e,t)})),r}};e.resolve=async(e,t)=>"function"==typeof t?t(e):t;e.getHeaders=async(t,r)=>{const[i,n,o,s]=await Promise.all([(0,e.resolve)(r,t.TOKEN),(0,e.resolve)(r,t.USERNAME),(0,e.resolve)(r,t.PASSWORD),(0,e.resolve)(r,t.HEADERS)]),a=Object.entries({Accept:"application/json",...s,...r.headers}).filter((([t,r])=>(0,e.isDefined)(r))).reduce(((e,[t,r])=>({...e,[t]:String(r)})),{});if((0,e.isStringWithValue)(i)&&(a.Authorization=`Bearer ${i}`),(0,e.isStringWithValue)(n)&&(0,e.isStringWithValue)(o)){const t=(0,e.base64)(`${n}:${o}`);a.Authorization=`Basic ${t}`}return void 0!==r.body&&(r.mediaType?a["Content-Type"]=r.mediaType:(0,e.isBlob)(r.body)?a["Content-Type"]=r.body.type||"application/octet-stream":(0,e.isString)(r.body)?a["Content-Type"]="text/plain":(0,e.isFormData)(r.body)||(a["Content-Type"]="application/json")),new Headers(a)};e.getRequestBody=t=>{if(void 0!==t.body)return t.mediaType?.includes("/json")?JSON.stringify(t.body):(0,e.isString)(t.body)||(0,e.isBlob)(t.body)||(0,e.isFormData)(t.body)?t.body:JSON.stringify(t.body)};e.sendRequest=async(e,t,r,i,n,o,s)=>{const a=new AbortController,c={headers:o,body:i??n,method:t.method,signal:a.signal};return e.WITH_CREDENTIALS&&(c.credentials=e.CREDENTIALS),s((()=>a.abort())),await fetch(r,c)};e.getResponseHeader=(t,r)=>{if(r){const i=t.headers.get(r);if((0,e.isString)(i))return i}};e.getResponseBody=async e=>{if(204!==e.status)try{const t=e.headers.get("Content-Type");if(t){return["application/json","application/problem+json"].some((e=>t.toLowerCase().startsWith(e)))?await e.json():await e.text()}}catch(e){console.error(e)}};e.catchErrorCodes=(e,r)=>{const i={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[r.status];if(i)throw new t.ApiError(e,r,i);if(!r.ok){const i=r.status??"unknown",n=r.statusText??"unknown",o=(()=>{try{return JSON.stringify(r.body,null,2)}catch(e){return}})();throw new t.ApiError(e,r,`Generic Error: status: ${i}; status text: ${n}; body: ${o}`)}};e.request=(t,i)=>new r.CancelablePromise((async(r,n,o)=>{try{const n=((t,r)=>{const i=t.ENCODE_PATH||encodeURI,n=r.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,((e,t)=>r.path?.hasOwnProperty(t)?i(String(r.path[t])):e)),o=`${t.BASE}${n}`;return r.query?`${o}${(0,e.getQueryString)(r.query)}`:o})(t,i),s=(0,e.getFormData)(i),a=(0,e.getRequestBody)(i),c=await(0,e.getHeaders)(t,i);if(!o.isCancelled){const u=await(0,e.sendRequest)(t,i,n,a,s,c,o),l=await(0,e.getResponseBody)(u),h=(0,e.getResponseHeader)(u,i.responseHeader),d={url:n,ok:u.ok,status:u.status,statusText:u.statusText,body:h??l};(0,e.catchErrorCodes)(i,d),r(d.body)}}catch(e){n(e)}}))}(pn),Object.defineProperty(hn,"__esModule",{value:!0}),hn.FetchHttpRequest=void 0;const On=dn,Cn=pn;class Nn extends On.BaseHttpRequest{constructor(e){super(e)}request(e){return(0,Cn.request)(this.config,e)}}hn.FetchHttpRequest=Nn;var kn={};Object.defineProperty(kn,"__esModule",{value:!0}),kn.DefaultService=void 0;kn.DefaultService=class{constructor(e){this.httpRequest=e}getVersion(){return this.httpRequest.request({method:"GET",url:"/version/get",errors:{400:"(400) Bad request",401:"(401) Authorization information is missing or invalid."}})}},Object.defineProperty(ln,"__esModule",{value:!0}),ln.Client=void 0;const _n=hn,xn=kn;ln.Client=class{constructor(e,t=_n.FetchHttpRequest){this.request=new t({BASE:e?.BASE??"",VERSION:e?.VERSION??"0.1.0",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.default=new xn.DefaultService(this.request)}};var Dn={};Object.defineProperty(Dn,"__esModule",{value:!0}),Dn.OpenAPI=void 0,Dn.OpenAPI={BASE:"",VERSION:"0.1.0",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.FetchHttpRequest=e.DefaultService=e.OpenAPI=e.CancelError=e.CancelablePromise=e.BaseHttpRequest=e.ApiError=e.Client=void 0;var t=ln;Object.defineProperty(e,"Client",{enumerable:!0,get:function(){return t.Client}});var r=fn;Object.defineProperty(e,"ApiError",{enumerable:!0,get:function(){return r.ApiError}});var i=dn;Object.defineProperty(e,"BaseHttpRequest",{enumerable:!0,get:function(){return i.BaseHttpRequest}});var n=In;Object.defineProperty(e,"CancelablePromise",{enumerable:!0,get:function(){return n.CancelablePromise}}),Object.defineProperty(e,"CancelError",{enumerable:!0,get:function(){return n.CancelError}});var o=Dn;Object.defineProperty(e,"OpenAPI",{enumerable:!0,get:function(){return o.OpenAPI}});var s=kn;Object.defineProperty(e,"DefaultService",{enumerable:!0,get:function(){return s.DefaultService}});var a=hn;Object.defineProperty(e,"FetchHttpRequest",{enumerable:!0,get:function(){return a.FetchHttpRequest}})}(un);var qn=M&&M.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),Fn=M&&M.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Bn=M&&M.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&qn(t,e,r);return Fn(t,e),t};Object.defineProperty(ie,"__esModule",{value:!0});var jn=ie.VersionApi=Hn=ie.IdentityApi=Un=ie.GsbApi=Vn=ie.NetApi=Ln=ie.PaymentApi=Mn=ie.ActivityApi=$n=ie.MarketApi=void 0,$n=ie.MarketApi=Bn(ne),Mn=ie.ActivityApi=Bn(Nt),Ln=ie.PaymentApi=Bn(sr),Vn=ie.NetApi=Bn(Dr),Un=ie.GsbApi=Bn(ci),Hn=ie.IdentityApi=Bn(Fi);jn=ie.VersionApi=Bn(un);for(var zn,Wn=[],Gn=0;Gn<256;++Gn)Wn.push((Gn+256).toString(16).slice(1));var Yn=new Uint8Array(16);function Kn(){if(!zn&&!(zn="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return zn(Yn)}var Jn={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function Xn(e,t,r){if(Jn.randomUUID&&!t&&!e)return Jn.randomUUID();var i=(e=e||{}).random||(e.rng||Kn)();return i[6]=15&i[6]|64,i[8]=63&i[8]|128,function(e,t=0){return(Wn[e[t+0]]+Wn[e[t+1]]+Wn[e[t+2]]+Wn[e[t+3]]+"-"+Wn[e[t+4]]+Wn[e[t+5]]+"-"+Wn[e[t+6]]+Wn[e[t+7]]+"-"+Wn[e[t+8]]+Wn[e[t+9]]+"-"+Wn[e[t+10]]+Wn[e[t+11]]+Wn[e[t+12]]+Wn[e[t+13]]+Wn[e[t+14]]+Wn[e[t+15]]).toLowerCase()}(i)}var Qn=class{constructor(){this.max=1e3,this.map=new Map}get(e){const t=this.map.get(e);return void 0===t?void 0:(this.map.delete(e),this.map.set(e,t),t)}delete(e){return this.map.delete(e)}set(e,t){if(!this.delete(e)&&void 0!==t){if(this.map.size>=this.max){const e=this.map.keys().next().value;this.delete(e)}this.map.set(e,t)}return this}};const Zn=Object.freeze({loose:!0}),eo=Object.freeze({});var to=e=>e?"object"!=typeof e?Zn:e:eo,ro={exports:{}};var io={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||9007199254740991,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2};var no="object"==typeof $&&$.env&&$.env.NODE_DEBUG&&/\bsemver\b/i.test($.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};!function(e,t){const{MAX_SAFE_COMPONENT_LENGTH:r,MAX_SAFE_BUILD_LENGTH:i,MAX_LENGTH:n}=io,o=no,s=(t=e.exports={}).re=[],a=t.safeRe=[],c=t.src=[],u=t.t={};let l=0;const h="[a-zA-Z0-9-]",d=[["\\s",1],["\\d",n],[h,i]],p=(e,t,r)=>{const i=(e=>{for(const[t,r]of d)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e})(t),n=l++;o(e,n,t),u[e]=n,c[n]=t,s[n]=new RegExp(t,r?"g":void 0),a[n]=new RegExp(i,r?"g":void 0)};p("NUMERICIDENTIFIER","0|[1-9]\\d*"),p("NUMERICIDENTIFIERLOOSE","\\d+"),p("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${h}*`),p("MAINVERSION",`(${c[u.NUMERICIDENTIFIER]})\\.(${c[u.NUMERICIDENTIFIER]})\\.(${c[u.NUMERICIDENTIFIER]})`),p("MAINVERSIONLOOSE",`(${c[u.NUMERICIDENTIFIERLOOSE]})\\.(${c[u.NUMERICIDENTIFIERLOOSE]})\\.(${c[u.NUMERICIDENTIFIERLOOSE]})`),p("PRERELEASEIDENTIFIER",`(?:${c[u.NUMERICIDENTIFIER]}|${c[u.NONNUMERICIDENTIFIER]})`),p("PRERELEASEIDENTIFIERLOOSE",`(?:${c[u.NUMERICIDENTIFIERLOOSE]}|${c[u.NONNUMERICIDENTIFIER]})`),p("PRERELEASE",`(?:-(${c[u.PRERELEASEIDENTIFIER]}(?:\\.${c[u.PRERELEASEIDENTIFIER]})*))`),p("PRERELEASELOOSE",`(?:-?(${c[u.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${c[u.PRERELEASEIDENTIFIERLOOSE]})*))`),p("BUILDIDENTIFIER",`${h}+`),p("BUILD",`(?:\\+(${c[u.BUILDIDENTIFIER]}(?:\\.${c[u.BUILDIDENTIFIER]})*))`),p("FULLPLAIN",`v?${c[u.MAINVERSION]}${c[u.PRERELEASE]}?${c[u.BUILD]}?`),p("FULL",`^${c[u.FULLPLAIN]}$`),p("LOOSEPLAIN",`[v=\\s]*${c[u.MAINVERSIONLOOSE]}${c[u.PRERELEASELOOSE]}?${c[u.BUILD]}?`),p("LOOSE",`^${c[u.LOOSEPLAIN]}$`),p("GTLT","((?:<|>)?=?)"),p("XRANGEIDENTIFIERLOOSE",`${c[u.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),p("XRANGEIDENTIFIER",`${c[u.NUMERICIDENTIFIER]}|x|X|\\*`),p("XRANGEPLAIN",`[v=\\s]*(${c[u.XRANGEIDENTIFIER]})(?:\\.(${c[u.XRANGEIDENTIFIER]})(?:\\.(${c[u.XRANGEIDENTIFIER]})(?:${c[u.PRERELEASE]})?${c[u.BUILD]}?)?)?`),p("XRANGEPLAINLOOSE",`[v=\\s]*(${c[u.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[u.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[u.XRANGEIDENTIFIERLOOSE]})(?:${c[u.PRERELEASELOOSE]})?${c[u.BUILD]}?)?)?`),p("XRANGE",`^${c[u.GTLT]}\\s*${c[u.XRANGEPLAIN]}$`),p("XRANGELOOSE",`^${c[u.GTLT]}\\s*${c[u.XRANGEPLAINLOOSE]}$`),p("COERCEPLAIN",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?`),p("COERCE",`${c[u.COERCEPLAIN]}(?:$|[^\\d])`),p("COERCEFULL",c[u.COERCEPLAIN]+`(?:${c[u.PRERELEASE]})?`+`(?:${c[u.BUILD]})?(?:$|[^\\d])`),p("COERCERTL",c[u.COERCE],!0),p("COERCERTLFULL",c[u.COERCEFULL],!0),p("LONETILDE","(?:~>?)"),p("TILDETRIM",`(\\s*)${c[u.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",p("TILDE",`^${c[u.LONETILDE]}${c[u.XRANGEPLAIN]}$`),p("TILDELOOSE",`^${c[u.LONETILDE]}${c[u.XRANGEPLAINLOOSE]}$`),p("LONECARET","(?:\\^)"),p("CARETTRIM",`(\\s*)${c[u.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",p("CARET",`^${c[u.LONECARET]}${c[u.XRANGEPLAIN]}$`),p("CARETLOOSE",`^${c[u.LONECARET]}${c[u.XRANGEPLAINLOOSE]}$`),p("COMPARATORLOOSE",`^${c[u.GTLT]}\\s*(${c[u.LOOSEPLAIN]})$|^$`),p("COMPARATOR",`^${c[u.GTLT]}\\s*(${c[u.FULLPLAIN]})$|^$`),p("COMPARATORTRIM",`(\\s*)${c[u.GTLT]}\\s*(${c[u.LOOSEPLAIN]}|${c[u.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",p("HYPHENRANGE",`^\\s*(${c[u.XRANGEPLAIN]})\\s+-\\s+(${c[u.XRANGEPLAIN]})\\s*$`),p("HYPHENRANGELOOSE",`^\\s*(${c[u.XRANGEPLAINLOOSE]})\\s+-\\s+(${c[u.XRANGEPLAINLOOSE]})\\s*$`),p("STAR","(<|>)?=?\\s*\\*"),p("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),p("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}(ro,ro.exports);var oo=ro.exports;const so=/^[0-9]+$/,ao=(e,t)=>{const r=so.test(e),i=so.test(t);return r&&i&&(e=+e,t=+t),e===t?0:r&&!i?-1:i&&!r?1:eao(t,e)};const uo=no,{MAX_LENGTH:lo,MAX_SAFE_INTEGER:ho}=io,{safeRe:po,t:fo}=oo,go=to,{compareIdentifiers:vo}=co;var mo=class e{constructor(t,r){if(r=go(r),t instanceof e){if(t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease)return t;t=t.version}else if("string"!=typeof t)throw new TypeError(`Invalid version. Must be a string. Got type "${typeof t}".`);if(t.length>lo)throw new TypeError(`version is longer than ${lo} characters`);uo("SemVer",t,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const i=t.trim().match(r.loose?po[fo.LOOSE]:po[fo.FULL]);if(!i)throw new TypeError(`Invalid Version: ${t}`);if(this.raw=t,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>ho||this.major<0)throw new TypeError("Invalid major version");if(this.minor>ho||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>ho||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const t=+e;if(t>=0&&t=0;)"number"==typeof this.prerelease[i]&&(this.prerelease[i]++,i=-2);if(-1===i){if(t===this.prerelease.join(".")&&!1===r)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(e)}}if(t){let i=[t,e];!1===r&&(i=[t]),0===vo(this.prerelease[0],t)?isNaN(this.prerelease[1])&&(this.prerelease=i):this.prerelease=i}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};const yo=mo;var wo=(e,t,r)=>new yo(e,r).compare(new yo(t,r));const bo=wo;const Eo=wo;const So=wo;const Io=wo;const Ao=wo;const Po=wo;const To=(e,t,r)=>0===bo(e,t,r),Ro=(e,t,r)=>0!==Eo(e,t,r),Oo=(e,t,r)=>So(e,t,r)>0,Co=(e,t,r)=>Io(e,t,r)>=0,No=(e,t,r)=>Ao(e,t,r)<0,ko=(e,t,r)=>Po(e,t,r)<=0;var _o,xo,Do,qo,Fo=(e,t,r,i)=>{switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return To(e,r,i);case"!=":return Ro(e,r,i);case">":return Oo(e,r,i);case">=":return Co(e,r,i);case"<":return No(e,r,i);case"<=":return ko(e,r,i);default:throw new TypeError(`Invalid operator: ${t}`)}};function Bo(){if(qo)return Do;qo=1;const e=/\s+/g;class t{constructor(r,o){if(o=i(o),r instanceof t)return r.loose===!!o.loose&&r.includePrerelease===!!o.includePrerelease?r:new t(r.raw,o);if(r instanceof n)return this.raw=r.value,this.set=[[r]],this.formatted=void 0,this;if(this.options=o,this.loose=!!o.loose,this.includePrerelease=!!o.includePrerelease,this.raw=r.trim().replace(e," "),this.set=this.raw.split("||").map((e=>this.parseRange(e.trim()))).filter((e=>e.length)),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const e=this.set[0];if(this.set=this.set.filter((e=>!f(e[0]))),0===this.set.length)this.set=[e];else if(this.set.length>1)for(const e of this.set)if(1===e.length&&g(e[0])){this.set=[e];break}}this.formatted=void 0}get range(){if(void 0===this.formatted){this.formatted="";for(let e=0;e0&&(this.formatted+="||");const t=this.set[e];for(let e=0;e0&&(this.formatted+=" "),this.formatted+=t[e].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){const t=((this.options.includePrerelease&&d)|(this.options.loose&&p))+":"+e,i=r.get(t);if(i)return i;const s=this.options.loose,g=s?a[c.HYPHENRANGELOOSE]:a[c.HYPHENRANGE];e=e.replace(g,R(this.options.includePrerelease)),o("hyphen replace",e),e=e.replace(a[c.COMPARATORTRIM],u),o("comparator trim",e),e=e.replace(a[c.TILDETRIM],l),o("tilde trim",e),e=e.replace(a[c.CARETTRIM],h),o("caret trim",e);let v=e.split(" ").map((e=>m(e,this.options))).join(" ").split(/\s+/).map((e=>T(e,this.options)));s&&(v=v.filter((e=>(o("loose invalid filter",e,this.options),!!e.match(a[c.COMPARATORLOOSE]))))),o("range list",v);const y=new Map,w=v.map((e=>new n(e,this.options)));for(const e of w){if(f(e))return[e];y.set(e.value,e)}y.size>1&&y.has("")&&y.delete("");const b=[...y.values()];return r.set(t,b),b}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some((t=>v(t,r)&&e.set.some((e=>v(e,r)&&t.every((t=>e.every((e=>t.intersects(e,r)))))))))}test(e){if(!e)return!1;if("string"==typeof e)try{e=new s(e,this.options)}catch(e){return!1}for(let t=0;t")||!e.operator.startsWith(">"))&&(!this.operator.startsWith("<")||!e.operator.startsWith("<"))&&(this.semver.version!==e.semver.version||!this.operator.includes("=")||!e.operator.includes("="))&&!(o(this.semver,"<",e.semver,i)&&this.operator.startsWith(">")&&e.operator.startsWith("<"))&&!(o(this.semver,">",e.semver,i)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}}_o=t;const r=to,{safeRe:i,t:n}=oo,o=Fo,s=no,a=mo,c=Bo();return _o}(),o=no,s=mo,{safeRe:a,t:c,comparatorTrimReplace:u,tildeTrimReplace:l,caretTrimReplace:h}=oo,{FLAG_INCLUDE_PRERELEASE:d,FLAG_LOOSE:p}=io,f=e=>"<0.0.0-0"===e.value,g=e=>""===e.value,v=(e,t)=>{let r=!0;const i=e.slice();let n=i.pop();for(;r&&i.length;)r=i.every((e=>n.intersects(e,t))),n=i.pop();return r},m=(e,t)=>(o("comp",e,t),e=E(e,t),o("caret",e),e=w(e,t),o("tildes",e),e=I(e,t),o("xrange",e),e=P(e,t),o("stars",e),e),y=e=>!e||"x"===e.toLowerCase()||"*"===e,w=(e,t)=>e.trim().split(/\s+/).map((e=>b(e,t))).join(" "),b=(e,t)=>{const r=t.loose?a[c.TILDELOOSE]:a[c.TILDE];return e.replace(r,((t,r,i,n,s)=>{let a;return o("tilde",e,t,r,i,n,s),y(r)?a="":y(i)?a=`>=${r}.0.0 <${+r+1}.0.0-0`:y(n)?a=`>=${r}.${i}.0 <${r}.${+i+1}.0-0`:s?(o("replaceTilde pr",s),a=`>=${r}.${i}.${n}-${s} <${r}.${+i+1}.0-0`):a=`>=${r}.${i}.${n} <${r}.${+i+1}.0-0`,o("tilde return",a),a}))},E=(e,t)=>e.trim().split(/\s+/).map((e=>S(e,t))).join(" "),S=(e,t)=>{o("caret",e,t);const r=t.loose?a[c.CARETLOOSE]:a[c.CARET],i=t.includePrerelease?"-0":"";return e.replace(r,((t,r,n,s,a)=>{let c;return o("caret",e,t,r,n,s,a),y(r)?c="":y(n)?c=`>=${r}.0.0${i} <${+r+1}.0.0-0`:y(s)?c="0"===r?`>=${r}.${n}.0${i} <${r}.${+n+1}.0-0`:`>=${r}.${n}.0${i} <${+r+1}.0.0-0`:a?(o("replaceCaret pr",a),c="0"===r?"0"===n?`>=${r}.${n}.${s}-${a} <${r}.${n}.${+s+1}-0`:`>=${r}.${n}.${s}-${a} <${r}.${+n+1}.0-0`:`>=${r}.${n}.${s}-${a} <${+r+1}.0.0-0`):(o("no pr"),c="0"===r?"0"===n?`>=${r}.${n}.${s}${i} <${r}.${n}.${+s+1}-0`:`>=${r}.${n}.${s}${i} <${r}.${+n+1}.0-0`:`>=${r}.${n}.${s} <${+r+1}.0.0-0`),o("caret return",c),c}))},I=(e,t)=>(o("replaceXRanges",e,t),e.split(/\s+/).map((e=>A(e,t))).join(" ")),A=(e,t)=>{e=e.trim();const r=t.loose?a[c.XRANGELOOSE]:a[c.XRANGE];return e.replace(r,((r,i,n,s,a,c)=>{o("xRange",e,r,i,n,s,a,c);const u=y(n),l=u||y(s),h=l||y(a),d=h;return"="===i&&d&&(i=""),c=t.includePrerelease?"-0":"",u?r=">"===i||"<"===i?"<0.0.0-0":"*":i&&d?(l&&(s=0),a=0,">"===i?(i=">=",l?(n=+n+1,s=0,a=0):(s=+s+1,a=0)):"<="===i&&(i="<",l?n=+n+1:s=+s+1),"<"===i&&(c="-0"),r=`${i+n}.${s}.${a}${c}`):l?r=`>=${n}.0.0${c} <${+n+1}.0.0-0`:h&&(r=`>=${n}.${s}.0${c} <${n}.${+s+1}.0-0`),o("xRange return",r),r}))},P=(e,t)=>(o("replaceStars",e,t),e.trim().replace(a[c.STAR],"")),T=(e,t)=>(o("replaceGTE0",e,t),e.trim().replace(a[t.includePrerelease?c.GTE0PRE:c.GTE0],"")),R=e=>(t,r,i,n,o,s,a,c,u,l,h,d)=>`${r=y(i)?"":y(n)?`>=${i}.0.0${e?"-0":""}`:y(o)?`>=${i}.${n}.0${e?"-0":""}`:s?`>=${r}`:`>=${r}${e?"-0":""}`} ${c=y(u)?"":y(l)?`<${+u+1}.0.0-0`:y(h)?`<${u}.${+l+1}.0-0`:d?`<=${u}.${l}.${h}-${d}`:e?`<${u}.${l}.${+h+1}-0`:`<=${c}`}`.trim(),O=(e,t,r)=>{for(let r=0;r0){const i=e[r].semver;if(i.major===t.major&&i.minor===t.minor&&i.patch===t.patch)return!0}return!1}return!0};return Do}const jo=Bo();var $o=(e,t,r)=>{try{t=new jo(t,r)}catch(e){return!1}return t.test(e)},Mo=L($o);const Lo=mo;var Vo=(e,t,r=!1)=>{if(e instanceof Lo)return e;try{return new Lo(e,t)}catch(e){if(!r)return null;throw e}};const Uo=mo,Ho=Vo,{safeRe:zo,t:Wo}=oo;var Go=(e,t)=>{if(e instanceof Uo)return e;if("number"==typeof e&&(e=String(e)),"string"!=typeof e)return null;let r=null;if((t=t||{}).rtl){const i=t.includePrerelease?zo[Wo.COERCERTLFULL]:zo[Wo.COERCERTL];let n;for(;(n=i.exec(e))&&(!r||r.index+r[0].length!==e.length);)r&&n.index+n[0].length===r.index+r[0].length||(r=n),i.lastIndex=n.index+n[1].length+n[2].length;i.lastIndex=-1}else r=e.match(t.includePrerelease?zo[Wo.COERCEFULL]:zo[Wo.COERCE]);if(null===r)return null;const i=r[2],n=r[3]||"0",o=r[4]||"0",s=t.includePrerelease&&r[5]?`-${r[5]}`:"",a=t.includePrerelease&&r[6]?`+${r[6]}`:"";return Ho(`${i}.${n}.${o}${s}${a}`,t)},Yo=L(Go),Ko=function(e,t){return Ko=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},Ko(e,t)};function Jo(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}Ko(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function Xo(e,t,r,i){return new(r||(r=Promise))((function(n,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))}function Qo(e,t){var r,i,n,o={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]},s=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return s.next=a(0),s.throw=a(1),s.return=a(2),"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(a){return function(c){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;s&&(s=0,a[0]&&(o=0)),o;)try{if(r=1,i&&(n=2&a[0]?i.return:a[0]?i.throw||((n=i.return)&&n.call(i),0):i.next)&&!(n=n.call(i,a[1])).done)return n;switch(i=0,n&&(a=[2&a[0],n.value]),a[0]){case 0:case 1:n=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,i=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(n=o.trys,(n=n.length>0&&n[n.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!n||a[1]>n[0]&&a[1]=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function es(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var i,n,o=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(i=o.next()).done;)s.push(i.value)}catch(e){n={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return s}function ts(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n1||a(e,t)}))},t&&(i[e]=t(i[e])))}function a(e,t){try{(r=n[e](t)).value instanceof rs?Promise.resolve(r.value.v).then(c,u):l(o[0][2],r)}catch(e){l(o[0][3],e)}var r}function c(e){a("next",e)}function u(e){a("throw",e)}function l(e,t){e(t),o.shift(),o.length&&a(o[0][0],o[0][1])}}function ns(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=Zo(e),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(r){t[r]=e[r]&&function(t){return new Promise((function(i,n){(function(e,t,r,i){Promise.resolve(i).then((function(t){e({value:t,done:r})}),t)})(i,n,(t=e[r](t)).done,t.value)}))}}}function os(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)}function ss(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,r):n?n.value=r:t.set(e,r),r}function as(e){return"function"==typeof e}function cs(e){var t=e((function(e){Error.call(e),e.stack=(new Error).stack}));return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}"function"==typeof SuppressedError&&SuppressedError;var us=cs((function(e){return function(t){e(this),this.message=t?t.length+" errors occurred during unsubscription:\n"+t.map((function(e,t){return t+1+") "+e.toString()})).join("\n "):"",this.name="UnsubscriptionError",this.errors=t}}));function ls(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var hs=function(){function e(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}var t;return e.prototype.unsubscribe=function(){var e,t,r,i,n;if(!this.closed){this.closed=!0;var o=this._parentage;if(o)if(this._parentage=null,Array.isArray(o))try{for(var s=Zo(o),a=s.next();!a.done;a=s.next()){a.value.remove(this)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=s.return)&&t.call(s)}finally{if(e)throw e.error}}else o.remove(this);var c=this.initialTeardown;if(as(c))try{c()}catch(e){n=e instanceof us?e.errors:[e]}var u=this._finalizers;if(u){this._finalizers=null;try{for(var l=Zo(u),h=l.next();!h.done;h=l.next()){var d=h.value;try{fs(d)}catch(e){n=null!=n?n:[],e instanceof us?n=ts(ts([],es(n)),es(e.errors)):n.push(e)}}}catch(e){r={error:e}}finally{try{h&&!h.done&&(i=l.return)&&i.call(l)}finally{if(r)throw r.error}}}if(n)throw new us(n)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)fs(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=null!==(r=this._finalizers)&&void 0!==r?r:[]).push(t)}},e.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},e.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},e.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&ls(t,e)},e.prototype.remove=function(t){var r=this._finalizers;r&&ls(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=((t=new e).closed=!0,t),e}(),ds=hs.EMPTY;function ps(e){return e instanceof hs||e&&"closed"in e&&as(e.remove)&&as(e.add)&&as(e.unsubscribe)}function fs(e){as(e)?e():e.unsubscribe()}var gs={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},vs={setTimeout:function(e,t){for(var r=[],i=2;i0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,r=this,i=r.hasError,n=r.isStopped,o=r.observers;return i||n?ds:(this.currentObservers=null,o.push(e),new hs((function(){t.currentObservers=null,ls(o,e)})))},t.prototype._checkFinalizedStatuses=function(e){var t=this,r=t.hasError,i=t.thrownError,n=t.isStopped;r?e.error(i):n&&e.complete()},t.prototype.asObservable=function(){var e=new Cs;return e.source=this,e},t.create=function(e,t){return new Fs(e,t)},t}(Cs),Fs=function(e){function t(t,r){var i=e.call(this)||this;return i.destination=t,i.source=r,i}return Jo(t,e),t.prototype.next=function(e){var t,r;null===(r=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===r||r.call(t,e)},t.prototype.error=function(e){var t,r;null===(r=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===r||r.call(t,e)},t.prototype.complete=function(){var e,t;null===(t=null===(e=this.destination)||void 0===e?void 0:e.complete)||void 0===t||t.call(e)},t.prototype._subscribe=function(e){var t,r;return null!==(r=null===(t=this.source)||void 0===t?void 0:t.subscribe(e))&&void 0!==r?r:ds},t}(qs);function Bs(e){return e[e.length-1]}function js(e){return(t=Bs(e))&&as(t.schedule)?e.pop():void 0;var t}var $s=function(e){return e&&"number"==typeof e.length&&"function"!=typeof e};function Ms(e){return as(null==e?void 0:e.then)}function Ls(e){return as(e[Rs])}function Vs(e){return Symbol.asyncIterator&&as(null==e?void 0:e[Symbol.asyncIterator])}function Us(e){return new TypeError("You provided "+(null!==e&&"object"==typeof e?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}var Hs="function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator";function zs(e){return as(null==e?void 0:e[Hs])}function Ws(e){return is(this,arguments,(function(){var t,r,i;return Qo(this,(function(n){switch(n.label){case 0:t=e.getReader(),n.label=1;case 1:n.trys.push([1,,9,10]),n.label=2;case 2:return[4,rs(t.read())];case 3:return r=n.sent(),i=r.value,r.done?[4,rs(void 0)]:[3,5];case 4:return[2,n.sent()];case 5:return[4,rs(i)];case 6:return[4,n.sent()];case 7:return n.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}}))}))}function Gs(e){return as(null==e?void 0:e.getReader)}function Ys(e){if(e instanceof Cs)return e;if(null!=e){if(Ls(e))return n=e,new Cs((function(e){var t=n[Rs]();if(as(t.subscribe))return t.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")}));if($s(e))return i=e,new Cs((function(e){for(var t=0;t=2))}var ha=function(e,t){return e.push(t),e};function da(e){return ks((function(t,r){try{t.subscribe(r)}finally{r.add(e)}}))}function pa(){for(var e=[],t=0;t{o=setInterval((async()=>{var n;(null===(n=null==t?void 0:t.abortSignal)||void 0===n?void 0:n.aborted)&&s(new i("Waiting for a condition has been aborted",t.abortSignal.reason)),await e()&&r()}),1e3*n)}));return s.finally((()=>{clearInterval(o)}))}function ya(e,t){return new Promise(((r,i)=>{setTimeout((async()=>{try{const t=await e();r(t)}catch(e){i(e)}}),1e3*t)}))}class wa{constructor(e){this.logger=e}async pollToSubject(e,t){for await(const r of e)t.next(r);t.complete()}createReader(e,t){let r=!1,i=!0,n=null,o=(new Date).toISOString();const s=this.logger;return{eventType:e,isFinished:r,pollValues:async function*(){for(;i;)try{n=t(o);const r=await n;s.debug("Polled events from Yagna",{eventType:e,count:r.length,lastEventTimestamp:o});for(const e of r)yield e,o=e.eventDate}catch(t){if("object"==typeof t&&"CancelError"===t.name){s.debug("Polling was cancelled",{eventType:e});continue}s.error("Error fetching events from Yagna",{eventType:e,error:t})}s.debug("Stopped reading events",{eventType:e}),r=!0},cancel:async function(){i=!1,n&&n.cancel(),await ma((()=>r),{intervalSeconds:0}),s.debug("Cancelled reading the events",{eventType:e})}}}} +/*! https://mths.be/punycode v1.4.1 by @mathias */var ba,Ea=2147483647,Sa=/[^\x20-\x7E]/,Ia=/[\x2E\u3002\uFF0E\uFF61]/g,Aa={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Pa=Math.floor,Ta=String.fromCharCode;function Ra(e){throw new RangeError(Aa[e])}function Oa(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function Ca(e,t,r){var i=0;for(e=r?Pa(e/700):e>>1,e+=Pa(e/t);e>455;i+=36)e=Pa(e/35);return Pa(i+36*e/(e+38))}function Na(e){return function(e,t){var r=e.split("@"),i="";r.length>1&&(i=r[0]+"@",e=r[1]);var n=function(e,t){for(var r=e.length,i=[];r--;)i[r]=t(e[r]);return i}((e=e.replace(Ia,".")).split("."),t).join(".");return i+n}(e,(function(e){return Sa.test(e)?"xn--"+function(e){var t,r,i,n,o,s,a,c,u,l,h,d,p,f,g,v=[];for(e=function(e){for(var t,r,i=[],n=0,o=e.length;n=55296&&t<=56319&&n=t&&hPa((Ea-r)/(p=i+1))&&Ra("overflow"),r+=(a-t)*p,t=a,s=0;sEa&&Ra("overflow"),h==t){for(c=r,u=36;!(c<(l=u<=o?1:u>=o+26?26:u-o));u+=36)g=c-l,f=36-l,v.push(Ta(Oa(l+g%f,0))),c=Pa(g/f);v.push(Ta(Oa(c,0))),o=Ca(r,p,i==n),r=0,++i}++r,++t}return v.join("")}(e):e}))}ba="function"==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e};var ka=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},i=0;i=n)return e;switch(e){case"%s":return String(i[r++]);case"%d":return Number(i[r++]);case"%j":try{return JSON.stringify(i[r++])}catch(e){return"[Circular]"}default:return e}})),s=i[r];r=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),za(t)?r.showHidden=t:t&&uc(r,t),Xa(r.showHidden)&&(r.showHidden=!1),Xa(r.depth)&&(r.depth=2),Xa(r.colors)&&(r.colors=!1),Xa(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=$a),La(r,e,r.depth)}function $a(e,t){var r=ja.styles[t];return r?"["+ja.colors[r][0]+"m"+e+"["+ja.colors[r][1]+"m":e}function Ma(e,t){return e}function La(e,t,r){if(e.customInspect&&t&&rc(t.inspect)&&t.inspect!==ja&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(r,e);return Ka(i)||(i=La(e,i,r)),i}var n=function(e,t){if(Xa(t))return e.stylize("undefined","undefined");if(Ka(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(Ya(t))return e.stylize(""+t,"number");if(za(t))return e.stylize(""+t,"boolean");if(Wa(t))return e.stylize("null","null")}(e,t);if(n)return n;var o=Object.keys(t),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(t)),tc(t)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return Va(t);if(0===o.length){if(rc(t)){var a=t.name?": "+t.name:"";return e.stylize("[Function"+a+"]","special")}if(Qa(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(ec(t))return e.stylize(Date.prototype.toString.call(t),"date");if(tc(t))return Va(t)}var c,u="",l=!1,h=["{","}"];(Ha(t)&&(l=!0,h=["[","]"]),rc(t))&&(u=" [Function"+(t.name?": "+t.name:"")+"]");return Qa(t)&&(u=" "+RegExp.prototype.toString.call(t)),ec(t)&&(u=" "+Date.prototype.toUTCString.call(t)),tc(t)&&(u=" "+Va(t)),0!==o.length||l&&0!=t.length?r<0?Qa(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),c=l?function(e,t,r,i,n){for(var o=[],s=0,a=t.length;s60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(c,u,h)):h[0]+u+h[1]}function Va(e){return"["+Error.prototype.toString.call(e)+"]"}function Ua(e,t,r,i,n,o){var s,a,c;if((c=Object.getOwnPropertyDescriptor(t,n)||{value:t[n]}).get?a=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(a=e.stylize("[Setter]","special")),lc(i,n)||(s="["+n+"]"),a||(e.seen.indexOf(c.value)<0?(a=Wa(r)?La(e,c.value,null):La(e,c.value,r-1)).indexOf("\n")>-1&&(a=o?a.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+a.split("\n").map((function(e){return" "+e})).join("\n")):a=e.stylize("[Circular]","special")),Xa(s)){if(o&&n.match(/^\d+$/))return a;(s=JSON.stringify(""+n)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+a}function Ha(e){return Array.isArray(e)}function za(e){return"boolean"==typeof e}function Wa(e){return null===e}function Ga(e){return null==e}function Ya(e){return"number"==typeof e}function Ka(e){return"string"==typeof e}function Ja(e){return"symbol"==typeof e}function Xa(e){return void 0===e}function Qa(e){return Za(e)&&"[object RegExp]"===oc(e)}function Za(e){return"object"==typeof e&&null!==e}function ec(e){return Za(e)&&"[object Date]"===oc(e)}function tc(e){return Za(e)&&("[object Error]"===oc(e)||e instanceof Error)}function rc(e){return"function"==typeof e}function ic(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e}function nc(e){return Ee.isBuffer(e)}function oc(e){return Object.prototype.toString.call(e)}function sc(e){return e<10?"0"+e.toString(10):e.toString(10)}ja.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},ja.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};var ac=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function cc(){var e,t;console.log("%s - %s",(e=new Date,t=[sc(e.getHours()),sc(e.getMinutes()),sc(e.getSeconds())].join(":"),[e.getDate(),ac[e.getMonth()],t].join(" ")),xa.apply(null,arguments))}function uc(e,t){if(!t||!Za(t))return e;for(var r=Object.keys(t),i=r.length;i--;)e[r[i]]=t[r[i]];return e}function lc(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var hc="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function dc(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(hc&&e[hc]){var t;if("function"!=typeof(t=e[hc]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,hc,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,r,i=new Promise((function(e,i){t=e,r=i})),n=[],o=0;o0&&a>s&&(a=s);for(var c=0;c=0?(u=p.substr(0,f),l=p.substr(f+1)):(u=p,l=""),h=decodeURIComponent(u),d=decodeURIComponent(l),mc(n,h)?yc(n[h])?n[h].push(d):n[h]=[n[h],d]:n[h]=d}return n}const Ic=f.URL,Ac=f.URLSearchParams;var Pc={parse:Mc,resolve:zc,resolveObject:Wc,fileURLToPath:Vc,format:Uc,Url:Tc,URL:Ic,URLSearchParams:Ac};function Tc(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var Rc=/^([a-z0-9.+-]+:)/i,Oc=/:[0-9]*$/,Cc=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Nc=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),kc=["'"].concat(Nc),_c=["%","/","?",";","#"].concat(kc),xc=["/","?","#"],Dc=255,qc=/^[+a-z0-9A-Z_-]{0,63}$/,Fc=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Bc={javascript:!0,"javascript:":!0},jc={javascript:!0,"javascript:":!0},$c={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function Mc(e,t,r){if(e&&Za(e)&&e instanceof Tc)return e;var i=new Tc;return i.parse(e,t,r),i}function Lc(e,t,r,i){if(!Ka(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var n=t.indexOf("?"),o=-1!==n&&n127?S+="x":S+=E[I];if(!S.match(qc)){var P=b.slice(0,u),T=b.slice(u+1),R=E.match(Fc);R&&(P.push(R[1]),T.unshift(R[2])),T.length&&(a="/"+T.join(".")+a),e.hostname=P.join(".");break}}}}e.hostname.length>Dc?e.hostname="":e.hostname=e.hostname.toLowerCase(),w||(e.hostname=Na(e.hostname)),d=e.port?":"+e.port:"";var O=e.hostname||"";e.host=O+d,e.href+=e.host,w&&(e.hostname=e.hostname.substr(1,e.hostname.length-2),"/"!==a[0]&&(a="/"+a))}if(!Bc[f])for(u=0,h=kc.length;u0)&&i.host.split("@"))&&(i.auth=g.shift(),i.host=i.hostname=g.shift())),i.search=e.search,i.query=e.query,Wa(i.pathname)&&Wa(i.search)||(i.path=(i.pathname?i.pathname:"")+(i.search?i.search:"")),i.href=i.format(),i;if(!b.length)return i.pathname=null,i.search?i.path="/"+i.search:i.path=null,i.href=i.format(),i;for(var S=b.slice(-1)[0],I=(i.host||e.host||b.length>1)&&("."===S||".."===S)||""===S,A=0,P=b.length;P>=0;P--)"."===(S=b[P])?b.splice(P,1):".."===S?(b.splice(P,1),A++):A&&(b.splice(P,1),A--);if(!y&&!w)for(;A--;A)b.unshift("..");!y||""===b[0]||b[0]&&"/"===b[0].charAt(0)||b.unshift(""),I&&"/"!==b.join("/").substr(-1)&&b.push("");var T=""===b[0]||b[0]&&"/"===b[0].charAt(0);return E&&(i.hostname=i.host=T?"":b.length?b.shift():"",(g=!!(i.host&&i.host.indexOf("@")>0)&&i.host.split("@"))&&(i.auth=g.shift(),i.host=i.hostname=g.shift())),(y=y||i.host&&b.length)&&!T&&b.unshift(""),b.length?i.pathname=b.join("/"):(i.pathname=null,i.path=null),Wa(i.pathname)&&Wa(i.search)||(i.path=(i.pathname?i.pathname:"")+(i.search?i.search:"")),i.auth=e.auth||i.auth,i.slashes=i.slashes||e.slashes,i.href=i.format(),i},Tc.prototype.parseHost=function(){return Gc(this)};var Yc=V(Object.freeze({__proto__:null,URL:Ic,URLSearchParams:Ac,Url:Tc,default:Pc,fileURLToPath:Vc,format:Uc,parse:Mc,resolve:zc,resolveObject:Wc}));function Kc(){}function Jc(){Jc.init.call(this)}function Xc(e){return void 0===e._maxListeners?Jc.defaultMaxListeners:e._maxListeners}function Qc(e,t,r,i){var n,o,s,a;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function');if((o=e._events)?(o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),s=o[t]):(o=e._events=new Kc,e._eventsCount=0),s){if("function"==typeof s?s=o[t]=i?[r,s]:[s,r]:i?s.unshift(r):s.push(r),!s.warned&&(n=Xc(e))&&n>0&&s.length>n){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,a=c,"function"==typeof console.warn?console.warn(a):console.log(a)}}else s=o[t]=r,++e._eventsCount;return e}function Zc(e,t,r){var i=!1;function n(){e.removeListener(t,n),i||(i=!0,r.apply(e,arguments))}return n.listener=r,n}function eu(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function tu(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}Kc.prototype=Object.create(null),Jc.EventEmitter=Jc,Jc.usingDomains=!1,Jc.prototype.domain=void 0,Jc.prototype._events=void 0,Jc.prototype._maxListeners=void 0,Jc.defaultMaxListeners=10,Jc.init=function(){this.domain=null,Jc.usingDomains&&undefined.active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new Kc,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Jc.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},Jc.prototype.getMaxListeners=function(){return Xc(this)},Jc.prototype.emit=function(e){var t,r,i,n,o,s,a,c="error"===e;if(s=this._events)c=c&&null==s.error;else if(!c)return!1;if(a=this.domain,c){if(t=arguments[1],!a){if(t instanceof Error)throw t;var u=new Error('Uncaught, unspecified "error" event. ('+t+")");throw u.context=t,u}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=a,t.domainThrown=!1,a.emit("error",t),!1}if(!(r=s[e]))return!1;var l="function"==typeof r;switch(i=arguments.length){case 1:!function(e,t,r){if(t)e.call(r);else for(var i=e.length,n=tu(e,i),o=0;o0;)if(r[o]===t||r[o].listener&&r[o].listener===t){s=r[o].listener,n=o;break}if(n<0)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new Kc,this;delete i[e]}else!function(e,t){for(var r=t,i=r+1,n=e.length;i0?Reflect.ownKeys(this._events):[]};var ru,iu,nu=V(Object.freeze({__proto__:null,EventEmitter:Jc,default:Jc})),ou=fu(f.fetch)&&fu(f.ReadableStream);function su(e){iu||(iu=new f.XMLHttpRequest).open("GET",f.location.host?"/":"https://example.com");try{return iu.responseType=e,iu.responseType===e}catch(e){return!1}}var au=void 0!==f.ArrayBuffer,cu=au&&fu(f.ArrayBuffer.prototype.slice),uu=au&&su("arraybuffer"),lu=!ou&&cu&&su("ms-stream"),hu=!ou&&au&&su("moz-chunked-arraybuffer"),du=fu(iu.overrideMimeType),pu=fu(f.VBArray);function fu(e){return"function"==typeof e}function gu(){this.head=null,this.tail=null,this.length=0}iu=null,gu.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},gu.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},gu.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},gu.prototype.clear=function(){this.head=this.tail=null,this.length=0},gu.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},gu.prototype.concat=function(e){if(0===this.length)return Ee.alloc(0);if(1===this.length)return this.head.data;for(var t=Ee.allocUnsafe(e>>>0),r=this.head,i=0;r;)r.data.copy(t,i),i+=r.data.length,r=r.next;return t};var vu=Ee.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function mu(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),function(e){if(e&&!vu(e))throw new Error("Unknown encoding: "+e)}(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=wu;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=bu;break;default:return void(this.write=yu)}this.charBuffer=new Ee(6),this.charReceived=0,this.charLength=0}function yu(e){return e.toString(this.encoding)}function wu(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function bu(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}mu.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var i=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,i),i-=this.charReceived);var n;i=(t+=e.toString(this.encoding,0,i)).length-1;if((n=t.charCodeAt(i))>=55296&&n<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),e.copy(this.charBuffer,0,0,o),t.substring(0,i)}return t},mu.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(t<=2&&r>>4==14){this.charLength=3;break}if(t<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=t},mu.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,i=this.charBuffer,n=this.encoding;t+=i.slice(0,r).toString(n)}return t},Iu.ReadableState=Su;var Eu=Ba("stream");function Su(e,t){e=e||{},this.objectMode=!!e.objectMode,t instanceof Xu&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=~~this.highWaterMark,this.buffer=new gu,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(this.decoder=new mu(e.encoding),this.encoding=e.encoding)}function Iu(e){if(!(this instanceof Iu))return new Iu(e);this._readableState=new Su(e,this),this.readable=!0,e&&"function"==typeof e.read&&(this._read=e.read),Jc.call(this)}function Au(e,t,r,i,n){var o=function(e,t){var r=null;Ee.isBuffer(t)||"string"==typeof t||null==t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));return r}(t,r);if(o)e.emit("error",o);else if(null===r)t.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,Ru(e)}(e,t);else if(t.objectMode||r&&r.length>0)if(t.ended&&!n){var s=new Error("stream.push() after EOF");e.emit("error",s)}else if(t.endEmitted&&n){var a=new Error("stream.unshift() after end event");e.emit("error",a)}else{var c;!t.decoder||n||i||(r=t.decoder.write(r),c=!t.objectMode&&0===r.length),n||(t.reading=!1),c||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&Ru(e))),function(e,t){t.readingMore||(t.readingMore=!0,T(Cu,e,t))}(e,t)}else n||(t.reading=!1);return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=Pu?e=Pu:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function Ru(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(Eu("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?T(Ou,e):Ou(e))}function Ou(e){Eu("emit readable"),e.emit("readable"),_u(e)}function Cu(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var i;eo.length?o.length:e;if(s===o.length?n+=o:n+=o.slice(0,e),0===(e-=s)){s===o.length?(++i,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=o.slice(s));break}++i}return t.length-=i,n}(e,t):function(e,t){var r=Ee.allocUnsafe(e),i=t.head,n=1;i.data.copy(r),e-=i.data.length;for(;i=i.next;){var o=i.data,s=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,s),0===(e-=s)){s===o.length?(++n,i.next?t.head=i.next:t.head=t.tail=null):(t.head=i,i.data=o.slice(s));break}++n}return t.length-=n,r}(e,t);return i}(e,t.buffer,t.decoder),r);var r}function Du(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,T(qu,t,e))}function qu(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function Fu(e,t){for(var r=0,i=e.length;r=t.highWaterMark||t.ended))return Eu("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?Du(this):Ru(this),null;if(0===(e=Tu(e,t))&&t.ended)return 0===t.length&&Du(this),null;var i,n=t.needReadable;return Eu("need readable",n),(0===t.length||t.length-e0?xu(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&Du(this)),null!==i&&this.emit("data",i),i},Iu.prototype._read=function(e){this.emit("error",new Error("not implemented"))},Iu.prototype.pipe=function(e,t){var r=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,Eu("pipe count=%d opts=%j",i.pipesCount,t);var n=!t||!1!==t.end?s:u;function o(e){Eu("onunpipe"),e===r&&u()}function s(){Eu("onend"),e.end()}i.endEmitted?T(n):r.once("end",n),e.on("unpipe",o);var a=function(e){return function(){var t=e._readableState;Eu("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&e.listeners("data").length&&(t.flowing=!0,_u(e))}}(r);e.on("drain",a);var c=!1;function u(){Eu("cleanup"),e.removeListener("close",p),e.removeListener("finish",f),e.removeListener("drain",a),e.removeListener("error",d),e.removeListener("unpipe",o),r.removeListener("end",s),r.removeListener("end",u),r.removeListener("data",h),c=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||a()}var l=!1;function h(t){Eu("ondata"),l=!1,!1!==e.write(t)||l||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==Fu(i.pipes,e))&&!c&&(Eu("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,l=!0),r.pause())}function d(t){var r;Eu("onerror",t),g(),e.removeListener("error",d),0===(r="error",e.listeners(r).length)&&e.emit("error",t)}function p(){e.removeListener("finish",f),g()}function f(){Eu("onfinish"),e.removeListener("close",p),g()}function g(){Eu("unpipe"),r.unpipe(e)}return r.on("data",h),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",d),e.once("close",p),e.once("finish",f),e.emit("pipe",r),i.flowing||(Eu("pipe resume"),r.resume()),e},Iu.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this)),this;if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var n=0;n-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Mu.prototype._write=function(e,t,r){r(new Error("not implemented"))},Mu.prototype._writev=null,Mu.prototype.end=function(e,t,r){var i=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||i.finished||function(e,t,r){t.ending=!0,Wu(e,t),r&&(t.finished?T(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,i,r)},ba(Xu,Iu);for(var Yu=Object.keys(Mu.prototype),Ku=0;Kue._pos){var i=r.substr(e._pos);if("x-user-defined"===e._charset){for(var n=new Ee(i.length),o=0;oe._pos&&(e.push(new Ee(new Uint8Array(s.result.slice(e._pos)))),e._pos=s.result.byteLength)},s.onload=function(){e.push(null)},s.readAsArrayBuffer(r)}e._xhr.readyState===tl&&"ms-stream"!==e._mode&&e.push(null)},ba(il,Mu);var nl=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];function ol(e,t){"string"==typeof e&&(e=Mc(e));var r=-1===f.location.protocol.search(/^https?:$/)?"http:":"",i=e.protocol||r,n=e.hostname||e.host,o=e.port,s=e.path||"/";n&&-1!==n.indexOf(":")&&(n="["+n+"]"),e.url=(n?i+"//"+n:"")+(o?":"+o:"")+s,e.method=(e.method||"GET").toUpperCase(),e.headers=e.headers||{};var a=new il(e);return t&&a.on("response",t),a}function sl(e,t){var r=ol(e,t);return r.end(),r}function al(){}il.prototype.setHeader=function(e,t){var r=e.toLowerCase();-1===nl.indexOf(r)&&(this._headers[r]={name:e,value:t})},il.prototype.getHeader=function(e){return this._headers[e.toLowerCase()].value},il.prototype.removeHeader=function(e){delete this._headers[e.toLowerCase()]},il.prototype._onFinish=function(){var e=this;if(!e._destroyed){var t,r=e._opts,i=e._headers;if("POST"!==r.method&&"PUT"!==r.method&&"PATCH"!==r.method||(t=function(){if(void 0!==ru)return ru;try{new f.Blob([new ArrayBuffer(1)]),ru=!0}catch(e){ru=!1}return ru}()?new f.Blob(e._body.map((function(e){return function(e){if(e instanceof Uint8Array){if(0===e.byteOffset&&e.byteLength===e.buffer.byteLength)return e.buffer;if("function"==typeof e.buffer.slice)return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}if(nt(e)){for(var t=new Uint8Array(e.length),r=e.length,i=0;il.length-w&&((y=2*l.length+e.length)>Tl&&(y=l.length+e.length+Tl),h=Ee.alloc(y),l.copy(h,0,0,w),l=h),e.copy(l,w),w+=e.length):(function(e){return Pl.every((function(t,r){return e[r]===t}))}(l=e)&&(l=l.slice(Pl.length)),w=l.length);for(var t=0,r=w;t0&&(l=l.slice(t,w),w=l.length)}))})),o.on("error",(function(e){s.connectionInProgress=!1,a(e.message)})),o.setNoDelay&&o.setNoDelay(!0),o.end()}function f(){s.listeners(arguments[0]).length>0&&s.emit.apply(s,arguments)}function g(t,r,i,n){if(0===n){if(l.length>0){var o=h||"message";f(o,new kl(o,{data:l.slice(0,-1),lastEventId:c,origin:new URL(e).origin})),l=""}h=void 0}else if(i>0){var a=i<0,u=0,d=t.slice(r,r+(a?n:i)).toString();r+=u=a?n:32!==t[r+i+1]?i+1:i+2;var p=n-u,g=t.slice(r,r+p).toString();if("data"===d)l+=g+"\n";else if("event"===d)h=g;else if("id"===d)c=g;else if("retry"===d){var v=parseInt(g,10);Number.isNaN(v)||(s.reconnectInterval=v)}}}p(),this._close=function(){r!==Ol.CLOSED&&(r=Ol.CLOSED,o.abort&&o.abort(),o.xhr&&o.xhr.abort&&o.xhr.abort())}}var Cl=Ol;function Nl(e,t){if(Object.defineProperty(this,"type",{writable:!1,value:e,enumerable:!0}),t)for(var r in t)t.hasOwnProperty(r)&&Object.defineProperty(this,r,{writable:!1,value:t[r],enumerable:!0})}function kl(e,t){for(var r in Object.defineProperty(this,"type",{writable:!1,value:e,enumerable:!0}),t)t.hasOwnProperty(r)&&Object.defineProperty(this,r,{writable:!1,value:t[r],enumerable:!0})}wl.inherits(Ol,El.EventEmitter),Ol.prototype.constructor=Ol,["open","error","message"].forEach((function(e){Object.defineProperty(Ol.prototype,"on"+e,{get:function(){var t=this.listeners(e)[0];return t?t._listener?t._listener:t:void 0},set:function(t){this.removeAllListeners(e),this.addEventListener(e,t)}})})),Object.defineProperty(Ol,"CONNECTING",{enumerable:!0,value:0}),Object.defineProperty(Ol,"OPEN",{enumerable:!0,value:1}),Object.defineProperty(Ol,"CLOSED",{enumerable:!0,value:2}),Ol.prototype.CONNECTING=0,Ol.prototype.OPEN=1,Ol.prototype.CLOSED=2,Ol.prototype.close=function(){this._close()},Ol.prototype.addEventListener=function(e,t){"function"==typeof t&&(t._listener=t,this.on(e,t))},Ol.prototype.dispatchEvent=function(e){if(!e.type)throw new Error("UNSPECIFIED_EVENT_TYPE_ERR");this.emit(e.type,e.detail)},Ol.prototype.removeEventListener=function(e,t){"function"==typeof t&&(t._listener=void 0,this.removeListener(e,t))};var _l=L(Cl);const xl="0.15.2";class Dl{constructor(e){this.debitNoteEvents$=new qs,this.debitNoteEventsPoll=null,this.invoiceEvents$=new qs,this.invoiceEventPoll=null,this.agreementEvents$=new qs,this.agreementEventsPoll=null;const t=(null==e?void 0:e.apiKey)||X();this.basePath=(null==e?void 0:e.basePath)||J();const r={apiKey:t,basePath:this.basePath};if(!r.apiKey)throw new n("Yagna API key not defined");const i={Authorization:`Bearer ${t}`},o=new $n.Client({BASE:`${this.basePath}/market-api/v1`,HEADERS:i});this.market=o.requestor;const s=new Ln.Client({BASE:`${this.basePath}/payment-api/v1`,HEADERS:i});this.payment=s.requestor;const a=new Mn.Client({BASE:`${this.basePath}/activity-api/v1`,HEADERS:i});this.activity={control:a.requestorControl,state:a.requestorState,exec:{observeBatchExecResults:(e,r)=>new Cs((i=>{const n=new _l(`${this.basePath}/activity-api/v1/activity/${e}/exec/${r}`,{headers:{Accept:"text/event-stream",Authorization:`Bearer ${t}`}});return n.addEventListener("runtime",(e=>i.next(JSON.parse(e.data)))),n.addEventListener("error",(e=>i.error(e))),()=>n.close()}))}};const c=new Vn.Client({BASE:`${this.basePath}/net-api/v1`,HEADERS:i});this.net=c.requestor;const u=new Un.Client({BASE:`${this.basePath}/gsb-api/v1`,HEADERS:i});this.gsb=u.requestor,this.logger=(null==e?void 0:e.logger)?e.logger.child("yagna"):K("yagna");const l=new Hn.Client({BASE:this.basePath,HEADERS:i});this.identity=l.default;const h=new jn.Client({BASE:this.basePath});this.version=h.default,this.yagnaOptions=r,this.appSessionId=Xn(),this.reader=new wa(this.logger)}async connect(){this.logger.debug("Connecting to Yagna");const e=await this.assertSupportedVersion(),t=await this.identity.getIdentity();return this.startPollingEvents(),this.logger.info("Connected to Yagna",{version:e,identity:t.identity}),t}async disconnect(){this.logger.debug("Disconnecting from Yagna"),await this.stopPollingEvents(),this.logger.info("Disconnected from Yagna")}async getVersion(){try{return(await this.version.getVersion()).current.version}catch(e){throw new s(`Failed to establish yagna version due to: ${e}`,e)}}startPollingEvents(){this.logger.debug("Starting to poll for events from Yagna",{appSessionId:this.appSessionId});this.agreementEventsPoll=this.reader.createReader("AgreementEvents",(e=>this.market.collectAgreementEvents(5,e,100,this.appSessionId))),this.debitNoteEventsPoll=this.reader.createReader("DebitNoteEvents",(e=>this.payment.getDebitNoteEvents(5,e,100,this.appSessionId))),this.invoiceEventPoll=this.reader.createReader("InvoiceEvents",(e=>this.payment.getInvoiceEvents(5,e,100,this.appSessionId))),this.reader.pollToSubject(this.agreementEventsPoll.pollValues(),this.agreementEvents$).then((()=>this.logger.debug("Finished polling agreement events from Yagna"))).catch((e=>this.logger.error("Error while polling agreement events from Yagna",e))),this.reader.pollToSubject(this.debitNoteEventsPoll.pollValues(),this.debitNoteEvents$).then((()=>this.logger.debug("Finished polling debit note events from Yagna"))).catch((e=>this.logger.error("Error while polling debit note events from Yagna",e))),this.reader.pollToSubject(this.invoiceEventPoll.pollValues(),this.invoiceEvents$).then((()=>this.logger.debug("Finished polling invoice events from Yagna"))).catch((e=>this.logger.error("Error while polling invoice events from Yagna",e)))}async stopPollingEvents(){this.logger.debug("Stopping polling events from Yagna");const e=[];this.invoiceEventPoll&&e.push(this.invoiceEventPoll.cancel()),this.debitNoteEventsPoll&&e.push(this.debitNoteEventsPoll.cancel()),this.agreementEventsPoll&&e.push(this.agreementEventsPoll.cancel()),await Promise.allSettled(e),this.logger.debug("Stopped polling events from Yagna")}async assertSupportedVersion(){const e=await this.getVersion(),t=Yo(e);if(this.logger.debug("Checking Yagna version support",{userInstalled:null==t?void 0:t.raw,minSupported:xl}),!t)throw new s(`Unreadable yagna version '${e}'. Can't proceed without checking yagna version support status.`);if(!Mo(t,`>=${xl}`))throw new s(`You run yagna in version ${e} and the minimal version supported by the SDK is ${xl}. Please consult the golem-js README to find matching SDK version or upgrade your yagna installation.`);return t.version}}function ql(e){return e instanceof AbortSignal?e:"number"==typeof e?AbortSignal.timeout(e):(new AbortController).signal}function Fl(...e){const t=new AbortController,r=e=>{if(t.signal.aborted)return;const r=e.target.reason;t.abort(r)};for(const i of e){if(i.aborted){t.abort(i.reason);break}i.addEventListener("abort",r)}return{signal:t.signal,cleanup:()=>{for(const t of e)t.removeEventListener("abort",r)}}}function Bl(e){return new Promise(((t,r)=>{setTimeout((()=>e().then(t).catch(r)))}))}function jl(e,t){const r=new qs,i=e.pipe(ga(r),da((()=>r.next()))),n=t.pipe(ga(r),da((()=>r.next())));return i.pipe(function(){for(var e=[],t=0;t"golem.usage.duration_sec"===e)),s=r.findIndex((e=>"golem.usage.cpu_sec"===e)),a=null!==(e=i[n])&&void 0!==e?e:0;return{cpuSec:null!==(t=i[s])&&void 0!==t?t:0,envSec:a,start:i[i.length-1]}}getDto(){return{transferProtocol:this.properties["golem.activity.caps.transfer.protocol"],cpuBrand:this.properties["golem.inf.cpu.brand"],cpuCapabilities:this.properties["golem.inf.cpu.capabilities"],cpuCores:this.properties["golem.inf.cpu.cores"],cpuThreads:this.properties["golem.inf.cpu.threads"],memory:this.properties["golem.inf.mem.gib"],storage:this.properties["golem.inf.storage.gib"],publicNet:this.properties["golem.node.net.is-public"],runtimeCapabilities:this.properties["golem.runtime.capabilities"],runtimeName:this.properties["golem.runtime.name"],runtimeVersion:this.properties["golem.runtime.version"],state:this.state}}getEstimatedCost(e=1){var t;const r=null!==(t=this.getDto().cpuThreads)&&void 0!==t?t:1,i=60*e*60;return this.pricing.start+this.pricing.cpuSec*r*i+this.pricing.envSec*i}get provider(){return{id:this.model.issuerId,name:this.properties["golem.node.id.name"],walletAddress:this.properties[`golem.com.payment.platform.${this.demand.paymentPlatform}.address`]}}validate(){const e=this.properties["golem.com.usage.vector"],t=this.properties["golem.com.pricing.model.linear.coeffs"];if(!e||0===e.length)throw new Vl("Broken proposal: the `golem.com.usage.vector` does not contain valid information about structure of the usage counters vector",Ll.InvalidProposal);if(!t||0===t.length)throw new Vl("Broken proposal: the `golem.com.pricing.model.linear.coeffs` does not contain pricing information",Ll.InvalidProposal);if(e.lengthe.startsWith("golem.com.payment.platform."))).map((e=>e.split(".")[4]))||[]}}var zl=Object.freeze({__proto__:null,acceptAll:()=>()=>!0,allowProvidersById:e=>t=>e.includes(t.provider.id),allowProvidersByName:e=>t=>e.includes(t.provider.name),allowProvidersByNameRegex:e=>t=>!!t.provider.name.match(e),disallowProvidersById:e=>t=>!e.includes(t.provider.id),disallowProvidersByName:e=>t=>!e.includes(t.provider.name),disallowProvidersByNameRegex:e=>t=>!t.provider.name.match(e),limitPriceFilter:e=>t=>t.pricing.cpuSec<=e.cpuPerSec&&t.pricing.envSec<=e.envPerSec&&t.pricing.start<=e.start});var Wl=Object.freeze({__proto__:null,getHealthyProvidersWhiteList:async function(){try{const e=await fetch("https://reputation.golem.network/v1/provider-whitelist");if(e.ok)return e.json();{const t=await e.text();throw new o(`Request to download healthy provider whitelist failed: ${t}`)}}catch(e){throw new o(`Failed to download healthy provider whitelist due to an error: ${e}`,e)}}}),Gl={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function i(){}function n(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function o(e,t,i,o,s){if("function"!=typeof i)throw new TypeError("The listener must be a function");var a=new n(i,o||e,s),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function s(e,t){0==--e._eventsCount?e._events=new i:delete e._events[t]}function a(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),(new i).__proto__||(r=!1)),a.prototype.eventNames=function(){var e,i,n=[];if(0===this._eventsCount)return n;for(i in e=this._events)t.call(e,i)&&n.push(r?i.slice(1):i);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},a.prototype.listeners=function(e){var t=r?r+e:e,i=this._events[t];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,o=i.length,s=new Array(o);n{e=r,t=i}));return{resolve:e,reject:t,promise:r}}();this.queue.push(i);const o=new Promise(((e,r)=>{t.addEventListener("abort",(()=>{this.queue=this.queue.filter((e=>e!==i)),r(t.reason)}))}));return Promise.race([n,o]).finally(r)}hasAcquirers(){return this.queue.length>0}put(e){if(!this.hasAcquirers())throw new o("No acquirers waiting for the item");this.queue.shift()(e)}size(){return this.queue.length}}class Jl{constructor(e){this.options=e,this.events=new Yl,this.acquireQueue=new Kl,this.minCount=0,this.selectOfferProposal=e=>e[0],this.validateOfferProposal=e=>void 0!==e,this.available=new Set,this.leased=new Set,(null==e?void 0:e.selectOfferProposal)&&(this.selectOfferProposal=e.selectOfferProposal),(null==e?void 0:e.validateOfferProposal)&&(this.validateOfferProposal=e.validateOfferProposal),(null==e?void 0:e.minCount)&&e.minCount>=0&&(this.minCount=e.minCount),this.logger=this.logger=(null==e?void 0:e.logger)||K("proposal-pool")}add(e){if(!e.isDraft())throw this.logger.error("Cannot add a non-draft proposal to the pool",{proposalId:e.id}),new Vl("Cannot add a non-draft proposal to the pool",Ll.InvalidProposal);this.acquireQueue.hasAcquirers()?this.acquireQueue.put(e):(this.available.add(e),this.events.emit("added",{proposal:e}))}async acquire(e){const t=ql(e);t.throwIfAborted();const r=async()=>{t.throwIfAborted();const e=this.available.size>0?this.selectOfferProposal([...this.available]):null;if(e)return this.validateOfferProposal(e)?e:(this.removeFromAvailable(e),Bl(r))},i=await r();return i?(this.available.delete(i),this.leased.add(i),this.events.emit("acquired",{proposal:i}),i):this.acquireQueue.get(t)}release(e){if(this.leased.delete(e),this.validateOfferProposal(e)){if(this.events.emit("released",{proposal:e}),this.acquireQueue.hasAcquirers())return void this.acquireQueue.put(e);this.available.add(e)}else this.events.emit("removed",{proposal:e})}remove(e){this.leased.has(e)&&(this.leased.delete(e),this.events.emit("removed",{proposal:e})),this.available.has(e)&&(this.available.delete(e),this.events.emit("removed",{proposal:e}))}count(){return this.availableCount()+this.leasedCount()}availableCount(){return this.available.size}leasedCount(){return this.leased.size}isReady(){return this.count()>=this.minCount}async clear(){this.acquireQueue.releaseAll();for(const e of this.available)this.available.delete(e),this.events.emit("removed",{proposal:e});for(const e of this.leased)this.leased.delete(e),this.events.emit("removed",{proposal:e});this.available=new Set,this.leased=new Set,this.events.emit("cleared")}removeFromAvailable(e){this.available.delete(e),this.events.emit("removed",{proposal:e})}readFrom(e){return e.subscribe({next:e=>this.add(e),error:e=>this.logger.error("Error while collecting proposals",e)})}}class Xl extends Ul{constructor(e){super(e),this.issuer="Requestor"}validate(){}}var Ql=function(e){if(e=e||{},this.Promise=e.Promise||Promise,this.queues=Object.create(null),this.domainReentrant=e.domainReentrant||!1,this.domainReentrant){if(void 0===$||void 0===$.domain)throw new Error("Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, use a NodeJS version that still implements Domain, or install a browser polyfill.");this.domains=Object.create(null)}this.timeout=e.timeout||Ql.DEFAULT_TIMEOUT,this.maxOccupationTime=e.maxOccupationTime||Ql.DEFAULT_MAX_OCCUPATION_TIME,this.maxExecutionTime=e.maxExecutionTime||Ql.DEFAULT_MAX_EXECUTION_TIME,e.maxPending===1/0||Number.isInteger(e.maxPending)&&e.maxPending>=0?this.maxPending=e.maxPending:this.maxPending=Ql.DEFAULT_MAX_PENDING};Ql.DEFAULT_TIMEOUT=0,Ql.DEFAULT_MAX_OCCUPATION_TIME=0,Ql.DEFAULT_MAX_EXECUTION_TIME=0,Ql.DEFAULT_MAX_PENDING=1e3,Ql.prototype.acquire=function(e,t,r,i){if(Array.isArray(e))return this._acquireBatch(e,t,r,i);if("function"!=typeof t)throw new Error("You must pass a function to execute");var n=null,o=null,s=null;"function"!=typeof r&&(i=r,r=null,s=new this.Promise((function(e,t){n=e,o=t}))),i=i||{};var a=!1,c=null,u=null,l=null,h=this,d=function(t,i,c){u&&(clearTimeout(u),u=null),l&&(clearTimeout(l),l=null),t&&(h.queues[e]&&0===h.queues[e].length&&delete h.queues[e],h.domainReentrant&&delete h.domains[e]),a||(s?i?o(i):n(c):"function"==typeof r&&r(i,c),a=!0),t&&h.queues[e]&&h.queues[e].length>0&&h.queues[e].shift()()},p=function(r){if(a)return d(r);c&&(clearTimeout(c),c=null),h.domainReentrant&&r&&(h.domains[e]=$.domain);var n=i.maxExecutionTime||h.maxExecutionTime;if(n&&(l=setTimeout((function(){h.queues[e]&&d(r,new Error("Maximum execution time is exceeded "+e))}),n)),1===t.length){var o=!1;try{t((function(e,t){o||(o=!0,d(r,e,t))}))}catch(e){o||(o=!0,d(r,e))}}else h._promiseTry((function(){return t()})).then((function(e){d(r,void 0,e)}),(function(e){d(r,e)}))};h.domainReentrant&&$.domain&&(p=$.domain.bind(p));var f=i.maxPending||h.maxPending;if(h.queues[e])if(h.domainReentrant&&$.domain&&$.domain===h.domains[e])p(!1);else if(h.queues[e].length>=f)d(!1,new Error("Too many pending tasks in queue "+e));else{var g=function(){p(!0)};i.skipQueue?h.queues[e].unshift(g):h.queues[e].push(g);var v=i.timeout||h.timeout;v&&(c=setTimeout((function(){c=null,d(!1,new Error("async-lock timed out in queue "+e))}),v))}else h.queues[e]=[],p(!0);var m=i.maxOccupationTime||h.maxOccupationTime;return m&&(u=setTimeout((function(){h.queues[e]&&d(!1,new Error("Maximum occupation time is exceeded in queue "+e))}),m)),s||void 0},Ql.prototype._acquireBatch=function(e,t,r,i){"function"!=typeof r&&(i=r,r=null);var n=this,o=e.reduceRight((function(e,t){return function(e,t){return function(r){n.acquire(e,t,r,i)}}(t,e)}),t);if("function"!=typeof r)return new this.Promise((function(e,t){1===o.length?o((function(r,i){r?t(r):e(i)})):e(o())}));o(r)},Ql.prototype.isBusy=function(e){return e?!!this.queues[e]:Object.keys(this.queues).length>0},Ql.prototype._promiseTry=function(e){try{return this.Promise.resolve(e())}catch(e){return this.Promise.reject(e)}};var Zl=L(Ql);const eh=100,th=1e3;class rh{constructor(e){var t,r;this.batch=new Map,this.lock=new Zl,this.config={minBatchSize:null!==(t=null==e?void 0:e.minBatchSize)&&void 0!==t?t:eh,releaseTimeoutMs:null!==(r=null==e?void 0:e.releaseTimeoutMs)&&void 0!==r?r:th}}async addProposal(e){const t=this.getProviderKey(e);await this.lock.acquire("proposals-batch",(()=>{let r=this.batch.get(t);r||(r=new Set,this.batch.set(t,r)),r.add(e)}))}async getProposals(){const e=[];return await this.lock.acquire("proposals-batch",(()=>{this.batch.forEach((t=>e.push(this.getBestProposal(t)))),this.batch.clear()})),e}async waitForProposals(){let e,t;const r=new Promise((t=>{e=setTimeout(t,this.config.releaseTimeoutMs)})),i=new Promise((e=>{t=setInterval((()=>{this.batch.size>=this.config.minBatchSize&&e(!0)}),1e3)}));await Promise.race([r,i]),clearTimeout(e),clearInterval(t)}getBestProposal(e){return[...e].sort(((e,t)=>{const r=e.getEstimatedCost(),i=t.getEstimatedCost(),n=e.timestamp.valueOf(),o=t.timestamp.valueOf();return r!==i?r-i:o-n}))[0]}getProviderKey(e){return[e.provider.id,e.properties["golem.inf.cpu.cores"],e.properties["golem.inf.cpu.threads"],e.properties["golem.inf.mem.gib"],e.properties["golem.inf.storage.gib"]].join("-")}}var ih,nh;!function(e){e.Eq="=",e.Lt="<",e.Gt=">",e.GtEq=">=",e.LtEq="<="}(ih||(ih={}));class oh{constructor(){this.properties=[],this.constraints=[]}addProperty(e,t){const r=this.properties.findIndex((t=>t.key===e));return r>=0?this.properties[r]={key:e,value:t}:this.properties.push({key:e,value:t}),this}addConstraint(e,t,r=ih.Eq){return this.constraints.push({key:e,value:t,comparisonOperator:r}),this}getProduct(){return{properties:this.properties,constraints:this.constraints.map((e=>`(${e.key+e.comparisonOperator+e.value})`))}}mergePrototype(e){return e.properties&&e.properties.forEach((e=>{this.addProperty(e.key,e.value)})),e.constraints&&e.constraints.forEach((e=>{const{key:t,value:r,comparisonOperator:i}={...this.parseConstraint(e)};this.addConstraint(t,r,i)})),this}parseConstraint(e){for(const t in ih){const r=ih[t],i=e.slice(1,-1).split(r);if(2===i.length)return{key:i[0],value:i[1],comparisonOperator:r}}throw new o(`Unable to parse constraint "${e}"`)}}class sh{isPositiveInt(e){return e>0&&Number.isInteger(e)}}!function(e){e.GVMKitSquash="gvmkit-squash"}(nh||(nh={}));class ah extends sh{constructor(e){var t;if(super(),this.packageFormat=nh.GVMKitSquash,this.engine="vm",this.runtime={name:"vm",version:void 0},this.minMemGib=.5,this.minStorageGib=2,this.minCpuThreads=1,this.minCpuCores=1,this.capabilities=[],this.useHttps=!1,Object.assign(this,e),(null===(t=e.runtime)||void 0===t?void 0:t.name)||(this.runtime.name=this.engine),this.expirationSec=e.expirationSec,!(this.imageHash||this.manifest||this.imageTag||this.imageUrl))throw new n("You must define a package or manifest option");if(this.imageUrl&&!this.imageHash)throw new n("If you provide an imageUrl, you must also provide it's SHA3-224 hash in imageHash");if(!this.isPositiveInt(this.expirationSec))throw new n(`The expirationSec param has to be a positive integer, received: ${this.expirationSec}`);if(e.engine&&e.runtime)throw new n("The engine parameter is deprecated and cannot be used with the runtime parameter. Use the runtime option only")}}class ch extends sh{constructor(e){super(),this.subnetTag=Q(),(null==e?void 0:e.subnetTag)&&(this.subnetTag=e.subnetTag)}}class uh{constructor(e=new ch){this.config=e}apply(e){e.addProperty("golem.srv.caps.multi-activity",!0).addProperty("golem.node.debug.subnet",this.config.subnetTag),e.addConstraint("golem.com.pricing.model","linear").addConstraint("golem.node.debug.subnet",this.config.subnetTag)}}class lh extends sh{constructor(e){if(super(),this.debitNotesAcceptanceTimeoutSec=120,this.midAgreementDebitNoteIntervalSec=120,this.midAgreementPaymentTimeoutSec=43200,e&&Object.assign(this,e),!this.isPositiveInt(this.debitNotesAcceptanceTimeoutSec))throw new n("The debit note acceptance timeout time has to be a positive integer");if(!this.isPositiveInt(this.midAgreementDebitNoteIntervalSec))throw new n("The debit note interval time has to be a positive integer");if(!this.isPositiveInt(this.midAgreementPaymentTimeoutSec))throw new n("The mid-agreement payment timeout time has to be a positive integer")}}class hh{constructor(e,t,r=new lh){this.allocation=e,this.marketApiAdapter=t,this.config=r}async apply(e){e.addProperty("golem.com.scheme.payu.debit-note.interval-sec?",this.config.midAgreementDebitNoteIntervalSec).addProperty("golem.com.scheme.payu.payment-timeout-sec?",this.config.midAgreementPaymentTimeoutSec).addProperty("golem.com.payment.debit-notes.accept-timeout?",this.config.debitNotesAcceptanceTimeoutSec);const{constraints:t,properties:r}=await this.marketApiAdapter.getPaymentRelatedDemandDecorations(this.allocation.id);e.mergePrototype({constraints:t,properties:r})}}class dh{constructor(e){this.config=e}async apply(e){if(e.addProperty("golem.srv.comp.expiration",Date.now()+1e3*this.config.expirationSec),e.addProperty("golem.srv.comp.vm.package_format",this.config.packageFormat).addConstraint("golem.runtime.name",this.config.runtime.name),this.config.runtime.version&&e.addConstraint("golem.runtime.version",this.config.runtime.version),this.config.capabilities.length&&this.config.capabilities.forEach((t=>e.addConstraint("golem.runtime.capabilities",t))),e.addConstraint("golem.inf.mem.gib",this.config.minMemGib,ih.GtEq).addConstraint("golem.inf.storage.gib",this.config.minStorageGib,ih.GtEq).addConstraint("golem.inf.cpu.cores",this.config.minCpuCores,ih.GtEq).addConstraint("golem.inf.cpu.threads",this.config.minCpuThreads,ih.GtEq),this.config.imageUrl){const t=await this.resolveTaskPackageFromCustomUrl();e.addProperty("golem.srv.comp.task_package",t)}else if(this.config.imageHash||this.config.imageTag){const t=await this.resolveTaskPackageUrl();e.addProperty("golem.srv.comp.task_package",t)}this.addManifestDecorations(e)}async resolveTaskPackageFromCustomUrl(){if(!this.config.imageUrl)throw new s("Tried to resolve task package from custom url, but no url was provided");if(!this.config.imageHash)throw new s("Tried to resolve task package from custom url, but no hash was provided. Please calculate the SHA3-224 hash of the image and provide it as `imageHash`");return`hash:sha3:${this.config.imageHash}:${this.config.imageUrl}`}async resolveTaskPackageUrl(){const e=Z(),r=this.config.useHttps,i=te();let n=this.config.imageHash;const o=this.config.imageTag,a=`${e}/v1/image/info?${i?"dev=true":"count=true"}&${o?`tag=${o}`:`hash=${n}`}`;try{const e=await fetch(a);if(!e.ok)throw new s(`Unable to get image ${await e.text()}`);const t=await e.json(),i=r?t.https:t.http;return n=t.sha3,`hash:sha3:${n}:${i}`}catch(e){if(e instanceof t)throw e;throw new s(`Failed to fetch image: ${e}`)}}addManifestDecorations(e){this.config.manifest&&(e.addProperty("golem.srv.comp.payload",this.config.manifest),this.config.manifestSig&&e.addProperty("golem.srv.comp.payload.sig",this.config.manifestSig),this.config.manifestSigAlgorithm&&e.addProperty("golem.srv.comp.payload.sig.algorithm",this.config.manifestSigAlgorithm),this.config.manifestCert&&e.addProperty("golem.srv.comp.payload.cert",this.config.manifestCert))}}class ph{constructor(e){this.options=e}async apply(e){this.addWorkloadDecorations(e),this.addGenericDecorations(e),this.addPaymentDecorations(e)}addPaymentDecorations(e){if(!this.options.payment)return;const t=this.options.payment.network,r=this.options.payment.driver||"erc20",i=this.options.payment.token||["mainnet","polygon"].includes(t)?"glm":"tglm";e.addConstraint(`golem.com.payment.platform.${r}-${t}-${i}.address`,"*")}addWorkloadDecorations(e){var t,r,i,o,s,a,c,u,l,h,d,p,f,g,v,m,y,w,b,E,S,I,A,P,T,R;if((null===(t=this.options.workload)||void 0===t?void 0:t.engine)&&(null===(r=this.options.workload)||void 0===r?void 0:r.runtime))throw new n("The engine parameter is deprecated and cannot be used with the runtime parameter. Use the runtime parameter only");(null===(i=this.options.workload)||void 0===i?void 0:i.engine)&&e.addConstraint("golem.runtime.name",null===(o=this.options.workload)||void 0===o?void 0:o.engine),(null===(a=null===(s=this.options.workload)||void 0===s?void 0:s.runtime)||void 0===a?void 0:a.name)&&e.addConstraint("golem.runtime.name",this.options.workload.runtime.name),(null===(u=null===(c=this.options.workload)||void 0===c?void 0:c.runtime)||void 0===u?void 0:u.version)&&e.addConstraint("golem.runtime.version",this.options.workload.runtime.version),(null===(l=this.options.workload)||void 0===l?void 0:l.capabilities)&&(null===(h=this.options.workload)||void 0===h||h.capabilities.forEach((t=>e.addConstraint("golem.runtime.capabilities",t)))),(null===(d=this.options.workload)||void 0===d?void 0:d.minMemGib)&&e.addConstraint("golem.inf.mem.gib",null===(p=this.options.workload)||void 0===p?void 0:p.minMemGib,ih.GtEq),(null===(f=this.options.workload)||void 0===f?void 0:f.maxMemGib)&&e.addConstraint("golem.inf.mem.gib",null===(g=this.options.workload)||void 0===g?void 0:g.maxMemGib,ih.LtEq),(null===(v=this.options.workload)||void 0===v?void 0:v.minStorageGib)&&e.addConstraint("golem.inf.storage.gib",null===(m=this.options.workload)||void 0===m?void 0:m.minStorageGib,ih.GtEq),(null===(y=this.options.workload)||void 0===y?void 0:y.maxStorageGib)&&e.addConstraint("golem.inf.storage.gib",null===(w=this.options.workload)||void 0===w?void 0:w.maxStorageGib,ih.LtEq),(null===(b=this.options.workload)||void 0===b?void 0:b.minCpuThreads)&&e.addConstraint("golem.inf.cpu.threads",null===(E=this.options.workload)||void 0===E?void 0:E.minCpuThreads,ih.GtEq),(null===(S=this.options.workload)||void 0===S?void 0:S.maxCpuThreads)&&e.addConstraint("golem.inf.cpu.threads",null===(I=this.options.workload)||void 0===I?void 0:I.maxCpuThreads,ih.LtEq),(null===(A=this.options.workload)||void 0===A?void 0:A.minCpuCores)&&e.addConstraint("golem.inf.cpu.cores",null===(P=this.options.workload)||void 0===P?void 0:P.minCpuCores,ih.GtEq),(null===(T=this.options.workload)||void 0===T?void 0:T.maxCpuCores)&&e.addConstraint("golem.inf.cpu.cores",null===(R=this.options.workload)||void 0===R?void 0:R.maxCpuCores,ih.LtEq)}addGenericDecorations(e){this.options.subnetTag&&e.addConstraint("golem.node.debug.subnet",this.options.subnetTag)}}class fh{constructor(e){this.model=e}get properties(){return this.model.properties}get constraints(){return this.model.constraints}get pricing(){var e,t;const r=this.properties["golem.com.usage.vector"],i=this.properties["golem.com.pricing.model.linear.coeffs"];if(!r)throw new o("The proposal does not contain 'golem.com.usage.vector' property. We can't estimate the costs.");if(!i)throw new o("The proposal does not contain 'golem.com.pricing.model.linear.coeffs' property. We can't estimate costs.");const n=r.findIndex((e=>"golem.usage.duration_sec"===e)),s=r.findIndex((e=>"golem.usage.cpu_sec"===e)),a=null!==(e=i[n])&&void 0!==e?e:0;return{cpuSec:null!==(t=i[s])&&void 0!==t?t:0,envSec:a,start:i[i.length-1]}}get provider(){return{id:this.model.providerId,name:this.properties["golem.node.id.name"]||""}}get transferProtocol(){return this.properties["golem.activity.caps.transfer.protocol"]}get cpuBrand(){return this.properties["golem.inf.cpu.brand"]}get cpuVendor(){return this.properties["golem.inf.cpu.vendor"]}get cpuCapabilities(){return this.properties["golem.inf.cpu.capabilities"]}get cpuCores(){return this.properties["golem.inf.cpu.cores"]}get cpuThreads(){return this.properties["golem.inf.cpu.threads"]}get gpuBrand(){return this.properties["golem.!exp.gap-35.v1.inf.gpu.model"]}get memory(){return this.memoryGib}get memoryGib(){return this.properties["golem.inf.mem.gib"]}get storage(){return this.storageGib}get storageGib(){return this.properties["golem.inf.storage.gib"]}get publicNet(){return this.properties["golem.node.net.is-public"]}get runtimeCapabilities(){return this.properties["golem.runtime.capabilities"]}get runtimeName(){return this.properties["golem.runtime.name"]}get runtimeVersion(){return this.properties["golem.runtime.version"]}get offerId(){return this.model.offerId}get offerCreateAt(){return this.model.timestamp}get paymentPlatformAddresses(){const e=/golem\.com\.payment\.platform\.([a-z0-9-]+)\.address/,t=Object.entries(this.model.properties).map((([t,r])=>{const i=t.match(e);return[i?i[1]:"",r]})).filter((([e])=>!!e));return Object.fromEntries(t)}getEstimatedCost(e=1){const t=this.cpuThreads,r=60*e*60;return this.pricing.start+this.pricing.cpuSec*t*r+this.pricing.envSec*r}}class gh{constructor(e,t){this.deps=e,this.events=new Yl,this.logger=K("market"),this.logger=e.logger,this.marketApi=e.marketApi,this.fileServer=e.fileServer,this.options={demandRefreshIntervalSec:1800,...t},this.collectAndEmitAgreementEvents()}async buildDemandDetails(e,t,r){const i=new oh,n=new ch({subnetTag:e.subnetTag});new uh(n).apply(i);const o=e.workload?await this.applyLocalGVMIServeSupport(e.workload):e.workload,s=Math.round(60*t.rentHours*60);s<300&&this.logger.warn("The declared value of rentHours is less than 5 min. This may cause offers to be rejected during negotiations.");const a=new ah({...o,expirationSec:s}),c=new dh(a);await c.apply(i);const u=new lh(e.payment),l=new hh(r,this.deps.marketApi,u);return await l.apply(i),new $l(i.getProduct(),r.paymentPlatform)}buildScanSpecification(e){const t=new oh;return new ph(e).apply(t),t.getProduct()}async applyLocalGVMIServeSupport(e){var t,r,i;if(null===(t=e.imageUrl)||void 0===t?void 0:t.startsWith("file://")){const t=null===(r=e.imageUrl)||void 0===r?void 0:r.replace("file://",""),n=null!==(i=this.fileServer.getPublishInfo(t))&&void 0!==i?i:await this.fileServer.publishFile(t),{fileUrl:o,fileHash:s}=n;return this.logger.debug("Applied local GVMI serve support",{sourcePath:t,publishInfo:n}),{...e,imageUrl:o,imageHash:s}}return e}publishAndRefreshDemand(e){return new Cs((t=>{let r;const i=async()=>{try{return r=await this.deps.marketApi.publishDemandSpecification(e),t.next(r),this.events.emit("demandSubscriptionStarted",{demand:r}),this.logger.debug("Subscribing for proposals matched with the demand",{demand:r}),r}catch(e){const r=new Vl("Could not publish demand on the market",Ll.SubscriptionFailed,e);t.error(r)}},n=async e=>{try{await this.deps.marketApi.unpublishDemand(e),this.logger.info("Unpublished demand",{demandId:e.id}),this.logger.debug("Unpublished demand",e),this.events.emit("demandSubscriptionStopped",{demand:e})}catch(e){const r=new Vl("Could not publish demand on the market",Ll.SubscriptionFailed,e);t.error(r)}};i();const o=setInterval((()=>{Promise.all([n(r),i()]).then((([,e])=>{e&&(this.events.emit("demandSubscriptionRefreshed",{demand:e}),this.logger.info("Refreshed subscription for offer proposals with the new demand",{demand:e}))})).catch((e=>{this.logger.error("Error while re-publishing demand for offers",e),t.error(e)}))}),1e3*this.options.demandRefreshIntervalSec);return()=>{clearInterval(o),r&&n(r)}}))}collectMarketProposalEvents(e){return this.deps.marketApi.collectMarketProposalEvents(e).pipe(va((e=>this.logger.debug("Received demand offer event from yagna",{event:e}))),va((e=>this.emitMarketProposalEvents(e))))}collectAllOfferProposals(e){return this.collectMarketProposalEvents(e).pipe(ca((e=>"ProposalReceived"===e.type)),oa((e=>e.proposal)))}async negotiateProposal(e,t){try{const r=await this.deps.marketApi.counterProposal(e,t);return this.logger.debug("Counter proposal sent",r),this.events.emit("offerCounterProposalSent",{offerProposal:e,counterProposal:r}),r}catch(t){throw this.events.emit("errorSendingCounterProposal",{offerProposal:e,error:t}),t}}async proposeAgreement(e,t){const r=await this.marketApi.proposeAgreement(e,t);return this.logger.info("Proposed and got approval for agreement",{agreementId:r.id,provider:r.provider}),r}async terminateAgreement(e,t){return await this.marketApi.terminateAgreement(e,t),this.logger.info("Terminated agreement",{agreementId:e.id,provider:e.provider,reason:t}),e}collectDraftOfferProposals(e){return this.publishAndRefreshDemand(e.demandSpecification).pipe(fa((e=>this.collectMarketProposalEvents(e))),ca((e=>"ProposalReceived"===e.type)),oa((e=>e.proposal)),ca((e=>(e.isInitial()||e.isDraft())&&e.isValid())),ca((t=>this.filterProposalsByPricingOptions(e.pricing,t))),ca((t=>!(null==e?void 0:e.filter)||this.filterProposalsByUserFilter(e.filter,t))),this.reduceInitialProposalsByProviderKey({minProposalsBatchSize:null==e?void 0:e.minProposalsBatchSize,proposalsBatchReleaseTimeoutMs:null==e?void 0:e.proposalsBatchReleaseTimeoutMs}),va((t=>{t.isInitial()&&this.negotiateProposal(t,e.demandSpecification).catch((e=>this.logger.error("Failed to negotiate the proposal",e)))})),ca((e=>e.isDraft())))}emitMarketProposalEvents(e){const{type:t}=e;switch(t){case"ProposalReceived":this.events.emit("offerProposalReceived",{offerProposal:e.proposal});break;case"ProposalRejected":this.events.emit("offerCounterProposalRejected",{counterProposal:e.counterProposal,reason:e.reason});break;case"PropertyQueryReceived":this.events.emit("offerPropertyQueryReceived");break;default:this.logger.warn("Unsupported event type in event",{event:e})}}async signAgreementFromPool(e,t,r){this.logger.info("Trying to sign an agreement...");const n=ql(r),o=async()=>{try{n.throwIfAborted(),this.logger.debug("Acquiring proposal from draft proposal pool",{draftPoolCounters:{total:e.count(),available:e.availableCount()}});const t=await e.acquire(n);return this.logger.debug("Acquired proposal from the pool",{proposal:t}),n.aborted&&(e.release(t),n.throwIfAborted()),t}catch(e){if(n.aborted)throw"TimeoutError"===n.reason.name?new a("Could not sign any agreement in time"):new i("The signing of the agreement has been aborted",e);throw e}},s=async()=>{const r=await o();try{const i=await this.proposeAgreement(r,t);return e.remove(r),i}catch(t){return this.logger.debug("Failed to propose agreement, retrying",{error:t}),e.remove(r),Bl(s)}};return s()}reduceInitialProposalsByProviderKey(e){return t=>new Cs((r=>{let i=!1;const n=new rh({minBatchSize:null==e?void 0:e.minProposalsBatchSize,releaseTimeoutMs:null==e?void 0:e.proposalsBatchReleaseTimeoutMs}),o=t.subscribe((e=>{e.isInitial()?n.addProposal(e).catch((e=>this.logger.error("Failed to add the initial proposal to the batch",e))):r.next(e)})),s=async()=>{if(!i){try{await n.waitForProposals();const e=await n.getProposals();e.length>0&&(this.logger.debug("Received batch of proposals",{count:e.length}),e.forEach((e=>r.next(e))))}catch(e){r.error(e)}s()}};return s(),()=>{i=!0,o.unsubscribe()}}))}estimateBudget({order:e,maxAgreements:t}){var i,n;const o=e.market.pricing.model,s=null!==(n=null===(i=e.demand.workload)||void 0===i?void 0:i.minCpuThreads)&&void 0!==n?n:1,{rentHours:a}=e.market;switch(o){case"linear":{const{maxCpuPerHourPrice:r,maxStartPrice:i,maxEnvPerHourPrice:n}=e.market.pricing;return t*i+t*a*n+t*a*s*r}case"burn-rate":return t*a*e.market.pricing.avgGlmPerHour;default:throw new r(`Unsupported pricing model ${o}`)}}async fetchAgreement(e){return this.marketApi.getAgreement(e)}collectAndEmitAgreementEvents(){this.marketApi.collectAgreementEvents().subscribe((e=>{switch(e.type){case"AgreementApproved":this.events.emit("agreementApproved",{agreement:e.agreement});break;case"AgreementCancelled":this.events.emit("agreementCancelled",{agreement:e.agreement});break;case"AgreementTerminated":this.events.emit("agreementTerminated",{agreement:e.agreement,reason:e.reason,terminatedBy:e.terminatedBy});break;case"AgreementRejected":this.events.emit("agreementRejected",{agreement:e.agreement,reason:e.reason})}}))}filterProposalsByUserFilter(e,t){try{const r=e(t);return r||(this.events.emit("offerProposalRejectedByProposalFilter",{offerProposal:t}),this.logger.debug("The offer was rejected by the user filter",{id:t.id})),r}catch(e){throw this.logger.error("Executing user provided proposal filter resulted with an error",e),e}}filterProposalsByPricingOptions(e,t){let r=!0;return"linear"===e.model?r=t.pricing.cpuSec<=e.maxCpuPerHourPrice/3600&&t.pricing.envSec<=e.maxEnvPerHourPrice/3600&&t.pricing.start<=e.maxStartPrice:"burn-rate"===e.model&&(r=t.pricing.start+3600*t.pricing.envSec+3600*t.pricing.cpuSec<=e.avgGlmPerHour),r||(this.events.emit("offerProposalRejectedByPriceFilter",{offerProposal:t}),this.logger.debug("The offer was ignored because the price was too high",{id:t.id,pricing:t.pricing})),r}scan(e){return this.deps.marketApi.scan(e)}}class vh{constructor(e,t,r){this.id=e,this.model=t,this.demand=r}getState(){return this.model.state}get provider(){return{id:this.model.offer.providerId,name:this.model.offer.properties["golem.node.id.name"],walletAddress:this.model.offer.properties[`golem.com.payment.platform.${this.demand.paymentPlatform}.address`]}}isFinalState(){const e=this.getState();return"Pending"!==e&&"Proposal"!==e}}class mh{constructor(e,t,r){this.id=e,this.model=t,this.provider=r,this.recipientId=t.recipientId,this.payeeAddr=t.payeeAddr,this.requestorWalletAddress=t.payerAddr,this.paymentPlatform=t.paymentPlatform,this.agreementId=t.agreementId,this.paymentDueDate=t.paymentDueDate,this.status=t.status}getStatus(){return this.status}}var yh,wh={exports:{}}; +/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */yh=wh,function(e){var t,r=1e9,i={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},n=!0,o="[DecimalError] ",s=o+"Invalid argument: ",a=o+"Exponent out of range: ",c=Math.floor,u=Math.pow,l=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,h=1e7,d=9007199254740991,p=c(1286742750677284.5),f={};function g(e,t){var r,i,o,s,a,c,u,l,d=e.constructor,p=d.precision;if(!e.s||!t.s)return t.s||(t=new d(e)),n?P(t,p):t;if(u=e.d,l=t.d,a=e.e,o=t.e,u=u.slice(),s=a-o){for(s<0?(i=u,s=-s,c=l.length):(i=l,o=a,c=u.length),s>(c=(a=Math.ceil(p/7))>c?a+1:c+1)&&(s=c,i.length=1),i.reverse();s--;)i.push(0);i.reverse()}for((c=u.length)-(s=l.length)<0&&(s=c,i=l,l=u,u=i),r=0;s;)r=(u[--s]=u[s]+l[s]+r)/h|0,u[s]%=h;for(r&&(u.unshift(r),++o),c=u.length;0==u[--c];)u.pop();return t.d=u,t.e=o,n?P(t,p):t}function v(e,t,r){if(e!==~~e||er)throw Error(s+e)}function m(e){var t,r,i,n=e.length-1,o="",s=e[0];if(n>0){for(o+=s,t=1;te.e^o.s<0?1:-1;for(t=0,r=(i=o.d.length)<(n=e.d.length)?i:n;te.d[t]^o.s<0?1:-1;return i===n?0:i>n^o.s<0?1:-1},f.decimalPlaces=f.dp=function(){var e=this,t=e.d.length-1,r=7*(t-e.e);if(t=e.d[t])for(;t%10==0;t/=10)r--;return r<0?0:r},f.dividedBy=f.div=function(e){return y(this,new this.constructor(e))},f.dividedToIntegerBy=f.idiv=function(e){var t=this.constructor;return P(y(this,new t(e),0,1),t.precision)},f.equals=f.eq=function(e){return!this.cmp(e)},f.exponent=function(){return b(this)},f.greaterThan=f.gt=function(e){return this.cmp(e)>0},f.greaterThanOrEqualTo=f.gte=function(e){return this.cmp(e)>=0},f.isInteger=f.isint=function(){return this.e>this.d.length-2},f.isNegative=f.isneg=function(){return this.s<0},f.isPositive=f.ispos=function(){return this.s>0},f.isZero=function(){return 0===this.s},f.lessThan=f.lt=function(e){return this.cmp(e)<0},f.lessThanOrEqualTo=f.lte=function(e){return this.cmp(e)<1},f.logarithm=f.log=function(e){var r,i=this,s=i.constructor,a=s.precision,c=a+5;if(void 0===e)e=new s(10);else if((e=new s(e)).s<1||e.eq(t))throw Error(o+"NaN");if(i.s<1)throw Error(o+(i.s?"NaN":"-Infinity"));return i.eq(t)?new s(0):(n=!1,r=y(I(i,c),I(e,c),c),n=!0,P(r,a))},f.minus=f.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?T(t,e):g(t,(e.s=-e.s,e))},f.modulo=f.mod=function(e){var t,r=this,i=r.constructor,s=i.precision;if(!(e=new i(e)).s)throw Error(o+"NaN");return r.s?(n=!1,t=y(r,e,0,1).times(e),n=!0,r.minus(t)):P(new i(r),s)},f.naturalExponential=f.exp=function(){return w(this)},f.naturalLogarithm=f.ln=function(){return I(this)},f.negated=f.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e},f.plus=f.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?g(t,e):T(t,(e.s=-e.s,e))},f.precision=f.sd=function(e){var t,r,i,n=this;if(void 0!==e&&e!==!!e&&1!==e&&0!==e)throw Error(s+e);if(t=b(n)+1,r=7*(i=n.d.length-1)+1,i=n.d[i]){for(;i%10==0;i/=10)r--;for(i=n.d[0];i>=10;i/=10)r++}return e&&t>r?t:r},f.squareRoot=f.sqrt=function(){var e,t,r,i,s,a,u,l=this,h=l.constructor;if(l.s<1){if(!l.s)return new h(0);throw Error(o+"NaN")}for(e=b(l),n=!1,0==(s=Math.sqrt(+l))||s==1/0?(((t=m(l.d)).length+e)%2==0&&(t+="0"),s=Math.sqrt(t),e=c((e+1)/2)-(e<0||e%2),i=new h(t=s==1/0?"5e"+e:(t=s.toExponential()).slice(0,t.indexOf("e")+1)+e)):i=new h(s.toString()),s=u=(r=h.precision)+3;;)if(i=(a=i).plus(y(l,a,u+2)).times(.5),m(a.d).slice(0,u)===(t=m(i.d)).slice(0,u)){if(t=t.slice(u-3,u+1),s==u&&"4999"==t){if(P(a,r+1,0),a.times(a).eq(l)){i=a;break}}else if("9999"!=t)break;u+=4}return n=!0,P(i,r)},f.times=f.mul=function(e){var t,r,i,o,s,a,c,u,l,d=this,p=d.constructor,f=d.d,g=(e=new p(e)).d;if(!d.s||!e.s)return new p(0);for(e.s*=d.s,r=d.e+e.e,(u=f.length)<(l=g.length)&&(s=f,f=g,g=s,a=u,u=l,l=a),s=[],i=a=u+l;i--;)s.push(0);for(i=l;--i>=0;){for(t=0,o=u+i;o>i;)c=s[o]+g[i]*f[o-i-1]+t,s[o--]=c%h|0,t=c/h|0;s[o]=(s[o]+t)%h|0}for(;!s[--a];)s.pop();return t?++r:s.shift(),e.d=s,e.e=r,n?P(e,p.precision):e},f.toDecimalPlaces=f.todp=function(e,t){var i=this,n=i.constructor;return i=new n(i),void 0===e?i:(v(e,0,r),void 0===t?t=n.rounding:v(t,0,8),P(i,e+b(i)+1,t))},f.toExponential=function(e,t){var i,n=this,o=n.constructor;return void 0===e?i=R(n,!0):(v(e,0,r),void 0===t?t=o.rounding:v(t,0,8),i=R(n=P(new o(n),e+1,t),!0,e+1)),i},f.toFixed=function(e,t){var i,n,o=this,s=o.constructor;return void 0===e?R(o):(v(e,0,r),void 0===t?t=s.rounding:v(t,0,8),i=R((n=P(new s(o),e+b(o)+1,t)).abs(),!1,e+b(n)+1),o.isneg()&&!o.isZero()?"-"+i:i)},f.toInteger=f.toint=function(){var e=this,t=e.constructor;return P(new t(e),b(e)+1,t.rounding)},f.toNumber=function(){return+this},f.toPower=f.pow=function(e){var r,i,s,a,u,l,h=this,p=h.constructor,f=+(e=new p(e));if(!e.s)return new p(t);if(!(h=new p(h)).s){if(e.s<1)throw Error(o+"Infinity");return h}if(h.eq(t))return h;if(s=p.precision,e.eq(t))return P(h,s);if(l=(r=e.e)>=(i=e.d.length-1),u=h.s,l){if((i=f<0?-f:f)<=d){for(a=new p(t),r=Math.ceil(s/7+4),n=!1;i%2&&O((a=a.times(h)).d,r),0!==(i=c(i/2));)O((h=h.times(h)).d,r);return n=!0,e.s<0?new p(t).div(a):P(a,s)}}else if(u<0)throw Error(o+"NaN");return u=u<0&&1&e.d[Math.max(r,i)]?-1:1,h.s=1,n=!1,a=e.times(I(h,s+12)),n=!0,(a=w(a)).s=u,a},f.toPrecision=function(e,t){var i,n,o=this,s=o.constructor;return void 0===e?n=R(o,(i=b(o))<=s.toExpNeg||i>=s.toExpPos):(v(e,1,r),void 0===t?t=s.rounding:v(t,0,8),n=R(o=P(new s(o),e,t),e<=(i=b(o))||i<=s.toExpNeg,e)),n},f.toSignificantDigits=f.tosd=function(e,t){var i=this.constructor;return void 0===e?(e=i.precision,t=i.rounding):(v(e,1,r),void 0===t?t=i.rounding:v(t,0,8)),P(new i(this),e,t)},f.toString=f.valueOf=f.val=f.toJSON=function(){var e=this,t=b(e),r=e.constructor;return R(e,t<=r.toExpNeg||t>=r.toExpPos)};var y=function(){function e(e,t){var r,i=0,n=e.length;for(e=e.slice();n--;)r=e[n]*t+i,e[n]=r%h|0,i=r/h|0;return i&&e.unshift(i),e}function t(e,t,r,i){var n,o;if(r!=i)o=r>i?1:-1;else for(n=o=0;nt[n]?1:-1;break}return o}function r(e,t,r){for(var i=0;r--;)e[r]-=i,i=e[r]1;)e.shift()}return function(i,n,s,a){var c,u,l,d,p,f,g,v,m,y,w,E,S,I,A,T,R,O,C=i.constructor,N=i.s==n.s?1:-1,k=i.d,_=n.d;if(!i.s)return new C(i);if(!n.s)throw Error(o+"Division by zero");for(u=i.e-n.e,R=_.length,A=k.length,v=(g=new C(N)).d=[],l=0;_[l]==(k[l]||0);)++l;if(_[l]>(k[l]||0)&&--u,(E=null==s?s=C.precision:a?s+(b(i)-b(n))+1:s)<0)return new C(0);if(E=E/7+2|0,l=0,1==R)for(d=0,_=_[0],E++;(l1&&(_=e(_,d),k=e(k,d),R=_.length,A=k.length),I=R,y=(m=k.slice(0,R)).length;y=h/2&&++T;do{d=0,(c=t(_,m,R,y))<0?(w=m[0],R!=y&&(w=w*h+(m[1]||0)),(d=w/T|0)>1?(d>=h&&(d=h-1),1==(c=t(p=e(_,d),m,f=p.length,y=m.length))&&(d--,r(p,R16)throw Error(a+b(e));if(!e.s)return new p(t);for(null==r?(n=!1,l=f):l=r,c=new p(.03125);e.abs().gte(.1);)e=e.times(c),d+=5;for(l+=Math.log(u(2,d))/Math.LN10*2+5|0,i=o=s=new p(t),p.precision=l;;){if(o=P(o.times(e),l),i=i.times(++h),m((c=s.plus(y(o,i,l))).d).slice(0,l)===m(s.d).slice(0,l)){for(;d--;)s=P(s.times(s),l);return p.precision=f,null==r?(n=!0,P(s,f)):s}s=c}}function b(e){for(var t=7*e.e,r=e.d[0];r>=10;r/=10)t++;return t}function E(e,t,r){if(t>e.LN10.sd())throw n=!0,r&&(e.precision=r),Error(o+"LN10 precision limit exceeded");return P(new e(e.LN10),t)}function S(e){for(var t="";e--;)t+="0";return t}function I(e,r){var i,s,a,c,u,l,h,d,p,f=1,g=e,v=g.d,w=g.constructor,S=w.precision;if(g.s<1)throw Error(o+(g.s?"NaN":"-Infinity"));if(g.eq(t))return new w(0);if(null==r?(n=!1,d=S):d=r,g.eq(10))return null==r&&(n=!0),E(w,d);if(d+=10,w.precision=d,s=(i=m(v)).charAt(0),c=b(g),!(Math.abs(c)<15e14))return h=E(w,d+2,S).times(c+""),g=I(new w(s+"."+i.slice(1)),d-10).plus(h),w.precision=S,null==r?(n=!0,P(g,S)):g;for(;s<7&&1!=s||1==s&&i.charAt(1)>3;)s=(i=m((g=g.times(e)).d)).charAt(0),f++;for(c=b(g),s>1?(g=new w("0."+i),c++):g=new w(s+"."+i.slice(1)),l=u=g=y(g.minus(t),g.plus(t),d),p=P(g.times(g),d),a=3;;){if(u=P(u.times(p),d),m((h=l.plus(y(u,new w(a),d))).d).slice(0,d)===m(l.d).slice(0,d))return l=l.times(2),0!==c&&(l=l.plus(E(w,d+2,S).times(c+""))),l=y(l,new w(f),d),w.precision=S,null==r?(n=!0,P(l,S)):l;l=h,a+=2}}function A(e,t){var r,i,o;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(i=t.search(/e/i))>0?(r<0&&(r=i),r+=+t.slice(i+1),t=t.substring(0,i)):r<0&&(r=t.length),i=0;48===t.charCodeAt(i);)++i;for(o=t.length;48===t.charCodeAt(o-1);)--o;if(t=t.slice(i,o)){if(o-=i,r=r-i-1,e.e=c(r/7),e.d=[],i=(r+1)%7,r<0&&(i+=7),ip||e.e<-p))throw Error(a+r)}else e.s=0,e.e=0,e.d=[0];return e}function P(e,t,r){var i,o,s,l,d,f,g,v,m=e.d;for(l=1,s=m[0];s>=10;s/=10)l++;if((i=t-l)<0)i+=7,o=t,g=m[v=0];else{if((v=Math.ceil((i+1)/7))>=(s=m.length))return e;for(g=s=m[v],l=1;s>=10;s/=10)l++;o=(i%=7)-7+l}if(void 0!==r&&(d=g/(s=u(10,l-o-1))%10|0,f=t<0||void 0!==m[v+1]||g%s,f=r<4?(d||f)&&(0==r||r==(e.s<0?3:2)):d>5||5==d&&(4==r||f||6==r&&(i>0?o>0?g/u(10,l-o):0:m[v-1])%10&1||r==(e.s<0?8:7))),t<1||!m[0])return f?(s=b(e),m.length=1,t=t-s-1,m[0]=u(10,(7-t%7)%7),e.e=c(-t/7)||0):(m.length=1,m[0]=e.e=e.s=0),e;if(0==i?(m.length=v,s=1,v--):(m.length=v+1,s=u(10,7-i),m[v]=o>0?(g/u(10,l-o)%u(10,o)|0)*s:0),f)for(;;){if(0==v){(m[0]+=s)==h&&(m[0]=1,++e.e);break}if(m[v]+=s,m[v]!=h)break;m[v--]=0,s=1}for(i=m.length;0===m[--i];)m.pop();if(n&&(e.e>p||e.e<-p))throw Error(a+b(e));return e}function T(e,t){var r,i,o,s,a,c,u,l,d,p,f=e.constructor,g=f.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new f(e),n?P(t,g):t;if(u=e.d,p=t.d,i=t.e,l=e.e,u=u.slice(),a=l-i){for((d=a<0)?(r=u,a=-a,c=p.length):(r=p,i=l,c=u.length),a>(o=Math.max(Math.ceil(g/7),c)+2)&&(a=o,r.length=1),r.reverse(),o=a;o--;)r.push(0);r.reverse()}else{for((d=(o=u.length)<(c=p.length))&&(c=o),o=0;o0;--o)u[c++]=0;for(o=p.length;o>a;){if(u[--o]0?o=o.charAt(0)+"."+o.slice(1)+S(i):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(n<0?"e":"e+")+n):n<0?(o="0."+S(-n-1)+o,r&&(i=r-s)>0&&(o+=S(i))):n>=s?(o+=S(n+1-s),r&&(i=r-n-1)>0&&(o=o+"."+S(i))):((i=n+1)0&&(n+1===s&&(o+="."),o+=S(i))),e.s<0?"-"+o:o}function O(e,t){if(e.length>t)return e.length=t,!0}function C(e){if(!e||"object"!=typeof e)throw Error(o+"Object expected");var t,i,n,a=["precision",1,r,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t=a[t+1]&&n<=a[t+2]))throw Error(s+i+": "+n);this[i]=n}if(void 0!==(n=e[i="LN10"])){if(n!=Math.LN10)throw Error(s+i+": "+n);this[i]=new this(n)}return this}i=function e(t){var r,i,n;function o(e){var t=this;if(!(t instanceof o))return new o(e);if(t.constructor=o,e instanceof o)return t.s=e.s,t.e=e.e,void(t.d=(e=e.d)?e.slice():e);if("number"==typeof e){if(0*e!=0)throw Error(s+e);if(e>0)t.s=1;else{if(!(e<0))return t.s=0,t.e=0,void(t.d=[0]);e=-e,t.s=-1}return e===~~e&&e<1e7?(t.e=0,void(t.d=[e])):A(t,e.toString())}if("string"!=typeof e)throw Error(s+e);if(45===e.charCodeAt(0)?(e=e.slice(1),t.s=-1):t.s=1,!l.test(e))throw Error(s+e);A(t,e)}if(o.prototype=f,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.clone=e,o.config=o.set=C,void 0===t&&(t={}),t)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],r=0;rasync()=>!0,acceptAllInvoicesFilter:()=>async()=>!0,acceptMaxAmountDebitNoteFilter:e=>async t=>new Eh(t.totalAmountDue).lte(e),acceptMaxAmountInvoiceFilter:e=>async t=>new Eh(t.amount).lte(e)});!function(e){e.AllocationCreationFailed="AllocationCreationFailed",e.MissingAllocation="MissingAllocation",e.PaymentProcessNotInitialized="PaymentProcessNotInitialized",e.AllocationReleaseFailed="AllocationReleaseFailed",e.InvoiceAcceptanceFailed="InvoiceAcceptanceFailed",e.DebitNoteAcceptanceFailed="DebitNoteAcceptanceFailed",e.InvoiceRejectionFailed="InvoiceRejectionFailed",e.DebitNoteRejectionFailed="DebitNoteRejectionFailed",e.CouldNotGetDebitNote="CouldNotGetDebitNote",e.CouldNotGetInvoice="CouldNotGetInvoice",e.PaymentStatusQueryFailed="PaymentStatusQueryFailed",e.AgreementAlreadyPaid="AgreementAlreadyPaid",e.InvoiceAlreadyReceived="InvoiceAlreadyReceived"}(Rh||(Rh={}));class Ch extends c{constructor(e,t,r,i,n){super(e,t,n),this.code=t,this.previous=n,Ph.set(this,void 0),Th.set(this,void 0),ss(this,Ph,r,"f"),ss(this,Th,i,"f")}getAllocation(){return os(this,Ph,"f")}getProvider(){return os(this,Th,"f")}}Ph=new WeakMap,Th=new WeakMap;class Nh{constructor(e){this.api=e}async collectInvoices({after:e=new Date(0),limit:t=50,statuses:r,providerIds:i,minAmount:n,maxAmount:o,providerWallets:s,paymentPlatforms:a}={}){const c=(await this.api.payment.getInvoices(null==e?void 0:e.toISOString())).filter((e=>!(r&&!r.includes(e.status))&&(!(i&&!i.includes(e.issuerId))&&((void 0===n||!new Eh(e.amount).lt(n))&&((void 0===o||!new Eh(e.amount).gt(o))&&(!(s&&!s.includes(e.payeeAddr))&&!(a&&!a.includes(e.paymentPlatform))))))));return c.sort(((e,t)=>new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime())),c.slice(0,t)}async fetchSingleInvoice(e){return this.api.payment.getInvoice(e)}async acceptInvoice({invoice:e,dryRun:t=!1}){let r={totalAmount:e.amount,paymentPlatform:e.paymentPlatform,address:e.payerAddr,timestamp:(new Date).toISOString(),timeout:new Date(Date.now()+6e4).toISOString(),makeDeposit:!1,remainingAmount:"",spentAmount:"",allocationId:""};if(t)return{allocation:r,amount:e.amount,invoiceId:e.invoiceId,success:!0,dryRun:t};try{return r=await this.api.payment.createAllocation(r),await this.api.payment.acceptInvoice(e.invoiceId,{allocationId:r.allocationId,totalAmountAccepted:e.amount}),{success:!0,allocation:r,amount:e.amount,invoiceId:e.invoiceId,dryRun:t}}catch(i){return{success:!1,allocation:r,amount:e.amount,invoiceId:e.invoiceId,reason:i,dryRun:t}}}async acceptManyInvoices({invoices:e,dryRun:t=!1}){const r=e=>e.reduce(((e,t)=>(e[t.payerAddr]=e[t.payerAddr]||[],e[t.payerAddr].push(t),e)),{}),i=[],n=e.reduce(((e,t)=>(e[t.paymentPlatform]=e[t.paymentPlatform]||[],e[t.paymentPlatform].push(t),e)),{});for(const[e,o]of Object.entries(n)){const n=r(o);for(const[r,o]of Object.entries(n)){let n={totalAmount:o.reduce(((e,t)=>e.plus(t.amount)),new Eh(0)).toFixed(18),paymentPlatform:e,address:r,timestamp:(new Date).toISOString(),timeout:new Date(Date.now()+6e4).toISOString(),makeDeposit:!1,remainingAmount:"",spentAmount:"",allocationId:""};t||(n=await this.api.payment.createAllocation(n));for(const e of o)if(t)i.push({invoiceId:e.invoiceId,allocation:n,success:!0,amount:e.amount,dryRun:t});else try{await this.api.payment.acceptInvoice(e.invoiceId,{allocationId:n.allocationId,totalAmountAccepted:e.amount}),i.push({invoiceId:e.invoiceId,allocation:n,success:!0,amount:e.amount,dryRun:t})}catch(r){i.push({invoiceId:e.invoiceId,allocation:n,success:!1,amount:e.amount,reason:r,dryRun:t})}}}return i}}class kh{constructor(e,t,r,i){this.network=e,this.driver=t,this.address=r,this.token=i}getPaymentPlatform(){return`${this.driver}-${this.network}-${this.token}`}}function _h(e){if(!(e instanceof Error))return String(e);if(function(e){return"object"==typeof e&&null!==e&&"name"in e&&"ApiError"===e.name}(e))try{return JSON.stringify(e.body,null,2)}catch(t){return e.message}return e.message}class xh{constructor(e,t,r,i,n){this.agreement=e,this.allocation=t,this.paymentModule=r,this.invoice=null,this.debitNotes=new Map,this.lock=new Zl,this.logger=n||K("payment"),this.options={invoiceFilter:(null==i?void 0:i.invoiceFilter)||(()=>!0),debitNoteFilter:(null==i?void 0:i.debitNoteFilter)||(()=>!0)};const o=this.paymentModule.observeInvoices().pipe(ca((e=>e.agreementId===this.agreement.id))).subscribe((e=>this.addInvoice(e))),s=this.paymentModule.observeDebitNotes().pipe(ca((e=>e.agreementId===this.agreement.id))).subscribe((e=>this.addDebitNote(e)));this.cleanupSubscriptions=()=>{o.unsubscribe(),s.unsubscribe()}}addDebitNote(e){return this.lock.acquire(`app-${e.agreementId}`,(()=>this.applyDebitNote(e)))}addInvoice(e){return this.lock.acquire(`app-${e.agreementId}`,(()=>this.applyInvoice(e)))}isFinished(){return null!==this.invoice}async applyDebitNote(e){if(this.hasReceivedInvoice())return await this.rejectDebitNote(e,bh.AgreementFinalized,`DebitNote ${e.id} rejected because the agreement ${e.agreementId} is already covered with a final invoice that should be paid instead of the debit note`),!1;if(this.debitNotes.has(e.id)){if(await this.hasProcessedDebitNote(e))return this.logger.warn("We received a duplicate debit note - the previous one was already accepted, so this one gets ignored",{debitNoteId:e.id,agreementId:e.agreementId}),!1}this.debitNotes.set(e.id,e);let t=!1;try{t=await this.options.debitNoteFilter(e,{agreement:this.agreement,allocation:this.allocation,demand:this.agreement.demand})}catch(e){throw new r("An error occurred in the debit note filter",e)}if(!t)return await this.rejectDebitNote(e,bh.RejectedByRequestorFilter,`DebitNote ${e.id} for agreement ${e.agreementId} rejected by DebitNote Filter`),!1;try{return await this.paymentModule.acceptDebitNote(e,this.allocation,e.totalAmountDue),this.logger.debug("DebitNote accepted",{debitNoteId:e.id,agreementId:e.agreementId}),!0}catch(t){const r=_h(t);throw new Ch(`Unable to accept debit note ${e.id}. ${r}`,Rh.DebitNoteAcceptanceFailed,void 0,e.provider,t)}}async hasProcessedDebitNote(e){return"RECEIVED"!==await e.getStatus()}async rejectDebitNote(e,t,r){try{await this.paymentModule.rejectDebitNote(e,r)}catch(t){const r=_h(t);throw new Ch(`Unable to reject debit note ${e.id}. ${r}`,Rh.DebitNoteRejectionFailed,void 0,e.provider,t)}}finalize(e){this.invoice=e,this.cleanupSubscriptions()}async applyInvoice(e){if(this.logger.debug("Applying invoice for agreement",{invoiceId:e.id,agreementId:e.agreementId,provider:e.provider}),this.invoice)throw new Ch(`Agreement ${this.agreement.id} is already covered with an invoice: ${this.invoice.id}`,Rh.AgreementAlreadyPaid,this.allocation,this.invoice.provider);if("RECEIVED"!==e.getStatus())throw new Ch(`The invoice ${e.id} for agreement ${e.agreementId} has status ${e.getStatus()}, but we can accept only the ones with status RECEIVED`,Rh.InvoiceAlreadyReceived,this.allocation,e.provider);this.finalize(e);let t=!1;try{t=await this.options.invoiceFilter(e,{agreement:this.agreement,allocation:this.allocation,demand:this.agreement.demand})}catch(e){throw new r("An error occurred in the invoice filter",e)}if(!t){const t=bh.RejectedByRequestorFilter,r=`Invoice ${e.id} for agreement ${e.agreementId} rejected by Invoice Filter`;return await this.rejectInvoice(e,t,r),!1}try{await this.paymentModule.acceptInvoice(e,this.allocation,e.amount)}catch(t){const r=_h(t);throw new Ch(`Unable to accept invoice ${e.id} ${r}`,Rh.InvoiceAcceptanceFailed,void 0,e.provider,t)}return!0}async rejectInvoice(e,t,r){try{await this.paymentModule.rejectInvoice(e,r),this.logger.warn("Invoice rejected",{reason:r})}catch(t){const r=_h(t);throw new Ch(`Unable to reject invoice ${e.id} ${r}`,Rh.InvoiceRejectionFailed,void 0,e.provider,t)}}hasReceivedInvoice(){return null!==this.invoice}isStarted(){return null!==this.cleanupSubscriptions}stop(){this.cleanupSubscriptions()}}const Dh=Object.freeze(["mainnet","polygon"]);class qh{constructor(e,t){var r,i,n;this.events=new Yl,this.logger=K("payment"),this.options={driver:"erc20",network:ee(),token:"tglm"};const o=null!==(r=null==t?void 0:t.network)&&void 0!==r?r:this.options.network,s=null!==(i=null==t?void 0:t.driver)&&void 0!==i?i:this.options.driver,a=null!==(n=null==t?void 0:t.token)&&void 0!==n?n:Dh.includes(o)?"glm":"tglm";this.options={network:o,driver:s,token:a},this.logger=e.logger,this.yagnaApi=e.yagna,this.paymentApi=e.paymentApi,this.startEmittingPaymentEvents()}startEmittingPaymentEvents(){this.paymentApi.receivedInvoices$.subscribe((e=>{this.events.emit("invoiceReceived",{invoice:e})})),this.paymentApi.receivedDebitNotes$.subscribe((e=>{this.events.emit("debitNoteReceived",{debitNote:e})}))}getPaymentPlatform(){return`${this.options.driver}-${this.options.network}-${this.options.token}`}async getPayerDetails(){const{identity:e}=await this.yagnaApi.identity.getIdentity();return new kh(this.options.network,this.options.driver,e,this.options.token)}observeDebitNotes(){return this.paymentApi.receivedDebitNotes$}observeInvoices(){return this.paymentApi.receivedInvoices$}async createAllocation(e){this.logger.debug("Creating allocation",{params:e});try{const t=await this.paymentApi.createAllocation({paymentPlatform:this.getPaymentPlatform(),...e});return this.events.emit("allocationCreated",{allocation:t}),this.logger.info("Created allocation",{allocationId:t.id,budget:t.totalAmount,platform:this.getPaymentPlatform()}),this.logger.debug("Created allocation",t),t}catch(e){throw this.events.emit("errorCreatingAllocation",e),e}}async releaseAllocation(e){this.logger.debug("Releasing allocation",e);try{const t=await this.getAllocation(e.id).catch((()=>(this.logger.warn("Failed to fetch allocation before releasing",{id:e.id}),e)));await this.paymentApi.releaseAllocation(e),this.events.emit("allocationReleased",{allocation:t}),this.logger.info("Released allocation",{allocationId:t.id,totalAmount:t.totalAmount,spentAmount:t.spentAmount})}catch(t){throw this.events.emit("errorReleasingAllocation",{allocation:await this.paymentApi.getAllocation(e.id).catch((()=>(this.logger.warn("Failed to fetch allocation after failed release attempt",{id:e.id}),e))),error:t}),t}}getAllocation(e){return this.logger.debug("Fetching allocation by id",{id:e}),this.paymentApi.getAllocation(e)}amendAllocation(e,t){const r=Error("Amending allocation is not supported yet");throw this.events.emit("errorAmendingAllocation",{allocation:e,error:r}),r}async acceptInvoice(e,t,r){this.logger.debug("Accepting invoice",e);try{const i=await this.paymentApi.acceptInvoice(e,t,r);return this.events.emit("invoiceAccepted",{invoice:i}),this.logger.info("Accepted invoice",{id:e.id,allocationId:t.id,agreementId:e.agreementId,provider:e.provider,amount:r}),i}catch(i){throw this.events.emit("errorAcceptingInvoice",{invoice:e,error:i}),this.logger.error(`Failed to accept invoice. ${i}`,{id:e.id,allocationId:t.id,agreementId:e.agreementId,provider:e.provider,amount:r}),i}}async rejectInvoice(e,t){this.logger.debug("Rejecting invoice",{id:e.id,reason:t});try{const r=await this.paymentApi.rejectInvoice(e,t);return this.events.emit("invoiceRejected",{invoice:r}),this.logger.warn("Rejeced invoice",{id:e.id,reason:t}),r}catch(r){throw this.events.emit("errorRejectingInvoice",{invoice:e,error:r}),this.logger.error(`Failed to reject invoice. ${r}`,{id:e.id,reason:t}),r}}async acceptDebitNote(e,t,r){this.logger.debug("Accepting debit note",e);try{const i=await this.paymentApi.acceptDebitNote(e,t,r);return this.events.emit("debitNoteAccepted",{debitNote:i}),this.logger.debug("Accepted debit note",{id:e.id,allocationId:t.id,activityId:e.activityId,provider:e.provider,amount:r}),i}catch(i){throw this.events.emit("errorAcceptingDebitNote",{debitNote:e,error:i}),this.logger.error(`Failed to accept debitNote. ${i}`,{id:e.id,allocationId:t.id,activityId:e.activityId,provider:e.provider,amount:r}),i}}async rejectDebitNote(e,t){this.logger.info("Rejecting debit note",{id:e.id,reason:t});const r="Unable to send debitNote rejection to provider. This feature is not yet supported.";return this.logger.warn(r),this.events.emit("errorRejectingDebitNote",{debitNote:e,error:new o(r)}),e}createInvoiceProcessor(){return new Nh(this.yagnaApi)}createAgreementPaymentProcess(e,t,r){return new xh(e,t,this,r,this.logger.child("agreement-payment-process"))}}var Fh;!function(e){e.New="New",e.Initialized="Initialized",e.Deployed="Deployed",e.Ready="Ready",e.Unresponsive="Unresponsive",e.Terminated="Terminated",e.Unknown="Unknown"}(Fh||(Fh={}));class Bh{constructor(e,t,r=Fh.New,i=Fh.Unknown,n){this.id=e,this.agreement=t,this.currentState=r,this.previousState=i,this.usage=n}get provider(){return this.agreement.provider}getState(){return this.currentState}getPreviousState(){return this.previousState}}class jh{constructor(e){this.index=e.index,this.eventDate=e.eventDate,this.result=e.result,this.stdout=e.stdout,this.stderr=e.stderr,this.message=e.message,this.isBatchFinished=e.isBatchFinished,this.data=e.data}getOutputAsJson(){if(!this.stdout)throw new o("Can't convert Result output to JSON, because the output is missing!");try{return JSON.parse(this.stdout.toString().trim())}catch(e){throw new o(`Failed to parse output to JSON! Output: "${this.stdout.toString()}". Error: ${e}`)}}}const $h=5,Mh=20;class Lh{constructor(e){this.activityExeBatchResultMaxRetries=(null==e?void 0:e.activityExeBatchResultMaxRetries)||Mh,this.activityExeBatchResultPollIntervalSeconds=(null==e?void 0:e.activityExeBatchResultPollIntervalSeconds)||$h}}class Vh{constructor(e=[]){this.commands=e}static create(e){return new Vh(e)}add(e){this.commands.push(e)}async before(){await Promise.all(this.commands.map((e=>e.before())))}async after(e){return Promise.all(this.commands.map(((t,r)=>t.after(e[r]))))}getExeScriptRequest(){if(!this.commands.length)throw new o("There are no commands in the script");return{text:JSON.stringify(this.commands.map((e=>e.toJson())))}}}const Uh=new jh({result:"Error",eventDate:(new Date).toISOString(),index:-1,message:"No result due to error"});class Hh{constructor(e,t){this.commandName=e,this.args=t||{}}toJson(){return{[this.commandName]:this.args}}toExeScriptRequest(){return{text:JSON.stringify([this.toJson()])}}async before(){}async after(e){return null!=e?e:Uh}}class zh extends Hh{constructor(e){super("deploy",e)}}class Wh extends Hh{constructor(e){super("start",e)}}class Gh extends Hh{constructor(e,t,r,i){super("run",{entry_point:e,args:t,env:r,capture:i||{stdout:{atEnd:{format:"string"}},stderr:{atEnd:{format:"string"}}}})}}class Yh extends Hh{constructor(e,t,r){super("transfer",{from:e,to:t,args:r}),this.from=e,this.to=t}}class Kh extends Yh{constructor(e,t,r){super(),this.storageProvider=e,this.src=t,this.dstPath=r,this.args.to=`container:${r}`}async before(){this.args.from=await this.storageProvider.publishFile(this.src)}async after(e){return await this.storageProvider.release([this.args.from]),e}}class Jh extends Yh{constructor(e,t,r){super(),this.storageProvider=e,this.src=t,this.dstPath=r,this.args.to=`container:${r}`}async before(){this.args.from=await this.storageProvider.publishData(this.src)}async after(e){return await this.storageProvider.release([this.args.from]),e}}class Xh extends Yh{constructor(e,t,r){super(),this.storageProvider=e,this.srcPath=t,this.dstPath=r,this.args={from:`container:${t}`}}async before(){this.args.to=await this.storageProvider.receiveFile(this.dstPath)}async after(e){return await this.storageProvider.release([this.args.to]),e}}class Qh extends Yh{constructor(e,t){super(),this.storageProvider=e,this.srcPath=t,this.chunks=[],this.args={from:`container:${t}`}}async before(){this.args.to=await this.storageProvider.receiveData((e=>{this.chunks.push(e)}))}async after(e){return await this.storageProvider.release([this.args.to]),"Ok"===e.result?new jh({...e,data:this.combineChunks()}):new jh({...e,result:"Error",data:void 0})}combineChunks(){const e=new Uint8Array(this.chunks.reduce(((e,t)=>e+t.length),0));let t=0;for(const r of this.chunks)e.set(r,t),t+=r.length;return this.chunks=[],e}}function Zh(e,t){for(var r=0,i=e.length-1;i>=0;i--){var n=e[i];"."===n?e.splice(i,1):".."===n?(e.splice(i,1),r++):r&&(e.splice(i,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}var ed=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,td=function(e){return ed.exec(e).slice(1)};function rd(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var i=r>=0?arguments[r]:"/";if("string"!=typeof i)throw new TypeError("Arguments to path.resolve must be strings");i&&(e=i+"/"+e,t="/"===i.charAt(0))}return(t?"/":"")+(e=Zh(hd(e.split("/"),(function(e){return!!e})),!t).join("/"))||"."}function id(e){var t=nd(e),r="/"===md(e,-1);return(e=Zh(hd(e.split("/"),(function(e){return!!e})),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e}function nd(e){return"/"===e.charAt(0)}function od(){return id(hd(Array.prototype.slice.call(arguments,0),(function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))}function sd(e,t){function r(e){for(var t=0;t=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=rd(e).substr(1),t=rd(t).substr(1);for(var i=r(e.split("/")),n=r(t.split("/")),o=Math.min(i.length,n.length),s=o,a=0;aObject.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),_d=(e,t)=>{const r=t.colon||Cd,i=e.match(/\//)||Rd&&e.match(/\\/)?[""]:[...Rd?[$.cwd()]:[],...(t.path||$.env.PATH||"").split(r)],n=Rd?t.pathExt||$.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",o=Rd?n.split(r):[""];return Rd&&-1!==e.indexOf(".")&&""!==o[0]&&o.unshift(""),{pathEnv:i,pathExt:o,pathExtExe:n}},xd=(e,t,r)=>{"function"==typeof t&&(r=t,t={}),t||(t={});const{pathEnv:i,pathExt:n,pathExtExe:o}=_d(e,t),s=[],a=r=>new Promise(((n,o)=>{if(r===i.length)return t.all&&s.length?n(s):o(kd(e));const a=i[r],u=/^".*"$/.test(a)?a.slice(1,-1):a,l=Od.join(u,e),h=!u&&/^\.[\\\/]/.test(e)?e.slice(0,2)+l:l;n(c(h,r,0))})),c=(e,r,i)=>new Promise(((u,l)=>{if(i===n.length)return u(a(r+1));const h=n[i];Nd(e+h,{pathExt:o},((n,o)=>{if(!n&&o){if(!t.all)return u(e+h);s.push(e+h)}return u(c(e,r,i+1))}))}));return r?a(0).then((e=>r(null,e)),r):a(0)};var Dd=xd;xd.sync=(e,t)=>{t=t||{};const{pathEnv:r,pathExt:i,pathExtExe:n}=_d(e,t),o=[];for(let s=0;s{const t=e.env||$.env;return"win32"!==(e.platform||$.platform)?"PATH":Object.keys(t).reverse().find((e=>"PATH"===e.toUpperCase()))||"Path"};qd.exports=Fd,qd.exports.default=Fd;var Bd=qd.exports;const jd=Id,$d=Dd,Md=Bd;function Ld(e,t){const r=e.options.env||$.env,i=$.cwd(),n=null!=e.options.cwd,o=n&&void 0!==$.chdir&&!$.chdir.disabled;if(o)try{$.chdir(e.options.cwd)}catch(e){}let s;try{s=$d.sync(e.command,{path:r[Md({env:r})],pathExt:t?jd.delimiter:void 0})}catch(e){}finally{o&&$.chdir(i)}return s&&(s=jd.resolve(n?e.options.cwd:"",s)),s}var Vd=function(e){return Ld(e)||Ld(e,!0)},Ud={};const Hd=/([()\][%!^"`<>&|;, *?])/g;Ud.command=function(e){return e=e.replace(Hd,"^$1")},Ud.argument=function(e,t){return e=(e=`"${e=(e=(e=`${e}`).replace(/(?=(\\+?)?)\1"/g,'$1$1\\"')).replace(/(?=(\\+?)?)\1$/,"$1$1")}"`).replace(Hd,"^$1"),t&&(e=e.replace(Hd,"^$1")),e};const zd=/^#!(.*)/;const Wd=Ad,Gd=(e="")=>{const t=e.match(zd);if(!t)return null;const[r,i]=t[0].replace(/#! ?/,"").split(" "),n=r.split("/").pop();return"env"===n?i:i?`${n} ${i}`:n};const Yd=Id,Kd=Vd,Jd=Ud,Xd=function(e){const t=Ee.alloc(150);let r;try{r=Wd.openSync(e,"r"),Wd.readSync(r,t,0,150,0),Wd.closeSync(r)}catch(e){}return Gd(t.toString())},Qd="win32"===$.platform,Zd=/\.(?:com|exe)$/i,ep=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function tp(e){if(!Qd)return e;const t=function(e){e.file=Kd(e);const t=e.file&&Xd(e.file);return t?(e.args.unshift(e.file),e.command=t,Kd(e)):e.file}(e),r=!Zd.test(t);if(e.options.forceShell||r){const r=ep.test(t);e.command=Yd.normalize(e.command),e.command=Jd.command(e.command),e.args=e.args.map((e=>Jd.argument(e,r)));const i=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${i}"`],e.command=$.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}var rp=function(e,t,r){t&&!Array.isArray(t)&&(r=t,t=null);const i={command:e,args:t=t?t.slice(0):[],options:r=Object.assign({},r),file:void 0,original:{command:e,args:t}};return r.shell?i:tp(i)};const ip="win32"===$.platform;function np(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function op(e,t){return ip&&1===e&&!t.file?np(t.original,"spawn"):null}var sp={hookChildProcess:function(e,t){if(!ip)return;const r=e.emit;e.emit=function(i,n){if("exit"===i){const i=op(n,t);if(i)return r.call(e,"error",i)}return r.apply(e,arguments)}},verifyENOENT:op,verifyENOENTSync:function(e,t){return ip&&1===e&&!t.file?np(t.original,"spawnSync"):null},notFoundError:np};const ap=Sd,cp=rp,up=sp;function lp(e,t,r){const i=cp(e,t,r),n=ap.spawn(i.command,i.args,i.options);return up.hookChildProcess(n,i),n}Ed.exports=lp,Ed.exports.spawn=lp,Ed.exports.sync=function(e,t,r){const i=cp(e,t,r),n=ap.spawnSync(i.command,i.args,i.options);return n.error=n.error||up.verifyENOENTSync(n.status,i),n},Ed.exports._parse=cp,Ed.exports._enoent=up;var hp=L(Ed.exports);class dp{constructor(e){if(this.publishedUrls=new Set,this.isInitialized=!1,this.lock=new Zl,u)throw new r("File transfer by GFTP module is unsupported in the browser context.");this.logger=e||K("storage")}async init(){this.isInitialized?this.logger.warn("GFTP init attempted even though it was already ready - check the logic of your application"):(await this.startGftpServer(),this.logger.info(`GFTP Version: ${await this.jsonRpc("version")}`))}startGftpServer(){return new Promise(((e,t)=>{var r,i,n,o,s,a;this.logger.debug("Starting GFTP server"),this.gftpServerProcess=hp("gftp",["server"]),this.gftpServerProcess.on("spawn",(()=>{this.logger.info("GFTP server spawned"),this.isInitialized=!0,e()})),this.gftpServerProcess.on("error",(e=>{this.logger.error("Error while spawning GFTP server",e),t(e)})),this.gftpServerProcess.on("close",((e,t)=>{this.logger.info("GFTP server closed",{code:e,signal:t}),this.isInitialized=!1})),null===(i=null===(r=this.gftpServerProcess)||void 0===r?void 0:r.stdout)||void 0===i||i.setEncoding("utf-8"),null===(o=null===(n=this.gftpServerProcess)||void 0===n?void 0:n.stderr)||void 0===o||o.setEncoding("utf-8"),this.reader=null===(a=null===(s=this.gftpServerProcess)||void 0===s?void 0:s.stdout)||void 0===a?void 0:a.iterator()}))}async generateTempFileName(){const{randomUUID:e}=await Promise.resolve().then((function(){return av})),t=await Promise.resolve().then((function(){return cv})),r=ld.join(t.dirSync().name,e().toString());return wd.existsSync(r)&&wd.unlinkSync(r),r}async receiveFile(e){const{url:t}=await this.jsonRpc("receive",{output_file:e});return t}receiveData(){throw new r("receiveData is not implemented in GftpStorageProvider")}async publishFile(e){const t=await this.uploadFile(e);return this.publishedUrls.add(t),t}async publishData(e){let t;return t=Buffer.isBuffer(e)?await this.uploadBytes(e):await this.uploadBytes(Buffer.from(e)),this.publishedUrls.add(t),t}release(){return Promise.resolve(void 0)}async releaseAll(){const e=Array.from(this.publishedUrls).filter((e=>!!e));e.length&&await this.jsonRpc("close",{urls:e})}async close(){var e;this.isInitialized&&(await this.releaseAll(),null===(e=this.gftpServerProcess)||void 0===e||e.kill())}async jsonRpc(e,t={}){return this.lock.acquire("gftp-io",(async()=>{var r,i,n,s;if(!this.isInitialized)throw new o(`GFTP was not initialized when calling JSON-RPC ${e} with ${JSON.stringify(t)}`);const a={jsonrpc:"2.0",id:Xn(),method:e,params:t},c=`${JSON.stringify(a)}\n`;this.logger.debug("Sending GFTP command",{request:a}),null===(i=null===(r=this.gftpServerProcess)||void 0===r?void 0:r.stdin)||void 0===i||i.write(c);const u=null===(s=await(null===(n=this.reader)||void 0===n?void 0:n.next()))||void 0===s?void 0:s.value;if(!u)throw new o("Unable to get GFTP command result");const{result:l}=JSON.parse(u);if(void 0===l)throw new o(u);return l}))}async uploadStream(e){var t;const r=await this.generateTempFileName(),i=wd.createWriteStream(r,{encoding:"binary"});await new Promise((async t=>{i.once("finish",t);for await(const t of e)i.write(t);i.end()}));const n=await this.jsonRpc("publish",{files:[r.toString()]});if(1!==n.length)throw"invalid gftp publish response";return null===(t=n[0])||void 0===t?void 0:t.url}async uploadBytes(e){return await this.uploadStream(async function*(){yield e}())}async uploadFile(e){var t;return null===(t=(await this.jsonRpc("publish",{files:[e.toString()]}))[0])||void 0===t?void 0:t.url}isReady(){return this.isInitialized}}class pp{close(){return Promise.resolve(void 0)}init(){return Promise.resolve(void 0)}publishData(e){return Promise.reject(new o("NullStorageProvider does not support upload data"))}publishFile(e){return Promise.reject(new o("NullStorageProvider does not support upload files"))}receiveFile(e){return Promise.reject(new o("NullStorageProvider does not support download files"))}receiveData(e){return Promise.reject(new o("NullStorageProvider does not support download data"))}release(e){return Promise.resolve(void 0)}isReady(){return!0}}var fp,gp={},vp={},mp={};Object.defineProperty(mp,"__esModule",{value:!0}),mp.BitWidth=void 0,function(e){e[e.WIDTH8=0]="WIDTH8",e[e.WIDTH16=1]="WIDTH16",e[e.WIDTH32=2]="WIDTH32",e[e.WIDTH64=3]="WIDTH64"}(fp||(mp.BitWidth=fp={}));var yp={};Object.defineProperty(yp,"__esModule",{value:!0}),yp.paddingSize=yp.fromByteWidth=yp.uwidth=yp.fwidth=yp.iwidth=yp.toByteWidth=void 0;const wp=mp;yp.toByteWidth=function(e){return 1<=-128&&e<=127?wp.BitWidth.WIDTH8:e>=-32768&&e<=32767?wp.BitWidth.WIDTH16:e>=-2147483648&&e<=2147483647?wp.BitWidth.WIDTH32:wp.BitWidth.WIDTH64},yp.fwidth=function(e){return e===Math.fround(e)?wp.BitWidth.WIDTH32:wp.BitWidth.WIDTH64},yp.uwidth=function(e){return e<=255?wp.BitWidth.WIDTH8:e<=65535?wp.BitWidth.WIDTH16:e<=4294967295?wp.BitWidth.WIDTH32:wp.BitWidth.WIDTH64},yp.fromByteWidth=function(e){return 1===e?wp.BitWidth.WIDTH8:2===e?wp.BitWidth.WIDTH16:4===e?wp.BitWidth.WIDTH32:wp.BitWidth.WIDTH64},yp.paddingSize=function(e,t){return 1+~e&t-1};var bp={};Object.defineProperty(bp,"__esModule",{value:!0}),bp.toUTF8Array=bp.fromUTF8Array=void 0,bp.fromUTF8Array=function(e){return(new TextDecoder).decode(e)},bp.toUTF8Array=function(e){return(new TextEncoder).encode(e)};var Ep,Sp={};Object.defineProperty(Sp,"__esModule",{value:!0}),Sp.ValueType=void 0,function(e){e[e.NULL=0]="NULL",e[e.INT=1]="INT",e[e.UINT=2]="UINT",e[e.FLOAT=3]="FLOAT",e[e.KEY=4]="KEY",e[e.STRING=5]="STRING",e[e.INDIRECT_INT=6]="INDIRECT_INT",e[e.INDIRECT_UINT=7]="INDIRECT_UINT",e[e.INDIRECT_FLOAT=8]="INDIRECT_FLOAT",e[e.MAP=9]="MAP",e[e.VECTOR=10]="VECTOR",e[e.VECTOR_INT=11]="VECTOR_INT",e[e.VECTOR_UINT=12]="VECTOR_UINT",e[e.VECTOR_FLOAT=13]="VECTOR_FLOAT",e[e.VECTOR_KEY=14]="VECTOR_KEY",e[e.VECTOR_STRING_DEPRECATED=15]="VECTOR_STRING_DEPRECATED",e[e.VECTOR_INT2=16]="VECTOR_INT2",e[e.VECTOR_UINT2=17]="VECTOR_UINT2",e[e.VECTOR_FLOAT2=18]="VECTOR_FLOAT2",e[e.VECTOR_INT3=19]="VECTOR_INT3",e[e.VECTOR_UINT3=20]="VECTOR_UINT3",e[e.VECTOR_FLOAT3=21]="VECTOR_FLOAT3",e[e.VECTOR_INT4=22]="VECTOR_INT4",e[e.VECTOR_UINT4=23]="VECTOR_UINT4",e[e.VECTOR_FLOAT4=24]="VECTOR_FLOAT4",e[e.BLOB=25]="BLOB",e[e.BOOL=26]="BOOL",e[e.VECTOR_BOOL=36]="VECTOR_BOOL"}(Ep||(Sp.ValueType=Ep={}));var Ip={};Object.defineProperty(Ip,"__esModule",{value:!0}),Ip.packedType=Ip.fixedTypedVectorElementSize=Ip.fixedTypedVectorElementType=Ip.typedVectorElementType=Ip.toTypedVector=Ip.isAVector=Ip.isFixedTypedVector=Ip.isTypedVector=Ip.isTypedVectorElement=Ip.isIndirectNumber=Ip.isNumber=Ip.isInline=void 0;const Ap=Sp;function Pp(e){return e===Ap.ValueType.VECTOR_BOOL||e>=Ap.ValueType.VECTOR_INT&&e<=Ap.ValueType.VECTOR_STRING_DEPRECATED}function Tp(e){return e>=Ap.ValueType.VECTOR_INT2&&e<=Ap.ValueType.VECTOR_FLOAT4}Ip.isInline=function(e){return e===Ap.ValueType.BOOL||e<=Ap.ValueType.FLOAT},Ip.isNumber=function(e){return e>=Ap.ValueType.INT&&e<=Ap.ValueType.FLOAT},Ip.isIndirectNumber=function(e){return e>=Ap.ValueType.INDIRECT_INT&&e<=Ap.ValueType.INDIRECT_FLOAT},Ip.isTypedVectorElement=function(e){return e===Ap.ValueType.BOOL||e>=Ap.ValueType.INT&&e<=Ap.ValueType.STRING},Ip.isTypedVector=Pp,Ip.isFixedTypedVector=Tp,Ip.isAVector=function(e){return Pp(e)||Tp(e)||e===Ap.ValueType.VECTOR},Ip.toTypedVector=function(e,t){if(0===t)return e-Ap.ValueType.INT+Ap.ValueType.VECTOR_INT;if(2===t)return e-Ap.ValueType.INT+Ap.ValueType.VECTOR_INT2;if(3===t)return e-Ap.ValueType.INT+Ap.ValueType.VECTOR_INT3;if(4===t)return e-Ap.ValueType.INT+Ap.ValueType.VECTOR_INT4;throw"Unexpected length "+t},Ip.typedVectorElementType=function(e){return e-Ap.ValueType.VECTOR_INT+Ap.ValueType.INT},Ip.fixedTypedVectorElementType=function(e){return(e-Ap.ValueType.VECTOR_INT2)%3+Ap.ValueType.INT},Ip.fixedTypedVectorElementSize=function(e){return 2+((e-Ap.ValueType.VECTOR_INT2)/3|0)},Ip.packedType=function(e,t){return t|e<<2};var Rp={};Object.defineProperty(Rp,"__esModule",{value:!0}),Rp.StackValue=void 0;const Op=mp,Cp=yp,Np=Sp,kp=Ip;Rp.StackValue=class{constructor(e,t,r,i=null,n=0){this.builder=e,this.type=t,this.width=r,this.value=i,this.offset=n}elementWidth(e,t){if((0,kp.isInline)(this.type))return this.width;for(let r=0;r<4;r++){const i=1<0?e:2048),this.view=new DataView(this.buffer)}align(e){const t=(0,xp.toByteWidth)(e);return this.offset+=(0,xp.paddingSize)(this.offset,t),t}computeOffset(e){const t=this.offset+e;let r=this.buffer.byteLength;const i=r;for(;r>1;this.dedupKeyVectors&&!Object.prototype.hasOwnProperty.call(this.keyVectorLookup,t)&&(this.keyVectorLookup[t]=this.createVector(e.stackPosition,r,2));const i=this.dedupKeyVectors?this.keyVectorLookup[t]:this.createVector(e.stackPosition,r,2),n=this.createVector(e.stackPosition+1,r,2,i);this.stack.splice(e.stackPosition,r<<1),this.stack.push(n)}sort(e){const t=this.view,r=this.stack;function i(e,r){if(e.type!==qp.ValueType.KEY||r.type!==qp.ValueType.KEY)throw`Stack values are not keys ${e} | ${r}. Check if you combined [addKey] with add... method calls properly.`;let i,n,o=0;do{if(i=t.getUint8(e.offset+o),n=t.getUint8(r.offset+o),n40?function e(t,i){if(t>2)];let a=t,c=i;do{for(;o(r[a],s);)a+=2;for(;o(s,r[c]);)c-=2;a<=c&&(n(r,a,c),a+=2,c-=2)}while(a<=c);e(t,c),e(a,i)}}(e.stackPosition,this.stack.length-2):function(){for(let t=e.stackPosition;tn&&(n=e),o+=2}let s=qp.ValueType.KEY,a=null===i;for(let t=e;tn&&(n=r),t===e?(s=this.stack[t].type,a=a&&(0,Fp.isTypedVectorElement)(s)):s!==this.stack[t].type&&(a=!1)}const c=this.align(n),u=a&&(0,Fp.isNumber)(s)&&t>=2&&t<=4;null!==i&&(this.writeStackValue(i,c),this.writeUInt(1<>1,r=zp(s,e,t,u,l);if(0===r)return e;r<0?d=e-1:h=e+1}return null},$p.diffKeys=zp,$p.keyForIndex=function(e,t,r,i,n){const o=Hp(t,r,i)-3*n,s=(0,Lp.fromByteWidth)(n),a=o-Number(Up(t,o,s)),c=Number(Up(t,o+n,s)),u=a+e*c,l=u-Number(Up(t,u,(0,Lp.fromByteWidth)(c)));let h=0;for(;0!==t.getUint8(l+h);)h++;return(0,Vp.fromUTF8Array)(new Uint8Array(t.buffer,l,h))},Object.defineProperty(jp,"__esModule",{value:!0}),jp.Reference=jp.toReference=void 0;const Wp=yp,Gp=Sp,Yp=Ip,Kp=$p,Jp=bp,Xp=mp;function Qp(e,t,r,i,n,o,s,a){const c=(0,Kp.indirect)(r,i,n),u=c+e*o,l=r.getUint8(c+s*o+e);return new Zp(r,u,(0,Wp.fromByteWidth)(o),l,`${a}/${t}`)}jp.toReference=function(e){const t=e.byteLength;if(t<3)throw"Buffer needs to be bigger than 3";const r=new DataView(e),i=r.getUint8(t-1),n=r.getUint8(t-2),o=(0,Wp.fromByteWidth)(i);return new Zp(r,t-i-2,o,n,"/")};class Zp{constructor(e,t,r,i,n){this.dataView=e,this.offset=t,this.parentWidth=r,this.packedType=i,this.path=n,this._length=-1,this.byteWidth=1<<(3&i),this.valueType=i>>2}isNull(){return this.valueType===Gp.ValueType.NULL}isNumber(){return(0,Yp.isNumber)(this.valueType)||(0,Yp.isIndirectNumber)(this.valueType)}isFloat(){return Gp.ValueType.FLOAT===this.valueType||Gp.ValueType.INDIRECT_FLOAT===this.valueType}isInt(){return this.isNumber()&&!this.isFloat()}isString(){return Gp.ValueType.STRING===this.valueType||Gp.ValueType.KEY===this.valueType}isBool(){return Gp.ValueType.BOOL===this.valueType}isBlob(){return Gp.ValueType.BLOB===this.valueType}isVector(){return(0,Yp.isAVector)(this.valueType)}isMap(){return Gp.ValueType.MAP===this.valueType}boolValue(){return this.isBool()?(0,Kp.readInt)(this.dataView,this.offset,this.parentWidth)>0:null}intValue(){return this.valueType===Gp.ValueType.INT?(0,Kp.readInt)(this.dataView,this.offset,this.parentWidth):this.valueType===Gp.ValueType.UINT?(0,Kp.readUInt)(this.dataView,this.offset,this.parentWidth):this.valueType===Gp.ValueType.INDIRECT_INT?(0,Kp.readInt)(this.dataView,(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth),(0,Wp.fromByteWidth)(this.byteWidth)):this.valueType===Gp.ValueType.INDIRECT_UINT?(0,Kp.readUInt)(this.dataView,(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth),(0,Wp.fromByteWidth)(this.byteWidth)):null}floatValue(){return this.valueType===Gp.ValueType.FLOAT?(0,Kp.readFloat)(this.dataView,this.offset,this.parentWidth):this.valueType===Gp.ValueType.INDIRECT_FLOAT?(0,Kp.readFloat)(this.dataView,(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth),(0,Wp.fromByteWidth)(this.byteWidth)):null}numericValue(){return this.floatValue()||this.intValue()}stringValue(){if(this.valueType===Gp.ValueType.STRING||this.valueType===Gp.ValueType.KEY){const e=(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth);return(0,Jp.fromUTF8Array)(new Uint8Array(this.dataView.buffer,e,this.length()))}return null}blobValue(){if(this.isBlob()){const e=(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth);return new Uint8Array(this.dataView.buffer,e,this.length())}return null}get(e){const t=this.length();if(Number.isInteger(e)&&(0,Yp.isAVector)(this.valueType)){if(e>=t||e<0)throw`Key: [${e}] is not applicable on ${this.path} of ${this.valueType} length: ${t}`;const r=(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth),i=r+e*this.byteWidth;let n=this.dataView.getUint8(r+t*this.byteWidth+e);if((0,Yp.isTypedVector)(this.valueType)){const e=(0,Yp.typedVectorElementType)(this.valueType);n=(0,Yp.packedType)(e,Xp.BitWidth.WIDTH8)}else if((0,Yp.isFixedTypedVector)(this.valueType)){const e=(0,Yp.fixedTypedVectorElementType)(this.valueType);n=(0,Yp.packedType)(e,Xp.BitWidth.WIDTH8)}return new Zp(this.dataView,i,(0,Wp.fromByteWidth)(this.byteWidth),n,`${this.path}[${e}]`)}if("string"==typeof e){const r=(0,Kp.keyIndex)(e,this.dataView,this.offset,this.parentWidth,this.byteWidth,t);if(null!==r)return Qp(r,e,this.dataView,this.offset,this.parentWidth,this.byteWidth,t,this.path)}throw`Key [${e}] is not applicable on ${this.path} of ${this.valueType}`}length(){let e;if(this._length>-1)return this._length;if((0,Yp.isFixedTypedVector)(this.valueType))this._length=(0,Yp.fixedTypedVectorElementSize)(this.valueType);else if(this.valueType===Gp.ValueType.BLOB||this.valueType===Gp.ValueType.MAP||(0,Yp.isAVector)(this.valueType))this._length=(0,Kp.readUInt)(this.dataView,(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth)-this.byteWidth,(0,Wp.fromByteWidth)(this.byteWidth));else if(this.valueType===Gp.ValueType.NULL)this._length=0;else if(this.valueType===Gp.ValueType.STRING){const t=(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth);let r=this.byteWidth;for(e=(0,Kp.readUInt)(this.dataView,t-r,(0,Wp.fromByteWidth)(this.byteWidth));0!==this.dataView.getInt8(t+e);)r<<=1,e=(0,Kp.readUInt)(this.dataView,t-r,(0,Wp.fromByteWidth)(this.byteWidth));this._length=e}else if(this.valueType===Gp.ValueType.KEY){const t=(0,Kp.indirect)(this.dataView,this.offset,this.parentWidth);for(e=1;0!==this.dataView.getInt8(t+e);)e++;this._length=e}else this._length=1;return Number(this._length)}toObject(){const e=this.length();if(this.isVector()){const t=[];for(let r=0;r0?r:2048,i,n,o);return s.add(e),s.finish()}}(gp);var ef={exports:{}};!function(e){!function(){var t="input is invalid type",r="object"==typeof window,i=r?window:{};i.JS_SHA3_NO_WINDOW&&(r=!1);var n=!r&&"object"==typeof self;!i.JS_SHA3_NO_NODE_JS&&"object"==typeof $&&$.versions&&$.versions.node?i=M:n&&(i=self);for(var o=!i.JS_SHA3_NO_COMMON_JS&&e.exports,s=!i.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,a="0123456789abcdef".split(""),c=[4,1024,262144,67108864],u=[0,8,16,24],l=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],h=[224,256,384,512],d=[128,256],p=["hex","buffer","arrayBuffer","array","digest"],f={128:168,256:136},g=i.JS_SHA3_NO_NODE_JS||!Array.isArray?function(e){return"[object Array]"===Object.prototype.toString.call(e)}:Array.isArray,v=!s||!i.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView?ArrayBuffer.isView:function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer},m=function(e){var r=typeof e;if("string"===r)return[e,!0];if("object"!==r||null===e)throw new Error(t);if(s&&e.constructor===ArrayBuffer)return[new Uint8Array(e),!1];if(!g(e)&&!v(e))throw new Error(t);return[e,!1]},y=function(e){return 0===m(e)[0].length},w=function(e){for(var t=[],r=0;r>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var i=0;i<50;++i)this.s[i]=0}function F(e,t,r){q.call(this,e,t,r)}q.prototype.update=function(e){if(this.finalized)throw new Error("finalize already called");var t=m(e);e=t[0];for(var r,i,n=t[1],o=this.blocks,s=this.byteCount,a=e.length,c=this.blockCount,l=0,h=this.s;l>2]|=i<>2]|=(192|i>>6)<>2]|=(128|63&i)<=57344?(o[r>>2]|=(224|i>>12)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<>2]|=(240|i>>18)<>2]|=(128|i>>12&63)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<>2]|=e[l]<=s){for(this.start=r-s,this.block=o[c],r=0;r>=8);r>0;)n.unshift(r),r=255&(e>>=8),++i;return t?n.push(i):n.unshift(i),this.update(n),n.length},q.prototype.encodeString=function(e){var t=m(e);e=t[0];var r=t[1],i=0,n=e.length;if(r)for(var o=0;o=57344?i+=3:(s=65536+((1023&s)<<10|1023&e.charCodeAt(++o)),i+=4)}else i=n;return i+=this.encode(8*i),this.update(e),i},q.prototype.bytepad=function(e,t){for(var r=this.encode(t),i=0;i>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[r],t=1;t>4&15]+a[15&e]+a[e>>12&15]+a[e>>8&15]+a[e>>20&15]+a[e>>16&15]+a[e>>28&15]+a[e>>24&15];s%t==0&&(r=w(r),B(r),o=0)}return n&&(e=r[o],c+=a[e>>4&15]+a[15&e],n>1&&(c+=a[e>>12&15]+a[e>>8&15]),n>2&&(c+=a[e>>20&15]+a[e>>16&15])),c},q.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,r=this.s,i=this.outputBlocks,n=this.extraBytes,o=0,s=0,a=this.outputBits>>3;e=n?new ArrayBuffer(i+1<<2):new ArrayBuffer(a);for(var c=new Uint32Array(e);s>8&255,c[e+2]=t>>16&255,c[e+3]=t>>24&255;a%r==0&&(i=w(i),B(i))}return o&&(e=a<<2,t=i[s],c[e]=255&t,o>1&&(c[e+1]=t>>8&255),o>2&&(c[e+2]=t>>16&255)),c},F.prototype=new q,F.prototype.finalize=function(){return this.encode(this.outputBits,!0),q.prototype.finalize.call(this)};var B=function(e){var t,r,i,n,o,s,a,c,u,h,d,p,f,g,v,m,y,w,b,E,S,I,A,P,T,R,O,C,N,k,_,x,D,q,F,B,j,$,M,L,V,U,H,z,W,G,Y,K,J,X,Q,Z,ee,te,re,ie,ne,oe,se,ae,ce,ue,le;for(i=0;i<48;i+=2)n=e[0]^e[10]^e[20]^e[30]^e[40],o=e[1]^e[11]^e[21]^e[31]^e[41],s=e[2]^e[12]^e[22]^e[32]^e[42],a=e[3]^e[13]^e[23]^e[33]^e[43],c=e[4]^e[14]^e[24]^e[34]^e[44],u=e[5]^e[15]^e[25]^e[35]^e[45],h=e[6]^e[16]^e[26]^e[36]^e[46],d=e[7]^e[17]^e[27]^e[37]^e[47],t=(p=e[8]^e[18]^e[28]^e[38]^e[48])^(s<<1|a>>>31),r=(f=e[9]^e[19]^e[29]^e[39]^e[49])^(a<<1|s>>>31),e[0]^=t,e[1]^=r,e[10]^=t,e[11]^=r,e[20]^=t,e[21]^=r,e[30]^=t,e[31]^=r,e[40]^=t,e[41]^=r,t=n^(c<<1|u>>>31),r=o^(u<<1|c>>>31),e[2]^=t,e[3]^=r,e[12]^=t,e[13]^=r,e[22]^=t,e[23]^=r,e[32]^=t,e[33]^=r,e[42]^=t,e[43]^=r,t=s^(h<<1|d>>>31),r=a^(d<<1|h>>>31),e[4]^=t,e[5]^=r,e[14]^=t,e[15]^=r,e[24]^=t,e[25]^=r,e[34]^=t,e[35]^=r,e[44]^=t,e[45]^=r,t=c^(p<<1|f>>>31),r=u^(f<<1|p>>>31),e[6]^=t,e[7]^=r,e[16]^=t,e[17]^=r,e[26]^=t,e[27]^=r,e[36]^=t,e[37]^=r,e[46]^=t,e[47]^=r,t=h^(n<<1|o>>>31),r=d^(o<<1|n>>>31),e[8]^=t,e[9]^=r,e[18]^=t,e[19]^=r,e[28]^=t,e[29]^=r,e[38]^=t,e[39]^=r,e[48]^=t,e[49]^=r,g=e[0],v=e[1],G=e[11]<<4|e[10]>>>28,Y=e[10]<<4|e[11]>>>28,C=e[20]<<3|e[21]>>>29,N=e[21]<<3|e[20]>>>29,ae=e[31]<<9|e[30]>>>23,ce=e[30]<<9|e[31]>>>23,U=e[40]<<18|e[41]>>>14,H=e[41]<<18|e[40]>>>14,q=e[2]<<1|e[3]>>>31,F=e[3]<<1|e[2]>>>31,m=e[13]<<12|e[12]>>>20,y=e[12]<<12|e[13]>>>20,K=e[22]<<10|e[23]>>>22,J=e[23]<<10|e[22]>>>22,k=e[33]<<13|e[32]>>>19,_=e[32]<<13|e[33]>>>19,ue=e[42]<<2|e[43]>>>30,le=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,re=e[4]<<30|e[5]>>>2,B=e[14]<<6|e[15]>>>26,j=e[15]<<6|e[14]>>>26,w=e[25]<<11|e[24]>>>21,b=e[24]<<11|e[25]>>>21,X=e[34]<<15|e[35]>>>17,Q=e[35]<<15|e[34]>>>17,x=e[45]<<29|e[44]>>>3,D=e[44]<<29|e[45]>>>3,P=e[6]<<28|e[7]>>>4,T=e[7]<<28|e[6]>>>4,ie=e[17]<<23|e[16]>>>9,ne=e[16]<<23|e[17]>>>9,$=e[26]<<25|e[27]>>>7,M=e[27]<<25|e[26]>>>7,E=e[36]<<21|e[37]>>>11,S=e[37]<<21|e[36]>>>11,Z=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,z=e[8]<<27|e[9]>>>5,W=e[9]<<27|e[8]>>>5,R=e[18]<<20|e[19]>>>12,O=e[19]<<20|e[18]>>>12,oe=e[29]<<7|e[28]>>>25,se=e[28]<<7|e[29]>>>25,L=e[38]<<8|e[39]>>>24,V=e[39]<<8|e[38]>>>24,I=e[48]<<14|e[49]>>>18,A=e[49]<<14|e[48]>>>18,e[0]=g^~m&w,e[1]=v^~y&b,e[10]=P^~R&C,e[11]=T^~O&N,e[20]=q^~B&$,e[21]=F^~j&M,e[30]=z^~G&K,e[31]=W^~Y&J,e[40]=te^~ie&oe,e[41]=re^~ne&se,e[2]=m^~w&E,e[3]=y^~b&S,e[12]=R^~C&k,e[13]=O^~N&_,e[22]=B^~$&L,e[23]=j^~M&V,e[32]=G^~K&X,e[33]=Y^~J&Q,e[42]=ie^~oe&ae,e[43]=ne^~se&ce,e[4]=w^~E&I,e[5]=b^~S&A,e[14]=C^~k&x,e[15]=N^~_&D,e[24]=$^~L&U,e[25]=M^~V&H,e[34]=K^~X&Z,e[35]=J^~Q&ee,e[44]=oe^~ae&ue,e[45]=se^~ce&le,e[6]=E^~I&g,e[7]=S^~A&v,e[16]=k^~x&P,e[17]=_^~D&T,e[26]=L^~U&q,e[27]=V^~H&F,e[36]=X^~Z&z,e[37]=Q^~ee&W,e[46]=ae^~ue&te,e[47]=ce^~le&re,e[8]=I^~g&m,e[9]=A^~v&y,e[18]=x^~P&R,e[19]=D^~T&O,e[28]=U^~q&B,e[29]=H^~F&j,e[38]=Z^~z&G,e[39]=ee^~W&Y,e[48]=ue^~te&ie,e[49]=le^~re&ne,e[0]^=l[i],e[1]^=l[i+1]};if(o)e.exports=R;else for(C=0;Ce.close()))),this.release(Array.from(this.services.keys()))}init(){return this.ready=!0,Promise.resolve(void 0)}async publishData(e){const t=await this.createFileInfo(),r=await this.createSocket(t,["GetMetadata","GetChunk"]);return r.addEventListener("message",(t=>{if(!(t.data instanceof ArrayBuffer))return void this.logger.error("Received non-ArrayBuffer data from the socket",{data:t.data});const i=gp.toObject(t.data);this.logger.debug("Received GFTP request for publishData",i),"GetMetadata"===i.component?this.respond(r,i.id,{fileSize:e.byteLength}):"GetChunk"===i.component?this.respond(r,i.id,{content:e.slice(i.payload.offset,i.payload.offset+i.payload.size),offset:i.payload.offset}):this.logger.error(`Unsupported message in publishData(): ${i.component}`)})),t.url}async publishFile(e){if(u)throw new r("Cannot publish files in browser context, did you mean to use `publishData()`?");this.logger.info("Preparing file upload",{sourcePath:e});const t=await this.createFileInfo(),i=await this.createSocket(t,["GetMetadata","GetChunk"]),n=(await sf.stat(e)).size,o=await sf.open(e,"r");return this.openHandles.add(o),i.addEventListener("message",(async e=>{if(!(e.data instanceof ArrayBuffer))return void this.logger.error("Received non-ArrayBuffer data from the socket",{data:e.data});const t=gp.toObject(e.data);if(this.logger.debug("Received GFTP request for publishFile",t),"GetMetadata"===t.component)this.respond(i,t.id,{fileSize:n});else if("GetChunk"===t.component){const{offset:e,size:r}=t.payload,s=Math.min(r,n-e),a=Buffer.alloc(s);try{await o.read(a,0,s,e),this.respond(i,t.id,{content:a,offset:e})}catch(e){this.logger.error("Something went wrong while sending the file chunk",{error:e})}}else this.logger.error(`Unsupported message in publishFile(): ${t.component}`)})),t.url}async receiveData(e){const t=[],r=await this.createFileInfo(),i=await this.createSocket(r,["UploadChunk","UploadFinished"]);return i.addEventListener("message",(r=>{if(!(r.data instanceof ArrayBuffer))return void this.logger.error("Received non-ArrayBuffer data from the socket",{data:r.data});const n=gp.toObject(r.data);if(this.logger.debug("Received GFTP request for receiveData",n),"UploadChunk"===n.component)t.push(n.payload.chunk),this.respond(i,n.id,null);else if("UploadFinished"===n.component){this.respond(i,n.id,null);const r=this.completeReceive(n.payload.hash,t);e(r)}else this.logger.error(`Unsupported message in receiveData(): ${n.component}`)})),r.url}async receiveFile(e){if(u)throw new r("Cannot receive files in browser context, did you mean to use `receiveData()`?");this.logger.info("Preparing file download",{destination:e});const t=await this.createFileInfo(),i=await sf.open(e,"w");this.openHandles.add(i);const n=await this.createSocket(t,["UploadChunk","UploadFinished"]);return n.addEventListener("message",(async e=>{if(!(e.data instanceof ArrayBuffer))return void this.logger.error("Received non-ArrayBuffer data from the socket",{data:e.data});const t=gp.toObject(e.data);this.logger.debug("Received GFTP request for receiveFile",t),"UploadChunk"===t.component?(await i.write(t.payload.chunk.content),this.respond(n,t.id,null)):"UploadFinished"===t.component?(this.respond(n,t.id,null),await i.close(),this.openHandles.delete(i)):this.logger.error(`Unsupported message in receiveFile(): ${t.component}`)})),t.url}async release(e){e.forEach((e=>{const t=this.services.get(e);t&&this.deleteService(t).catch((e=>this.logger.warn("Failed to delete service",{serviceId:t,error:e}))),this.services.delete(e)}))}isReady(){return this.ready}async createFileInfo(){const e=Xn();return{id:e,url:`gftp://${(await this.yagnaApi.identity.getIdentity()).identity}/${e}`}}getWsConstructor(){return u?WebSocket:of}async createSocket(e,t){const r=await this.createService(e,t),i=new(this.getWsConstructor())(r.url,["gsb+flexbuffers"]);return i.addEventListener("error",(()=>{this.logger.error(`Socket Error (${e.id})`)})),i.binaryType="arraybuffer",i}async createService(e,t){const r=(await this.yagnaApi.gsb.bindServices({listen:{on:`/public/gftp/${e.id}`,components:t}})).servicesId,i=`/gsb-api/v1/services/${r}?authToken=${this.yagnaApi.yagnaOptions.apiKey}`,n=new URL(i,this.yagnaApi.yagnaOptions.basePath);return n.protocol="ws:",this.services.set(e.url,r),{url:n,serviceId:r}}async deleteService(e){await this.yagnaApi.gsb.unbindServices(e)}respond(e,t,r){e.send(gp.encode({id:t,payload:r}))}completeReceive(e,t){t.sort(((e,t)=>e.offset-t.offset));const r=t.reduce(((e,t)=>e+t.content.byteLength),0),i=new Uint8Array(r);t.forEach((e=>{i.set(e.content,e.offset)}));const n=tf.sha3_256(i);if(e!==n)throw new o(`File corrupted, expected hash ${e}, got ${n}`);return i}}function cf(e,t){return new af(e,{logger:null==t?void 0:t.child("storage")})}var uf,lf,hf,df;!function(e){e.ServiceNotInitialized="ServiceNotInitialized",e.ScriptExecutionFailed="ScriptExecutionFailed",e.ActivityDestroyingFailed="ActivityDestroyingFailed",e.ActivityResultsFetchingFailed="ActivityResultsFetchingFailed",e.ActivityCreationFailed="ActivityCreationFailed",e.NetworkSetupMissing="NetworkSetupMissing",e.ScriptInitializationFailed="ScriptInitializationFailed",e.ActivityDeploymentFailed="ActivityDeploymentFailed",e.ActivityStatusQueryFailed="ActivityStatusQueryFailed",e.ActivityResetFailed="ActivityResetFailed"}(df||(df={}));class pf extends c{constructor(e,t,r,i,n,o){super(e,t,o),this.code=t,this.previous=o,uf.set(this,void 0),lf.set(this,void 0),hf.set(this,void 0),ss(this,uf,r,"f"),ss(this,lf,i,"f"),ss(this,hf,n,"f")}getAgreement(){return os(this,uf,"f")}getActivity(){return os(this,lf,"f")}getProvider(){return os(this,hf,"f")}}uf=new WeakMap,lf=new WeakMap,hf=new WeakMap;class ff{constructor(e,t,r){this.executor=e,this.storageProvider=t,this.logger=r,this.script=new Vh([])}run(e,t){return t?this.script.add(new Gh(e,t)):this.script.add(new Gh("/bin/sh",["-c",e])),this}transfer(e,t){return this.script.add(new Yh(e,t)),this}uploadFile(e,t){return this.script.add(new Kh(this.storageProvider,e,t)),this}uploadJson(e,t){const r=(new TextEncoder).encode(JSON.stringify(e));return this.script.add(new Jh(this.storageProvider,r,t)),this}uploadData(e,t){return this.script.add(new Jh(this.storageProvider,e,t)),this}downloadFile(e,t){return this.script.add(new Xh(this.storageProvider,e,t)),this}async end(){await this.script.before();try{const e=[],t=this.script.getExeScriptRequest();this.logger.debug("Sending exec script request to the exe-unit on provider:",{script:t});const r=await this.executor.execute(t),i=this.executor.getResultsObservable(r);return new Promise(((t,r)=>{this.logger.debug("Reading the results of the batch script"),i.subscribe({next:t=>{this.logger.debug("Received data for batch script execution",{res:t}),e.push(t)},complete:()=>{this.logger.debug("End of batch script execution"),this.script.after(e).then((e=>t(e))).catch((e=>r(e)))},error:t=>{const i=t instanceof pf?t:new pf(`Unable to execute script ${t}`,df.ScriptExecutionFailed,this.executor.activity.agreement,this.executor.activity,this.executor.activity.agreement.provider,t);this.logger.debug("Error in batch script execution",{error:t}),this.script.after(e).then((()=>r(i))).catch((()=>r(i)))}})}))}catch(e){if(this.logger.error("Failed to send the exec script to the exe-unit on provider",{error:e}),await this.script.after([]),e instanceof pf)throw e;throw new pf(`Unable to execute script ${e}`,df.ScriptExecutionFailed,this.executor.activity.agreement,this.executor.activity,this.executor.activity.agreement.provider,e)}}async endStream(){const e=this.script;let t;await e.before();try{t=await this.executor.execute(this.script.getExeScriptRequest())}catch(t){if(await e.after([]),t instanceof pf)throw t;throw new pf(`Unable to execute script ${t}`,df.ScriptExecutionFailed,this.executor.activity.agreement,this.executor.activity,this.executor.activity.agreement.provider,t)}const r=[],{activity:i}=this.executor;return this.executor.getResultsObservable(t).pipe(oa((e=>{if("Error"!==e.result)return e;throw new pf(`${null==e?void 0:e.message}. Stdout: ${String(null==e?void 0:e.stdout).trim()}. Stderr: ${String(null==e?void 0:e.stderr).trim()}`,df.ScriptExecutionFailed,i.agreement,i,i.provider)})),va((e=>{r.push(e)})),da((()=>e.after(r).catch((e=>this.logger.error("Failed to cleanup script",{error:e}))))))}}const gf=2e4;class vf{constructor(e,t,r,i){this.activityModule=e,this.activity=r,this.logger=i,this.stdout=new qs,this.stderr=new qs,this.subscription=t.pipe(da((()=>{this.stdout.complete(),this.stderr.complete()}))).subscribe({next:e=>{this.lastResult=e,e.stdout&&this.stdout.next(e.stdout),e.stderr&&this.stderr.next(e.stderr)},error:e=>{this.streamError=e}})}waitForExit(e){return new Promise(((t,r)=>{const i=null!=e?e:gf,n=setTimeout((()=>{r(new pf(`Unable to get activity results. The waiting time (${i} ms) for the final result has been exceeded`,df.ActivityResultsFetchingFailed,this.activity.agreement,this.activity,this.activity.provider,new a(`The waiting time (${i} ms) for the final result has been exceeded`))),this.activityModule.destroyActivity(this.activity).catch((e=>this.logger.error("Error when destroying activity",e)))}),i),o=()=>{clearTimeout(n),this.lastResult?t(this.lastResult):(r(new pf(`An error occurred while retrieving the results. ${this.streamError}`,df.ActivityResultsFetchingFailed,this.activity.agreement,this.activity,this.activity.provider)),this.activityModule.destroyActivity(this.activity).catch((e=>this.logger.error("Error when destroying activity",e))))};this.subscription.add((()=>o()))}))}isFinished(){return this.subscription.closed}}var mf={};class yf{constructor(e,t,r={}){var i;this.wsUrl=e,this.appKey=t,this.events=new Yl,d("TCP Proxy"),this.heartBeatSec=null!==(i=r.heartBeatSec)&&void 0!==i?i:10,this.logger=r.logger?r.logger.child("tcp-proxy"):K("tcp-proxy"),this.server=mf.createServer((e=>{this.logger.debug("Client connected to TCP Server");const t={sReady:!0,sBuffer:[],wsReady:!1,wsBuffer:[]},r=()=>t.sBuffer=[],i=()=>t.wsBuffer=[],n=()=>{this.logger.debug("Flushing Socket buffer"),t.sBuffer.length>0&&e.write(Ee.concat(t.sBuffer)),r()},o=()=>{this.logger.debug("Flushing WebSocket buffer"),t.wsBuffer.length>0&&a.send(Ee.concat(t.wsBuffer),{binary:!0,mask:!0}),i()},s=()=>{a.close(),e.end(),i(),r()},a=new nf.WebSocket(this.wsUrl,{headers:{authorization:`Bearer ${this.appKey}`}});a.on("open",(()=>{this.logger.debug("Yagna WS opened"),t.wsReady=!0,o()})),e.on("connect",(()=>{this.logger.debug("Client socket connected"),t.sReady=!0,n()})),a.on("error",(e=>{this.notifyOfError("Yagna WS encountered an error",e),s()})),e.on("error",(e=>{this.notifyOfError("Server Socket encountered an error",e),s()})),a.on("close",(()=>{clearInterval(u),this.logger.debug("Yagna WS closed"),e.end(),i(),r()})),a.on("end",(()=>{this.logger.debug("Yagna WS end"),e.end(),i(),r()})),e.on("close",(e=>{e?this.logger.error("Server Socket encountered closed with an error error"):this.logger.debug("Server Socket has been closed (client disconnected)"),a.close(),i(),r()})),e.on("data",(async e=>{this.logger.debug("Server Socket received data",{length:e.length,wsReady:t.wsReady}),t.wsReady?a.send(e,{binary:!0,mask:!0}):t.wsBuffer.push(e)})),a.on("message",(r=>{const i="length"in r?r.length:null;this.logger.debug("Yagna WS received data",{length:i,socketReady:t.sReady}),r instanceof Ee?t.sReady?e.write(r):t.wsBuffer.push(r):this.logger.error("Encountered unsupported type of message",typeof r)})),a.on("ping",(()=>{this.logger.debug("Yagna WS received ping event")}));let c=!0;const u=setInterval((()=>{if(t.wsReady){if(this.logger.debug("Yagna WS checking if the client is alive"),!c)return this.notifyOfError("Yagna WS doesn't seem to be healthy, going to terminate"),a.terminate();c=!1,a.ping()}else this.logger.debug("Yagna WS is not ready yet, skipping heart beat")}),1e3*this.heartBeatSec);a.on("pong",(()=>{this.logger.debug("Yagna WS received pong event"),c=!0}))})),this.attachDebugLogsToServer()}async listen(e,t){return this.logger.debug("TcpProxy listen initiated"),this.server.listen({port:e,signal:t?t.signal:void 0}),new Promise(((t,r)=>{const i=t=>{this.notifyOfError("TcpProxy failed to start listening",{port:e,err:t}),this.server.removeListener("listening",n),r(t)},n=()=>{this.logger.info("TcpProxy is listening",{port:e}),this.server.removeListener("error",i),t()};this.server.once("listening",n),this.server.once("error",i)}))}close(){return this.logger.debug("TCP Server close initiated by the user"),new Promise(((e,t)=>{var r;this.server.listening?null===(r=this.server)||void 0===r||r.close((r=>{r?(this.notifyOfError("TCP Server closed with an error",r),t(r)):(this.logger.info("TCP server closed - was listening"),e())})):(this.logger.info("TCP Server closed - was not listening"),e())}))}notifyOfError(e,t){this.logger.error(e,t),this.events.emit("error",`${e}: ${t}`)}attachDebugLogsToServer(){this.server.on("listening",(()=>this.logger.debug("TCP Server started to listen"))),this.server.on("close",(()=>this.logger.debug("TCP Server closed"))),this.server.on("connection",(()=>this.logger.debug("TCP Server received new connection"))),this.server.on("drop",(e=>this.logger.debug("TCP Server dropped a connection because of reaching `maxConnections`",{data:e}))),this.server.on("error",(e=>this.logger.error("Server event 'error'",e)))}}class wf{constructor(e,t,r){var i,n,o;this.activity=e,this.activityModule=t,this.options=r,this.logger=null!==(i=null==r?void 0:r.logger)&&void 0!==i?i:K("work"),this.provider=e.provider,this.storageProvider=null!==(n=null==r?void 0:r.storageProvider)&&void 0!==n?n:new pp,this.networkNode=null==r?void 0:r.networkNode,this.abortSignal=ql(null==r?void 0:r.signalOrTimeout),this.executor=this.activityModule.createScriptExecutor(this.activity,{...null===(o=this.options)||void 0===o?void 0:o.executionOptions,signalOrTimeout:this.abortSignal})}async fetchState(){if(this.abortSignal.aborted)throw new i("ExeUnit has been aborted");return this.activityModule.refreshActivity(this.activity).then((e=>e.getState())).catch((e=>{throw this.logger.error("Failed to read activity state",e),new pf("Failed to read activity state",df.ActivityStatusQueryFailed,this.activity.agreement,this.activity,e)}))}async setup(){try{let t=await this.fetchState();if(t===Fh.Ready)return void await this.setupActivity();if(t===Fh.Initialized&&await this.deployActivity(),await e(1e3,!0),t=await this.fetchState(),t!==Fh.Ready){const e=(new Date).toISOString();throw new pf(`Activity ${this.activity.id} cannot reach the Ready state at: ${e}. Current state: ${t}`,df.ActivityDeploymentFailed,this.activity.agreement,this.activity,this.activity.provider)}await this.setupActivity()}catch(e){if(this.abortSignal.aborted)throw"TimeoutError"===this.abortSignal.reason.name?new a("Initializing of the exe-unit has been aborted due to a timeout",this.abortSignal.reason):new i("Initializing of the exe-unit has been aborted",this.abortSignal.reason);throw e}}async teardown(){var e;(null===(e=this.options)||void 0===e?void 0:e.teardown)&&await this.options.teardown(this)}async deployActivity(){var e,t;try{const r=await this.executor.execute(new Vh([new zh({...null===(t=null===(e=this.networkNode)||void 0===e?void 0:e.getNetworkDeploymentArg)||void 0===t?void 0:t.call(e),...this.getVolumeDeploymentArg()}),new Wh]).getExeScriptRequest()),i=this.executor.getResultsObservable(r);await na(i.pipe(va((e=>{if("Error"===e.result)throw new Error(String(e.message))}))))}catch(e){throw new pf(`Unable to deploy activity. ${e}`,df.ActivityDeploymentFailed,this.activity.agreement,this.activity,this.activity.provider,e)}}async setupActivity(){var e;(null===(e=this.options)||void 0===e?void 0:e.setup)&&await this.options.setup(this)}async run(e,t,r){const i=Array.isArray(t);this.logger.debug("Running command",{command:i?`${e} ${null==t?void 0:t.join(" ")}`:e,provider:this.provider.name});const n=i?new Gh(e,t,null==r?void 0:r.env,null==r?void 0:r.capture):new Gh("/bin/sh",["-c",e],null==t?void 0:t.env,null==t?void 0:t.capture),o=i?r:t;return this.runOneCommand(n,o)}async runAndStream(e,t,r){const i={stdout:{stream:{format:"string"}},stderr:{stream:{format:"string"}}},n=Array.isArray(t)?new Gh(e,t,null==r?void 0:r.env,i):new Gh("/bin/sh",["-c",e],null==t?void 0:t.env,i),o=new Vh([n]),s=await this.executor.execute(o.getExeScriptRequest()),a=this.executor.getResultsObservable(s,!0,null==r?void 0:r.signalOrTimeout,null==r?void 0:r.maxRetries);return new vf(this.activityModule,a,this.activity,this.logger)}async transfer(e,t,r){return this.logger.debug("Transferring",{from:e,to:t}),this.runOneCommand(new Yh(e,t),r)}async uploadFile(e,t,r){return this.logger.debug("Uploading file",{src:e,dst:t}),this.runOneCommand(new Kh(this.storageProvider,e,t),r)}uploadJson(e,t,r){this.logger.debug("Uploading json",{dst:t});const i=(new TextEncoder).encode(JSON.stringify(e));return this.runOneCommand(new Jh(this.storageProvider,i,t),r)}uploadData(e,t,r){return this.logger.debug("Uploading data",{dst:t}),this.runOneCommand(new Jh(this.storageProvider,e,t),r)}downloadFile(e,t,r){return this.logger.debug("Downloading file from",{src:e,dst:t}),this.runOneCommand(new Xh(this.storageProvider,e,t),r)}downloadData(e,t){return this.logger.debug("Downloading data",{src:e}),this.runOneCommand(new Qh(this.storageProvider,e),t)}async downloadJson(e,t){this.logger.debug("Downloading json",{src:e});const r=await this.downloadData(e,t);return"Ok"!==r.result?new jh({...r,data:void 0}):new jh({...r,data:JSON.parse((new TextDecoder).decode(r.data))})}beginBatch(){return new ff(this.executor,this.storageProvider,this.logger)}getWebsocketUri(e){if(!this.networkNode)throw new pf("There is no network in this exe-unit",df.NetworkSetupMissing,this.activity.agreement,this.activity,this.activity.provider);return this.networkNode.getWebsocketUri(e)}getIp(){if(!this.networkNode)throw new pf("There is no network in this exe-unit",df.NetworkSetupMissing,this.activity.agreement,this.activity,this.activity.provider);return this.networkNode.ip}createTcpProxy(e){var t,r;if(!(null===(r=null===(t=this.options)||void 0===t?void 0:t.yagnaOptions)||void 0===r?void 0:r.apiKey))throw new n("You need to provide yagna API key to use the TCP Proxy functionality");return new yf(this.getWebsocketUri(e),this.options.yagnaOptions.apiKey,{logger:this.logger})}getDto(){return{provider:this.provider,id:this.activity.id,agreement:this.activity.agreement}}async runOneCommand(t,r){const i=new Vh([t]);await i.before().catch((e=>{var r,i;throw new pf(`Script initialization failed for command: ${JSON.stringify(t.toJson())}. ${(null===(i=null===(r=null==e?void 0:e.response)||void 0===r?void 0:r.data)||void 0===i?void 0:i.message)||(null==e?void 0:e.message)||e}`,df.ScriptInitializationFailed,this.activity.agreement,this.activity,this.activity.provider,e)})),await e(100,!0);const n=await this.executor.execute(i.getExeScriptRequest()),o=this.executor.getResultsObservable(n,!1,null==r?void 0:r.signalOrTimeout,null==r?void 0:r.maxRetries);let s=await na(o.pipe(ks((function(e,t){la(ha,[])(e).subscribe(t)}))));s=await i.after(s);const a=s.filter((e=>"Error"===e.result));if(a.length){const e=a.map((e=>{var t,r;return`Error: ${e.message}. Stdout: ${null===(t=e.stdout)||void 0===t?void 0:t.toString().trim()}. Stderr: ${null===(r=e.stderr)||void 0===r?void 0:r.toString().trim()}`})).join(". ");this.logger.warn("Task error",{provider:this.provider.name,error:e})}return s[0]}getVolumeDeploymentArg(){var e;if(!(null===(e=this.options)||void 0===e?void 0:e.volumes))return{};const t={volumes:{}};for(const[,e]of Object.entries(this.options.volumes))t.volumes[e.path]={storage:{size:`${e.sizeGib}g`,errors:"panic"}};return t}}async function bf(e,t){let r;return Promise.race([e,(i=t,new Promise(((e,t)=>{r=setTimeout((()=>t(new a("Timeout for the operation was reached"))),i)})))]).finally((()=>clearTimeout(r)));var i}var Ef={};function Sf(e,t){"boolean"==typeof t&&(t={forever:t}),this._originalTimeouts=JSON.parse(JSON.stringify(e)),this._timeouts=e,this._options=t||{},this._maxRetryTime=t&&t.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}var If=Sf;Sf.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)},Sf.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null},Sf.prototype.retry=function(e){if(this._timeout&&clearTimeout(this._timeout),!e)return!1;var t=(new Date).getTime();if(e&&t-this._operationStart>=this._maxRetryTime)return this._errors.push(e),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(e);var r=this._timeouts.shift();if(void 0===r){if(!this._cachedTimeouts)return!1;this._errors.splice(0,this._errors.length-1),r=this._cachedTimeouts.slice(-1)}var i=this;return this._timer=setTimeout((function(){i._attempts++,i._operationTimeoutCb&&(i._timeout=setTimeout((function(){i._operationTimeoutCb(i._attempts)}),i._operationTimeout),i._options.unref&&i._timeout.unref()),i._fn(i._attempts)}),r),this._options.unref&&this._timer.unref(),!0},Sf.prototype.attempt=function(e,t){this._fn=e,t&&(t.timeout&&(this._operationTimeout=t.timeout),t.cb&&(this._operationTimeoutCb=t.cb));var r=this;this._operationTimeoutCb&&(this._timeout=setTimeout((function(){r._operationTimeoutCb()}),r._operationTimeout)),this._operationStart=(new Date).getTime(),this._fn(this._attempts)},Sf.prototype.try=function(e){console.log("Using RetryOperation.try() is deprecated"),this.attempt(e)},Sf.prototype.start=function(e){console.log("Using RetryOperation.start() is deprecated"),this.attempt(e)},Sf.prototype.start=Sf.prototype.try,Sf.prototype.errors=function(){return this._errors},Sf.prototype.attempts=function(){return this._attempts},Sf.prototype.mainError=function(){if(0===this._errors.length)return null;for(var e={},t=null,r=0,i=0;i=r&&(t=n,r=s)}return t},function(e){var t=If;e.operation=function(r){var i=e.timeouts(r);return new t(i,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})},e.timeouts=function(e){if(e instanceof Array)return[].concat(e);var t={retries:10,factor:2,minTimeout:1e3,maxTimeout:1/0,randomize:!1};for(var r in e)t[r]=e[r];if(t.minTimeout>t.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var i=[],n=0;n{const t=()=>new i("Execution of script has been aborted",o.reason);o.aborted&&e.error(t()),o.addEventListener("abort",(()=>{e.error(t())}))})),t?this.streamingBatch(e.batchId,e.batchSize):this.pollingBatch(e.batchId,n)).pipe(da(s))}async send(e){return bf(this.activityModule.executeScript(this.activity,e),1e4)}pollingBatch(e,t){let r,i=!1;const{id:n,agreement:o}=this.activity,{activityExeBatchResultPollIntervalSeconds:s,activityExeBatchResultMaxRetries:a}=this.options,{logger:c,activity:u,activityModule:l}=this;return new Cs((o=>{const h=async()=>{if(!i)return c.debug("Polling for batch script execution result"),await Tf((async(t,a)=>{var h,d;c.debug(`Trying to poll for batch execution results from yagna. Attempt: ${a}`);try{i&&t(new Error("Batch is finished"));const a=await l.getBatchResults(u,e,void 0,s),h=a&&a.slice(r+1);c.debug("Received batch execution results",{results:h,activityId:n}),Array.isArray(h)&&h.length&&h.forEach((e=>{o.next(e),i||(i=!!e.isBatchFinished),r=e.index}))}catch(e){c.debug(`Failed to fetch activity results. Attempt: ${a}. ${e}`);const r=null!==(h=null==e?void 0:e.status)&&void 0!==h?h:null===(d=e.previous)||void 0===d?void 0:d.status;if(Rf.includes(r))throw e;t(e)}}),{retries:null!=t?t:a,maxTimeout:15e3}),Bl(h);o.complete()};return h().catch((e=>{c.error("Polling for batch results failed",e),o.error(e)})),()=>{i=!0}})).pipe(ua((e=>{if(e instanceof pf)throw e;throw new pf(`Unable to get activity results. ${e}`,df.ActivityResultsFetchingFailed,o,u,u.provider,e)})))}streamingBatch(e,t){return this.activityModule.observeStreamingBatchEvents(this.activity,e).pipe(oa((e=>this.parseEventToResult(e,t))),(r=e=>!e.isBatchFinished,i=!0,ks((function(e,t){var n=0;e.subscribe(_s(t,(function(e){var o=r(e,n++);(o||i)&&t.next(e),!o&&t.complete()})))}))),ua((e=>{throw new pf(`Unable to get activity results. ${e}`,df.ActivityResultsFetchingFailed,this.activity.agreement,this.activity,this.activity.provider,e)})));var r,i}parseEventToResult(e,t){var r,i,n,o,s,a,c,u,l;const h=new jh({index:e.index,eventDate:e.timestamp,result:(null===(r=null==e?void 0:e.kind)||void 0===r?void 0:r.finished)?0===(null===(n=null===(i=null==e?void 0:e.kind)||void 0===i?void 0:i.finished)||void 0===n?void 0:n.return_code)?"Ok":"Error":(null===(o=null==e?void 0:e.kind)||void 0===o?void 0:o.stderr)?"Error":"Ok",stdout:null===(s=null==e?void 0:e.kind)||void 0===s?void 0:s.stdout,stderr:null===(a=null==e?void 0:e.kind)||void 0===a?void 0:a.stderr,message:null===(u=null===(c=null==e?void 0:e.kind)||void 0===c?void 0:c.finished)||void 0===u?void 0:u.message,isBatchFinished:e.index+1>=t&&Boolean(null===(l=null==e?void 0:e.kind)||void 0===l?void 0:l.finished)});return this.logger.debug("Received stream batch execution result",{result:h}),h}}class Cf{constructor(e){this.services=e,this.events=new Yl,this.logger=K("activity"),this.logger=e.logger,this.activityApi=e.activityApi}createScriptExecutor(e,t){return new Of(e,this,this.logger.child("executor"),t)}async executeScript(e,t){this.logger.debug("Executing script on activity",{activityId:e.id});try{this.events.emit("scriptSent",{activity:e,script:t});const r=await this.activityApi.executeScript(e,t);return this.events.emit("scriptExecuted",{activity:await this.refreshActivity(e).catch((()=>(this.logger.warn("Failed to refresh activity after script execution",{activityId:e.id}),e))),script:t,result:r}),r}catch(r){throw this.events.emit("errorExecutingScript",{activity:await this.refreshActivity(e).catch((()=>(this.logger.warn("Failed to refresh activity after script execution error",{activityId:e.id}),e))),script:t,error:r}),r}}async getBatchResults(e,t,r,i){this.logger.debug("Fetching batch results",{activityId:e.id,batchId:t});try{const n=await this.activityApi.getExecBatchResults(e,t,r,i);return this.events.emit("batchResultsReceived",{activity:await this.refreshActivity(e).catch((()=>(this.logger.warn("Failed to refresh activity after batch results received",{activityId:e.id}),e))),batchId:t,results:n}),n}catch(r){throw this.events.emit("errorGettingBatchResults",{activity:await this.refreshActivity(e).catch((()=>(this.logger.warn("Failed to refresh activity after batch results error",{activityId:e.id}),e))),batchId:t,error:r}),r}}observeStreamingBatchEvents(e,t,r){return this.logger.debug("Observing streaming batch events",{activityId:e.id,batchId:t}),this.activityApi.getExecBatchEvents(e,t,r).pipe(va((async r=>{this.events.emit("batchEventsReceived",{activity:await this.refreshActivity(e).catch((()=>(this.logger.warn("Failed to refresh activity after batch events received",{activityId:e.id}),e))),batchId:t,event:r})})),ua((async r=>{throw this.events.emit("errorGettingBatchEvents",{activity:await this.refreshActivity(e).catch((()=>(this.logger.warn("Failed to refresh activity after batch events error",{activityId:e.id}),e))),batchId:t,error:r}),r})))}async createActivity(e){this.logger.debug("Creating activity",{agreementId:e.id,provider:e.provider});try{const t=await this.activityApi.createActivity(e);return this.events.emit("activityCreated",{activity:t}),this.logger.info("Created activity",{activityId:t.id,agreementId:e.id,provider:e.provider}),t}catch(e){throw this.events.emit("errorCreatingActivity",e),e}}async destroyActivity(e){this.logger.debug("Destroying activity",e);try{const t=await this.activityApi.destroyActivity(e);return this.events.emit("activityDestroyed",{activity:t}),this.logger.info("Destroyed activity",{activityId:t.id,agreementId:t.agreement.id,provider:t.agreement.provider}),t}catch(t){throw this.events.emit("errorDestroyingActivity",{activity:e,error:t}),t}}async refreshActivity(e){this.logger.debug("Fetching latest activity state",{activityId:e.id,lastState:e.getState()});try{const t=await this.activityApi.getActivity(e.id);return t.getState()!==t.getPreviousState()&&(this.logger.debug("Activity state changed",{activityId:e.id,previousState:t.getPreviousState(),newState:t.getState()}),this.events.emit("activityStateChanged",{activity:t,previousState:t.getPreviousState()})),t}catch(t){throw this.events.emit("errorRefreshingActivity",{activity:e,error:t}),t}}async findActivityById(e){return this.logger.info("Fetching activity by ID",{activityId:e}),await this.activityApi.getActivity(e)}async createExeUnit(e,t){this.logger.debug("Creating exe-unit for activity",{activityId:e.id});const r=new wf(e,this,{yagnaOptions:this.services.yagna.yagnaOptions,logger:this.logger.child("exe-unit"),...t});this.logger.debug("Initializing the exe-unit for activity",{activityId:e.id});try{await r.setup();const t=await this.refreshActivity(e).catch((()=>(this.logger.warn("Failed to refresh activity after work context initialization",{activityId:e.id}),e)));return this.events.emit("exeUnitInitialized",{activity:t}),this.logger.info("Initialized exe-unit",{activityId:e.id,state:t.getState()}),r}catch(t){throw this.events.emit("errorInitializingExeUnit",{activity:await this.refreshActivity(e).catch((()=>(this.logger.warn("Failed to refresh activity after exe-unit initialization error",{activityId:e.id}),e))),error:t}),t}}}var Nf,kf={},_f={};Nf=_f,Object.defineProperty(Nf,"__esModule",{value:!0}),Nf.matchingBitCount=Nf.intLog2=Nf.cidrPrefixToMaskBinaryString=Nf.leftPadWithZeroBit=Nf.dottedDecimalNotationToBinaryString=Nf.parseBinaryStringToBigInt=Nf.decimalNumberToOctetString=Nf.numberToBinaryString=void 0,Nf.numberToBinaryString=e=>e.toString(2),Nf.decimalNumberToOctetString=e=>{let t=Nf.numberToBinaryString(e);if(t.length>8)throw new Error("Given decimal in binary contains digits greater than an octet");return Nf.leftPadWithZeroBit(t,8)},Nf.parseBinaryStringToBigInt=e=>BigInt(`0b${e}`),Nf.dottedDecimalNotationToBinaryString=e=>e.split(".").reduce(((e,t)=>e.concat(Nf.decimalNumberToOctetString(parseInt(t)))),""),Nf.leftPadWithZeroBit=(e,t)=>{if(e.length>t)throw new Error(`Given string is already longer than given final length after padding: ${t}`);return"0".repeat(t-e.length).concat(e)},Nf.cidrPrefixToMaskBinaryString=(e,t)=>{let r;if(r="IPv4"==t?32:128,e>r)throw Error(`Value is greater than ${r}`);return`${"1".repeat(e)}${"0".repeat(r-e)}`},Nf.intLog2=e=>{let t=0;for(;e%2n===0n;){if(2n===e){t++;break}if((e>>=1n)%2n!==0n){t=0;break}t++}if(0==t)throw new Error(`The value of log2 for ${e.toString()} is not an integer`);return t},Nf.matchingBitCount=(e,t)=>{let r,i;e.length>=t.length?(r=e,i=t):(r=t,i=e);let n=0;for(;ne.includes("/")?`/${e.split("/")[1]}`:"";return Ff.expandIPv6Number=i=>{let n=t=>t.map((t=>e.leftPadWithZeroBit(t,4))).join(":");if(/(:){3,}/.test(i))throw"given IPv6 contains consecutive : more than two";const o=r(i);if(i.includes("/")&&(i=i.split("/")[0]),!t.Validator.IPV6_PATTERN.test(i))throw Error(t.Validator.invalidIPv6PatternMessage);if(i.includes("::")){let e=i.split("::"),t=e[0],r=e[1],s=t.split(":").filter((e=>""!==e)),a=r.split(":").filter((e=>""!==e)),c=(e=>{let t=[];for(let r=0;r{const i=r(e);if(e.includes("/")&&(e=e.split("/")[0]),!t.Validator.IPV6_PATTERN.test(e))throw Error(t.Validator.invalidIPv6PatternMessage);let n=e.split(":").map((e=>{let t=e.replace(/^0+/,"");return""!==t?t:"0"})).join(":").replace(/((^0)?(:0){2,}|(^0)(:0){1,})/,":");return":"===n.slice(-1)?`${n}:${i}`:(n=n.replace(":0:","::"),`${n}${i}`)},Ff}var jf,$f,Mf={};function Lf(){return jf||(jf=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hexadectetNotationToBinaryString=e.binaryStringToHexadecimalString=e.colonHexadecimalNotationToBinaryString=e.hexadecimalStringToHexadecatetString=e.hexadecimalStringToBinaryString=e.bigIntToHexadecimalString=void 0;const t=Bf(),r=_f;e.bigIntToHexadecimalString=e=>e.toString(16),e.hexadecimalStringToBinaryString=e=>BigInt(`0x${e}`).toString(2),e.hexadecimalStringToHexadecatetString=t=>{let i=e.hexadecimalStringToBinaryString(t);if(i.length>16)throw new Error("Given decimal in binary contains digits greater than an Hexadecatet");return r.leftPadWithZeroBit(i,16)},e.colonHexadecimalNotationToBinaryString=r=>t.expandIPv6Number(r).split(":").reduce(((t,r)=>t.concat(e.hexadecimalStringToHexadecatetString(r))),""),e.binaryStringToHexadecimalString=e=>BigInt(`0b${e}`).toString(16),e.hexadectetNotationToBinaryString=i=>t.expandIPv6Number(i).split(":").reduce(((t,i)=>t.concat(r.leftPadWithZeroBit(e.hexadecimalStringToBinaryString(i),16))),"")}(Mf)),Mf}function Vf(){if($f)return qf;$f=1,Object.defineProperty(qf,"__esModule",{value:!0}),qf.Validator=void 0;const e=_f,t=_f,r=Bf(),i=Lf(),n=Lf();let o=class o{static isWithinRange(e,t,r){return e>=t&&e<=r}static isValidAsnNumber(e){let t=this.isWithinRange(e,0n,this.THIRTY_TWO_BIT_SIZE);return[t,t?[]:[o.invalidAsnRangeMessage]]}static isValid16BitAsnNumber(e){let t=o.isWithinRange(e,0n,o.SIXTEEN_BIT_SIZE);return[t,t?[]:[o.invalid16BitAsnRangeMessage]]}static isValidIPv4Number(e){e="bigint"==typeof e?e:BigInt(e);let t=this.isWithinRange(e,0n,this.THIRTY_TWO_BIT_SIZE);return t?[t,[]]:[t,[o.invalidIPv4NumberMessage]]}static isValidIPv6Number(e){let t=this.isWithinRange(e,0n,this.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE);return t?[t,[]]:[t,[o.invalidIPv6NumberMessage]]}static isValidIPv4Octet(e){let t=this.isWithinRange(e,0n,this.EIGHT_BIT_SIZE);return[t,t?[]:[o.invalidOctetRangeMessage]]}static isValidIPv6Hexadecatet(e){let t=this.isWithinRange(e,0n,this.SIXTEEN_BIT_SIZE);return t?[t,[]]:[t,[o.invalidHexadecatetMessage]]}static isValidIPv4String(e){let t=e.split(".");if(4!=t.length||t.includes(""))return[!1,[o.invalidOctetCountMessage]];let r=t.every((e=>!!o.isNumeric(e)&&o.isValidIPv4Octet(BigInt(e))[0]));return r?(r=o.IPV4_PATTERN.test(e),[r,r?[]:[o.invalidIPv4PatternMessage]]):[!1,[o.invalidOctetRangeMessage]]}static isValidIPv6String(e){try{let t=r.expandIPv6Number(e).split(":");if(8!=t.length)return[!1,[o.invalidHexadecatetCountMessage]];let i=t.every((e=>!!o.isHexadecatet(e)&&o.isValidIPv6Hexadecatet(BigInt(`0x${e}`))[0]));return i?(i=o.IPV6_PATTERN.test(e),[i,i?[]:[o.invalidIPv6PatternMessage]]):[!1,[o.invalidHexadecatetMessage]]}catch(e){return[!1,[e]]}}static isValidPrefixValue(e,t){if("IPv4"===t){let t=o.isWithinRange(BigInt(e),0n,32n);return[t,t?[]:[o.invalidPrefixValueMessage]]}if("IPv6"===t){let t=o.isWithinRange(BigInt(e),0n,128n);return[t,t?[]:[o.invalidPrefixValueMessage]]}return[!1,[o.invalidInetNumType]]}static isValidIPv4Mask(t){let r=e.dottedDecimalNotationToBinaryString(t),i=o.IPV4_CONTIGUOUS_MASK_BIT_PATTERN.test(r);return i?[i,[]]:[i,[o.invalidMaskMessage]]}static isValidIPv6Mask(e){let t=n.hexadectetNotationToBinaryString(e),r=o.IPV6_CONTIGUOUS_MASK_BIT_PATTERN.test(t);return r?[r,[]]:[r,[o.invalidMaskMessage]]}static isValidIPv4CidrNotation(e){let t=e.split("/");if(2!==t.length||0===t[0].length||0===t[1].length)return[!1,[o.invalidIPv4CidrNotationMessage]];let r=t[0],i=t[1];if(isNaN(Number(i)))return[!1,[o.invalidIPv4CidrNotationMessage]];let[n,s]=o.isValidIPv4String(r),[a,c]=o.isValidPrefixValue(BigInt(i),"IPv4"),u=n&&a,l=s.concat(c);return u?[u,[]]:[u,l]}static isValidIPv4CidrRange(r){return o.isValidCidrRange(r,o.isValidIPv4CidrNotation,e.dottedDecimalNotationToBinaryString,(e=>t.cidrPrefixToMaskBinaryString(e,"IPv4")))}static isValidIPv6CidrRange(e){return o.isValidCidrRange(e,o.isValidIPv6CidrNotation,i.colonHexadecimalNotationToBinaryString,(e=>t.cidrPrefixToMaskBinaryString(e,"IPv6")))}static isValidCidrRange(e,t,r,i){let n=t(e);if(!n[0])return n;let s=e.split("/"),a=s[0],c=s[1],u=BigInt(`0b${r(a)}`),l=(u&BigInt(`0b${i(parseInt(c))}`))===u;return l?[l,[]]:[l,[o.InvalidIPCidrRangeMessage]]}static isValidIPv4RangeString(t){return this.isValidRange(t,o.isValidIPv4String,((t,r)=>BigInt(`0b${e.dottedDecimalNotationToBinaryString(t)}`)>=BigInt(`0b${e.dottedDecimalNotationToBinaryString(r)}`)))}static isValidIPv6RangeString(e){return this.isValidRange(e,o.isValidIPv6String,((e,t)=>BigInt(`0b${n.hexadectetNotationToBinaryString(e)}`)>=BigInt(`0b${n.hexadectetNotationToBinaryString(t)}`)))}static isValidRange(e,t,r){let i=e.split("-").map((e=>e.trim()));if(2!==i.length||0===i[0].length||0===i[1].length)return[!1,[o.invalidRangeNotationMessage]];let n=i[0],s=i[1],[a,c]=t(n),[u,l]=t(s),h=a&&u;if(h&&r(n,s))return[!1,[o.invalidRangeFirstNotGreaterThanLastMessage]];let d=c.concat(l);return h?[h,[]]:[h,d]}static isValidIPv6CidrNotation(e){let t=o.IPV6_RANGE_PATTERN.test(e);return t?[t,[]]:[t,[o.invalidIPv6CidrNotationString]]}static isValidBinaryString(e){return/^([10])+$/.test(e)?[!0,[]]:[!1,[o.invalidBinaryStringErrorMessage]]}static isNumeric(e){return/^(\d+)$/.test(e)}static isHexadecatet(e){return/^[0-9A-Fa-f]{4}$/.test(e)}};return qf.Validator=o,o.IPV4_PATTERN=new RegExp(/^(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/),o.IPV6_PATTERN=new RegExp(/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/),o.IPV4_RANGE_PATTERN=new RegExp(/^(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\/)([1-9]|[1-2][0-9]|3[0-2])$/),o.IPV6_RANGE_PATTERN=new RegExp(/^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/),o.IPV4_CONTIGUOUS_MASK_BIT_PATTERN=new RegExp(/^(1){0,32}(0){0,32}$/),o.IPV6_CONTIGUOUS_MASK_BIT_PATTERN=new RegExp(/^(1){0,128}(0){0,128}$/),o.EIGHT_BIT_SIZE=BigInt(`0b${"1".repeat(8)}`),o.SIXTEEN_BIT_SIZE=BigInt(`0b${"1".repeat(16)}`),o.THIRTY_TWO_BIT_SIZE=BigInt(`0b${"1".repeat(32)}`),o.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE=BigInt(`0b${"1".repeat(128)}`),o.IPV4_SIZE=BigInt("4294967296"),o.IPV6_SIZE=BigInt("340282366920938463463374607431768211456"),o.invalidAsnRangeMessage="ASN number given less than zero or is greater than 32bit",o.invalid16BitAsnRangeMessage="ASN number given less than zero or is greater than 16bit",o.invalidIPv4NumberMessage="IPv4 number given less than zero or is greater than 32bit",o.invalidIPv6NumberMessage="IPv6 number given less than zero or is greater than 128bit",o.invalidOctetRangeMessage="Value given contains an invalid Octet; Value is less than zero or is greater than 8bit",o.invalidHexadecatetMessage="The value given is less than zero or is greater than 16bit",o.invalidOctetCountMessage="An IP4 number cannot have less or greater than 4 octets",o.invalidHexadecatetCountMessage="An IP6 number must have exactly 8 hexadecatet",o.invalidMaskMessage="The Mask is invalid",o.invalidPrefixValueMessage="A Prefix value cannot be less than 0 or greater than 32",o.invalidIPv4CidrNotationMessage="Cidr notation should be in the form [ip number]/[range]",o.InvalidIPCidrRangeMessage="Given IP number portion must is not the start of the range",o.invalidRangeNotationMessage="Range notation should be in the form [first ip]-[last ip]",o.invalidRangeFirstNotGreaterThanLastMessage="First IP in [first ip]-[last ip] must be less than Last IP",o.invalidIPv6CidrNotationString="A Cidr notation string should contain an IPv6 number and prefix",o.takeOutOfRangeSizeMessage="$count is greater than $size, the size of the range",o.cannotSplitSingleRangeErrorMessage="Cannot split an IP range with a single IP number",o.invalidInetNumType="Given ipNumType must be either InetNumType.IPv4 or InetNumType.IPv6",o.invalidBinaryStringErrorMessage="Binary string should contain only contiguous 1s and 0s",o.invalidIPRangeSizeMessage="Given size is zero or greater than maximum size of $iptype",o.invalidIPRangeSizeForCidrMessage="Given size can't be created via cidr prefix",o.invalidIPv4PatternMessage="Given IPv4 is not confirm to a valid IPv6 address",o.invalidIPv6PatternMessage="Given IPv6 is not confirm to a valid IPv6 address",qf}Object.defineProperty(Df,"__esModule",{value:!0}),Df.Hexadecatet=void 0;const Uf=Vf();class Hf{constructor(e){let t;t="string"==typeof e?parseInt(e,16):parseInt(String(e),16);let[r,i]=Uf.Validator.isValidIPv6Hexadecatet(BigInt(t));if(!r)throw Error(i.filter((e=>""!==e)).toString());this.value=t}static fromString(e){return new Hf(e)}static fromNumber(e){return new Hf(e)}getValue(){return this.value}toString(){return this.value.toString(16)}}Df.Hexadecatet=Hf;var zf={},Wf={};Object.defineProperty(Wf,"__esModule",{value:!0}),Wf.Octet=void 0;const Gf=Vf();class Yf{constructor(e){let t;t="string"==typeof e?parseInt(e):e;let[r,i]=Gf.Validator.isValidIPv4Octet(BigInt(t));if(!r)throw Error(i.filter((e=>""!==e)).toString());this.value=t}static fromString(e){return new Yf(e)}static fromNumber(e){return new Yf(e)}getValue(){return this.value}toString(){return this.value.toString(10)}}Wf.Octet=Yf,Object.defineProperty(zf,"__esModule",{value:!0}),zf.isIPv4=zf.IPv6Mask=zf.IPv4Mask=zf.IPv6=zf.Asn=zf.IPv4=zf.AbstractIPNum=void 0;const Kf=Wf,Jf=Vf(),Xf=_f,Qf=_f,Zf=_f,eg=_f,tg=Df,rg=Lf(),ig=Bf(),ng=Lf();class og{getValue(){return this.value}toBinaryString(){return Zf.leftPadWithZeroBit(this.value.toString(2),this.bitSize)}hasNext(){return this.value0n}isEquals(e){return this.value===e.value}isLessThan(e){return this.valuee.value}isLessThanOrEquals(e){return this.value<=e.value}isGreaterThanOrEquals(e){return this.value>=e.value}}zf.AbstractIPNum=og;class sg extends og{constructor(e){if(super(),this.bitSize=32,this.maximumBitSize=Jf.Validator.THIRTY_TWO_BIT_SIZE,this.type="IPv4",this.octets=[],this.separator=".","string"==typeof e){let[t,r]=this.constructFromDecimalDottedString(e);this.value=t,this.octets=r}else{let[t,r]=this.constructFromBigIntValue(e);this.value=t,this.octets=r}}static fromNumber(e){return new sg(e)}static fromDecimalDottedString(e){return new sg(e)}static fromString(e){return sg.fromDecimalDottedString(e)}static fromBinaryString(e){let t=Jf.Validator.isValidBinaryString(e);if(t[0])return new sg(Qf.parseBinaryStringToBigInt(e));throw Error(t[1].join(","))}toString(){return this.octets.map((e=>e.toString())).join(this.separator)}getOctets(){return this.octets}nextIPNumber(){return sg.fromNumber(this.getValue()+1n)}previousIPNumber(){return sg.fromNumber(this.getValue()-1n)}toIPv4MappedIPv6(){let e="1".repeat(16)+this.toBinaryString();return cg.fromBinaryString(e)}constructFromDecimalDottedString(e){let t,r,[i,n]=Jf.Validator.isValidIPv4String(e);if(!i)throw new Error(n.filter((e=>""!==e)).toString());return t=e.split(".").map((e=>Kf.Octet.fromString(e))),r=BigInt(`0b${Xf.dottedDecimalNotationToBinaryString(e)}`),[r,t]}constructFromBigIntValue(e){let[t,r]=Jf.Validator.isValidIPv4Number(e);if(!t)throw new Error(r.filter((e=>""!==e)).toString());let i=eg.numberToBinaryString(e);return[e="bigint"==typeof e?e:BigInt(e),this.binaryStringToDecimalOctets(i)]}binaryStringToDecimalOctets(e){return e.length<32&&(e=Zf.leftPadWithZeroBit(e,32)),e.match(/.{1,8}/g).map((e=>Kf.Octet.fromString(Qf.parseBinaryStringToBigInt(e).toString())))}}zf.IPv4=sg;class ag extends og{constructor(e){if(super(),this.bitSize=32,this.maximumBitSize=Jf.Validator.THIRTY_TWO_BIT_SIZE,this.type="ASN","string"==typeof e)ag.startWithASPrefix(e)?this.value=BigInt(parseInt(e.substring(2))):-1!=e.indexOf(".")?this.value=BigInt(this.parseFromDotNotation(e)):this.value=BigInt(parseInt(e));else{let t=BigInt(e),[r,i]=Jf.Validator.isValidAsnNumber(t);if(!r)throw Error(i.filter((e=>""!==e)).toString());this.value=t}}static fromString(e){return new ag(e)}static fromNumber(e){return new ag(e)}static fromBinaryString(e){let t=Jf.Validator.isValidBinaryString(e);if(t[0])return new ag(parseInt(e,2));throw Error(t[1].join(","))}toString(){let e=this.value.toString();return`${ag.AS_PREFIX}${e}`}toASPlain(){return this.value.toString()}toASDot(){return this.value.valueOf()>=65536n?this.toASDotPlus():this.toASPlain()}toASDotPlus(){let e=this.value.valueOf()/65535n;return`${e}.${this.value.valueOf()%65535n-e}`}toBinaryString(){return eg.numberToBinaryString(this.value)}is16Bit(){let[e]=Jf.Validator.isValid16BitAsnNumber(this.value);return e}is32Bit(){return!this.is16Bit()}nextIPNumber(){return new ag(this.value.valueOf()+1n)}previousIPNumber(){return new ag(this.value.valueOf()-1n)}static startWithASPrefix(e){return 0===e.indexOf(ag.AS_PREFIX)}parseFromDotNotation(e){let t=e.split("."),r=parseInt(t[0]);return 65535*r+(parseInt(t[1])+r)}}zf.Asn=ag,ag.AS_PREFIX="AS";class cg extends og{constructor(e){if(super(),this.bitSize=128,this.maximumBitSize=Jf.Validator.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE,this.type="IPv6",this.hexadecatet=[],this.separator=":","string"==typeof e){let t=ig.expandIPv6Number(e),[r,i]=this.constructFromHexadecimalDottedString(t);this.value=r,this.hexadecatet=i}else{let[t,r]=this.constructFromBigIntValue(e);this.value=t,this.hexadecatet=r}}static fromBigInt(e){return new cg(e)}static fromHexadecatet(e){return new cg(e)}static fromString(e){return cg.fromHexadecatet(e)}static fromBinaryString(e){let t=Jf.Validator.isValidBinaryString(e);if(t[0]){let t=Zf.leftPadWithZeroBit(e,128);return new cg(Qf.parseBinaryStringToBigInt(t))}throw Error(t[1].join(","))}static fromIPv4(e){return e.toIPv4MappedIPv6()}static fromIPv4DotDecimalString(e){return new sg(e).toIPv4MappedIPv6()}toString(){let e=this.hexadecatet.map((e=>e.toString())).join(":");return this.hexadecatet.length<8?"::"+e:e}getHexadecatet(){return this.hexadecatet}nextIPNumber(){return cg.fromBigInt(this.getValue()+1n)}previousIPNumber(){return cg.fromBigInt(this.getValue()-1n)}constructFromBigIntValue(e){let[t,r]=Jf.Validator.isValidIPv6Number(e);if(!t)throw new Error(r.filter((e=>""!==e)).toString());let i=eg.numberToBinaryString(e);return[e,this.binaryStringToHexadecatets(i)]}constructFromHexadecimalDottedString(e){let[t,r]=Jf.Validator.isValidIPv6String(e);if(!t)throw new Error(r.filter((e=>""!==e)).toString());let i=e.split(":").map((e=>tg.Hexadecatet.fromString(e)));return[BigInt(`0b${ng.hexadectetNotationToBinaryString(e)}`),i]}binaryStringToHexadecatets(e){let t=rg.binaryStringToHexadecimalString(e);for(;t.length%4!=0;)t="0"+t;return t.match(/.{1,4}/g).map((e=>tg.Hexadecatet.fromString(e)))}}zf.IPv6=cg;class ug extends sg{constructor(e){let t,r;if(super(e),this.octets=[],[t,r]=Jf.Validator.isValidIPv4Mask(e),!t)throw new Error(r.filter((e=>""!==e)).toString());let i=e.split(".");this.octets=i.map((e=>Kf.Octet.fromString(e)));let n=Xf.dottedDecimalNotationToBinaryString(e);this.prefix=(n.match(/1/g)||[]).length,this.value=BigInt(`0b${n}`)}static fromDecimalDottedString(e){return new ug(e)}}zf.IPv4Mask=ug;class lg extends cg{constructor(e){let t,r;super(e),this.hexadecatet=[];let i=ig.expandIPv6Number(e);if([t,r]=Jf.Validator.isValidIPv6Mask(i),!t)throw new Error(r.filter((e=>""!==e)).toString());let n=i.split(":");this.hexadecatet=n.map((e=>tg.Hexadecatet.fromString(e)));let o=ng.hexadectetNotationToBinaryString(i);this.prefix=(o.match(/1/g)||[]).length,this.value=BigInt(`0b${o}`),this.value=BigInt(`0b${ng.hexadectetNotationToBinaryString(i)}`)}static fromHexadecatet(e){return new lg(e)}}zf.IPv6Mask=lg,zf.isIPv4=function(e){return 32===e.bitSize};var hg={};Object.defineProperty(hg,"__esModule",{value:!0});var dg={},pg={},fg={};Object.defineProperty(fg,"__esModule",{value:!0}),fg.isIPv4Prefix=fg.IPv6Prefix=fg.IPv4Prefix=void 0;const gg=Vf(),vg=zf,mg=_f,yg=Lf(),wg=Df;class bg{constructor(e){let t,r;if(this.type="IPv4",this.bitValue=32n,[t,r]=gg.Validator.isValidPrefixValue(e,"IPv4"),!t)throw new Error(r.filter((e=>""!==e)).toString());this.value=e}static fromNumber(e){return new bg(e)}static fromRangeSize(e){let t=1n===e?32:32-Sg(e,gg.Validator.IPV4_SIZE);return bg.fromNumber(BigInt(t))}getValue(){return this.value}toString(){return this.value.toString()}toMask(){let e="1".repeat(Number(this.value)),t="0".repeat(Number(32n-this.value));return vg.IPv4Mask.fromDecimalDottedString(this.toDecimalNotation(`${e}${t}`))}toRangeSize(){return 1n<""!==e)).toString());this.value=e}static fromNumber(e){return new Eg(e)}static fromRangeSize(e){let t=1n===e?128:128-Sg(e,gg.Validator.IPV6_SIZE);return Eg.fromNumber(BigInt(t))}getValue(){return this.value}toString(){return this.value.toString()}toMask(){let e="1".repeat(Number(this.value)),t="0".repeat(128-Number(this.value));return vg.IPv6Mask.fromHexadecatet(this.toHexadecatetNotation(`${e}${t}`))}toRangeSize(){return 1n<wg.Hexadecatet.fromString(yg.binaryStringToHexadecimalString(e)))).map((e=>e.toString())).join(":")}}function Sg(e,t){let r=t>gg.Validator.IPV4_SIZE?"IPv6":"IPv4";if(e>t||0n===e)throw new Error(gg.Validator.invalidIPRangeSizeMessage.replace("$iptype",r));try{return mg.intLog2(e)}catch(e){throw new Error(gg.Validator.invalidIPRangeSizeForCidrMessage)}}fg.IPv6Prefix=Eg,fg.isIPv4Prefix=function(e){return"IPv4"===e.type},Object.defineProperty(pg,"__esModule",{value:!0}),pg.isIPv4CidrRange=pg.IPv6CidrRange=pg.IPv4CidrRange=pg.AbstractIPRange=pg.RangedSet=void 0;const Ig=zf,Ag=fg,Pg=_f,Tg=Vf();class Rg{constructor(e,t){if(this.first=e,this.last=t,e.isGreaterThan(t))throw new Error(`${e.toString()} should be lower than ${t.toString()}`);this.currentValue=e,this.bitValue=BigInt(e.bitSize)}static fromSingleIP(e){return new Rg(e,e)}static fromCidrRange(e){return new Rg(e.getFirst(),e.getLast())}static fromRangeString(e){let t=e.split("-").map((e=>e.trim()));if(2!==t.length)throw new Error("Argument should be in the format firstip-lastip");let[r,i]=t,[n]=Tg.Validator.isValidIPv4String(r),[o]=Tg.Validator.isValidIPv4String(i),[s]=Tg.Validator.isValidIPv6String(r),[a]=Tg.Validator.isValidIPv6String(i);if(n&&o)return new Rg(Ig.IPv4.fromDecimalDottedString(r),Ig.IPv4.fromDecimalDottedString(i));if(s&&a)return new Rg(Ig.IPv6.fromHexadecatet(r),Ig.IPv6.fromHexadecatet(i));throw new Error("First IP and Last IP should be valid and same type")}getFirst(){return this.first}getLast(){return this.last}getSize(){return this.last.getValue()-this.first.getValue()+1n}toRangeString(){return`${this.getFirst()}-${this.getLast()}`}inside(e){return e.contains(this)}contains(e){let t=this.getFirst(),r=this.getLast(),i=e.getFirst(),n=e.getLast();return t.isLessThanOrEquals(i)&&r.isGreaterThanOrEquals(n)}isEquals(e){return this.getFirst().isEquals(e.getFirst())&&this.getLast().isEquals(e.getLast())}isLessThan(e){return!this.isEquals(e)&&(this.getFirst().isEquals(e.getFirst())?this.getSize()e.getSize():this.getFirst().isGreaterThan(e.getFirst()))}isOverlapping(e){let t=this.getFirst(),r=this.getLast(),i=e.getFirst(),n=e.getLast();return r.isGreaterThan(i)&&r.isLessThanOrEquals(n)&&t.isLessThan(i)||n.isGreaterThan(t)&&n.isLessThanOrEquals(r)&&i.isLessThan(t)}isCidrAble(){if(1n===this.getSize())return!0;try{let e=Pg.intLog2(this.getSize()),t=Pg.parseBinaryStringToBigInt(Pg.cidrPrefixToMaskBinaryString(e,Ig.isIPv4(this.currentValue)?"IPv4":"IPv6"));return this.first.getValue()===(t&this.first.getValue())}catch(e){return!1}}toCidrRange(){return Ig.isIPv4(this.currentValue)?this.toIPv4CidrRange():this.toIPv6CidrRange()}isConsecutive(e){let t=this.getFirst(),r=this.getLast(),i=e.getFirst(),n=e.getLast();return r.hasNext()&&r.nextIPNumber().isEquals(i)||n.hasNext()&&n.nextIPNumber().isEquals(t)}union(e){if(this.isEquals(e))return new Rg(e.getFirst(),e.getLast());if(this.isOverlapping(e))return this.getFirst().isLessThan(e.getFirst())?new Rg(this.getFirst(),e.getLast()):new Rg(e.getFirst(),this.getLast());if(this.contains(e))return new Rg(this.getFirst(),this.getLast());if(e.contains(this))return new Rg(e.getFirst(),e.getLast());throw new Error("Ranges do not overlap nor are equal")}prepend(e){if(e.getLast().nextIPNumber().isEquals(this.getFirst()))return new Rg(e.getFirst(),this.getLast());throw new Error("Range to prepend must be adjacent")}append(e){if(this.getLast().nextIPNumber().isEquals(e.getFirst()))return new Rg(this.getFirst(),e.getLast());throw new Error("Range to append must be adjacent")}subtract(e){if(!this.isOverlapping(e))throw new Error("Cannot subtract ranges that are not overlapping");if(!this.isLessThan(e))throw new Error("Cannot subtract a larger range from this range");return new Rg(this.getFirst(),e.getLast())}takeSubRange(e,t){if(e+t>this.getSize())throw new RangeError("Requested range is greater than what can be taken");if(0n===t)throw new Error("Sub range cannot be zero");let r=this.getFirst().value+e,i=Ig.isIPv4(this.getFirst())?Ig.IPv4.fromNumber(r):Ig.IPv6.fromBigInt(r),n=i.value+(t-1n),o=Ig.isIPv4(i)?Ig.IPv4.fromNumber(n):Ig.IPv6.fromBigInt(n);return new Rg(i,o)}difference(e){if(e.getSize()>this.getSize())throw new Error("Range is greater than range to be subtracted from");if(!this.contains(e))throw new Error("Range to subtract is not contained in this range");let t=[];try{t.push(new Rg(this.getFirst(),e.getFirst().previousIPNumber()))}catch(e){}try{t.push(new Rg(e.getLast().nextIPNumber(),this.getLast()))}catch(e){}return t}*take(e){let t=this.getFirst(),r=void 0===e?this.getSize().valueOf():e;for(;r>0;)r--,yield t,t=t.nextIPNumber()}*[Symbol.iterator](){yield*this.take()}toIPv4CidrRange(){let e=new Cg(Ig.IPv4.fromNumber(this.getFirst().getValue()),Ag.IPv4Prefix.fromRangeSize(this.getSize()));if(e.getFirst().isEquals(this.getFirst()))return e;throw new Error("Range cannot be converted to CIDR")}toIPv6CidrRange(){let e=new Ng(Ig.IPv6.fromBigInt(this.getFirst().getValue()),Ag.IPv6Prefix.fromRangeSize(this.getSize()));if(e.getFirst().isEquals(this.getFirst()))return e;throw new Error("Range cannot be converted to CIDR")}}pg.RangedSet=Rg;class Og{hasNextRange(){let e=this.getSize();return 2n**this.bitValue-e>=this.getFirst().getValue()+e}hasPreviousRange(){return this.getSize()<=this.getFirst().getValue()}toRangeSet(){return new Rg(this.getFirst(),this.getLast())}inside(e){return this.toRangeSet().inside(e.toRangeSet())}contains(e){return this.toRangeSet().contains(e.toRangeSet())}toRangeString(){return this.toRangeSet().toRangeString()}isOverlapping(e){return this.toRangeSet().isOverlapping(e.toRangeSet())}isConsecutive(e){return this.toRangeSet().isConsecutive(e.toRangeSet())}isCidrMergeable(e){const t=BigInt(Pg.matchingBitCount(this.getFirst().toBinaryString(),e.getFirst().toBinaryString()));return this.getPrefix().value-t===1n&&(this.isConsecutive(e)&&this.getSize()===e.getSize())}isMergeable(e){return this.isCidrMergeable(e)||this.contains(e)||this.inside(e)}isEquals(e){return this.toRangeSet().isEquals(e.toRangeSet())}merge(e){if(!this.isCidrMergeable(e))throw new Error(`Cannot merge. Ranges (${this.toRangeString()},${e.toRangeString()}) are not consecutive and/or of same size`);return this.newInstance(this.getFirst(),this.getPrefix().merge())}*takeStream(e){return this.toRangeSet().take(e)}*[Symbol.iterator](){yield*this.toRangeSet()}}pg.AbstractIPRange=Og;class Cg extends Og{constructor(e,t){super(),this.ipv4=e,this.cidrPrefix=t,this.bitValue=32n}static fromCidr(e){let[t,r]=Tg.Validator.isValidIPv4CidrNotation(e);if(!t){let e=r.filter((e=>""!==e));throw new Error(e.join(" and "))}let i=e.split("/"),n=i[0],o=BigInt(parseInt(i[1]));return new Cg(Ig.IPv4.fromDecimalDottedString(n),Ag.IPv4Prefix.fromNumber(o))}getSize(){return this.cidrPrefix.toRangeSize()}toCidrString(){return`${this.ipv4.toString().toString()}/${this.cidrPrefix.toString()}`}toRangeString(){return super.toRangeString()}getFirst(){return Ig.IPv4.fromNumber(this.ipv4.getValue()&this.cidrPrefix.toMask().getValue())}getLast(){return kg(this,this.ipv4)}newInstance(e,t){return new Cg(e,t)}getPrefix(){return this.cidrPrefix}isConsecutive(e){return super.isConsecutive(e)}contains(e){return super.contains(e)}inside(e){return super.inside(e)}isOverlapping(e){return super.isOverlapping(e)}take(e){let t=[this.getFirst()],r=this.getFirst();if(e>this.getSize()){let t=Tg.Validator.takeOutOfRangeSizeMessage.replace("$count",e.toString()).replace("$size",this.getSize().toString());throw new Error(t)}for(let i=0;i1;)e=e.flatMap((e=>e.split())),t-=1n;return e}}hasNextRange(){return super.hasNextRange()}hasPreviousRange(){return super.hasPreviousRange()}nextRange(){if(this.hasNextRange()){let e=this.getSize(),t=this.getFirst().getValue()+e;return new Cg(new Ig.IPv4(t),this.cidrPrefix)}}previousRange(){if(this.hasPreviousRange()){let e=this.getSize(),t=this.getFirst().getValue()-e;return new Cg(new Ig.IPv4(t),this.cidrPrefix)}}}pg.IPv4CidrRange=Cg;class Ng extends Og{constructor(e,t){super(),this.ipv6=e,this.cidrPrefix=t,this.bitValue=128n}static fromCidr(e){let[t,r]=Tg.Validator.isValidIPv6CidrNotation(e);if(!t)throw new Error(r.filter((e=>""!==e)).toString());let i=e.split("/"),n=i[0],o=BigInt(parseInt(i[1]));return new Ng(Ig.IPv6.fromHexadecatet(n),Ag.IPv6Prefix.fromNumber(o))}getSize(){return this.cidrPrefix.toRangeSize()}toCidrString(){return`${this.ipv6.toString().toString()}/${this.cidrPrefix.toString()}`}toRangeString(){return super.toRangeString()}getFirst(){return Ig.IPv6.fromBigInt(this.ipv6.getValue()&this.cidrPrefix.toMask().getValue())}getLast(){return kg(this,this.ipv6)}newInstance(e,t){return new Ng(e,t)}getPrefix(){return this.cidrPrefix}isConsecutive(e){return super.isConsecutive(e)}contains(e){return super.contains(e)}inside(e){return super.inside(e)}isOverlapping(e){return super.isOverlapping(e)}take(e){let t=[this.getFirst()],r=this.getFirst();if(e>this.getSize())throw new Error(`${e.toString()} is greater than ${this.getSize().toString()}, the size of the range`);for(var i=0;i1;)e=e.flatMap((e=>e.split())),t-=1n;return e}}hasNextRange(){return super.hasNextRange()}hasPreviousRange(){return super.hasPreviousRange()}nextRange(){if(this.hasNextRange()){let e=this.getSize(),t=this.getFirst().getValue()+e;return new Ng(new Ig.IPv6(t),this.cidrPrefix)}}previousRange(){if(this.hasPreviousRange()){let e=this.getSize(),t=this.getFirst().getValue()-e;return new Ng(new Ig.IPv6(t),this.cidrPrefix)}}}pg.IPv6CidrRange=Ng;let kg=(e,t)=>{let r=Number(e.bitValue.valueOf()),i=BigInt(`0b${"1".repeat(r)}`),n=e.cidrPrefix.toMask().getValue(),o=Pg.leftPadWithZeroBit((n^i).toString(2),r);return _g(e)?Ig.IPv4.fromNumber(t.getValue()|Pg.parseBinaryStringToBigInt(o)):Ig.IPv6.fromBigInt(t.getValue()|Pg.parseBinaryStringToBigInt(o))};function _g(e){return 32n===e.bitValue.valueOf()}pg.isIPv4CidrRange=_g,Object.defineProperty(dg,"__esModule",{value:!0}),dg.Pool=void 0;const xg=pg,Dg=fg;class qg{constructor(e){this.backingSet=new Fg,e.forEach((e=>{this.backingSet.add(e)}))}static fromIP(e){let t=e.map((e=>xg.RangedSet.fromSingleIP(e)));return new qg(t)}static fromRangeSet(e){return new qg(e)}static fromCidrRanges(e){let t=e.map((e=>e.toRangeSet()));return new qg(t)}getRanges(){return this.backingSet.asArray()}aggregate(){let e=this.backingSet.asArray().reduce(((e,t,r,i)=>{if(0==e.length)return e.push(t),e;{let r=e.pop(),i=r.toCidrRange(),n=t.toCidrRange();if(i.isCidrMergeable(n)){let t=i.merge(n);return e.push(t.toRangeSet()),e}return r.contains(t)?e.push(r):(e.push(r),e.push(t)),e}}),[]),t=qg.fromRangeSet(e);return t.getRanges().length!==this.getRanges().length?t.aggregate():t}getCidrRange(e){if(e.toRangeSize()>this.getSize())throw new Error(`Not enough IP number in the pool for requested prefix: ${e}`);let t,r;e:for(let i of this.getRanges())for(let n=0n;n+e.toRangeSize()<=i.getSize();n+=1n)try{let r=i.takeSubRange(n,e.toRangeSize());t=r.toCidrRange();let o=i.difference(r);this.removeExact(i),this.add(o);break e}catch(e){if(e instanceof RangeError)continue e;r=e}if(t)return t;throw void 0===r?new Error(`No range big enough in the pool for requested prefix: ${e}`):r}getCidrRanges(e){if(e.toRangeSize()>this.getSize())throw new Error("Prefix greater than pool");let t=(e,r,i)=>{try{let n=this.getCidrRange(r);i.push(n);let o=i.reduce(((e,t)=>e+t.getSize()),0n);return e.toRangeSize()===o?i:t(e,r,i)}catch(n){let o=Dg.isIPv4Prefix(r)?Dg.IPv4Prefix.fromNumber(r.getValue()+1n):Dg.IPv6Prefix.fromNumber(r.getValue()+1n);return t(e,o,i)}};return t(e,e,[])}getSize(){return this.aggregate().getRanges().reduce(((e,t)=>e+t.getSize()),0n)}resetWith(e){this.backingSet.clear(),this.backingSet=this.backingSet.add(e)}removeExact(e){let t=this.backingSet.removeExact(e),r=!this.backingSet.isEquals(t);return this.backingSet=t,r}removeOverlapping(e){let t=this.backingSet.removeOverlapping(e),r=!this.backingSet.isEquals(t);return this.backingSet=t,r}add(e){this.backingSet=this.backingSet.add(e)}clear(){this.backingSet.clear()}}dg.Pool=qg;class Fg{constructor(e){this.backingArray=e?this.sortArray(e):new Array}sortArray(e){return e.sort(((e,t)=>e.isLessThan(t)?-1:e.isGreaterThan(t)?1:0)),e}asArray(){return this.backingArray}isEquals(e){return this.backingArray.length===e.asArray().length&&this.backingArray.every(((t,r)=>t.getSize()===e.asArray()[r].getSize()))}add(e){let t=this.backingArray;return"push"in e?t=t.concat(e):t.push(e),new Fg(this.sortArray(t))}removeExact(e){let t=this.backingArray.filter((t=>"push"in e?void 0!==e.find((e=>e.isEquals(t))):!e.isEquals(t)));return new Fg(this.sortArray(t))}removeOverlapping(e){let t=this.backingArray.flatMap((t=>{if("push"in e)return e.flatMap((e=>t.contains(e)?t.difference(e):t.inside(e)?new Array:t.isOverlapping(e)?[t.subtract(e)]:[e]));try{return t.difference(e)}catch(e){return t}}));return new Fg(this.sortArray(t))}clear(){this.backingArray=[]}}var Bg,jg,$g;!function(e){var t=M&&M.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),r=M&&M.__exportStar||function(e,r){for(var i in e)"default"===i||r.hasOwnProperty(i)||t(r,e,i)};Object.defineProperty(e,"__esModule",{value:!0}),r(_f,e),r(Df,e),r(Lf(),e),r(zf,e),r(hg,e),r(dg,e),r(pg,e),r(Bf(),e),r(Wf,e),r(fg,e),r(Vf(),e)}(kf),function(e){e.ServiceNotInitialized="ServiceNotInitialized",e.NetworkSetupMissing="NetworkSetupMissing",e.NetworkCreationFailed="NetworkCreationFailed",e.NoAddressesAvailable="NoAddressesAvailable",e.AddressOutOfRange="AddressOutOfRange",e.AddressAlreadyAssigned="AddressAlreadyAssigned",e.NodeAddingFailed="NodeAddingFailed",e.NodeRemovalFailed="NodeRemovalFailed",e.NetworkRemovalFailed="NetworkRemovalFailed",e.GettingIdentityFailed="GettingIdentityFailed",e.NetworkRemoved="NetworkRemoved"}(jg||(jg={}));class Mg extends c{constructor(e,t,r,i){super(e,t,i),this.code=t,this.previous=i,Bg.set(this,void 0),ss(this,Bg,r,"f")}getNetwork(){return os(this,Bg,"f")}}Bg=new WeakMap,function(e){e.Active="Active",e.Removed="Removed"}($g||($g={}));class Lg{constructor(e,t,r,i){this.id=e,this.nodes=new Map,this.state=$g.Active,this.ipRange=kf.IPv4CidrRange.fromCidr(r?`${t.split("/")[0]}/${kf.IPv4Mask.fromDecimalDottedString(r).prefix}`:t),this.ipIterator=this.ipRange[Symbol.iterator](),this.ip=this.getFirstAvailableIpAddress(),this.mask=this.ipRange.getPrefix().toMask(),this.gateway=i?new kf.IPv4(i):void 0}getNetworkInfo(){var e,t;return{id:this.id,ip:this.ip.toString(),mask:this.mask.toString(),gateway:null===(t=null===(e=this.gateway)||void 0===e?void 0:e.toString)||void 0===t?void 0:t.call(e),nodes:Object.fromEntries(Array.from(this.nodes).map((([e,t])=>[t.ip,e])))}}addNode(e){if(this.isRemoved())throw new Mg(`Unable to add node ${e.id} to removed network`,jg.NetworkRemoved,this.getNetworkInfo());if(this.hasNode(e))throw new Mg(`Node ${e.id} has already been added to this network`,jg.AddressAlreadyAssigned);this.nodes.set(e.id,e)}hasNode(e){return this.nodes.has(e.id)}removeNode(e){if(this.isRemoved())throw new Mg(`Unable to remove node ${e.id} from removed network`,jg.NetworkRemoved,this.getNetworkInfo());if(!this.hasNode(e))throw new Mg(`There is no node ${e.id} in the network`,jg.NodeRemovalFailed);this.nodes.delete(e.id)}markAsRemoved(){if(this.state===$g.Removed)throw new Mg("Network already removed",jg.NetworkRemoved,this.getNetworkInfo());this.state=$g.Removed}getFirstAvailableIpAddress(){const e=this.ipIterator.next().value;if(!e)throw new Mg(`No more addresses available in ${this.ipRange.toCidrString()}`,jg.NoAddressesAvailable,this.getNetworkInfo());return e}isIpInNetwork(e){return this.ipRange.contains(new kf.IPv4CidrRange(e,new kf.IPv4Prefix(BigInt(this.mask.prefix))))}isNodeIdUnique(e){return!this.nodes.has(e)}isNodeIpUnique(e){for(const t of this.nodes.values())if(new kf.IPv4(t.ip).isEquals(e))return!1;return!0}isRemoved(){return this.state===$g.Removed}}class Vg{constructor(e,t,r,i){this.id=e,this.ip=t,this.getNetworkInfo=r,this.yagnaBaseUri=i}getNetworkDeploymentArg(){return{net:[{...this.getNetworkInfo(),nodeIp:this.ip}]}}getWebsocketUri(e){const t=new URL(this.yagnaBaseUri);return t.protocol="ws",`${t.href}/net/${this.getNetworkInfo().id}/tcp/${this.ip}/${e}`}}class Ug{constructor(e){this.events=new Yl,this.logger=K("network"),this.lock=new Zl,this.networkApi=e.networkApi,e.logger&&(this.logger=e.logger)}async createNetwork(e){var t,r,i,n;this.logger.debug("Creating network",e);try{const o=(null===(r=null===(t=null==e?void 0:e.ip)||void 0===t?void 0:t.split("/"))||void 0===r?void 0:r[0])||"192.168.0.0",s=parseInt((null===(n=null===(i=null==e?void 0:e.ip)||void 0===i?void 0:i.split("/"))||void 0===n?void 0:n[1])||"24"),a=(null==e?void 0:e.mask)?kf.IPv4Mask.fromDecimalDottedString(e.mask).prefix:s,c=kf.IPv4CidrRange.fromCidr(`${kf.IPv4.fromString(o)}/${a}`),u=c.getFirst(),l=c.getPrefix().toMask(),h=(null==e?void 0:e.gateway)?new kf.IPv4(e.gateway):void 0,d=await this.networkApi.createNetwork({ip:u.toString(),mask:null==l?void 0:l.toString(),gateway:null==h?void 0:h.toString()}),p=await this.networkApi.getIdentity();return await this.createNetworkNode(d,p,null==e?void 0:e.ownerIp),this.logger.info("Created network",d.getNetworkInfo()),this.events.emit("networkCreated",{network:d}),d}catch(e){const t=_h(e),r=e instanceof Mg?e:new Mg(`Unable to create network. ${t}`,jg.NetworkCreationFailed,void 0,e);throw this.events.emit("errorCreatingNetwork",{error:r}),r}}async removeNetwork(e){this.logger.debug("Removing network",e.getNetworkInfo()),await this.lock.acquire(`net-${e.id}`,(async()=>{try{await this.networkApi.removeNetwork(e),e.markAsRemoved(),this.logger.info("Removed network",e.getNetworkInfo()),this.events.emit("networkRemoved",{network:e})}catch(t){throw this.events.emit("errorRemovingNetwork",{network:e,error:t}),t}}))}async createNetworkNode(e,t,r){return this.logger.debug("Creating network node",{nodeId:t,nodeIp:r}),await this.lock.acquire(`net-${e.id}`,(async()=>{try{if(!e.isNodeIdUnique(t))throw new Mg(`Network ID '${t}' has already been assigned in this network.`,jg.AddressAlreadyAssigned,e.getNetworkInfo());if(e.isRemoved())throw new Mg(`Unable to create network node ${t}. Network has already been removed`,jg.NetworkRemoved,e.getNetworkInfo());const i=this.getFreeIpInNetwork(e,r),n=await this.networkApi.createNetworkNode(e,t,i.toString());return e.addNode(n),this.logger.info("Added network node",{id:t,ip:i.toString()}),this.events.emit("nodeCreated",{network:e,node:n}),n}catch(t){throw this.events.emit("errorCreatingNode",{network:e,error:t}),t}}))}async removeNetworkNode(e,t){return this.logger.debug("Removing network node",{nodeId:t.id,nodeIp:t.ip}),await this.lock.acquire(`net-${e.id}`,(async()=>{try{if(!e.hasNode(t))throw new Mg(`The network node ${t.id} does not belong to the network`,jg.NodeRemovalFailed,e.getNetworkInfo());if(e.isRemoved())return void this.logger.debug(`Unable to remove network node ${t.id}. Network has already been removed`,{network:e,node:t});await this.networkApi.removeNetworkNode(e,t),e.removeNode(t),this.logger.info("Removed network node",{network:e.getNetworkInfo().ip,nodeIp:t.ip}),this.events.emit("nodeRemoved",{network:e,node:t})}catch(r){throw this.events.emit("errorRemovingNode",{network:e,node:t,error:r}),r}}))}getFreeIpInNetwork(e,t){if(!t)return e.getFirstAvailableIpAddress();const r=kf.IPv4.fromString(t);if(!e.isIpInNetwork(r))throw new Mg(`The given IP ('${t}') address must belong to the network ('${e.getNetworkInfo().ip}').`,jg.AddressOutOfRange,e.getNetworkInfo());if(!e.isNodeIpUnique(r))throw new Mg(`IP '${t.toString()}' has already been assigned in this network.`,jg.AddressAlreadyAssigned,e.getNetworkInfo());return r}}class Hg{constructor(e,t,r,i,n,o,s){var a;this.agreement=e,this.storageProvider=t,this.paymentProcess=r,this.marketModule=i,this.activityModule=n,this.logger=o,this.resourceRentalOptions=s,this.events=new Yl,this.currentExeUnit=null,this.abortController=new AbortController,this.networkNode=null===(a=this.resourceRentalOptions)||void 0===a?void 0:a.networkNode,this.createExeUnit(this.abortController.signal).catch((e=>this.logger.debug("Failed to automatically create the exe unit during resource rental initialization",{error:e})))}async startStopAndFinalize(e){var t;try{this.currentExeUnit&&await this.currentExeUnit.teardown(),this.abortController.abort("The resource rental is finalizing"),(null===(t=this.currentExeUnit)||void 0===t?void 0:t.activity)&&await this.activityModule.destroyActivity(this.currentExeUnit.activity),"Terminated"!==await this.fetchAgreementState()&&await this.marketModule.terminateAgreement(this.agreement)}catch(e){throw this.logger.error("Filed to finalize payment process",{agreementId:this.agreement.id,error:e}),e}finally{this.events.emit("finalized")}}async stopAndFinalize(e){return this.finalizePromise||(this.finalizePromise=this.startStopAndFinalize(e)),this.finalizePromise}hasActivity(){return null!==this.currentExeUnit}async getExeUnit(e){if(this.finalizePromise||this.abortController.signal.aborted)throw new r("The resource rental is not active. It may have been aborted or finalized");if(null!==this.currentExeUnit)return this.currentExeUnit;const t=new AbortController;if(this.abortController.signal.addEventListener("abort",(()=>t.abort(this.abortController.signal.reason))),e){const r=ql(e);r.addEventListener("abort",(()=>t.abort(r.reason))),e instanceof AbortSignal&&e.aborted&&t.abort(e.reason)}return this.createExeUnit(t.signal)}async destroyExeUnit(){var e;try{if(null===this.currentExeUnit)throw new r("There is no exe-unit to destroy.");await this.activityModule.destroyActivity(this.currentExeUnit.activity),this.currentExeUnit=null}catch(t){throw this.events.emit("error",t),this.logger.error(`Failed to destroy exe-unit. ${t}`,{activityId:null===(e=this.currentExeUnit)||void 0===e?void 0:e.activity}),t}}async fetchAgreementState(){return this.marketModule.fetchAgreement(this.agreement.id).then((e=>e.getState()))}async createExeUnit(e){return this.exeUnitPromise||(this.exeUnitPromise=(async()=>{var t,r,i;const n=await this.activityModule.createActivity(this.agreement);return this.currentExeUnit=await this.activityModule.createExeUnit(n,{storageProvider:this.storageProvider,networkNode:null===(t=this.resourceRentalOptions)||void 0===t?void 0:t.networkNode,executionOptions:null===(r=this.resourceRentalOptions)||void 0===r?void 0:r.activity,signalOrTimeout:e,...null===(i=this.resourceRentalOptions)||void 0===i?void 0:i.exeUnit}),this.events.emit("exeUnitCreated",n),this.currentExeUnit})().catch((e=>{throw this.events.emit("error",e),this.logger.error(`Failed to create exe-unit. ${e}`,{agreementId:this.agreement.id}),e})).finally((()=>{this.exeUnitPromise=void 0}))),this.exeUnitPromise}}class zg{constructor(e){this.events=new Yl,this.lowPriority=new Set,this.highPriority=new Set,this.borrowed=new Set,this.acquireQueue=new Kl,this.asyncLock=new Zl,this.rentalsBeingSigned=0,this.allocation=e.allocation,this.proposalPool=e.proposalPool,this.marketModule=e.marketModule,this.rentalModule=e.rentalModule,this.networkModule=e.networkModule,this.network=e.network,this.resourceRentalOptions=e.resourceRentalOptions,this.agreementOptions=e.agreementOptions,this.logger=e.logger,this.minPoolSize=("number"==typeof(null==e?void 0:e.poolSize)?null==e?void 0:e.poolSize:"object"==typeof(null==e?void 0:e.poolSize)?null==e?void 0:e.poolSize.min:void 0)||0,this.maxPoolSize=(()=>{if("object"==typeof(null==e?void 0:e.poolSize))return null==e?void 0:e.poolSize.max})()||100,this.abortController=new AbortController}async createNewResourceRental(e){this.logger.debug("Creating new resource rental to add to pool");const{signal:t,cleanup:r}=Fl(this.abortController.signal,ql(e));try{this.rentalsBeingSigned++;const e=await this.marketModule.signAgreementFromPool(this.proposalPool,this.agreementOptions,t),r=this.network?await this.networkModule.createNetworkNode(this.network,e.provider.id):void 0,i=this.rentalModule.createResourceRental(e,this.allocation,{networkNode:r,...this.resourceRentalOptions});return this.events.emit("created",{agreement:e}),i}catch(e){if(t.aborted)throw this.logger.debug("Creating resource rental was aborted",e),e;throw this.events.emit("errorCreatingRental",{error:new Vl("Creating resource rental failed",Ll.ResourceRentalCreationFailed,e)}),this.logger.error("Creating resource rental failed",e),e}finally{this.rentalsBeingSigned--,r()}}async validate(e){try{const t=await e.fetchAgreementState(),r="Approved"===t;return this.logger.debug("Validated resource rental in the pool",{result:r,state:t}),r}catch(e){return this.logger.error("Something went wrong while validating resource rental, it will be destroyed",e),!1}}canCreateMoreResourceRentals(){return this.getSize()+this.rentalsBeingSigned0?(e=this.highPriority.values().next().value,this.highPriority.delete(e)):this.lowPriority.size>0&&(e=this.lowPriority.values().next().value,this.lowPriority.delete(e)),!e)return null;return await this.validate(e)?e:(await this.destroy(e),this.takeValidResourceRental())}async enqueueAcquire(e){const t=await this.acquireQueue.get(e);return this.borrowed.add(t),this.events.emit("acquired",{agreement:t.agreement}),t}async raceNewRentalWithAcquireQueue(e){const t=new AbortController,{signal:r,cleanup:i}=Fl(t.signal,ql(e),this.abortController.signal);return Promise.any([this.createNewResourceRental(r),this.acquireQueue.get(r).then((e=>(this.logger.info("A rental became available in the pool, using it instead of creating a new one"),e)))]).catch((e=>{throw e.errors[0]})).finally((()=>{t.abort(),i()}))}async acquire(e){if(this.isDraining)throw new i("The pool is in draining mode, you cannot acquire new resources");let t=await this.takeValidResourceRental();if(!t){if(!this.canCreateMoreResourceRentals())return this.enqueueAcquire(e);t=await this.raceNewRentalWithAcquireQueue(e)}return this.borrowed.add(t),this.events.emit("acquired",{agreement:t.agreement}),t}passResourceRentalToWaitingAcquireOrBackToPool(e){this.acquireQueue.hasAcquirers()?this.acquireQueue.put(e):e.hasActivity()?this.highPriority.add(e):this.lowPriority.add(e)}async release(e){return this.asyncLock.acquire("resource-rental-pool",(async()=>{if(this.getAvailableSize()>=this.maxPoolSize)return this.destroy(e);this.borrowed.delete(e);if(!await this.validate(e))return this.destroy(e);this.passResourceRentalToWaitingAcquireOrBackToPool(e),this.events.emit("released",{agreement:e.agreement})}))}async destroy(e){try{this.borrowed.delete(e),this.logger.debug("Destroying resource rental from the pool",{agreementId:e.agreement.id}),await Promise.all([e.stopAndFinalize(),this.removeNetworkNode(e)]),this.events.emit("destroyed",{agreement:e.agreement})}catch(t){this.events.emit("errorDestroyingRental",{agreement:e.agreement,error:new Vl("Destroying resource rental failed",Ll.ResourceRentalTerminationFailed,t)}),this.logger.error("Destroying resource rental failed",t)}}get isDraining(){return!!this.drainPromise}async startDrain(){try{await this.asyncLock.acquire("resource-rental-pool",(async()=>{this.abortController.abort("The pool is in draining mode"),this.events.emit("draining"),this.acquireQueue.releaseAll();const e=Array.from(this.borrowed).concat(Array.from(this.lowPriority)).concat(Array.from(this.highPriority));await Promise.allSettled(e.map((e=>this.destroy(e)))),this.lowPriority.clear(),this.highPriority.clear(),this.borrowed.clear(),this.abortController=new AbortController}))}catch(e){throw this.logger.error("Draining the pool failed",e),e}finally{this.events.emit("end")}}async drainAndClear(){return this.isDraining||(this.drainPromise=this.startDrain().finally((()=>{this.drainPromise=void 0}))),this.drainPromise}getSize(){return this.getAvailableSize()+this.getBorrowedSize()}getAvailableSize(){return this.lowPriority.size+this.highPriority.size}getBorrowedSize(){return this.borrowed.size}async ready(e){if(this.minPoolSize<=this.getAvailableSize())return;const{signal:t,cleanup:r}=Fl(this.abortController.signal,ql(e)),i=async()=>{await Promise.allSettled(new Array(this.minPoolSize-this.getAvailableSize()).fill(0).map((()=>this.createNewResourceRental(t).then((e=>this.lowPriority.add(e)),(e=>this.logger.error("Creating resource rental failed",e))))))};for(;this.minPoolSize>this.getAvailableSize()&&!t.aborted;)await Bl(i);if(r(),this.minPoolSize>this.getAvailableSize())throw new Error("Could not create enough resource rentals to reach the minimum pool size in time");this.events.emit("ready")}async removeNetworkNode(e){this.network&&e.networkNode&&(this.logger.debug("Removing a node from the network",{network:this.network.getNetworkInfo().ip,nodeIp:e.networkNode.ip}),await this.networkModule.removeNetworkNode(this.network,e.networkNode))}async withRental(e,t){const r=await this.acquire(t);try{return await e(r)}finally{await this.release(r)}}}class Wg{constructor(e){this.deps=e,this.events=new Yl}createResourceRental(e,t,r){const i=this.deps.paymentModule.createAgreementPaymentProcess(e,t,null==r?void 0:r.payment),n=new Hg(e,this.deps.storageProvider,i,this.deps.marketModule,this.deps.activityModule,this.deps.logger.child("resource-rental"),r);return this.events.emit("resourceRentalCreated",n.agreement),n}createResourceRentalPool(e,t,r){const i=new zg({allocation:t,rentalModule:this,marketModule:this.deps.marketModule,networkModule:this.deps.networkModule,proposalPool:e,resourceRentalOptions:null==r?void 0:r.resourceRentalOptions,logger:this.deps.logger.child("resource-rental-pool"),network:null==r?void 0:r.network,poolSize:null==r?void 0:r.poolSize});return this.events.emit("resourceRentalPoolCreated"),i}}class Gg{constructor(e,t,r,i){this.yagna=e,this.invoiceRepo=t,this.debitNoteRepo=r,this.logger=i,this.receivedInvoices$=new qs,this.receivedDebitNotes$=new qs}async connect(){this.logger.debug("Connecting Payment API Adapter"),ta(this.yagna.invoiceEvents$).pipe(sa((e=>e&&e.invoiceId?this.invoiceRepo.getById(e.invoiceId):ra()))).subscribe({next:e=>this.receivedInvoices$.next(e),error:e=>this.receivedInvoices$.error(e),complete:()=>this.logger.debug("Finished reading InvoiceEvents")}),ta(this.yagna.debitNoteEvents$).pipe(sa((e=>e&&e.debitNoteId?this.debitNoteRepo.getById(e.debitNoteId):ra()))).subscribe({next:e=>this.receivedDebitNotes$.next(e),error:e=>this.receivedDebitNotes$.error(e),complete:()=>this.logger.debug("Finished reading DebitNoteEvents")}),this.logger.debug("Payment API Adapter connected")}getInvoice(e){return this.invoiceRepo.getById(e)}getDebitNote(e){return this.debitNoteRepo.getById(e)}async acceptInvoice(e,t,r){try{return await this.yagna.payment.acceptInvoice(e.id,{totalAmountAccepted:r,allocationId:t.id}),this.invoiceRepo.getById(e.id)}catch(r){const i=_h(r);throw new Ch(`Could not accept invoice. ${i}`,Rh.InvoiceAcceptanceFailed,t,e.provider)}}async rejectInvoice(e,t){try{return await this.yagna.payment.rejectInvoice(e.id,{rejectionReason:"BAD_SERVICE",totalAmountAccepted:"0.00",message:t}),this.invoiceRepo.getById(e.id)}catch(t){const r=_h(t);throw new Ch(`Could not reject invoice. ${r}`,Rh.InvoiceRejectionFailed,void 0,e.provider)}}async acceptDebitNote(e,t,r){try{return await this.yagna.payment.acceptDebitNote(e.id,{totalAmountAccepted:r,allocationId:t.id}),this.debitNoteRepo.getById(e.id)}catch(r){const i=_h(r);throw new Ch(`Could not accept debit note. ${i}`,Rh.DebitNoteAcceptanceFailed,t,e.provider)}}async rejectDebitNote(e){try{return this.debitNoteRepo.getById(e.id)}catch(t){const r=_h(t);throw new Ch(`Could not reject debit note. ${r}`,Rh.DebitNoteRejectionFailed,void 0,e.provider,t)}}async getAllocation(e){try{const t=await this.yagna.payment.getAllocation(e);return new Ah(t)}catch(e){const t=_h(e);throw new Ch(`Could not retrieve allocation. ${t}`,Rh.AllocationCreationFailed,void 0,void 0,e)}}async createAllocation(e){try{const{identity:t}=await this.yagna.identity.getIdentity(),r=new Date,i=await this.yagna.payment.createAllocation({totalAmount:e.budget.toString(),paymentPlatform:e.paymentPlatform,address:t,timestamp:r.toISOString(),timeout:new Date(+r+1e3*e.expirationSec).toISOString(),makeDeposit:!1,remainingAmount:"",spentAmount:"",allocationId:"",deposit:e.deposit});this.logger.debug(`Allocation ${i.allocationId} has been created for address ${t} using payment platform ${e.paymentPlatform}`);return new Ah(i)}catch(e){const t=_h(e);throw new Ch(`Could not create new allocation. ${t}`,Rh.AllocationCreationFailed,void 0,void 0,e)}}async releaseAllocation(e){var t,r;try{return this.yagna.payment.releaseAllocation(e.id)}catch(i){throw new Ch(`Could not release allocation. ${(null===(r=null===(t=i.response)||void 0===t?void 0:t.data)||void 0===r?void 0:r.message)||i}`,Rh.AllocationReleaseFailed,e,void 0,i)}}}class Yg{constructor(e,t,r,i,n){this.yagnaApi=e,this.agreementRepo=t,this.proposalRepo=r,this.demandRepo=i,this.logger=n}async publishDemandSpecification(e){const t=await this.yagnaApi.market.subscribeDemand(this.buildDemandRequestBody(e.prototype));if("string"!=typeof t)throw new Error(`Failed to subscribe to demand: ${t.message}`);const r=new Ml(t,e);return this.demandRepo.add(r),r}async unpublishDemand(e){const t=await this.yagnaApi.market.unsubscribeDemand(e.id);if(null==t?void 0:t.message)throw new Error(`Failed to unsubscribe from demand: ${t.message}`)}collectMarketProposalEvents(e){return new Cs((t=>{let r=!1;const i=async()=>{if(!r){try{for(const r of await this.yagnaApi.market.collectOffers(e.id)){const i=new Date(Date.parse(r.eventDate));switch(r.eventType){case"ProposalEvent":try{const n=new Hl(r.proposal,e);this.proposalRepo.add(n),t.next({type:"ProposalReceived",proposal:n,timestamp:i})}catch(i){t.error(i),this.logger.error("Failed to create offer proposal from the event",{err:i,event:r,demand:e})}break;case"ProposalRejectedEvent":{const{proposalId:e,reason:n}=r,o=this.proposalRepo.getById(e);o&&this.isOfferCounterProposal(o)?t.next({type:"ProposalRejected",counterProposal:o,reason:n.message,timestamp:i}):this.logger.error("Could not locate counter proposal with ID issued by the Requestor while handling ProposalRejectedEvent",{event:r});break}case"PropertyQueryEvent":t.next({type:"PropertyQueryReceived",timestamp:i});break;default:this.logger.warn("Unsupported demand subscription event",{event:r})}}}catch(e){if("status"in e&&404===e.status)return;this.logger.error("Polling yagna for offer proposal events failed",e),t.error(e)}i()}};return i(),()=>{r=!0}}))}async counterProposal(e,t){const r=structuredClone(this.buildDemandRequestBody(t.prototype));r.properties["golem.com.payment.chosen-platform"]=t.paymentPlatform;const i=await this.yagnaApi.market.counterProposalDemand(e.demand.id,e.id,r);if(this.logger.debug("Proposal counter result from yagna",{result:i}),"string"!=typeof i)throw new o(`Counter proposal failed ${i.message}`);const n=await this.yagnaApi.market.getProposalOffer(e.demand.id,i),s=new Xl(n);return this.proposalRepo.add(s),s}async rejectProposal(e,t){try{const r=await this.yagnaApi.market.rejectProposalOffer(e.demand.id,e.id,{message:t});this.logger.debug("Proposal rejection result from yagna",{response:r})}catch(e){const t=_h(e);throw new Vl(`Failed to reject proposal. ${t}`,Ll.ProposalRejectionFailed,e)}}buildDemandRequestBody(e){var t,r;let i;i=(null===(t=e.constraints)||void 0===t?void 0:t.length)?1==e.constraints.length?e.constraints[0]:`(&${e.constraints.join("\n\t")})`:"(&)";const n={};return null===(r=e.properties)||void 0===r||r.forEach((e=>n[e.key]=e.value)),{constraints:i,properties:n}}async getPaymentRelatedDemandDecorations(e){return this.yagnaApi.payment.getDemandDecorations([e])}async confirmAgreement(e,t){try{return this.logger.debug("Confirming agreement by Requestor",{agreementId:e.id}),await this.yagnaApi.market.confirmAgreement(e.id,this.yagnaApi.appSessionId),this.logger.debug("Waiting for agreement approval by Provider",{agreementId:e.id}),await this.yagnaApi.market.waitForApproval(e.id,(null==t?void 0:t.waitingForApprovalTimeoutSec)||60),this.logger.debug("Agreement approved by Provider",{agreementId:e.id}),this.agreementRepo.getById(e.id)}catch(e){throw new Vl("Unable to confirm agreement with provider",Ll.AgreementApprovalFailed,e)}}async createAgreement(e,t){const r=(null==t?void 0:t.expirationSec)||3600;try{const t={proposalId:e.id,validTo:new Date(+new Date+1e3*r).toISOString()},i=await bf(this.yagnaApi.market.createAgreement(t),3e4);if("string"!=typeof i)throw new Vl("Unable to create agreement. Invalid response from the server",Ll.ResourceRentalCreationFailed);const n=await this.agreementRepo.getById(i);return this.logger.debug("Agreement created",{agreement:n,proposalId:e.id,demandId:e.demand.id}),n}catch(e){const t=_h(e);throw new Vl(`Unable to create agreement ${t}`,Ll.ResourceRentalCreationFailed,e)}}async proposeAgreement(e,t){const r=await this.createAgreement(e,t),i=await this.confirmAgreement(r),n=i.getState();if("Approved"!==n)throw new Vl(`Agreement ${r.id} cannot be approved. Current state: ${n}`,Ll.AgreementApprovalFailed);return this.logger.debug("Established agreement",r),i}getAgreement(e){return this.agreementRepo.getById(e)}async getAgreementState(e){return(await this.agreementRepo.getById(e)).getState()}async terminateAgreement(e,t="Finished"){try{const i=await this.agreementRepo.getById(e.id);if("Terminated"===i.getState())throw new r("You can not terminate an agreement that's already terminated");return await bf(this.yagnaApi.market.terminateAgreement(i.id,{message:t}),3e4),this.logger.debug("Agreement terminated",{id:e.id,reason:t}),this.agreementRepo.getById(e.id)}catch(t){const r=_h(t);throw new Vl(`Unable to terminate agreement ${e.id}. ${r}`,Ll.ResourceRentalTerminationFailed,t)}}collectAgreementEvents(){return this.yagnaApi.agreementEvents$.pipe(fa((e=>new Cs((t=>{try{this.logger.debug("Market API Adapter received agreement event",{event:e});const r=new Date(Date.parse(e.eventDate)),i=e.eventType||e.eventtype;this.getAgreement(e.agreementId).then((n=>{switch(i){case"AgreementApprovedEvent":t.next({type:"AgreementApproved",agreement:n,timestamp:r});break;case"AgreementTerminatedEvent":t.next({type:"AgreementTerminated",agreement:n,terminatedBy:e.terminator,reason:e.reason.message,timestamp:r});break;case"AgreementRejectedEvent":t.next({type:"AgreementRejected",agreement:n,reason:e.reason.message,timestamp:r});break;case"AgreementCancelledEvent":t.next({type:"AgreementCancelled",agreement:n,timestamp:r});break;default:this.logger.warn("Unsupported agreement event type for event",{event:e})}})).catch((t=>this.logger.error("Failed to load agreement",{agreementId:e.agreementId,err:t})))}catch(r){const i=new Vl("Error while processing agreement event from yagna",Ll.InternalError,r);this.logger.error(i.message,{event:e,err:r}),t.error(r)}})))))}isOfferCounterProposal(e){return"Requestor"===e.issuer}scan(e){const t=new AbortController;return new Cs((r=>(this.yagnaApi.market.beginScan({type:"offer",...this.buildDemandRequestBody(e)}).then((e=>{if("string"!=typeof e)throw new Error(`Something went wrong while starting the scan, ${e.message}`);return e})).then((async e=>{const i=()=>this.yagnaApi.market.endScan(e);if(t.signal.aborted)return void await i();const n=new _l(`${this.yagnaApi.market.httpRequest.config.BASE}/scan/${e}/events`,{headers:{Accept:"text/event-stream",Authorization:`Bearer ${this.yagnaApi.yagnaOptions.apiKey}`}});n.addEventListener("offer",(e=>{try{const t=JSON.parse(e.data);r.next(new fh(t))}catch(e){r.error(e)}})),n.addEventListener("error",(e=>r.error(e))),t.signal.onabort=async()=>{n.close(),await i()}})).catch((e=>{const t=_h(e);r.error(new Vl(`Error while scanning for offers. ${t}`,Ll.ScanFailed,e))})),()=>{t.abort()})))}}class Kg{constructor(e,t){this.paymentClient=e,this.marketClient=t}async getById(e){let t,r;try{t=await this.paymentClient.getInvoice(e)}catch(e){const t=_h(e);throw new Ch(`Failed to get debit note: ${t}`,Rh.CouldNotGetInvoice,void 0,void 0,e)}try{r=await this.marketClient.getAgreement(t.agreementId)}catch(e){const t=_h(e);throw new Vl(`Failed to get agreement for invoice: ${t}`,Ll.CouldNotGetAgreement,e)}const i={id:t.issuerId,walletAddress:t.payeeAddr,name:r.offer.properties["golem.node.id.name"]};return new Sh(t,i)}}class Jg{constructor(e,t){this.paymentClient=e,this.marketClient=t}async getById(e){let t,r;try{t=await this.paymentClient.getDebitNote(e)}catch(e){const t=_h(e);throw new Ch(`Failed to get debit note: ${t}`,Rh.CouldNotGetDebitNote,void 0,void 0,e)}try{r=await this.marketClient.getAgreement(t.agreementId)}catch(e){const t=_h(e);throw new Vl(`Failed to get agreement for debit note: ${t}`,Ll.CouldNotGetAgreement,e)}const i={id:t.issuerId,walletAddress:t.payeeAddr,name:r.offer.properties["golem.node.id.name"]};return new Ih(t,i)}}class Xg{constructor(e,t,r,i){this.state=e,this.control=t,this.exec=r,this.activityRepo=i}getActivity(e){return this.activityRepo.getById(e)}async createActivity(e){try{const t=await this.control.createActivity({agreementId:e.id});if("object"!=typeof t||!("activityId"in t))throw new Error(t);return this.activityRepo.getById(t.activityId)}catch(t){const r=_h(t);throw new pf(`Failed to create activity: ${r}`,df.ActivityCreationFailed,e,void 0,e.provider)}}async destroyActivity(e){try{return await this.control.destroyActivity(e.id,30),this.activityRepo.getById(e.id)}catch(t){const r=_h(t);throw new pf(`Failed to destroy activity: ${r}`,df.ActivityDestroyingFailed,e.agreement,e,e.agreement.provider)}}async getActivityState(e){return this.activityRepo.getStateOfActivity(e)}async executeScript(e,t){try{return await this.control.exec(e.id,t)}catch(t){const r=_h(t);throw new pf(`Failed to execute script. ${r}`,df.ScriptExecutionFailed,e.agreement,e,e.agreement.provider)}}async getExecBatchResults(e,t,r,i){try{return(await this.control.getExecBatchResults(e.id,t,r,i)).map((e=>new jh(e)))}catch(t){const r=_h(t);throw new pf(`Failed to fetch activity results. ${r}`,df.ActivityResultsFetchingFailed,e.agreement,e,e.provider,t)}}getExecBatchEvents(e,t){return this.exec.observeBatchExecResults(e.id,t)}}class Qg{constructor(){this.storage=new Map}set(e,t){return this.storage.set(e,t),t}get(e){return this.storage.get(e)}delete(e){return this.storage.delete(e)}has(e){return this.storage.has(e)}getAll(){return[...this.storage.values()]}flushAll(){return this.storage.clear()}}class Zg{constructor(e,t){this.state=e,this.agreementRepo=t,this.stateCache=new Qg}async getById(e){var t;try{const r=await this.state.getActivityAgreement(e),i=await this.agreementRepo.getById(r),n=null!==(t=this.stateCache.get(e))&&void 0!==t?t:Fh.New,o=await this.getStateOfActivity(e),s=await this.state.getActivityUsage(e);return new Bh(e,i,null!=o?o:Fh.Unknown,n,s)}catch(e){const t=_h(e);throw new pf(`Failed to get activity: ${t}`,df.ActivityStatusQueryFailed,void 0,void 0,void 0,e)}}async getStateOfActivity(e){try{const t=await this.state.getActivityState(e);if(!t||null===t.state[0])return Fh.Unknown;const r=Fh[t.state[0]];return this.stateCache.set(e,r),r}catch(e){const t=_h(e);throw new pf(`Failed to get activity state: ${t}`,df.ActivityStatusQueryFailed,void 0,void 0,void 0,e)}}}class ev{constructor(e,t){this.api=e,this.demandRepo=t}async getById(e){let t;try{t=await this.api.getAgreement(e)}catch(e){const t=_h(e);throw new Vl(`Failed to get agreement: ${t}`,Ll.CouldNotGetAgreement,e)}const{demandId:r}=t.demand,i=this.demandRepo.getById(r);if(!i)throw new o(`Could not find information for demand ${r} of agreement ${e}`);return new vh(e,t,i)}}class tv{constructor(e,t,r){this.marketService=e,this.identityService=t,this.cache=r}add(e){return this.cache.set(e.id,e),e}getById(e){return this.cache.get(e)}async getByDemandAndId(e,t){try{const r=await this.marketService.getProposalOffer(e.id,t),i=await this.identityService.getIdentity();return(i.identity===r.issuerId?"Requestor":"Provider")?new Xl(r):new Hl(r,e)}catch(e){const t=e.message;throw new Vl(`Failed to get proposal: ${t}`,Ll.CouldNotGetProposal,e)}}}class rv{constructor(e,t){this.api=e,this.cache=t}getById(e){return this.cache.get(e)}add(e){return this.cache.set(e.id,e),e}getAll(){return this.cache.getAll()}}class iv{constructor(e){this.storage=e,this.published=new Map}async publishFile(e){if(!this.storage.isReady())throw new o("The GFTP server as to be initialized before publishing a file ");if(!wd.existsSync(e)||wd.lstatSync(e).isDirectory())throw new n(`File ${e} does not exist o is a directory`);const t={fileUrl:await this.storage.publishFile(e),fileHash:await this.calculateFileHash(e)};return this.published.set(e,t),t}isServing(){return 0!==this.published.size}getPublishInfo(e){return this.published.get(e)}isFilePublished(e){return this.published.has(e)}async calculateFileHash(e){const t=wd.createReadStream(e),r=rf.sha3_224.create();return new Promise(((e,i)=>{t.on("data",(e=>r.update(e))),t.on("end",(()=>e(r.hex()))),t.on("error",(e=>i(new o(`Error calculating file hash: ${e}`,e))))}))}}class nv{constructor(e){this.yagnaApi=e}async createNetwork(e){try{const{id:t,ip:r,mask:i,gateway:n}=await this.yagnaApi.net.createNetwork(e);return new Lg(t,r,i,n)}catch(e){const t=_h(e);throw new Mg(`Unable to create network. ${t}`,jg.NetworkCreationFailed,void 0,e)}}async removeNetwork(e){try{await this.yagnaApi.net.removeNetwork(e.id)}catch(t){const r=_h(t);throw new Mg(`Unable to remove network. ${r}`,jg.NetworkRemovalFailed,e.getNetworkInfo(),t)}}async createNetworkNode(e,t,r){try{await this.yagnaApi.net.addNode(e.id,{id:t,ip:r});return new Vg(t,r,e.getNetworkInfo.bind(e),this.yagnaApi.net.httpRequest.config.BASE)}catch(t){const r=_h(t);throw new Mg(`Unable to add node to network. ${r}`,jg.NodeAddingFailed,e.getNetworkInfo(),t)}}async removeNetworkNode(e,t){try{await this.yagnaApi.net.removeNode(e.id,t.id)}catch(t){const r=_h(t);throw new Mg(`Unable to remove network node. ${r}`,jg.NodeRemovalFailed,e.getNetworkInfo(),t)}}async getIdentity(){try{return await this.yagnaApi.identity.getIdentity().then((e=>e.identity))}catch(e){const t=_h(e);throw new Mg(`Unable to get requestor identity. ${t}`,jg.GettingIdentityFailed,void 0,e)}}}function ov(e,t){return t?"function"==typeof t?(...e)=>new t(...e):()=>t:(...t)=>new e(...t)}class sv{constructor(e={}){var t,r,i,n,o,s,a,c,u,l,h,d,p,f,g;this.events=new Yl,this.hasConnection=!1,this.abortController=new AbortController,this.cleanupTasks=[],this.registeredPlugins=[];this.options={dataTransferProtocol:"ws",...e},this.logger=null!==(t=e.logger)&&void 0!==t?t:K("golem-network"),this.logger.debug("Creating Golem Network instance with options",{options:this.options});try{this.yagna=(null===(r=e.override)||void 0===r?void 0:r.yagna)||new Dl({logger:this.logger,apiKey:null===(i=this.options.api)||void 0===i?void 0:i.key,basePath:null===(n=this.options.api)||void 0===n?void 0:n.url}),this.storageProvider=(null===(o=e.override)||void 0===o?void 0:o.storageProvider)||this.createStorageProvider();const t=new Qg,v=new Qg,m=new rv(this.yagna.market,t),y=new tv(this.yagna.market,this.yagna.identity,v),w=new ev(this.yagna.market,m);this.services={logger:this.logger,yagna:this.yagna,storageProvider:this.storageProvider,demandRepository:m,proposalCache:v,proposalRepository:y,paymentApi:(null===(s=this.options.override)||void 0===s?void 0:s.paymentApi)||new Gg(this.yagna,new Kg(this.yagna.payment,this.yagna.market),new Jg(this.yagna.payment,this.yagna.market),this.logger),activityApi:(null===(a=this.options.override)||void 0===a?void 0:a.activityApi)||new Xg(this.yagna.activity.state,this.yagna.activity.control,this.yagna.activity.exec,new Zg(this.yagna.activity.state,w)),marketApi:(null===(c=this.options.override)||void 0===c?void 0:c.marketApi)||new Yg(this.yagna,w,y,m,this.logger),networkApi:(null===(u=this.options.override)||void 0===u?void 0:u.networkApi)||new nv(this.yagna),fileServer:(null===(l=this.options.override)||void 0===l?void 0:l.fileServer)||new iv(this.storageProvider)},this.network=ov(Ug,null===(h=this.options.override)||void 0===h?void 0:h.network)(this.services),this.market=ov(gh,null===(d=this.options.override)||void 0===d?void 0:d.market)({...this.services,networkModule:this.network},this.options.market),this.payment=ov(qh,null===(p=this.options.override)||void 0===p?void 0:p.payment)(this.services,this.options.payment),this.activity=ov(Cf,null===(f=this.options.override)||void 0===f?void 0:f.activity)(this.services),this.rental=ov(Wg,null===(g=this.options.override)||void 0===g?void 0:g.rental)({activityModule:this.activity,paymentModule:this.payment,marketModule:this.market,networkModule:this.network,logger:this.logger,storageProvider:this.storageProvider})}catch(e){throw this.events.emit("error",e),e}}async connect(){try{await this.yagna.connect(),await this.services.paymentApi.connect(),await this.storageProvider.init(),await this.connectPlugins(),this.events.emit("connected"),this.hasConnection=!0}catch(e){throw this.events.emit("error",e),e}}async startDisconnect(){try{this.abortController.abort("Golem Network is disconnecting"),await Promise.allSettled(this.cleanupTasks.map((e=>e()))),this.cleanupTasks=[],await this.storageProvider.close().catch((e=>this.logger.warn("Closing storage provider resulted with an error, it will be ignored",e))),await this.yagna.disconnect().catch((e=>this.logger.warn("Closing connections with yagna resulted with an error, it will be ignored",e))),this.services.proposalCache.flushAll(),this.abortController=new AbortController}catch(e){throw this.logger.error("Error while disconnecting",e),e}finally{this.events.emit("disconnected"),this.hasConnection=!1}}async disconnect(){return this.disconnectPromise||(this.disconnectPromise=this.startDisconnect().finally((()=>{this.disconnectPromise=void 0}))),this.disconnectPromise}async getAllocationFromOrder({order:e,maxAgreements:t}){var r;if(!(null===(r=e.payment)||void 0===r?void 0:r.allocation)){const r=this.market.estimateBudget({order:e,maxAgreements:t}),i=15;return this.payment.createAllocation({budget:r,expirationSec:Math.round(e.market.rentHours*(60+i)*60)})}return"string"==typeof e.payment.allocation?this.payment.getAllocation(e.payment.allocation):e.payment.allocation}async oneOf({order:e,setup:t,teardown:r,signalOrTimeout:i,volumes:n}){this.validateSettings({order:e,volumes:n});const{signal:o,cleanup:s}=Fl(ql(i),this.abortController.signal);let a,c,u,l;const h=async()=>{var t;s(),c&&c.unsubscribe(),u&&await u.stopAndFinalize().catch((e=>this.logger.error("Error while finalizing rental",e))),e.network&&l&&await this.network.removeNetworkNode(e.network,l).catch((e=>this.logger.error("Error while removing network node",e))),!(null===(t=e.payment)||void 0===t?void 0:t.allocation)&&a&&await this.payment.releaseAllocation(a).catch((e=>this.logger.error("Error while releasing allocation",e)))};try{const i=new Jl({logger:this.logger,validateOfferProposal:e.market.offerProposalFilter,selectOfferProposal:e.market.offerProposalSelector});a=await this.getAllocationFromOrder({order:e,maxAgreements:1}),o.throwIfAborted();const s=await this.market.buildDemandDetails(e.demand,e.market,a),d=this.market.collectDraftOfferProposals({demandSpecification:s,pricing:e.market.pricing,filter:e.market.offerProposalFilter});c=i.readFrom(d);const p=await this.market.signAgreementFromPool(i,{expirationSec:Math.round(60*e.market.rentHours*60)},o);return l=e.network?await this.network.createNetworkNode(e.network,p.provider.id):void 0,u=this.rental.createResourceRental(p,a,{payment:e.payment,activity:e.activity,networkNode:l,exeUnit:{setup:t,teardown:r,volumes:n}}),c.unsubscribe(),this.cleanupTasks.push(h),u}catch(e){throw this.logger.error("Error while creating rental",e),await h(),e}}async manyOf({poolSize:e,order:t,setup:r,teardown:i,volumes:n}){var o,s;this.validateSettings({order:t,volumes:n});const a=this.abortController.signal;let c,u,l;const h=async()=>{var e;l&&l.unsubscribe(),u&&await u.drainAndClear().catch((e=>this.logger.error("Error while draining resource rental pool",e))),!(null===(e=t.payment)||void 0===e?void 0:e.allocation)&&c&&await this.payment.releaseAllocation(c).catch((e=>this.logger.error("Error while releasing allocation",e)))};try{const d=new Jl({logger:this.logger,validateOfferProposal:t.market.offerProposalFilter,selectOfferProposal:t.market.offerProposalSelector}),p="number"==typeof e?e:null!==(s=null!==(o=null==e?void 0:e.max)&&void 0!==o?o:null==e?void 0:e.min)&&void 0!==s?s:1;c=await this.getAllocationFromOrder({order:t,maxAgreements:p}),a.throwIfAborted();const f=await this.market.buildDemandDetails(t.demand,t.market,c),g=this.market.collectDraftOfferProposals({demandSpecification:f,pricing:t.market.pricing,filter:t.market.offerProposalFilter});l=d.readFrom(g);const v=Math.round(60*t.market.rentHours*60);return u=this.rental.createResourceRentalPool(d,c,{poolSize:e,network:t.network,resourceRentalOptions:{activity:t.activity,payment:t.payment,exeUnit:{setup:r,teardown:i,volumes:n}},agreementOptions:{expirationSec:v}}),this.cleanupTasks.push(h),u}catch(e){throw this.logger.error("Error while creating rental pool",e),await h(),e}}isConnected(){return this.hasConnection}async createNetwork(e){return await this.network.createNetwork(e)}async destroyNetwork(e){return await this.network.removeNetwork(e)}use(e,t){this.registeredPlugins.push({initializer:e,options:t})}createStorageProvider(){if("string"!=typeof this.options.dataTransferProtocol)return void 0!==this.options.dataTransferProtocol?this.options.dataTransferProtocol:new pp;switch(this.options.dataTransferProtocol){case"gftp":return new dp(this.logger);case"ws":return new af(this.yagna,{logger:this.logger});default:throw new n(`Unsupported data transfer protocol ${this.options.dataTransferProtocol}. Supported protocols are "gftp" and "ws"`)}}async connectPlugins(){this.logger.debug("Started plugin initialization");for(const e of this.registeredPlugins){const t=await e.initializer(this,e.options);t&&this.cleanupTasks.push(t)}this.logger.debug("Finished plugin initialization")}validateSettings(e){var t,i;if(e.volumes&&void 0!==(null===(t=e.order.demand.workload)||void 0===t?void 0:t.minStorageGib)){const t=Math.max(...Object.values(e.volumes).map((e=>e.sizeGib)));if(e.order.demand.workload.minStorageGib 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n",null,null,"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseHttpRequest = void 0;\nclass BaseHttpRequest {\n constructor(config) {\n this.config = config;\n }\n}\nexports.BaseHttpRequest = BaseHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApiError = void 0;\nclass ApiError extends Error {\n constructor(request, response, message) {\n super(message);\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\nexports.ApiError = ApiError;\n","\"use strict\";\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CancelablePromise_isResolved, _CancelablePromise_isRejected, _CancelablePromise_isCancelled, _CancelablePromise_cancelHandlers, _CancelablePromise_promise, _CancelablePromise_resolve, _CancelablePromise_reject;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancelablePromise = exports.CancelError = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nclass CancelError extends Error {\n constructor(message) {\n super(message);\n this.name = 'CancelError';\n }\n get isCancelled() {\n return true;\n }\n}\nexports.CancelError = CancelError;\nclass CancelablePromise {\n constructor(executor) {\n _CancelablePromise_isResolved.set(this, void 0);\n _CancelablePromise_isRejected.set(this, void 0);\n _CancelablePromise_isCancelled.set(this, void 0);\n _CancelablePromise_cancelHandlers.set(this, void 0);\n _CancelablePromise_promise.set(this, void 0);\n _CancelablePromise_resolve.set(this, void 0);\n _CancelablePromise_reject.set(this, void 0);\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_cancelHandlers, [], \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_promise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _CancelablePromise_resolve, resolve, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_reject, reject, \"f\");\n const onResolve = (value) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\").call(this, value);\n };\n const onReject = (reason) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, reason);\n };\n const onCancel = (cancelHandler) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").push(cancelHandler);\n };\n Object.defineProperty(onCancel, 'isResolved', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\"),\n });\n Object.defineProperty(onCancel, 'isRejected', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\"),\n });\n Object.defineProperty(onCancel, 'isCancelled', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\"),\n });\n return executor(onResolve, onReject, onCancel);\n }), \"f\");\n }\n get [(_CancelablePromise_isResolved = new WeakMap(), _CancelablePromise_isRejected = new WeakMap(), _CancelablePromise_isCancelled = new WeakMap(), _CancelablePromise_cancelHandlers = new WeakMap(), _CancelablePromise_promise = new WeakMap(), _CancelablePromise_resolve = new WeakMap(), _CancelablePromise_reject = new WeakMap(), Symbol.toStringTag)]() {\n return \"Cancellable Promise\";\n }\n then(onFulfilled, onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").then(onFulfilled, onRejected);\n }\n catch(onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").catch(onRejected);\n }\n finally(onFinally) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").finally(onFinally);\n }\n cancel() {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length) {\n try {\n for (const cancelHandler of __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\")) {\n cancelHandler();\n }\n }\n catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length = 0;\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, new CancelError('Request aborted'));\n }\n get isCancelled() {\n return __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\");\n }\n}\nexports.CancelablePromise = CancelablePromise;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.request = exports.catchErrorCodes = exports.getResponseBody = exports.getResponseHeader = exports.sendRequest = exports.getRequestBody = exports.getHeaders = exports.resolve = exports.getFormData = exports.getQueryString = exports.base64 = exports.isFormData = exports.isBlob = exports.isStringWithValue = exports.isString = exports.isDefined = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nconst ApiError_1 = require(\"./ApiError\");\nconst CancelablePromise_1 = require(\"./CancelablePromise\");\nconst isDefined = (value) => {\n return value !== undefined && value !== null;\n};\nexports.isDefined = isDefined;\nconst isString = (value) => {\n return typeof value === 'string';\n};\nexports.isString = isString;\nconst isStringWithValue = (value) => {\n return (0, exports.isString)(value) && value !== '';\n};\nexports.isStringWithValue = isStringWithValue;\nconst isBlob = (value) => {\n return (typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag]));\n};\nexports.isBlob = isBlob;\nconst isFormData = (value) => {\n return value instanceof FormData;\n};\nexports.isFormData = isFormData;\nconst base64 = (str) => {\n try {\n return btoa(str);\n }\n catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\nexports.base64 = base64;\nconst getQueryString = (params) => {\n const qs = [];\n const append = (key, value) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n const process = (key, value) => {\n if ((0, exports.isDefined)(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n }\n else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n }\n else {\n append(key, value);\n }\n }\n };\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n return '';\n};\nexports.getQueryString = getQueryString;\nconst getUrl = (config, options) => {\n const encoder = config.ENCODE_PATH || encodeURI;\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring, group) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${(0, exports.getQueryString)(options.query)}`;\n }\n return url;\n};\nconst getFormData = (options) => {\n if (options.formData) {\n const formData = new FormData();\n const process = (key, value) => {\n if ((0, exports.isString)(value) || (0, exports.isBlob)(value)) {\n formData.append(key, value);\n }\n else {\n formData.append(key, JSON.stringify(value));\n }\n };\n Object.entries(options.formData)\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n }\n else {\n process(key, value);\n }\n });\n return formData;\n }\n return undefined;\n};\nexports.getFormData = getFormData;\nconst resolve = async (options, resolver) => {\n if (typeof resolver === 'function') {\n return resolver(options);\n }\n return resolver;\n};\nexports.resolve = resolve;\nconst getHeaders = async (config, options) => {\n const [token, username, password, additionalHeaders] = await Promise.all([\n (0, exports.resolve)(options, config.TOKEN),\n (0, exports.resolve)(options, config.USERNAME),\n (0, exports.resolve)(options, config.PASSWORD),\n (0, exports.resolve)(options, config.HEADERS),\n ]);\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n })\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {});\n if ((0, exports.isStringWithValue)(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n if ((0, exports.isStringWithValue)(username) && (0, exports.isStringWithValue)(password)) {\n const credentials = (0, exports.base64)(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n if (options.body !== undefined) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n }\n else if ((0, exports.isBlob)(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n }\n else if ((0, exports.isString)(options.body)) {\n headers['Content-Type'] = 'text/plain';\n }\n else if (!(0, exports.isFormData)(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n return new Headers(headers);\n};\nexports.getHeaders = getHeaders;\nconst getRequestBody = (options) => {\n if (options.body !== undefined) {\n if (options.mediaType?.includes('/json')) {\n return JSON.stringify(options.body);\n }\n else if ((0, exports.isString)(options.body) || (0, exports.isBlob)(options.body) || (0, exports.isFormData)(options.body)) {\n return options.body;\n }\n else {\n return JSON.stringify(options.body);\n }\n }\n return undefined;\n};\nexports.getRequestBody = getRequestBody;\nconst sendRequest = async (config, options, url, body, formData, headers, onCancel) => {\n const controller = new AbortController();\n const request = {\n headers,\n body: body ?? formData,\n method: options.method,\n signal: controller.signal,\n };\n if (config.WITH_CREDENTIALS) {\n request.credentials = config.CREDENTIALS;\n }\n onCancel(() => controller.abort());\n return await fetch(url, request);\n};\nexports.sendRequest = sendRequest;\nconst getResponseHeader = (response, responseHeader) => {\n if (responseHeader) {\n const content = response.headers.get(responseHeader);\n if ((0, exports.isString)(content)) {\n return content;\n }\n }\n return undefined;\n};\nexports.getResponseHeader = getResponseHeader;\nconst getResponseBody = async (response) => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type');\n if (contentType) {\n const jsonTypes = ['application/json', 'application/problem+json'];\n const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));\n if (isJSON) {\n return await response.json();\n }\n else {\n return await response.text();\n }\n }\n }\n catch (error) {\n console.error(error);\n }\n }\n return undefined;\n};\nexports.getResponseBody = getResponseBody;\nconst catchErrorCodes = (options, result) => {\n const errors = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n };\n const error = errors[result.status];\n if (error) {\n throw new ApiError_1.ApiError(options, result, error);\n }\n if (!result.ok) {\n const errorStatus = result.status ?? 'unknown';\n const errorStatusText = result.statusText ?? 'unknown';\n const errorBody = (() => {\n try {\n return JSON.stringify(result.body, null, 2);\n }\n catch (e) {\n return undefined;\n }\n })();\n throw new ApiError_1.ApiError(options, result, `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`);\n }\n};\nexports.catchErrorCodes = catchErrorCodes;\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\nconst request = (config, options) => {\n return new CancelablePromise_1.CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = (0, exports.getFormData)(options);\n const body = (0, exports.getRequestBody)(options);\n const headers = await (0, exports.getHeaders)(config, options);\n if (!onCancel.isCancelled) {\n const response = await (0, exports.sendRequest)(config, options, url, body, formData, headers, onCancel);\n const responseBody = await (0, exports.getResponseBody)(response);\n const responseHeader = (0, exports.getResponseHeader)(response, options.responseHeader);\n const result = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n (0, exports.catchErrorCodes)(options, result);\n resolve(result.body);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n};\nexports.request = request;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = void 0;\nconst BaseHttpRequest_1 = require(\"./BaseHttpRequest\");\nconst request_1 = require(\"./request\");\nclass FetchHttpRequest extends BaseHttpRequest_1.BaseHttpRequest {\n constructor(config) {\n super(config);\n }\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\n request(options) {\n return (0, request_1.request)(this.config, options);\n }\n}\nexports.FetchHttpRequest = FetchHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProviderService = void 0;\nclass ProviderService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * GetOffers - Fetches all active Offers which have been published by the Provider.\n * @returns any Offer list.\n * @throws ApiError\n */\n getOffers() {\n return this.httpRequest.request({\n method: 'GET',\n url: '/offers',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * SubscribeOffer - Publishes Provider capabilities via Offer.\n * Offer object can be considered an \"open\" or public Offer, as it is not directed at a specific Requestor, but rather is sent to the market so that the matching mechanism implementation can associate relevant Demands.\n *\n * **Note**: it is an \"atomic\" operation, ie. as soon as Subscription is placed, the Offer is published on the market.\n *\n * @param requestBody\n * @returns any Unexpected error.\n * @returns string Subscribed.\n * @throws ApiError\n */\n subscribeOffer(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/offers',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * UnsubscribeOffer - Stop subscription for previously published Offer.\n * Stop receiving Proposals.\n *\n * **Note**: this will terminate all pending `collectDemands` calls on this subscription. This implies, that client code should not `unsubscribeOffer` before it has received all expected/useful inputs from `collectDemands`.\n *\n * @param subscriptionId\n * @returns any Unexpected error.\n * @throws ApiError\n */\n unsubscribeOffer(subscriptionId) {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/offers/{subscriptionId}',\n path: {\n 'subscriptionId': subscriptionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Already unsubscribed.`,\n },\n });\n }\n /**\n * CollectDemands - Reads Market responses to published Offer.\n * This is a blocking operation. It will not return until there is at least one new event.\n * Returns Proposal related events:\n * * `ProposalEvent` - Indicates that there is new Demand Proposal for this Offer.\n * * `ProposalRejectedEvent` - Indicates that the Requestor has rejected\n * our previous Proposal related to this Offer. This effectively ends a\n * Negotiation chain - it explicitly indicates that the sender will not\n * create another counter-Proposal.\n *\n * * `AgreementEvent` - Indicates that the Requestor is accepting our\n * previous Proposal and ask for our approval of the Agreement.\n *\n * * `PropertyQueryEvent` - not supported yet.\n *\n * **Note**: When `collectDemands` is waiting, simultaneous call to `unsubscribeOffer` on the same `subscriptionId` should result in \"Subscription does not exist\" error returned from `collectDemands`.\n *\n * **Note**: Specification requires this endpoint to support list of specific Proposal Ids to listen for messages related only to specific Proposals. This is not covered yet.\n *\n * @param subscriptionId\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @returns any Proposal or Agreement event list.\n * @throws ApiError\n */\n collectDemands(subscriptionId, timeout = 5, maxEvents = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/offers/{subscriptionId}/events',\n path: {\n 'subscriptionId': subscriptionId,\n },\n query: {\n 'timeout': timeout,\n 'maxEvents': maxEvents,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * QueryReplyOffers - Handles dynamic property query.\n * Sends a response to a received property value query.\n *\n * The Market Matching Mechanism, when resolving the match relation for the specific Demand-Offer pair, is to detect the “dynamic” properties required (via constraints) by the other side. At this point, it is able to query the issuing node for those properties and submit the other side’s requested properties as the context of the query.\n *\n * **Note**: The property query responses may be submitted in “chunks”, ie. the responder may choose to resolve ‘quick’/lightweight’ properties faster and provide response sooner, while still working on more time-consuming properties in the background. Therefore the response contains both the resolved properties, as well as list of properties which responder knows still require resolution.\n *\n * **Note**: This method must be implemented for Market API Capability Level 2.\n *\n * @param subscriptionId\n * @param queryId\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n queryReplyOffers(subscriptionId, queryId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/offers/{subscriptionId}/propertyQuery/{queryId}',\n path: {\n 'subscriptionId': subscriptionId,\n 'queryId': queryId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * GetProposalDemand - Fetches Proposal (Demand) with given id.\n * @param subscriptionId\n * @param proposalId\n * @returns any Proposal.\n * @throws ApiError\n */\n getProposalDemand(subscriptionId, proposalId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/offers/{subscriptionId}/proposals/{proposalId}',\n path: {\n 'subscriptionId': subscriptionId,\n 'proposalId': proposalId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Proposal rejected.`,\n },\n });\n }\n /**\n * CounterProposalOffer - Responds with a bespoke Offer to received Demand.\n * Creates and sends a modified version of original Offer (a counter-proposal) adjusted to previously received Proposal (ie. Demand). Changes Proposal state to `Draft`. Returns created Proposal id.\n *\n * @param subscriptionId\n * @param proposalId\n * @param requestBody\n * @returns any Unexpected error.\n * @returns string Counter Proposal created.\n * @throws ApiError\n */\n counterProposalOffer(subscriptionId, proposalId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/offers/{subscriptionId}/proposals/{proposalId}',\n path: {\n 'subscriptionId': subscriptionId,\n 'proposalId': proposalId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Proposal rejected.`,\n },\n });\n }\n /**\n * RejectProposalDemand - Rejects Proposal (Demand).\n * Effectively ends a Negotiation chain - it explicitly indicates that the sender will not create another counter-Proposal.\n *\n * @param subscriptionId\n * @param proposalId\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n rejectProposalDemand(subscriptionId, proposalId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/offers/{subscriptionId}/proposals/{proposalId}/reject',\n path: {\n 'subscriptionId': subscriptionId,\n 'proposalId': proposalId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Proposal already rejected.`,\n },\n });\n }\n /**\n * ListAgreements - Lists agreements with optional filters\n * List agreements.\n * Supported filters: * state * creation datetime * app session id\n * A well-formed call will result in a collection of objects with the following fields: * id * creationTs * approveTs * role\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @param state State of an agreement\n * @param afterDate Apply only to records created later than the specified timestamp\n * @param beforeDate Apply only to records created before the specified timestamp\n * @returns any Result of listing agreements.\n * @throws ApiError\n */\n listAgreements(appSessionId, state, afterDate, beforeDate) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/agreements',\n query: {\n 'appSessionId': appSessionId,\n 'state': state,\n 'afterDate': afterDate,\n 'beforeDate': beforeDate,\n },\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * GetAgreement - Fetches agreement with given agreement id.\n * @param agreementId\n * @returns any Agreement.\n * @throws ApiError\n */\n getAgreement(agreementId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/agreements/{agreementId}',\n path: {\n 'agreementId': agreementId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * CollectAgreementEvents - Collects events related to an Agreement.\n * This is a blocking operation. It will not return until there is at least one new event. All events are appearing on both sides equally.\n *\n * Returns Agreement related events:\n * * `AgreementApprovedEvent` - Indicates that the Agreement has been approved\n * by the Provider.\n * - The Provider is now ready to accept a request to start an Activity\n * as described in the negotiated agreement.\n * - The Providers’s corresponding `approveAgreement` call returns `Approved`\n * after this event is emitted.\n *\n * * `AgreementRejectedEvent` - Indicates that the Provider has called\n * `rejectAgreement`, which effectively stops the Agreement handshake.\n * The Requestor may attempt to return to the Negotiation phase by sending\n * a new Proposal.\n *\n * * `AgreementCancelledEvent` - Indicates that the Requestor has called\n * `cancelAgreement`, which effectively stops the Agreement handshake.\n *\n * * `AgreementTerminatedEvent` - Indicates that the Agreement has been\n * terminated by specified party (contains signature).\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @returns any Agreement-related event list.\n * @throws ApiError\n */\n collectAgreementEvents(timeout = 5, afterTimestamp, maxEvents = 10, appSessionId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/agreementEvents',\n query: {\n 'timeout': timeout,\n 'afterTimestamp': afterTimestamp,\n 'maxEvents': maxEvents,\n 'appSessionId': appSessionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * ApproveAgreement - Approves Agreement proposed by the Reqestor.\n * This is a blocking operation. The call may be aborted by Provider caller code. After the call is aborted or timed out, another `approveAgreement` call can be raised on the same `agreementId`.\n *\n * **Note**: It is expected from the Provider node implementation to “ring-fence” the resources required to fulfill the Agreement before the ApproveAgreement is sent. However, the resources should not be fully committed until `Approved` response is received from the `approveAgreement` call.\n *\n * **Note**: Mutually exclusive with `rejectAgreement`.\n *\n * @param agreementId\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any Unexpected error.\n * @throws ApiError\n */\n approveAgreement(agreementId, appSessionId, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/approve',\n path: {\n 'agreementId': agreementId,\n },\n query: {\n 'appSessionId': appSessionId,\n 'timeout': timeout,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 408: `Agreement not approved within given timeout. Try again.`,\n 410: `Agreement approval failed permanently.\n Attached \\`ErrorMessage\\` contains further details:\n - \\`Rejected\\` - Indicates that the Provider himself has already\n called \\`rejectAgreement\\`.\n - \\`Cancelled\\` - Indicates that before Provider approved this Agreement,\n the Requestor has called \\`cancelAgreement\\`, thus invalidating the\n Agreement. The Provider may attempt to return to the Negotiation phase\n by sending a new Proposal.\n - \\`Expired\\` - Indicates that Agreement validity period elapsed and it was\n not approved, rejected nor cancelled.\n - \\`Terminated\\` - Indicates that Agreement is already terminated.\n `,\n },\n });\n }\n /**\n * RejectAgreement - Rejects Agreement proposed by the Requestor.\n * The Requestor side is notified about the Provider’s decision to reject a negotiated agreement. This effectively stops the Agreement handshake.\n *\n * **Note**: Mutually exclusive with `approveAgreement`.\n *\n * @param agreementId\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n rejectAgreement(agreementId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/reject',\n path: {\n 'agreementId': agreementId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Agreement rejection failed permanently.\n Attached \\`ErrorMessage\\` contains further details:\n - \\`Rejected\\` - Indicates that the Provider himself has already\n called \\`rejectAgreement\\`.\n - \\`Cancelled\\` - Indicates that before Provider rejected this Agreement,\n the Requestor has called \\`cancelAgreement\\`, thus invalidating the\n Agreement. The Provider may attempt to return to the Negotiation phase\n by sending a new Proposal.\n - \\`Expired\\` - Indicates that Agreement validity period elapsed and it was\n not approved, rejected nor cancelled.\n - \\`Terminated\\` - Indicates that Agreement is already terminated.\n `,\n },\n });\n }\n /**\n * TerminateAgreement - Terminates approved Agreement.\n * Method to finish/close the Agreement while in `Approved` state.\n *\n * The other party gets notified about calling party decision to terminate a \"running\" agreement.\n *\n * **Note**: Can be invoked at any time after Agreement was approved by both sides.\n *\n * **Note**: Financial and reputational consequences are not defined by this specification.\n *\n * @param agreementId\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n terminateAgreement(agreementId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/terminate',\n path: {\n 'agreementId': agreementId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 409: `Agreement can not be terminated yet (is in \\`Proposal\\` or \\`Pending\\` state).`,\n 410: `Agreement termination failed permanently.\n Attached \\`ErrorMessage\\` contains further details:\n - \\`Rejected\\` - Indicates that the Provider has rejected this Agreement.\n - \\`Cancelled\\` - Indicates the Requestor has called cancelled this Agreement.\n - \\`Expired\\` - Indicates that Agreement validity period elapsed and it was\n not approved, rejected nor cancelled.\n - \\`Terminated\\` - Indicates that Agreement is already terminated.\n `,\n },\n });\n }\n /**\n * Gets termination reason reported when terminateAgreement operation was called.\n * Method to get the reason for terminating the Agreement.\n *\n * @param agreementId\n * @returns any Agreement termination reason.\n * @throws ApiError\n */\n getTerminateAgreementReason(agreementId) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/terminate/reason',\n path: {\n 'agreementId': agreementId,\n },\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n}\nexports.ProviderService = ProviderService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestorService = void 0;\nclass RequestorService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * Creates new offer/demand Iterator.\n *\n * @param requestBody\n * @returns any Unexpected error.\n * @returns string Market scan start.\n * @throws ApiError\n */\n beginScan(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/scan',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * @param subscriptionId\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param peerId allows to query offers from specified node.\n *\n * @returns any Scan Events\n * @throws ApiError\n */\n collectScanResults(subscriptionId, timeout = 5, maxEvents = 10, peerId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/scan/{subscriptionId}/events',\n path: {\n 'subscriptionId': subscriptionId,\n },\n query: {\n 'timeout': timeout,\n 'maxEvents': maxEvents,\n 'peerId': peerId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * @param subscriptionId\n * @returns any Unexpected error.\n * @throws ApiError\n */\n endScan(subscriptionId) {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/scan/{subscriptionId}',\n path: {\n 'subscriptionId': subscriptionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * GetDemands - Fetches all active Demands which have been published by the Requestor.\n * @returns any Demand list.\n * @throws ApiError\n */\n getDemands() {\n return this.httpRequest.request({\n method: 'GET',\n url: '/demands',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * SubscribeDemand - Publishes Requestor capabilities via Demand.\n * Demand object can be considered an \"open\" or public Demand, as it is not directed at a specific Provider, but rather is sent to the market so that the matching mechanism implementation can associate relevant Offers.\n *\n * **Note**: it is an \"atomic\" operation, ie. as soon as Subscription is placed, the Demand is published on the market.\n *\n * @param requestBody\n * @returns any Unexpected error.\n * @returns string Subscribed.\n * @throws ApiError\n */\n subscribeDemand(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/demands',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * UnsubscribeDemand - Stop subscription for previously published Demand.\n * Stop receiving Proposals.\n *\n * **Note**: this will terminate all pending `collectOffers` calls on this subscription. This implies, that client code should not `unsubscribeDemand` before it has received all expected/useful inputs from `collectOffers`.\n *\n * @param subscriptionId\n * @returns any Unexpected error.\n * @throws ApiError\n */\n unsubscribeDemand(subscriptionId) {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/demands/{subscriptionId}',\n path: {\n 'subscriptionId': subscriptionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Already unsubscribed.`,\n },\n });\n }\n /**\n * CollectOffers - Reads Market responses to published Demand.\n * This is a blocking operation. It will not return until there is at least one new event.\n * Returns Proposal related events:\n * * `ProposalEvent` - Indicates that there is new Offer Proposal for this Demand.\n * * `ProposalRejectedEvent` - Indicates that the Provider has rejected\n * our previous Proposal related to this Demand. This effectively ends a\n * Negotiation chain - it explicitly indicates that the sender will not\n * create another counter-Proposal.\n *\n * * `PropertyQueryEvent` - not supported yet.\n *\n * **Note**: When `collectOffers` is waiting, simultaneous call to `unsubscribeDemand` on the same `subscriptionId` should result in \"Subscription does not exist\" error returned from `collectOffers`.\n *\n * **Note**: Specification requires this endpoint to support list of specific Proposal Ids to listen for messages related only to specific Proposals. This is not covered yet.\n *\n * @param subscriptionId\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @returns any Proposal or Agreement event list.\n * @throws ApiError\n */\n collectOffers(subscriptionId, timeout = 5, maxEvents = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/demands/{subscriptionId}/events',\n path: {\n 'subscriptionId': subscriptionId,\n },\n query: {\n 'timeout': timeout,\n 'maxEvents': maxEvents,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * QueryReplyDemands - Handles dynamic property query.\n * Sends a response to a received property value query.\n *\n * The Market Matching Mechanism, when resolving the match relation for the specific Demand-Offer pair, is to detect the “dynamic” properties required (via constraints) by the other side. At this point, it is able to query the issuing node for those properties and submit the other side’s requested properties as the context of the query.\n *\n * **Note**: The property query responses may be submitted in “chunks”, ie. the responder may choose to resolve ‘quick’/lightweight’ properties faster and provide response sooner, while still working on more time-consuming properties in the background. Therefore the response contains both the resolved properties, as well as list of properties which responder knows still require resolution.\n *\n * **Note**: This method must be implemented for Market API Capability Level 2.\n *\n * @param subscriptionId\n * @param queryId\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n queryReplyDemands(subscriptionId, queryId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/demands/{subscriptionId}/propertyQuery/{queryId}',\n path: {\n 'subscriptionId': subscriptionId,\n 'queryId': queryId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * GetProposalOffer - Fetches Proposal (Offer) with given id.\n * @param subscriptionId\n * @param proposalId\n * @returns any Proposal.\n * @throws ApiError\n */\n getProposalOffer(subscriptionId, proposalId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/demands/{subscriptionId}/proposals/{proposalId}',\n path: {\n 'subscriptionId': subscriptionId,\n 'proposalId': proposalId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Proposal rejected.`,\n },\n });\n }\n /**\n * CounterProposalDemand - Responds with a bespoke Demand to received Offer.\n * Creates and sends a modified version of original Demand (a counter-proposal) adjusted to previously received Proposal (ie. Offer). Changes Proposal state to `Draft`. Returns created Proposal id.\n *\n * @param subscriptionId\n * @param proposalId\n * @param requestBody\n * @returns any Unexpected error.\n * @returns string Counter Proposal created.\n * @throws ApiError\n */\n counterProposalDemand(subscriptionId, proposalId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/demands/{subscriptionId}/proposals/{proposalId}',\n path: {\n 'subscriptionId': subscriptionId,\n 'proposalId': proposalId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Proposal rejected.`,\n },\n });\n }\n /**\n * RejectProposalOffer - Rejects Proposal (Offer).\n * Effectively ends a Negotiation chain - it explicitly indicates that the sender will not create another counter-Proposal.\n *\n * @param subscriptionId\n * @param proposalId\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n rejectProposalOffer(subscriptionId, proposalId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/demands/{subscriptionId}/proposals/{proposalId}/reject',\n path: {\n 'subscriptionId': subscriptionId,\n 'proposalId': proposalId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Proposal already rejected.`,\n },\n });\n }\n /**\n * ListAgreements - Lists agreements with optional filters\n * List agreements.\n * Supported filters: * state * creation datetime * app session id\n * A well-formed call will result in a collection of objects with the following fields: * id * creationTs * approveTs * role\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @param state State of an agreement\n * @param afterDate Apply only to records created later than the specified timestamp\n * @param beforeDate Apply only to records created before the specified timestamp\n * @returns any Result of listing agreements.\n * @throws ApiError\n */\n listAgreements(appSessionId, state, afterDate, beforeDate) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/agreements',\n query: {\n 'appSessionId': appSessionId,\n 'state': state,\n 'afterDate': afterDate,\n 'beforeDate': beforeDate,\n },\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * CreateAgreement - Creates Agreement from selected Proposal.\n * Initiates the Agreement handshake phase.\n *\n * Formulates an Agreement artifact from the Proposal indicated by the received Proposal Id. Created Agreement is in `Proposal` state.\n *\n * The Approval Expiry Date is added to Agreement artifact and implies the effective timeout on the whole Agreement Confirmation sequence.\n *\n * A successful call to `createAgreement` shall immediately be followed by a `confirmAgreement` and `waitForApproval` call in order to listen for responses from the Provider.\n *\n * **Note**: Moves given Proposal to `Approved` state.\n *\n * @param requestBody\n * @returns any Unexpected error.\n * @returns string Agreement created.\n * @throws ApiError\n */\n createAgreement(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 409: `Proposal not negotiated yet (in \\`Initial\\` state).`,\n 410: `Proposal rejected or expired.`,\n },\n });\n }\n /**\n * GetAgreement - Fetches agreement with given agreement id.\n * @param agreementId\n * @returns any Agreement.\n * @throws ApiError\n */\n getAgreement(agreementId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/agreements/{agreementId}',\n path: {\n 'agreementId': agreementId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * CancelAgreement - Cancels Agreement.\n * It is only possible before Provider approved or rejected the Agreement, and before its Expiration.\n *\n * Causes:\n * - the awaiting `approveAgreement` on Provider side to return with `Cancelled` response.\n * - the awaiting `waitForApproval` local call to return with `Cancelled` response.\n *\n * @param agreementId\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n cancelAgreement(agreementId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/cancel',\n path: {\n 'agreementId': agreementId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Agreement not in \\`Proposal\\` nor \\`Pending\\` state.`,\n },\n });\n }\n /**\n * ConfirmAgreement - Sends Agreement proposal to the Provider.\n * Signs self-created Agreement and sends it to the Provider.\n *\n * This call should immediately follow `createAgreement`.\n *\n * @param agreementId\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @returns any Unexpected error.\n * @throws ApiError\n */\n confirmAgreement(agreementId, appSessionId) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/confirm',\n path: {\n 'agreementId': agreementId,\n },\n query: {\n 'appSessionId': appSessionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `Agreement not in \\`Proposal\\` state.`,\n },\n });\n }\n /**\n * WaitForApproval - Waits for Agreement approval by the Provider.\n * This is a blocking operation. The call may be aborted by Requestor caller code. After the call is aborted or timed out, another `waitForApproval` call can be raised on the same Agreement Id.\n *\n * @param agreementId\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any Unexpected error.\n * @throws ApiError\n */\n waitForApproval(agreementId, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/wait',\n path: {\n 'agreementId': agreementId,\n },\n query: {\n 'timeout': timeout,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 408: `Agreement not approved within given timeout. Try again.`,\n 409: `Agreement not confirmed yet by Requestor himself.`,\n 410: `Agreement is not approved. This state is permanent.\n Attached \\`ErrorMessage\\` contains further details:\n - \\`Rejected\\` - Indicates that the Provider has called\n \\`rejectAgreement\\`, which effectively stops the Agreement handshake.\n The Requestor may attempt to return to the Negotiation phase by\n sending a new Proposal or to the Agreement phase by creating\n new Agreement.\n - \\`Cancelled\\` - Indicates that the Requestor himself has called\n \\`cancelAgreement\\`, which effectively stops the Agreement handshake.\n - \\`Expired\\` - Indicates that Agreement validity period elapsed and it\n was not approved, rejected nor cancelled.\n - \\`Terminated\\` - Indicates that Agreement is already terminated.\n `,\n },\n });\n }\n /**\n * CollectAgreementEvents - Collects events related to an Agreement.\n * This is a blocking operation. It will not return until there is at least one new event. All events are appearing on both sides equally.\n *\n * Returns Agreement related events:\n * * `AgreementApprovedEvent` - Indicates that the Agreement has been approved\n * by the Provider.\n * - The Provider is now ready to accept a request to start an Activity\n * as described in the negotiated agreement.\n * - The Providers’s corresponding `approveAgreement` call returns `Approved`\n * after this event is emitted.\n *\n * * `AgreementRejectedEvent` - Indicates that the Provider has called\n * `rejectAgreement`, which effectively stops the Agreement handshake.\n * The Requestor may attempt to return to the Negotiation phase by sending\n * a new Proposal.\n *\n * * `AgreementCancelledEvent` - Indicates that the Requestor has called\n * `cancelAgreement`, which effectively stops the Agreement handshake.\n *\n * * `AgreementTerminatedEvent` - Indicates that the Agreement has been\n * terminated by specified party (contains signature).\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @returns any Agreement-related event list.\n * @throws ApiError\n */\n collectAgreementEvents(timeout = 5, afterTimestamp, maxEvents = 10, appSessionId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/agreementEvents',\n query: {\n 'timeout': timeout,\n 'afterTimestamp': afterTimestamp,\n 'maxEvents': maxEvents,\n 'appSessionId': appSessionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * TerminateAgreement - Terminates approved Agreement.\n * Method to finish/close the Agreement while in `Approved` state.\n *\n * The other party gets notified about calling party decision to terminate a \"running\" agreement.\n *\n * **Note**: Can be invoked at any time after Agreement was approved by both sides.\n *\n * **Note**: Financial and reputational consequences are not defined by this specification.\n *\n * @param agreementId\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n terminateAgreement(agreementId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/terminate',\n path: {\n 'agreementId': agreementId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 409: `Agreement can not be terminated yet (is in \\`Proposal\\` or \\`Pending\\` state).`,\n 410: `Agreement termination failed permanently.\n Attached \\`ErrorMessage\\` contains further details:\n - \\`Rejected\\` - Indicates that the Provider has rejected this Agreement.\n - \\`Cancelled\\` - Indicates the Requestor has called cancelled this Agreement.\n - \\`Expired\\` - Indicates that Agreement validity period elapsed and it was\n not approved, rejected nor cancelled.\n - \\`Terminated\\` - Indicates that Agreement is already terminated.\n `,\n },\n });\n }\n /**\n * Gets termination reason reported when terminateAgreement operation was called.\n * Method to get the reason for terminating the Agreement.\n *\n * @param agreementId\n * @returns any Agreement termination reason.\n * @throws ApiError\n */\n getTerminateAgreementReason(agreementId) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/agreements/{agreementId}/terminate/reason',\n path: {\n 'agreementId': agreementId,\n },\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n}\nexports.RequestorService = RequestorService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = void 0;\nconst FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nconst ProviderService_1 = require(\"./services/ProviderService\");\nconst RequestorService_1 = require(\"./services/RequestorService\");\nclass Client {\n constructor(config, HttpRequest = FetchHttpRequest_1.FetchHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? '/market-api/v1',\n VERSION: config?.VERSION ?? '1.7.0',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n this.provider = new ProviderService_1.ProviderService(this.request);\n this.requestor = new RequestorService_1.RequestorService(this.request);\n }\n}\nexports.Client = Client;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPI = void 0;\nexports.OpenAPI = {\n BASE: '/market-api/v1',\n VERSION: '1.7.0',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = exports.RequestorService = exports.ProviderService = exports.OpenAPI = exports.CancelError = exports.CancelablePromise = exports.BaseHttpRequest = exports.ApiError = exports.Client = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nvar Client_1 = require(\"./Client\");\nObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return Client_1.Client; } });\nvar ApiError_1 = require(\"./core/ApiError\");\nObject.defineProperty(exports, \"ApiError\", { enumerable: true, get: function () { return ApiError_1.ApiError; } });\nvar BaseHttpRequest_1 = require(\"./core/BaseHttpRequest\");\nObject.defineProperty(exports, \"BaseHttpRequest\", { enumerable: true, get: function () { return BaseHttpRequest_1.BaseHttpRequest; } });\nvar CancelablePromise_1 = require(\"./core/CancelablePromise\");\nObject.defineProperty(exports, \"CancelablePromise\", { enumerable: true, get: function () { return CancelablePromise_1.CancelablePromise; } });\nObject.defineProperty(exports, \"CancelError\", { enumerable: true, get: function () { return CancelablePromise_1.CancelError; } });\nvar OpenAPI_1 = require(\"./core/OpenAPI\");\nObject.defineProperty(exports, \"OpenAPI\", { enumerable: true, get: function () { return OpenAPI_1.OpenAPI; } });\nvar ProviderService_1 = require(\"./services/ProviderService\");\nObject.defineProperty(exports, \"ProviderService\", { enumerable: true, get: function () { return ProviderService_1.ProviderService; } });\nvar RequestorService_1 = require(\"./services/RequestorService\");\nObject.defineProperty(exports, \"RequestorService\", { enumerable: true, get: function () { return RequestorService_1.RequestorService; } });\nvar FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nObject.defineProperty(exports, \"FetchHttpRequest\", { enumerable: true, get: function () { return FetchHttpRequest_1.FetchHttpRequest; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseHttpRequest = void 0;\nclass BaseHttpRequest {\n constructor(config) {\n this.config = config;\n }\n}\nexports.BaseHttpRequest = BaseHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApiError = void 0;\nclass ApiError extends Error {\n constructor(request, response, message) {\n super(message);\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\nexports.ApiError = ApiError;\n","\"use strict\";\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CancelablePromise_isResolved, _CancelablePromise_isRejected, _CancelablePromise_isCancelled, _CancelablePromise_cancelHandlers, _CancelablePromise_promise, _CancelablePromise_resolve, _CancelablePromise_reject;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancelablePromise = exports.CancelError = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nclass CancelError extends Error {\n constructor(message) {\n super(message);\n this.name = 'CancelError';\n }\n get isCancelled() {\n return true;\n }\n}\nexports.CancelError = CancelError;\nclass CancelablePromise {\n constructor(executor) {\n _CancelablePromise_isResolved.set(this, void 0);\n _CancelablePromise_isRejected.set(this, void 0);\n _CancelablePromise_isCancelled.set(this, void 0);\n _CancelablePromise_cancelHandlers.set(this, void 0);\n _CancelablePromise_promise.set(this, void 0);\n _CancelablePromise_resolve.set(this, void 0);\n _CancelablePromise_reject.set(this, void 0);\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_cancelHandlers, [], \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_promise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _CancelablePromise_resolve, resolve, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_reject, reject, \"f\");\n const onResolve = (value) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\").call(this, value);\n };\n const onReject = (reason) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, reason);\n };\n const onCancel = (cancelHandler) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").push(cancelHandler);\n };\n Object.defineProperty(onCancel, 'isResolved', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\"),\n });\n Object.defineProperty(onCancel, 'isRejected', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\"),\n });\n Object.defineProperty(onCancel, 'isCancelled', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\"),\n });\n return executor(onResolve, onReject, onCancel);\n }), \"f\");\n }\n get [(_CancelablePromise_isResolved = new WeakMap(), _CancelablePromise_isRejected = new WeakMap(), _CancelablePromise_isCancelled = new WeakMap(), _CancelablePromise_cancelHandlers = new WeakMap(), _CancelablePromise_promise = new WeakMap(), _CancelablePromise_resolve = new WeakMap(), _CancelablePromise_reject = new WeakMap(), Symbol.toStringTag)]() {\n return \"Cancellable Promise\";\n }\n then(onFulfilled, onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").then(onFulfilled, onRejected);\n }\n catch(onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").catch(onRejected);\n }\n finally(onFinally) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").finally(onFinally);\n }\n cancel() {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length) {\n try {\n for (const cancelHandler of __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\")) {\n cancelHandler();\n }\n }\n catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length = 0;\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, new CancelError('Request aborted'));\n }\n get isCancelled() {\n return __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\");\n }\n}\nexports.CancelablePromise = CancelablePromise;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.request = exports.catchErrorCodes = exports.getResponseBody = exports.getResponseHeader = exports.sendRequest = exports.getRequestBody = exports.getHeaders = exports.resolve = exports.getFormData = exports.getQueryString = exports.base64 = exports.isFormData = exports.isBlob = exports.isStringWithValue = exports.isString = exports.isDefined = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nconst ApiError_1 = require(\"./ApiError\");\nconst CancelablePromise_1 = require(\"./CancelablePromise\");\nconst isDefined = (value) => {\n return value !== undefined && value !== null;\n};\nexports.isDefined = isDefined;\nconst isString = (value) => {\n return typeof value === 'string';\n};\nexports.isString = isString;\nconst isStringWithValue = (value) => {\n return (0, exports.isString)(value) && value !== '';\n};\nexports.isStringWithValue = isStringWithValue;\nconst isBlob = (value) => {\n return (typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag]));\n};\nexports.isBlob = isBlob;\nconst isFormData = (value) => {\n return value instanceof FormData;\n};\nexports.isFormData = isFormData;\nconst base64 = (str) => {\n try {\n return btoa(str);\n }\n catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\nexports.base64 = base64;\nconst getQueryString = (params) => {\n const qs = [];\n const append = (key, value) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n const process = (key, value) => {\n if ((0, exports.isDefined)(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n }\n else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n }\n else {\n append(key, value);\n }\n }\n };\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n return '';\n};\nexports.getQueryString = getQueryString;\nconst getUrl = (config, options) => {\n const encoder = config.ENCODE_PATH || encodeURI;\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring, group) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${(0, exports.getQueryString)(options.query)}`;\n }\n return url;\n};\nconst getFormData = (options) => {\n if (options.formData) {\n const formData = new FormData();\n const process = (key, value) => {\n if ((0, exports.isString)(value) || (0, exports.isBlob)(value)) {\n formData.append(key, value);\n }\n else {\n formData.append(key, JSON.stringify(value));\n }\n };\n Object.entries(options.formData)\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n }\n else {\n process(key, value);\n }\n });\n return formData;\n }\n return undefined;\n};\nexports.getFormData = getFormData;\nconst resolve = async (options, resolver) => {\n if (typeof resolver === 'function') {\n return resolver(options);\n }\n return resolver;\n};\nexports.resolve = resolve;\nconst getHeaders = async (config, options) => {\n const [token, username, password, additionalHeaders] = await Promise.all([\n (0, exports.resolve)(options, config.TOKEN),\n (0, exports.resolve)(options, config.USERNAME),\n (0, exports.resolve)(options, config.PASSWORD),\n (0, exports.resolve)(options, config.HEADERS),\n ]);\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n })\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {});\n if ((0, exports.isStringWithValue)(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n if ((0, exports.isStringWithValue)(username) && (0, exports.isStringWithValue)(password)) {\n const credentials = (0, exports.base64)(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n if (options.body !== undefined) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n }\n else if ((0, exports.isBlob)(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n }\n else if ((0, exports.isString)(options.body)) {\n headers['Content-Type'] = 'text/plain';\n }\n else if (!(0, exports.isFormData)(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n return new Headers(headers);\n};\nexports.getHeaders = getHeaders;\nconst getRequestBody = (options) => {\n if (options.body !== undefined) {\n if (options.mediaType?.includes('/json')) {\n return JSON.stringify(options.body);\n }\n else if ((0, exports.isString)(options.body) || (0, exports.isBlob)(options.body) || (0, exports.isFormData)(options.body)) {\n return options.body;\n }\n else {\n return JSON.stringify(options.body);\n }\n }\n return undefined;\n};\nexports.getRequestBody = getRequestBody;\nconst sendRequest = async (config, options, url, body, formData, headers, onCancel) => {\n const controller = new AbortController();\n const request = {\n headers,\n body: body ?? formData,\n method: options.method,\n signal: controller.signal,\n };\n if (config.WITH_CREDENTIALS) {\n request.credentials = config.CREDENTIALS;\n }\n onCancel(() => controller.abort());\n return await fetch(url, request);\n};\nexports.sendRequest = sendRequest;\nconst getResponseHeader = (response, responseHeader) => {\n if (responseHeader) {\n const content = response.headers.get(responseHeader);\n if ((0, exports.isString)(content)) {\n return content;\n }\n }\n return undefined;\n};\nexports.getResponseHeader = getResponseHeader;\nconst getResponseBody = async (response) => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type');\n if (contentType) {\n const jsonTypes = ['application/json', 'application/problem+json'];\n const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));\n if (isJSON) {\n return await response.json();\n }\n else {\n return await response.text();\n }\n }\n }\n catch (error) {\n console.error(error);\n }\n }\n return undefined;\n};\nexports.getResponseBody = getResponseBody;\nconst catchErrorCodes = (options, result) => {\n const errors = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n };\n const error = errors[result.status];\n if (error) {\n throw new ApiError_1.ApiError(options, result, error);\n }\n if (!result.ok) {\n const errorStatus = result.status ?? 'unknown';\n const errorStatusText = result.statusText ?? 'unknown';\n const errorBody = (() => {\n try {\n return JSON.stringify(result.body, null, 2);\n }\n catch (e) {\n return undefined;\n }\n })();\n throw new ApiError_1.ApiError(options, result, `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`);\n }\n};\nexports.catchErrorCodes = catchErrorCodes;\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\nconst request = (config, options) => {\n return new CancelablePromise_1.CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = (0, exports.getFormData)(options);\n const body = (0, exports.getRequestBody)(options);\n const headers = await (0, exports.getHeaders)(config, options);\n if (!onCancel.isCancelled) {\n const response = await (0, exports.sendRequest)(config, options, url, body, formData, headers, onCancel);\n const responseBody = await (0, exports.getResponseBody)(response);\n const responseHeader = (0, exports.getResponseHeader)(response, options.responseHeader);\n const result = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n (0, exports.catchErrorCodes)(options, result);\n resolve(result.body);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n};\nexports.request = request;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = void 0;\nconst BaseHttpRequest_1 = require(\"./BaseHttpRequest\");\nconst request_1 = require(\"./request\");\nclass FetchHttpRequest extends BaseHttpRequest_1.BaseHttpRequest {\n constructor(config) {\n super(config);\n }\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\n request(options) {\n return (0, request_1.request)(this.config, options);\n }\n}\nexports.FetchHttpRequest = FetchHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProviderService = void 0;\nclass ProviderService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * Returns agreement_id corresponding to the activity\n * 'This call shall return id of the agreement that lead to the creation of this activity'\n *\n * @param activityId\n * @returns string Agreement.\n * @throws ApiError\n */\n getActivityAgreement(activityId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/activity/{activityId}/agreement',\n path: {\n 'activityId': activityId,\n },\n errors: {\n 400: `(400) Bad request`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Fetch Requestor command events.\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n collectActivityEvents(appSessionId, afterTimestamp, timeout = 5, maxEvents = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/events',\n query: {\n 'appSessionId': appSessionId,\n 'afterTimestamp': afterTimestamp,\n 'timeout': timeout,\n 'maxEvents': maxEvents,\n },\n errors: {\n 403: `(403) Forbidden.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get state of specified Activity.\n * @param activityId\n * @returns any Success\n * @throws ApiError\n */\n getActivityState(activityId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/activity/{activityId}/state',\n path: {\n 'activityId': activityId,\n },\n errors: {\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Set state of specified Activity.\n * @param activityId\n * @param requestBody\n * @returns any Success\n * @throws ApiError\n */\n setActivityState(activityId, requestBody) {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/activity/{activityId}/state',\n path: {\n 'activityId': activityId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get usage of specified Activity.\n * @param activityId\n * @returns any Success\n * @throws ApiError\n */\n getActivityUsage(activityId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/activity/{activityId}/usage',\n path: {\n 'activityId': activityId,\n },\n errors: {\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n}\nexports.ProviderService = ProviderService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestorControlService = void 0;\nclass RequestorControlService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * Creates new Activity based on given Agreement.\n * **Note:** This call shall get routed as a provider event (see ProviderEvent structure).\n * @param requestBody\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any Success\n * @throws ApiError\n */\n createActivity(requestBody, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/activity',\n query: {\n 'timeout': timeout,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Executes an ExeScript batch within a given Activity.\n * **Note:** This call shall get routed directly to ExeUnit.\n * @param activityId\n * @param requestBody\n * @returns string Success\n * @throws ApiError\n */\n exec(activityId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/activity/{activityId}/exec',\n path: {\n 'activityId': activityId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Sends encrypted command to secure exe-unit.\n * @param activityId\n * @param requestBody\n * @returns binary Success\n * @throws ApiError\n */\n callEncrypted(activityId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/activity/{activityId}/encrypted',\n path: {\n 'activityId': activityId,\n },\n body: requestBody,\n mediaType: 'application/octet-stream',\n errors: {\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Queries for ExeScript batch results.\n * 'This call shall collect ExeScriptCommand result objects received directly from ExeUnit (via the long polling pattern). **Note:** two formats of response are specified (as indicated by the Accept header):\n * - application/json - standard JSON response, specified below, as code generators handle it properly.\n * - text/event-stream - an EventSource implementation (as per https://www.w3.org/TR/eventsource/).\n * This isn't explicitly specified as code generators generally are unable to handle this.\n * The streaming events adhere to following format:\n *\n * event: runtime\n * data: \n *\n * This streaming endpoint requires dedicated implementation. '\n *\n * @param activityId\n * @param batchId\n * @param commandIndex Wait until command with the specified index finishes. Must be accompanied by a valid \"pollTimeout\" query parameter.\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @returns any Success\n * @throws ApiError\n */\n getExecBatchResults(activityId, batchId, commandIndex, timeout = 5) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/activity/{activityId}/exec/{batchId}',\n path: {\n 'activityId': activityId,\n 'batchId': batchId,\n },\n query: {\n 'commandIndex': commandIndex,\n 'timeout': timeout,\n },\n errors: {\n 400: `(400) Bad request`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Destroys given Activity.\n * **Note:** This call shall get routed as a provider event (see ProviderEvent structure).\n * @param activityId\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any Success\n * @throws ApiError\n */\n destroyActivity(activityId, timeout = 5) {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/activity/{activityId}',\n path: {\n 'activityId': activityId,\n },\n query: {\n 'timeout': timeout,\n },\n errors: {\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n}\nexports.RequestorControlService = RequestorControlService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestorStateService = void 0;\nclass RequestorStateService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * Returns agreement_id corresponding to the activity\n * 'This call shall return id of the agreement that lead to the creation of this activity'\n *\n * @param activityId\n * @returns string Agreement.\n * @throws ApiError\n */\n getActivityAgreement(activityId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/activity/{activityId}/agreement',\n path: {\n 'activityId': activityId,\n },\n errors: {\n 400: `(400) Bad request`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get state of specified Activity.\n * @param activityId\n * @returns any Success\n * @throws ApiError\n */\n getActivityState(activityId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/activity/{activityId}/state',\n path: {\n 'activityId': activityId,\n },\n errors: {\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get usage of specified Activity.\n * @param activityId\n * @returns any Success\n * @throws ApiError\n */\n getActivityUsage(activityId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/activity/{activityId}/usage',\n path: {\n 'activityId': activityId,\n },\n errors: {\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get running commands for a specified Activity.\n * **Note:** This call shall get routed directly to ExeUnit.\n * @param activityId\n * @returns any OK\n * @throws ApiError\n */\n getRunningCommand(activityId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/activity/{activityId}/command',\n path: {\n 'activityId': activityId,\n },\n errors: {\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n}\nexports.RequestorStateService = RequestorStateService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = void 0;\nconst FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nconst ProviderService_1 = require(\"./services/ProviderService\");\nconst RequestorControlService_1 = require(\"./services/RequestorControlService\");\nconst RequestorStateService_1 = require(\"./services/RequestorStateService\");\nclass Client {\n constructor(config, HttpRequest = FetchHttpRequest_1.FetchHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? '/activity-api/v1',\n VERSION: config?.VERSION ?? '1.7.0',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n this.provider = new ProviderService_1.ProviderService(this.request);\n this.requestorControl = new RequestorControlService_1.RequestorControlService(this.request);\n this.requestorState = new RequestorStateService_1.RequestorStateService(this.request);\n }\n}\nexports.Client = Client;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPI = void 0;\nexports.OpenAPI = {\n BASE: '/activity-api/v1',\n VERSION: '1.7.0',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = exports.RequestorStateService = exports.RequestorControlService = exports.ProviderService = exports.OpenAPI = exports.CancelError = exports.CancelablePromise = exports.BaseHttpRequest = exports.ApiError = exports.Client = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nvar Client_1 = require(\"./Client\");\nObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return Client_1.Client; } });\nvar ApiError_1 = require(\"./core/ApiError\");\nObject.defineProperty(exports, \"ApiError\", { enumerable: true, get: function () { return ApiError_1.ApiError; } });\nvar BaseHttpRequest_1 = require(\"./core/BaseHttpRequest\");\nObject.defineProperty(exports, \"BaseHttpRequest\", { enumerable: true, get: function () { return BaseHttpRequest_1.BaseHttpRequest; } });\nvar CancelablePromise_1 = require(\"./core/CancelablePromise\");\nObject.defineProperty(exports, \"CancelablePromise\", { enumerable: true, get: function () { return CancelablePromise_1.CancelablePromise; } });\nObject.defineProperty(exports, \"CancelError\", { enumerable: true, get: function () { return CancelablePromise_1.CancelError; } });\nvar OpenAPI_1 = require(\"./core/OpenAPI\");\nObject.defineProperty(exports, \"OpenAPI\", { enumerable: true, get: function () { return OpenAPI_1.OpenAPI; } });\nvar ProviderService_1 = require(\"./services/ProviderService\");\nObject.defineProperty(exports, \"ProviderService\", { enumerable: true, get: function () { return ProviderService_1.ProviderService; } });\nvar RequestorControlService_1 = require(\"./services/RequestorControlService\");\nObject.defineProperty(exports, \"RequestorControlService\", { enumerable: true, get: function () { return RequestorControlService_1.RequestorControlService; } });\nvar RequestorStateService_1 = require(\"./services/RequestorStateService\");\nObject.defineProperty(exports, \"RequestorStateService\", { enumerable: true, get: function () { return RequestorStateService_1.RequestorStateService; } });\nvar FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nObject.defineProperty(exports, \"FetchHttpRequest\", { enumerable: true, get: function () { return FetchHttpRequest_1.FetchHttpRequest; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseHttpRequest = void 0;\nclass BaseHttpRequest {\n constructor(config) {\n this.config = config;\n }\n}\nexports.BaseHttpRequest = BaseHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApiError = void 0;\nclass ApiError extends Error {\n constructor(request, response, message) {\n super(message);\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\nexports.ApiError = ApiError;\n","\"use strict\";\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CancelablePromise_isResolved, _CancelablePromise_isRejected, _CancelablePromise_isCancelled, _CancelablePromise_cancelHandlers, _CancelablePromise_promise, _CancelablePromise_resolve, _CancelablePromise_reject;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancelablePromise = exports.CancelError = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nclass CancelError extends Error {\n constructor(message) {\n super(message);\n this.name = 'CancelError';\n }\n get isCancelled() {\n return true;\n }\n}\nexports.CancelError = CancelError;\nclass CancelablePromise {\n constructor(executor) {\n _CancelablePromise_isResolved.set(this, void 0);\n _CancelablePromise_isRejected.set(this, void 0);\n _CancelablePromise_isCancelled.set(this, void 0);\n _CancelablePromise_cancelHandlers.set(this, void 0);\n _CancelablePromise_promise.set(this, void 0);\n _CancelablePromise_resolve.set(this, void 0);\n _CancelablePromise_reject.set(this, void 0);\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_cancelHandlers, [], \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_promise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _CancelablePromise_resolve, resolve, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_reject, reject, \"f\");\n const onResolve = (value) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\").call(this, value);\n };\n const onReject = (reason) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, reason);\n };\n const onCancel = (cancelHandler) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").push(cancelHandler);\n };\n Object.defineProperty(onCancel, 'isResolved', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\"),\n });\n Object.defineProperty(onCancel, 'isRejected', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\"),\n });\n Object.defineProperty(onCancel, 'isCancelled', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\"),\n });\n return executor(onResolve, onReject, onCancel);\n }), \"f\");\n }\n get [(_CancelablePromise_isResolved = new WeakMap(), _CancelablePromise_isRejected = new WeakMap(), _CancelablePromise_isCancelled = new WeakMap(), _CancelablePromise_cancelHandlers = new WeakMap(), _CancelablePromise_promise = new WeakMap(), _CancelablePromise_resolve = new WeakMap(), _CancelablePromise_reject = new WeakMap(), Symbol.toStringTag)]() {\n return \"Cancellable Promise\";\n }\n then(onFulfilled, onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").then(onFulfilled, onRejected);\n }\n catch(onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").catch(onRejected);\n }\n finally(onFinally) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").finally(onFinally);\n }\n cancel() {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length) {\n try {\n for (const cancelHandler of __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\")) {\n cancelHandler();\n }\n }\n catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length = 0;\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, new CancelError('Request aborted'));\n }\n get isCancelled() {\n return __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\");\n }\n}\nexports.CancelablePromise = CancelablePromise;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.request = exports.catchErrorCodes = exports.getResponseBody = exports.getResponseHeader = exports.sendRequest = exports.getRequestBody = exports.getHeaders = exports.resolve = exports.getFormData = exports.getQueryString = exports.base64 = exports.isFormData = exports.isBlob = exports.isStringWithValue = exports.isString = exports.isDefined = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nconst ApiError_1 = require(\"./ApiError\");\nconst CancelablePromise_1 = require(\"./CancelablePromise\");\nconst isDefined = (value) => {\n return value !== undefined && value !== null;\n};\nexports.isDefined = isDefined;\nconst isString = (value) => {\n return typeof value === 'string';\n};\nexports.isString = isString;\nconst isStringWithValue = (value) => {\n return (0, exports.isString)(value) && value !== '';\n};\nexports.isStringWithValue = isStringWithValue;\nconst isBlob = (value) => {\n return (typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag]));\n};\nexports.isBlob = isBlob;\nconst isFormData = (value) => {\n return value instanceof FormData;\n};\nexports.isFormData = isFormData;\nconst base64 = (str) => {\n try {\n return btoa(str);\n }\n catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\nexports.base64 = base64;\nconst getQueryString = (params) => {\n const qs = [];\n const append = (key, value) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n const process = (key, value) => {\n if ((0, exports.isDefined)(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n }\n else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n }\n else {\n append(key, value);\n }\n }\n };\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n return '';\n};\nexports.getQueryString = getQueryString;\nconst getUrl = (config, options) => {\n const encoder = config.ENCODE_PATH || encodeURI;\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring, group) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${(0, exports.getQueryString)(options.query)}`;\n }\n return url;\n};\nconst getFormData = (options) => {\n if (options.formData) {\n const formData = new FormData();\n const process = (key, value) => {\n if ((0, exports.isString)(value) || (0, exports.isBlob)(value)) {\n formData.append(key, value);\n }\n else {\n formData.append(key, JSON.stringify(value));\n }\n };\n Object.entries(options.formData)\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n }\n else {\n process(key, value);\n }\n });\n return formData;\n }\n return undefined;\n};\nexports.getFormData = getFormData;\nconst resolve = async (options, resolver) => {\n if (typeof resolver === 'function') {\n return resolver(options);\n }\n return resolver;\n};\nexports.resolve = resolve;\nconst getHeaders = async (config, options) => {\n const [token, username, password, additionalHeaders] = await Promise.all([\n (0, exports.resolve)(options, config.TOKEN),\n (0, exports.resolve)(options, config.USERNAME),\n (0, exports.resolve)(options, config.PASSWORD),\n (0, exports.resolve)(options, config.HEADERS),\n ]);\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n })\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {});\n if ((0, exports.isStringWithValue)(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n if ((0, exports.isStringWithValue)(username) && (0, exports.isStringWithValue)(password)) {\n const credentials = (0, exports.base64)(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n if (options.body !== undefined) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n }\n else if ((0, exports.isBlob)(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n }\n else if ((0, exports.isString)(options.body)) {\n headers['Content-Type'] = 'text/plain';\n }\n else if (!(0, exports.isFormData)(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n return new Headers(headers);\n};\nexports.getHeaders = getHeaders;\nconst getRequestBody = (options) => {\n if (options.body !== undefined) {\n if (options.mediaType?.includes('/json')) {\n return JSON.stringify(options.body);\n }\n else if ((0, exports.isString)(options.body) || (0, exports.isBlob)(options.body) || (0, exports.isFormData)(options.body)) {\n return options.body;\n }\n else {\n return JSON.stringify(options.body);\n }\n }\n return undefined;\n};\nexports.getRequestBody = getRequestBody;\nconst sendRequest = async (config, options, url, body, formData, headers, onCancel) => {\n const controller = new AbortController();\n const request = {\n headers,\n body: body ?? formData,\n method: options.method,\n signal: controller.signal,\n };\n if (config.WITH_CREDENTIALS) {\n request.credentials = config.CREDENTIALS;\n }\n onCancel(() => controller.abort());\n return await fetch(url, request);\n};\nexports.sendRequest = sendRequest;\nconst getResponseHeader = (response, responseHeader) => {\n if (responseHeader) {\n const content = response.headers.get(responseHeader);\n if ((0, exports.isString)(content)) {\n return content;\n }\n }\n return undefined;\n};\nexports.getResponseHeader = getResponseHeader;\nconst getResponseBody = async (response) => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type');\n if (contentType) {\n const jsonTypes = ['application/json', 'application/problem+json'];\n const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));\n if (isJSON) {\n return await response.json();\n }\n else {\n return await response.text();\n }\n }\n }\n catch (error) {\n console.error(error);\n }\n }\n return undefined;\n};\nexports.getResponseBody = getResponseBody;\nconst catchErrorCodes = (options, result) => {\n const errors = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n };\n const error = errors[result.status];\n if (error) {\n throw new ApiError_1.ApiError(options, result, error);\n }\n if (!result.ok) {\n const errorStatus = result.status ?? 'unknown';\n const errorStatusText = result.statusText ?? 'unknown';\n const errorBody = (() => {\n try {\n return JSON.stringify(result.body, null, 2);\n }\n catch (e) {\n return undefined;\n }\n })();\n throw new ApiError_1.ApiError(options, result, `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`);\n }\n};\nexports.catchErrorCodes = catchErrorCodes;\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\nconst request = (config, options) => {\n return new CancelablePromise_1.CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = (0, exports.getFormData)(options);\n const body = (0, exports.getRequestBody)(options);\n const headers = await (0, exports.getHeaders)(config, options);\n if (!onCancel.isCancelled) {\n const response = await (0, exports.sendRequest)(config, options, url, body, formData, headers, onCancel);\n const responseBody = await (0, exports.getResponseBody)(response);\n const responseHeader = (0, exports.getResponseHeader)(response, options.responseHeader);\n const result = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n (0, exports.catchErrorCodes)(options, result);\n resolve(result.body);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n};\nexports.request = request;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = void 0;\nconst BaseHttpRequest_1 = require(\"./BaseHttpRequest\");\nconst request_1 = require(\"./request\");\nclass FetchHttpRequest extends BaseHttpRequest_1.BaseHttpRequest {\n constructor(config) {\n super(config);\n }\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\n request(options) {\n return (0, request_1.request)(this.config, options);\n }\n}\nexports.FetchHttpRequest = FetchHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProviderService = void 0;\nclass ProviderService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * Issue a Debit Note.\n * @param requestBody\n * @returns any OK\n * @throws ApiError\n */\n issueDebitNote(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/debitNotes',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Debit Notes known by this node (either issued by this Provider or received by this Requestor).\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n getDebitNotes(afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/debitNotes',\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Debit Note.\n * @param debitNoteId\n * @returns any OK\n * @throws ApiError\n */\n getDebitNote(debitNoteId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/debitNotes/{debitNoteId}',\n path: {\n 'debitNoteId': debitNoteId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * @deprecated\n * Get Payments for Debit Note.\n * **WARNING:** Operation not implemented.\n *\n * @param debitNoteId\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n getPaymentsForDebitNote(debitNoteId, afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/debitNotes/{debitNoteId}/payments',\n path: {\n 'debitNoteId': debitNoteId,\n },\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Send Debit Note to Requestor.\n * This is a blocking operation. It will not return until the Requestor has acknowledged receiving the Debit Note or timeout has passed.\n *\n * @param debitNoteId\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any OK\n * @throws ApiError\n */\n sendDebitNote(debitNoteId, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/debitNotes/{debitNoteId}/send',\n path: {\n 'debitNoteId': debitNoteId,\n },\n query: {\n 'timeout': timeout,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n 504: `(504) Ack timeout.`,\n },\n });\n }\n /**\n * Cancel Debit Note.\n * **WARNING:** Operation not implemented.\n *\n * This is a blocking operation. It will not return until the Requestor has acknowledged cancelling the Debit Note or timeout has passed. The Requestor may refuse to cancel the Debit Note if they have already accepted it.\n *\n * @param debitNoteId\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any OK\n * @throws ApiError\n */\n cancelDebitNote(debitNoteId, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/debitNotes/{debitNoteId}/cancel',\n path: {\n 'debitNoteId': debitNoteId,\n },\n query: {\n 'timeout': timeout,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 409: `The Requestor has refused to cancel the Debit Note.`,\n 500: `(500) Server error.`,\n 504: `(504) Ack timeout.`,\n },\n });\n }\n /**\n * Get Debit Note events.\n * Listen for Debit Note-related events using long-polling. If there are any events the method will return them immediately. If there are none the method will wait until one appears or timeout passes. `afterTimestamp` parameter can be used in order to get just the 'new' events. Setting the parameter value to the timestamp of the last processed event ensures that no events will go unnoticed.\n *\n * **NOTE:** The events are persistent, ie. calling the API does not remove the event records from receiving queue.\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @returns any OK\n * @throws ApiError\n */\n getDebitNoteEvents(timeout = 5, afterTimestamp, maxEvents = 10, appSessionId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/debitNoteEvents',\n query: {\n 'timeout': timeout,\n 'afterTimestamp': afterTimestamp,\n 'maxEvents': maxEvents,\n 'appSessionId': appSessionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Issue an Invoice.\n * @param requestBody\n * @returns any OK\n * @throws ApiError\n */\n issueInvoice(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/invoices',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Invoices known to this node (either issued by this Provider or received by this Requestor).\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n getInvoices(afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/invoices',\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Invoice.\n * @param invoiceId\n * @returns any OK\n * @throws ApiError\n */\n getInvoice(invoiceId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/invoices/{invoiceId}',\n path: {\n 'invoiceId': invoiceId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * @deprecated\n * Get Payments for Invoice.\n * **WARNING:** Operation not implemented.\n *\n * @param invoiceId\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n getPaymentsForInvoice(invoiceId, afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/invoices/{invoiceId}/payments',\n path: {\n 'invoiceId': invoiceId,\n },\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Send Invoice to Requestor.\n * This is a blocking operation. It will not return until the Requestor has acknowledged receiving the Invoice or timeout has passed.\n *\n * @param invoiceId\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any OK\n * @throws ApiError\n */\n sendInvoice(invoiceId, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/invoices/{invoiceId}/send',\n path: {\n 'invoiceId': invoiceId,\n },\n query: {\n 'timeout': timeout,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n 504: `(504) Ack timeout.`,\n },\n });\n }\n /**\n * Cancel Invoice.\n * This is a blocking operation. It will not return until the Requestor has acknowledged cancelling the Invoice or timeout has passed. The Requestor may refuse to cancel the Invoice if they have already accepted it.\n *\n * @param invoiceId\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any OK\n * @throws ApiError\n */\n cancelInvoice(invoiceId, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/invoices/{invoiceId}/cancel',\n path: {\n 'invoiceId': invoiceId,\n },\n query: {\n 'timeout': timeout,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 409: `The Requestor has refused to cancel the Invoice.`,\n 500: `(500) Server error.`,\n 504: `(504) Ack timeout.`,\n },\n });\n }\n /**\n * Get Invoice events.\n * Listen for Invoice-related events using long-polling. If there are any events the method will return them immediately. If there are none the method will wait until one appears or timeout passes. `afterTimestamp` parameter can be used in order to get just the 'new' events. Setting the parameter value to the timestamp of the last processed event ensures that no events will go unnoticed.\n *\n * **NOTE:** The events are persistent, ie. calling the API does not remove the event records from receiving queue.\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @returns any OK\n * @throws ApiError\n */\n getInvoiceEvents(timeout = 5, afterTimestamp, maxEvents = 10, appSessionId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/invoiceEvents',\n query: {\n 'timeout': timeout,\n 'afterTimestamp': afterTimestamp,\n 'maxEvents': maxEvents,\n 'appSessionId': appSessionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get available accounts for receiving payments.\n * @returns any OK\n * @throws ApiError\n */\n getProviderAccounts() {\n return this.httpRequest.request({\n method: 'GET',\n url: '/providerAccounts',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Payments.\n * Payments can be treated as events and this method can be used to listen for new payments by long-polling. If there are any payments the method will return them immediately. If there are none the method will wait until one appears or timeout passes. `afterTimestamp` parameter can be used in order to get just the 'new' payments. Setting the parameter value to the timestamp of the last processed payment ensures that no payments will go unnoticed. `network` and `driver` parameters can be used in order to filter payments.\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @param network Network identifier used for filtering payments made via the specified network\n * @param driver Driver identifier used for filtering payments made with the selected driver\n * @returns any OK\n * @throws ApiError\n */\n getPayments(timeout = 5, afterTimestamp, maxEvents = 10, appSessionId, network, driver) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/payments',\n query: {\n 'timeout': timeout,\n 'afterTimestamp': afterTimestamp,\n 'maxEvents': maxEvents,\n 'appSessionId': appSessionId,\n 'network': network,\n 'driver': driver,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Payment.\n * @param paymentId\n * @returns any OK\n * @throws ApiError\n */\n getPayment(paymentId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/payments/{paymentId}',\n path: {\n 'paymentId': paymentId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get status of the payment driver\n * This only relates to the erc20 driver, not erc20legacy. The returned list contains individual status properties, which can be used to identify problems like missing funds or misconfigured max fee per gas on a per-chain (network) basis.\n *\n * @param network Network identifier used for filtering payments made via the specified network\n * @param driver Driver identifier used for filtering payments made with the selected driver\n * @returns any OK\n * @throws ApiError\n */\n paymentsStatus(network, driver) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/payments/status',\n query: {\n 'network': network,\n 'driver': driver,\n },\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n}\nexports.ProviderService = ProviderService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestorService = void 0;\nclass RequestorService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * Get Debit Notes known by this node (either issued by this Provider or received by this Requestor).\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n getDebitNotes(afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/debitNotes',\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Debit Note.\n * @param debitNoteId\n * @returns any OK\n * @throws ApiError\n */\n getDebitNote(debitNoteId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/debitNotes/{debitNoteId}',\n path: {\n 'debitNoteId': debitNoteId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * @deprecated\n * Get Payments for Debit Note.\n * **WARNING:** Operation not implemented.\n *\n * @param debitNoteId\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n getPaymentsForDebitNote(debitNoteId, afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/debitNotes/{debitNoteId}/payments',\n path: {\n 'debitNoteId': debitNoteId,\n },\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Debit Note events.\n * Listen for Debit Note-related events using long-polling. If there are any events the method will return them immediately. If there are none the method will wait until one appears or timeout passes. `afterTimestamp` parameter can be used in order to get just the 'new' events. Setting the parameter value to the timestamp of the last processed event ensures that no events will go unnoticed.\n *\n * **NOTE:** The events are persistent, ie. calling the API does not remove the event records from receiving queue.\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @returns any OK\n * @throws ApiError\n */\n getDebitNoteEvents(timeout = 5, afterTimestamp, maxEvents = 10, appSessionId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/debitNoteEvents',\n query: {\n 'timeout': timeout,\n 'afterTimestamp': afterTimestamp,\n 'maxEvents': maxEvents,\n 'appSessionId': appSessionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Issue an Invoice.\n * @param requestBody\n * @returns any OK\n * @throws ApiError\n */\n issueInvoice(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/invoices',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Invoices known to this node (either issued by this Provider or received by this Requestor).\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n getInvoices(afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/invoices',\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Invoice.\n * @param invoiceId\n * @returns any OK\n * @throws ApiError\n */\n getInvoice(invoiceId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/invoices/{invoiceId}',\n path: {\n 'invoiceId': invoiceId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * @deprecated\n * Get Payments for Invoice.\n * **WARNING:** Operation not implemented.\n *\n * @param invoiceId\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n getPaymentsForInvoice(invoiceId, afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/invoices/{invoiceId}/payments',\n path: {\n 'invoiceId': invoiceId,\n },\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Invoice events.\n * Listen for Invoice-related events using long-polling. If there are any events the method will return them immediately. If there are none the method will wait until one appears or timeout passes. `afterTimestamp` parameter can be used in order to get just the 'new' events. Setting the parameter value to the timestamp of the last processed event ensures that no events will go unnoticed.\n *\n * **NOTE:** The events are persistent, ie. calling the API does not remove the event records from receiving queue.\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @returns any OK\n * @throws ApiError\n */\n getInvoiceEvents(timeout = 5, afterTimestamp, maxEvents = 10, appSessionId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/invoiceEvents',\n query: {\n 'timeout': timeout,\n 'afterTimestamp': afterTimestamp,\n 'maxEvents': maxEvents,\n 'appSessionId': appSessionId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Accept received Debit Note.\n * Send Debit Note Accepted message to Debit Note Issuer. If Debit Note is binding (i.e. has non-null payment due date) trigger payment orchestration for this Debit Note using specified Allocation.\n *\n * This is a blocking operation. It will not return until the Requestor has acknowledged accepting the Invoice or timeout has passed.\n *\n * **NOTE:** An Accepted Debit Note cannot be Rejected later.\n *\n * @param debitNoteId\n * @param requestBody\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any OK\n * @throws ApiError\n */\n acceptDebitNote(debitNoteId, requestBody, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/debitNotes/{debitNoteId}/accept',\n path: {\n 'debitNoteId': debitNoteId,\n },\n query: {\n 'timeout': timeout,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n 504: `(504) Ack timeout.`,\n },\n });\n }\n /**\n * Reject received Debit Note.\n * **WARNING:** Operation not implemented.\n *\n * Send Debit Note Rejected message to Invoice Issuer. Notification of rejection is signalling that Requestor does not accept the Debit Note (for some reason).\n *\n * This is a blocking operation. It will not return until the Requestor has acknowledged rejecting the Invoice or timeout has passed.\n *\n * **NOTE:** A Rejected Debit Note can be Accepted subsequently (e.g. as a result of some arbitrage).\n *\n * @param debitNoteId\n * @param requestBody\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any OK\n * @throws ApiError\n */\n rejectDebitNote(debitNoteId, requestBody, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/debitNotes/{debitNoteId}/reject',\n path: {\n 'debitNoteId': debitNoteId,\n },\n query: {\n 'timeout': timeout,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n 504: `(504) Ack timeout.`,\n },\n });\n }\n /**\n * Accept received Invoice.\n * Send Invoice Accepted message to Invoice Issuer. Trigger payment orchestration for this Invoice using specified Allocation.\n *\n * This is a blocking operation. It will not return until the Requestor has acknowledged rejecting the Invoice or timeout has passed.\n *\n * **NOTE:** An Accepted Invoice cannot be Rejected later.\n *\n * @param invoiceId\n * @param requestBody\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any OK\n * @throws ApiError\n */\n acceptInvoice(invoiceId, requestBody, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/invoices/{invoiceId}/accept',\n path: {\n 'invoiceId': invoiceId,\n },\n query: {\n 'timeout': timeout,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n 504: `(504) Ack timeout.`,\n },\n });\n }\n /**\n * Reject received Invoice.\n * **WARNING:** Operation not implemented.\n *\n * Send Invoice Rejected message to Invoice Issuer. Notification of rejection is signalling that Requestor does not accept Invoice (for some reason).\n *\n * This is a blocking operation. It will not return until the Requestor has acknowledged rejecting the Invoice or timeout has passed.\n *\n * **NOTE:** A Rejected Invoice can be Accepted subsequently (e.g. as a result of some arbitrage).\n *\n * @param invoiceId\n * @param requestBody\n * @param timeout Timeout used in blocking calls waiting for eg. acknowledgement. How many seconds server should wait for response/acknowledgement of an action (0.0 means it should wait for other party's response indefinitely)\n *\n * @returns any OK\n * @throws ApiError\n */\n rejectInvoice(invoiceId, requestBody, timeout = 5) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/invoices/{invoiceId}/reject',\n path: {\n 'invoiceId': invoiceId,\n },\n query: {\n 'timeout': timeout,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n 504: `(504) Ack timeout.`,\n },\n });\n }\n /**\n * Create Allocation.\n * Allocate funds to make sure they are not spent elsewhere.\n * @param requestBody\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxItems Maximum number of items that server should return at once.\n *\n * @returns any OK\n * @throws ApiError\n */\n createAllocation(requestBody, afterTimestamp, maxItems = 10) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/allocations',\n query: {\n 'afterTimestamp': afterTimestamp,\n 'maxItems': maxItems,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Allocations.\n * @returns any OK\n * @throws ApiError\n */\n getAllocations() {\n return this.httpRequest.request({\n method: 'GET',\n url: '/allocations',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Allocation.\n * @param allocationId\n * @returns any OK\n * @throws ApiError\n */\n getAllocation(allocationId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/allocations/{allocationId}',\n path: {\n 'allocationId': allocationId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Amend Allocation.\n * @param allocationId\n * @param requestBody\n * @returns any OK\n * @throws ApiError\n */\n amendAllocation(allocationId, requestBody) {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/allocations/{allocationId}',\n path: {\n 'allocationId': allocationId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Release Allocation.\n * The Allocation of amount is released. Note that this operation releases currently allocated amount (which may have been reduced by subsequent Invoice Payments).\n *\n * **WARNING:** Deposits not implemented.\n *\n * If the Allocation was connected with a Deposit the release amount from Deposit shall be marked as pending to be paid back to Requestor - and eventually will be paid back, unless a subsequent Allocation with Deposit is made. The Payment Platform implementations may optimize unnecessary fund transfers (i.e. will not pay back the Deposit if released funds can be assigned to a new Allocation with Deposit).\n *\n * @param allocationId\n * @returns any OK\n * @throws ApiError\n */\n releaseAllocation(allocationId) {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/allocations/{allocationId}',\n path: {\n 'allocationId': allocationId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 410: `(410) Gone.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Payments.\n * Payments can be treated as events and this method can be used to listen for new payments by long-polling. If there are any payments the method will return them immediately. If there are none the method will wait until one appears or timeout passes. `afterTimestamp` parameter can be used in order to get just the 'new' payments. Setting the parameter value to the timestamp of the last processed payment ensures that no payments will go unnoticed. `network` and `driver` parameters can be used in order to filter payments.\n *\n * @param timeout Timeout used in long-polling calls (in seconds). How many seconds server should wait for response containing new events (`0.0` means it should return immediately if there are no events)\n *\n * @param afterTimestamp Apply only to records created later than the specified timestamp\n * @param maxEvents Maximum number of events that server should return at once.\n *\n * @param appSessionId A correlation/session identifier used for querying events related to an action where this appSessionId has been specified\n * @param network Network identifier used for filtering payments made via the specified network\n * @param driver Driver identifier used for filtering payments made with the selected driver\n * @returns any OK\n * @throws ApiError\n */\n getPayments(timeout = 5, afterTimestamp, maxEvents = 10, appSessionId, network, driver) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/payments',\n query: {\n 'timeout': timeout,\n 'afterTimestamp': afterTimestamp,\n 'maxEvents': maxEvents,\n 'appSessionId': appSessionId,\n 'network': network,\n 'driver': driver,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get Payment.\n * @param paymentId\n * @returns any OK\n * @throws ApiError\n */\n getPayment(paymentId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/payments/{paymentId}',\n path: {\n 'paymentId': paymentId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get status of the payment driver\n * This only relates to the erc20 driver, not erc20legacy. The returned list contains individual status properties, which can be used to identify problems like missing funds or misconfigured max fee per gas on a per-chain (network) basis.\n *\n * @param network Network identifier used for filtering payments made via the specified network\n * @param driver Driver identifier used for filtering payments made with the selected driver\n * @returns any OK\n * @throws ApiError\n */\n paymentsStatus(network, driver) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/payments/status',\n query: {\n 'network': network,\n 'driver': driver,\n },\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Get available accounts for sending payments.\n * @returns any OK\n * @throws ApiError\n */\n getRequestorAccounts() {\n return this.httpRequest.request({\n method: 'GET',\n url: '/requestorAccounts',\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n /**\n * Obtain Demand elements specific to the given allocations, to be appended to a market Demand.\n * Generate payment-related properties and constraints to be added to a demand published on the marketplace. As a parameter it accepts a list of IDs of allocations to be used to pay for invoices resulting from the decorated demand.\n *\n * @param allocationIds\n * @returns any OK\n * @throws ApiError\n */\n getDemandDecorations(allocationIds) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/demandDecorations',\n query: {\n 'allocationIds': allocationIds,\n },\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 500: `(500) Server error.`,\n },\n });\n }\n}\nexports.RequestorService = RequestorService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = void 0;\nconst FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nconst ProviderService_1 = require(\"./services/ProviderService\");\nconst RequestorService_1 = require(\"./services/RequestorService\");\nclass Client {\n constructor(config, HttpRequest = FetchHttpRequest_1.FetchHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? '/payment-api/v1',\n VERSION: config?.VERSION ?? '1.6.3',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n this.provider = new ProviderService_1.ProviderService(this.request);\n this.requestor = new RequestorService_1.RequestorService(this.request);\n }\n}\nexports.Client = Client;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPI = void 0;\nexports.OpenAPI = {\n BASE: '/payment-api/v1',\n VERSION: '1.6.3',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = exports.RequestorService = exports.ProviderService = exports.OpenAPI = exports.CancelError = exports.CancelablePromise = exports.BaseHttpRequest = exports.ApiError = exports.Client = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nvar Client_1 = require(\"./Client\");\nObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return Client_1.Client; } });\nvar ApiError_1 = require(\"./core/ApiError\");\nObject.defineProperty(exports, \"ApiError\", { enumerable: true, get: function () { return ApiError_1.ApiError; } });\nvar BaseHttpRequest_1 = require(\"./core/BaseHttpRequest\");\nObject.defineProperty(exports, \"BaseHttpRequest\", { enumerable: true, get: function () { return BaseHttpRequest_1.BaseHttpRequest; } });\nvar CancelablePromise_1 = require(\"./core/CancelablePromise\");\nObject.defineProperty(exports, \"CancelablePromise\", { enumerable: true, get: function () { return CancelablePromise_1.CancelablePromise; } });\nObject.defineProperty(exports, \"CancelError\", { enumerable: true, get: function () { return CancelablePromise_1.CancelError; } });\nvar OpenAPI_1 = require(\"./core/OpenAPI\");\nObject.defineProperty(exports, \"OpenAPI\", { enumerable: true, get: function () { return OpenAPI_1.OpenAPI; } });\nvar ProviderService_1 = require(\"./services/ProviderService\");\nObject.defineProperty(exports, \"ProviderService\", { enumerable: true, get: function () { return ProviderService_1.ProviderService; } });\nvar RequestorService_1 = require(\"./services/RequestorService\");\nObject.defineProperty(exports, \"RequestorService\", { enumerable: true, get: function () { return RequestorService_1.RequestorService; } });\nvar FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nObject.defineProperty(exports, \"FetchHttpRequest\", { enumerable: true, get: function () { return FetchHttpRequest_1.FetchHttpRequest; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseHttpRequest = void 0;\nclass BaseHttpRequest {\n constructor(config) {\n this.config = config;\n }\n}\nexports.BaseHttpRequest = BaseHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApiError = void 0;\nclass ApiError extends Error {\n constructor(request, response, message) {\n super(message);\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\nexports.ApiError = ApiError;\n","\"use strict\";\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CancelablePromise_isResolved, _CancelablePromise_isRejected, _CancelablePromise_isCancelled, _CancelablePromise_cancelHandlers, _CancelablePromise_promise, _CancelablePromise_resolve, _CancelablePromise_reject;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancelablePromise = exports.CancelError = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nclass CancelError extends Error {\n constructor(message) {\n super(message);\n this.name = 'CancelError';\n }\n get isCancelled() {\n return true;\n }\n}\nexports.CancelError = CancelError;\nclass CancelablePromise {\n constructor(executor) {\n _CancelablePromise_isResolved.set(this, void 0);\n _CancelablePromise_isRejected.set(this, void 0);\n _CancelablePromise_isCancelled.set(this, void 0);\n _CancelablePromise_cancelHandlers.set(this, void 0);\n _CancelablePromise_promise.set(this, void 0);\n _CancelablePromise_resolve.set(this, void 0);\n _CancelablePromise_reject.set(this, void 0);\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_cancelHandlers, [], \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_promise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _CancelablePromise_resolve, resolve, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_reject, reject, \"f\");\n const onResolve = (value) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\").call(this, value);\n };\n const onReject = (reason) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, reason);\n };\n const onCancel = (cancelHandler) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").push(cancelHandler);\n };\n Object.defineProperty(onCancel, 'isResolved', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\"),\n });\n Object.defineProperty(onCancel, 'isRejected', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\"),\n });\n Object.defineProperty(onCancel, 'isCancelled', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\"),\n });\n return executor(onResolve, onReject, onCancel);\n }), \"f\");\n }\n get [(_CancelablePromise_isResolved = new WeakMap(), _CancelablePromise_isRejected = new WeakMap(), _CancelablePromise_isCancelled = new WeakMap(), _CancelablePromise_cancelHandlers = new WeakMap(), _CancelablePromise_promise = new WeakMap(), _CancelablePromise_resolve = new WeakMap(), _CancelablePromise_reject = new WeakMap(), Symbol.toStringTag)]() {\n return \"Cancellable Promise\";\n }\n then(onFulfilled, onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").then(onFulfilled, onRejected);\n }\n catch(onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").catch(onRejected);\n }\n finally(onFinally) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").finally(onFinally);\n }\n cancel() {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length) {\n try {\n for (const cancelHandler of __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\")) {\n cancelHandler();\n }\n }\n catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length = 0;\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, new CancelError('Request aborted'));\n }\n get isCancelled() {\n return __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\");\n }\n}\nexports.CancelablePromise = CancelablePromise;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.request = exports.catchErrorCodes = exports.getResponseBody = exports.getResponseHeader = exports.sendRequest = exports.getRequestBody = exports.getHeaders = exports.resolve = exports.getFormData = exports.getQueryString = exports.base64 = exports.isFormData = exports.isBlob = exports.isStringWithValue = exports.isString = exports.isDefined = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nconst ApiError_1 = require(\"./ApiError\");\nconst CancelablePromise_1 = require(\"./CancelablePromise\");\nconst isDefined = (value) => {\n return value !== undefined && value !== null;\n};\nexports.isDefined = isDefined;\nconst isString = (value) => {\n return typeof value === 'string';\n};\nexports.isString = isString;\nconst isStringWithValue = (value) => {\n return (0, exports.isString)(value) && value !== '';\n};\nexports.isStringWithValue = isStringWithValue;\nconst isBlob = (value) => {\n return (typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag]));\n};\nexports.isBlob = isBlob;\nconst isFormData = (value) => {\n return value instanceof FormData;\n};\nexports.isFormData = isFormData;\nconst base64 = (str) => {\n try {\n return btoa(str);\n }\n catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\nexports.base64 = base64;\nconst getQueryString = (params) => {\n const qs = [];\n const append = (key, value) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n const process = (key, value) => {\n if ((0, exports.isDefined)(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n }\n else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n }\n else {\n append(key, value);\n }\n }\n };\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n return '';\n};\nexports.getQueryString = getQueryString;\nconst getUrl = (config, options) => {\n const encoder = config.ENCODE_PATH || encodeURI;\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring, group) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${(0, exports.getQueryString)(options.query)}`;\n }\n return url;\n};\nconst getFormData = (options) => {\n if (options.formData) {\n const formData = new FormData();\n const process = (key, value) => {\n if ((0, exports.isString)(value) || (0, exports.isBlob)(value)) {\n formData.append(key, value);\n }\n else {\n formData.append(key, JSON.stringify(value));\n }\n };\n Object.entries(options.formData)\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n }\n else {\n process(key, value);\n }\n });\n return formData;\n }\n return undefined;\n};\nexports.getFormData = getFormData;\nconst resolve = async (options, resolver) => {\n if (typeof resolver === 'function') {\n return resolver(options);\n }\n return resolver;\n};\nexports.resolve = resolve;\nconst getHeaders = async (config, options) => {\n const [token, username, password, additionalHeaders] = await Promise.all([\n (0, exports.resolve)(options, config.TOKEN),\n (0, exports.resolve)(options, config.USERNAME),\n (0, exports.resolve)(options, config.PASSWORD),\n (0, exports.resolve)(options, config.HEADERS),\n ]);\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n })\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {});\n if ((0, exports.isStringWithValue)(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n if ((0, exports.isStringWithValue)(username) && (0, exports.isStringWithValue)(password)) {\n const credentials = (0, exports.base64)(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n if (options.body !== undefined) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n }\n else if ((0, exports.isBlob)(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n }\n else if ((0, exports.isString)(options.body)) {\n headers['Content-Type'] = 'text/plain';\n }\n else if (!(0, exports.isFormData)(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n return new Headers(headers);\n};\nexports.getHeaders = getHeaders;\nconst getRequestBody = (options) => {\n if (options.body !== undefined) {\n if (options.mediaType?.includes('/json')) {\n return JSON.stringify(options.body);\n }\n else if ((0, exports.isString)(options.body) || (0, exports.isBlob)(options.body) || (0, exports.isFormData)(options.body)) {\n return options.body;\n }\n else {\n return JSON.stringify(options.body);\n }\n }\n return undefined;\n};\nexports.getRequestBody = getRequestBody;\nconst sendRequest = async (config, options, url, body, formData, headers, onCancel) => {\n const controller = new AbortController();\n const request = {\n headers,\n body: body ?? formData,\n method: options.method,\n signal: controller.signal,\n };\n if (config.WITH_CREDENTIALS) {\n request.credentials = config.CREDENTIALS;\n }\n onCancel(() => controller.abort());\n return await fetch(url, request);\n};\nexports.sendRequest = sendRequest;\nconst getResponseHeader = (response, responseHeader) => {\n if (responseHeader) {\n const content = response.headers.get(responseHeader);\n if ((0, exports.isString)(content)) {\n return content;\n }\n }\n return undefined;\n};\nexports.getResponseHeader = getResponseHeader;\nconst getResponseBody = async (response) => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type');\n if (contentType) {\n const jsonTypes = ['application/json', 'application/problem+json'];\n const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));\n if (isJSON) {\n return await response.json();\n }\n else {\n return await response.text();\n }\n }\n }\n catch (error) {\n console.error(error);\n }\n }\n return undefined;\n};\nexports.getResponseBody = getResponseBody;\nconst catchErrorCodes = (options, result) => {\n const errors = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n };\n const error = errors[result.status];\n if (error) {\n throw new ApiError_1.ApiError(options, result, error);\n }\n if (!result.ok) {\n const errorStatus = result.status ?? 'unknown';\n const errorStatusText = result.statusText ?? 'unknown';\n const errorBody = (() => {\n try {\n return JSON.stringify(result.body, null, 2);\n }\n catch (e) {\n return undefined;\n }\n })();\n throw new ApiError_1.ApiError(options, result, `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`);\n }\n};\nexports.catchErrorCodes = catchErrorCodes;\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\nconst request = (config, options) => {\n return new CancelablePromise_1.CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = (0, exports.getFormData)(options);\n const body = (0, exports.getRequestBody)(options);\n const headers = await (0, exports.getHeaders)(config, options);\n if (!onCancel.isCancelled) {\n const response = await (0, exports.sendRequest)(config, options, url, body, formData, headers, onCancel);\n const responseBody = await (0, exports.getResponseBody)(response);\n const responseHeader = (0, exports.getResponseHeader)(response, options.responseHeader);\n const result = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n (0, exports.catchErrorCodes)(options, result);\n resolve(result.body);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n};\nexports.request = request;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = void 0;\nconst BaseHttpRequest_1 = require(\"./BaseHttpRequest\");\nconst request_1 = require(\"./request\");\nclass FetchHttpRequest extends BaseHttpRequest_1.BaseHttpRequest {\n constructor(config) {\n super(config);\n }\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\n request(options) {\n return (0, request_1.request)(this.config, options);\n }\n}\nexports.FetchHttpRequest = FetchHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultService = void 0;\nclass DefaultService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * @param networkId\n * @param ip\n * @param port\n * @returns void\n * @throws ApiError\n */\n connectTcp(networkId, ip, port) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/net/{networkId}/tcp/{ip}/{port}',\n path: {\n 'networkId': networkId,\n 'ip': ip,\n 'port': port,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n}\nexports.DefaultService = DefaultService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestorService = void 0;\nclass RequestorService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * GetNetworks - Fetches Networks created by the Requestor.\n * @returns any List of Networks created by the Requestor.\n * @throws ApiError\n */\n getNetworks() {\n return this.httpRequest.request({\n method: 'GET',\n url: '/net',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * CreateNetwork - Creates a new Network.\n * @param requestBody\n * @returns any Network information.\n * @throws ApiError\n */\n createNetwork(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/net',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * GetNetwork - Fetches a Network created by the Requestor.\n * @param networkId\n * @returns any Network information.\n * @throws ApiError\n */\n getNetwork(networkId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/net/{networkId}',\n path: {\n 'networkId': networkId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * RemoveNetwork - Removes a Network created by the Requestor.\n * @param networkId\n * @returns any Network removed.\n * @throws ApiError\n */\n removeNetwork(networkId) {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/net/{networkId}',\n path: {\n 'networkId': networkId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * GetAddresses - Fetches Requestor's IP addresses in a Network.\n * @param networkId\n * @returns any List of Requestor's Addresses in a Virtual Private Network.\n * @throws ApiError\n */\n getAddresses(networkId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/net/{networkId}/addresses',\n path: {\n 'networkId': networkId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * AddAddress - Assigns a new IP address to the Requestor in a Network.\n * @param networkId\n * @param requestBody\n * @returns any Address assigned.\n * @throws ApiError\n */\n addAddress(networkId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/net/{networkId}/addresses',\n path: {\n 'networkId': networkId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 409: `(409) Conflict.`,\n },\n });\n }\n /**\n * GetNodes - Fetches Nodes added to a Network.\n * @param networkId\n * @returns any List of nodes in a Virtual Private Network.\n * @throws ApiError\n */\n getNodes(networkId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/net/{networkId}/nodes',\n path: {\n 'networkId': networkId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * AddNode - Advertises and adds a new Node to a Network.\n * @param networkId\n * @param requestBody\n * @returns any Node added.\n * @throws ApiError\n */\n addNode(networkId, requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/net/{networkId}/nodes',\n path: {\n 'networkId': networkId,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n 409: `(409) Conflict.`,\n },\n });\n }\n /**\n * RemoveNode - Advertises and removes a Node from a Network.\n * @param networkId\n * @param nodeId\n * @returns any Node removed.\n * @throws ApiError\n */\n removeNode(networkId, nodeId) {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/net/{networkId}/nodes/{nodeId}',\n path: {\n 'networkId': networkId,\n 'nodeId': nodeId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n /**\n * GetConnections - Fetches Requestor's TCP connections in a Network.\n * @param networkId\n * @returns any List of established connections within a Virtual Private Network.\n * @throws ApiError\n */\n getConnections(networkId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/net/{networkId}/tcp',\n path: {\n 'networkId': networkId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 403: `(403) Forbidden.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n}\nexports.RequestorService = RequestorService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = void 0;\nconst FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nconst DefaultService_1 = require(\"./services/DefaultService\");\nconst RequestorService_1 = require(\"./services/RequestorService\");\nclass Client {\n constructor(config, HttpRequest = FetchHttpRequest_1.FetchHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? '/net-api/v1',\n VERSION: config?.VERSION ?? '0.1.0',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n this.default = new DefaultService_1.DefaultService(this.request);\n this.requestor = new RequestorService_1.RequestorService(this.request);\n }\n}\nexports.Client = Client;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPI = void 0;\nexports.OpenAPI = {\n BASE: '/net-api/v1',\n VERSION: '0.1.0',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = exports.RequestorService = exports.DefaultService = exports.OpenAPI = exports.CancelError = exports.CancelablePromise = exports.BaseHttpRequest = exports.ApiError = exports.Client = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nvar Client_1 = require(\"./Client\");\nObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return Client_1.Client; } });\nvar ApiError_1 = require(\"./core/ApiError\");\nObject.defineProperty(exports, \"ApiError\", { enumerable: true, get: function () { return ApiError_1.ApiError; } });\nvar BaseHttpRequest_1 = require(\"./core/BaseHttpRequest\");\nObject.defineProperty(exports, \"BaseHttpRequest\", { enumerable: true, get: function () { return BaseHttpRequest_1.BaseHttpRequest; } });\nvar CancelablePromise_1 = require(\"./core/CancelablePromise\");\nObject.defineProperty(exports, \"CancelablePromise\", { enumerable: true, get: function () { return CancelablePromise_1.CancelablePromise; } });\nObject.defineProperty(exports, \"CancelError\", { enumerable: true, get: function () { return CancelablePromise_1.CancelError; } });\nvar OpenAPI_1 = require(\"./core/OpenAPI\");\nObject.defineProperty(exports, \"OpenAPI\", { enumerable: true, get: function () { return OpenAPI_1.OpenAPI; } });\nvar DefaultService_1 = require(\"./services/DefaultService\");\nObject.defineProperty(exports, \"DefaultService\", { enumerable: true, get: function () { return DefaultService_1.DefaultService; } });\nvar RequestorService_1 = require(\"./services/RequestorService\");\nObject.defineProperty(exports, \"RequestorService\", { enumerable: true, get: function () { return RequestorService_1.RequestorService; } });\nvar FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nObject.defineProperty(exports, \"FetchHttpRequest\", { enumerable: true, get: function () { return FetchHttpRequest_1.FetchHttpRequest; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseHttpRequest = void 0;\nclass BaseHttpRequest {\n constructor(config) {\n this.config = config;\n }\n}\nexports.BaseHttpRequest = BaseHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApiError = void 0;\nclass ApiError extends Error {\n constructor(request, response, message) {\n super(message);\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\nexports.ApiError = ApiError;\n","\"use strict\";\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CancelablePromise_isResolved, _CancelablePromise_isRejected, _CancelablePromise_isCancelled, _CancelablePromise_cancelHandlers, _CancelablePromise_promise, _CancelablePromise_resolve, _CancelablePromise_reject;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancelablePromise = exports.CancelError = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nclass CancelError extends Error {\n constructor(message) {\n super(message);\n this.name = 'CancelError';\n }\n get isCancelled() {\n return true;\n }\n}\nexports.CancelError = CancelError;\nclass CancelablePromise {\n constructor(executor) {\n _CancelablePromise_isResolved.set(this, void 0);\n _CancelablePromise_isRejected.set(this, void 0);\n _CancelablePromise_isCancelled.set(this, void 0);\n _CancelablePromise_cancelHandlers.set(this, void 0);\n _CancelablePromise_promise.set(this, void 0);\n _CancelablePromise_resolve.set(this, void 0);\n _CancelablePromise_reject.set(this, void 0);\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_cancelHandlers, [], \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_promise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _CancelablePromise_resolve, resolve, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_reject, reject, \"f\");\n const onResolve = (value) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\").call(this, value);\n };\n const onReject = (reason) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, reason);\n };\n const onCancel = (cancelHandler) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").push(cancelHandler);\n };\n Object.defineProperty(onCancel, 'isResolved', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\"),\n });\n Object.defineProperty(onCancel, 'isRejected', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\"),\n });\n Object.defineProperty(onCancel, 'isCancelled', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\"),\n });\n return executor(onResolve, onReject, onCancel);\n }), \"f\");\n }\n get [(_CancelablePromise_isResolved = new WeakMap(), _CancelablePromise_isRejected = new WeakMap(), _CancelablePromise_isCancelled = new WeakMap(), _CancelablePromise_cancelHandlers = new WeakMap(), _CancelablePromise_promise = new WeakMap(), _CancelablePromise_resolve = new WeakMap(), _CancelablePromise_reject = new WeakMap(), Symbol.toStringTag)]() {\n return \"Cancellable Promise\";\n }\n then(onFulfilled, onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").then(onFulfilled, onRejected);\n }\n catch(onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").catch(onRejected);\n }\n finally(onFinally) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").finally(onFinally);\n }\n cancel() {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length) {\n try {\n for (const cancelHandler of __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\")) {\n cancelHandler();\n }\n }\n catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length = 0;\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, new CancelError('Request aborted'));\n }\n get isCancelled() {\n return __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\");\n }\n}\nexports.CancelablePromise = CancelablePromise;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.request = exports.catchErrorCodes = exports.getResponseBody = exports.getResponseHeader = exports.sendRequest = exports.getRequestBody = exports.getHeaders = exports.resolve = exports.getFormData = exports.getQueryString = exports.base64 = exports.isFormData = exports.isBlob = exports.isStringWithValue = exports.isString = exports.isDefined = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nconst ApiError_1 = require(\"./ApiError\");\nconst CancelablePromise_1 = require(\"./CancelablePromise\");\nconst isDefined = (value) => {\n return value !== undefined && value !== null;\n};\nexports.isDefined = isDefined;\nconst isString = (value) => {\n return typeof value === 'string';\n};\nexports.isString = isString;\nconst isStringWithValue = (value) => {\n return (0, exports.isString)(value) && value !== '';\n};\nexports.isStringWithValue = isStringWithValue;\nconst isBlob = (value) => {\n return (typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag]));\n};\nexports.isBlob = isBlob;\nconst isFormData = (value) => {\n return value instanceof FormData;\n};\nexports.isFormData = isFormData;\nconst base64 = (str) => {\n try {\n return btoa(str);\n }\n catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\nexports.base64 = base64;\nconst getQueryString = (params) => {\n const qs = [];\n const append = (key, value) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n const process = (key, value) => {\n if ((0, exports.isDefined)(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n }\n else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n }\n else {\n append(key, value);\n }\n }\n };\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n return '';\n};\nexports.getQueryString = getQueryString;\nconst getUrl = (config, options) => {\n const encoder = config.ENCODE_PATH || encodeURI;\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring, group) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${(0, exports.getQueryString)(options.query)}`;\n }\n return url;\n};\nconst getFormData = (options) => {\n if (options.formData) {\n const formData = new FormData();\n const process = (key, value) => {\n if ((0, exports.isString)(value) || (0, exports.isBlob)(value)) {\n formData.append(key, value);\n }\n else {\n formData.append(key, JSON.stringify(value));\n }\n };\n Object.entries(options.formData)\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n }\n else {\n process(key, value);\n }\n });\n return formData;\n }\n return undefined;\n};\nexports.getFormData = getFormData;\nconst resolve = async (options, resolver) => {\n if (typeof resolver === 'function') {\n return resolver(options);\n }\n return resolver;\n};\nexports.resolve = resolve;\nconst getHeaders = async (config, options) => {\n const [token, username, password, additionalHeaders] = await Promise.all([\n (0, exports.resolve)(options, config.TOKEN),\n (0, exports.resolve)(options, config.USERNAME),\n (0, exports.resolve)(options, config.PASSWORD),\n (0, exports.resolve)(options, config.HEADERS),\n ]);\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n })\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {});\n if ((0, exports.isStringWithValue)(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n if ((0, exports.isStringWithValue)(username) && (0, exports.isStringWithValue)(password)) {\n const credentials = (0, exports.base64)(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n if (options.body !== undefined) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n }\n else if ((0, exports.isBlob)(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n }\n else if ((0, exports.isString)(options.body)) {\n headers['Content-Type'] = 'text/plain';\n }\n else if (!(0, exports.isFormData)(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n return new Headers(headers);\n};\nexports.getHeaders = getHeaders;\nconst getRequestBody = (options) => {\n if (options.body !== undefined) {\n if (options.mediaType?.includes('/json')) {\n return JSON.stringify(options.body);\n }\n else if ((0, exports.isString)(options.body) || (0, exports.isBlob)(options.body) || (0, exports.isFormData)(options.body)) {\n return options.body;\n }\n else {\n return JSON.stringify(options.body);\n }\n }\n return undefined;\n};\nexports.getRequestBody = getRequestBody;\nconst sendRequest = async (config, options, url, body, formData, headers, onCancel) => {\n const controller = new AbortController();\n const request = {\n headers,\n body: body ?? formData,\n method: options.method,\n signal: controller.signal,\n };\n if (config.WITH_CREDENTIALS) {\n request.credentials = config.CREDENTIALS;\n }\n onCancel(() => controller.abort());\n return await fetch(url, request);\n};\nexports.sendRequest = sendRequest;\nconst getResponseHeader = (response, responseHeader) => {\n if (responseHeader) {\n const content = response.headers.get(responseHeader);\n if ((0, exports.isString)(content)) {\n return content;\n }\n }\n return undefined;\n};\nexports.getResponseHeader = getResponseHeader;\nconst getResponseBody = async (response) => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type');\n if (contentType) {\n const jsonTypes = ['application/json', 'application/problem+json'];\n const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));\n if (isJSON) {\n return await response.json();\n }\n else {\n return await response.text();\n }\n }\n }\n catch (error) {\n console.error(error);\n }\n }\n return undefined;\n};\nexports.getResponseBody = getResponseBody;\nconst catchErrorCodes = (options, result) => {\n const errors = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n };\n const error = errors[result.status];\n if (error) {\n throw new ApiError_1.ApiError(options, result, error);\n }\n if (!result.ok) {\n const errorStatus = result.status ?? 'unknown';\n const errorStatusText = result.statusText ?? 'unknown';\n const errorBody = (() => {\n try {\n return JSON.stringify(result.body, null, 2);\n }\n catch (e) {\n return undefined;\n }\n })();\n throw new ApiError_1.ApiError(options, result, `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`);\n }\n};\nexports.catchErrorCodes = catchErrorCodes;\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\nconst request = (config, options) => {\n return new CancelablePromise_1.CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = (0, exports.getFormData)(options);\n const body = (0, exports.getRequestBody)(options);\n const headers = await (0, exports.getHeaders)(config, options);\n if (!onCancel.isCancelled) {\n const response = await (0, exports.sendRequest)(config, options, url, body, formData, headers, onCancel);\n const responseBody = await (0, exports.getResponseBody)(response);\n const responseHeader = (0, exports.getResponseHeader)(response, options.responseHeader);\n const result = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n (0, exports.catchErrorCodes)(options, result);\n resolve(result.body);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n};\nexports.request = request;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = void 0;\nconst BaseHttpRequest_1 = require(\"./BaseHttpRequest\");\nconst request_1 = require(\"./request\");\nclass FetchHttpRequest extends BaseHttpRequest_1.BaseHttpRequest {\n constructor(config) {\n super(config);\n }\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\n request(options) {\n return (0, request_1.request)(this.config, options);\n }\n}\nexports.FetchHttpRequest = FetchHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultService = void 0;\nclass DefaultService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * Upgrades to WebSocket\n * Upgrades to WebSocket which allows to receive messages to bound GSB services. Check 'gsb-api-messages.yaml' for WebSocket messages specs.\n * @param servicesId Generated id for bound GSB services. It is a base64 encoded GSB address prefix.\n * @returns void\n * @throws ApiError\n */\n getServiceMessages(servicesId) {\n return this.httpRequest.request({\n method: 'GET',\n url: '/services/{servicesId}',\n path: {\n 'servicesId': servicesId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n}\nexports.DefaultService = DefaultService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestorService = void 0;\nclass RequestorService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * Binds new GSB services.\n * @param requestBody\n * @returns any Unexpected error.\n * @throws ApiError\n */\n bindServices(requestBody) {\n return this.httpRequest.request({\n method: 'POST',\n url: '/services',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n /**\n * Unbinds GSB services.\n * Unbinds GSB services and closes existing WS connection. WebSocket endpoint created for these services cannot be accessed after unbinding them. Pending GSB requests will be Cancelled.\n * @param servicesId Generated id for bound GSB services. It is a base64 encoded GSB address prefix.\n * @returns any GSB services are unbound and WS connections disconnected.\n * @throws ApiError\n */\n unbindServices(servicesId) {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/services/{servicesId}',\n path: {\n 'servicesId': servicesId,\n },\n errors: {\n 401: `(401) Authorization information is missing or invalid.`,\n 404: `(404) The specified resource was not found.`,\n },\n });\n }\n}\nexports.RequestorService = RequestorService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = void 0;\nconst FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nconst DefaultService_1 = require(\"./services/DefaultService\");\nconst RequestorService_1 = require(\"./services/RequestorService\");\nclass Client {\n constructor(config, HttpRequest = FetchHttpRequest_1.FetchHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? '/gsb-api/v1',\n VERSION: config?.VERSION ?? '0.1.0',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n this.default = new DefaultService_1.DefaultService(this.request);\n this.requestor = new RequestorService_1.RequestorService(this.request);\n }\n}\nexports.Client = Client;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPI = void 0;\nexports.OpenAPI = {\n BASE: '/gsb-api/v1',\n VERSION: '0.1.0',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = exports.RequestorService = exports.DefaultService = exports.OpenAPI = exports.CancelError = exports.CancelablePromise = exports.BaseHttpRequest = exports.ApiError = exports.Client = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nvar Client_1 = require(\"./Client\");\nObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return Client_1.Client; } });\nvar ApiError_1 = require(\"./core/ApiError\");\nObject.defineProperty(exports, \"ApiError\", { enumerable: true, get: function () { return ApiError_1.ApiError; } });\nvar BaseHttpRequest_1 = require(\"./core/BaseHttpRequest\");\nObject.defineProperty(exports, \"BaseHttpRequest\", { enumerable: true, get: function () { return BaseHttpRequest_1.BaseHttpRequest; } });\nvar CancelablePromise_1 = require(\"./core/CancelablePromise\");\nObject.defineProperty(exports, \"CancelablePromise\", { enumerable: true, get: function () { return CancelablePromise_1.CancelablePromise; } });\nObject.defineProperty(exports, \"CancelError\", { enumerable: true, get: function () { return CancelablePromise_1.CancelError; } });\nvar OpenAPI_1 = require(\"./core/OpenAPI\");\nObject.defineProperty(exports, \"OpenAPI\", { enumerable: true, get: function () { return OpenAPI_1.OpenAPI; } });\nvar DefaultService_1 = require(\"./services/DefaultService\");\nObject.defineProperty(exports, \"DefaultService\", { enumerable: true, get: function () { return DefaultService_1.DefaultService; } });\nvar RequestorService_1 = require(\"./services/RequestorService\");\nObject.defineProperty(exports, \"RequestorService\", { enumerable: true, get: function () { return RequestorService_1.RequestorService; } });\nvar FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nObject.defineProperty(exports, \"FetchHttpRequest\", { enumerable: true, get: function () { return FetchHttpRequest_1.FetchHttpRequest; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseHttpRequest = void 0;\nclass BaseHttpRequest {\n constructor(config) {\n this.config = config;\n }\n}\nexports.BaseHttpRequest = BaseHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApiError = void 0;\nclass ApiError extends Error {\n constructor(request, response, message) {\n super(message);\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\nexports.ApiError = ApiError;\n","\"use strict\";\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CancelablePromise_isResolved, _CancelablePromise_isRejected, _CancelablePromise_isCancelled, _CancelablePromise_cancelHandlers, _CancelablePromise_promise, _CancelablePromise_resolve, _CancelablePromise_reject;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancelablePromise = exports.CancelError = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nclass CancelError extends Error {\n constructor(message) {\n super(message);\n this.name = 'CancelError';\n }\n get isCancelled() {\n return true;\n }\n}\nexports.CancelError = CancelError;\nclass CancelablePromise {\n constructor(executor) {\n _CancelablePromise_isResolved.set(this, void 0);\n _CancelablePromise_isRejected.set(this, void 0);\n _CancelablePromise_isCancelled.set(this, void 0);\n _CancelablePromise_cancelHandlers.set(this, void 0);\n _CancelablePromise_promise.set(this, void 0);\n _CancelablePromise_resolve.set(this, void 0);\n _CancelablePromise_reject.set(this, void 0);\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_cancelHandlers, [], \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_promise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _CancelablePromise_resolve, resolve, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_reject, reject, \"f\");\n const onResolve = (value) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\").call(this, value);\n };\n const onReject = (reason) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, reason);\n };\n const onCancel = (cancelHandler) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").push(cancelHandler);\n };\n Object.defineProperty(onCancel, 'isResolved', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\"),\n });\n Object.defineProperty(onCancel, 'isRejected', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\"),\n });\n Object.defineProperty(onCancel, 'isCancelled', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\"),\n });\n return executor(onResolve, onReject, onCancel);\n }), \"f\");\n }\n get [(_CancelablePromise_isResolved = new WeakMap(), _CancelablePromise_isRejected = new WeakMap(), _CancelablePromise_isCancelled = new WeakMap(), _CancelablePromise_cancelHandlers = new WeakMap(), _CancelablePromise_promise = new WeakMap(), _CancelablePromise_resolve = new WeakMap(), _CancelablePromise_reject = new WeakMap(), Symbol.toStringTag)]() {\n return \"Cancellable Promise\";\n }\n then(onFulfilled, onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").then(onFulfilled, onRejected);\n }\n catch(onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").catch(onRejected);\n }\n finally(onFinally) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").finally(onFinally);\n }\n cancel() {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length) {\n try {\n for (const cancelHandler of __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\")) {\n cancelHandler();\n }\n }\n catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length = 0;\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, new CancelError('Request aborted'));\n }\n get isCancelled() {\n return __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\");\n }\n}\nexports.CancelablePromise = CancelablePromise;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.request = exports.catchErrorCodes = exports.getResponseBody = exports.getResponseHeader = exports.sendRequest = exports.getRequestBody = exports.getHeaders = exports.resolve = exports.getFormData = exports.getQueryString = exports.base64 = exports.isFormData = exports.isBlob = exports.isStringWithValue = exports.isString = exports.isDefined = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nconst ApiError_1 = require(\"./ApiError\");\nconst CancelablePromise_1 = require(\"./CancelablePromise\");\nconst isDefined = (value) => {\n return value !== undefined && value !== null;\n};\nexports.isDefined = isDefined;\nconst isString = (value) => {\n return typeof value === 'string';\n};\nexports.isString = isString;\nconst isStringWithValue = (value) => {\n return (0, exports.isString)(value) && value !== '';\n};\nexports.isStringWithValue = isStringWithValue;\nconst isBlob = (value) => {\n return (typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag]));\n};\nexports.isBlob = isBlob;\nconst isFormData = (value) => {\n return value instanceof FormData;\n};\nexports.isFormData = isFormData;\nconst base64 = (str) => {\n try {\n return btoa(str);\n }\n catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\nexports.base64 = base64;\nconst getQueryString = (params) => {\n const qs = [];\n const append = (key, value) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n const process = (key, value) => {\n if ((0, exports.isDefined)(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n }\n else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n }\n else {\n append(key, value);\n }\n }\n };\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n return '';\n};\nexports.getQueryString = getQueryString;\nconst getUrl = (config, options) => {\n const encoder = config.ENCODE_PATH || encodeURI;\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring, group) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${(0, exports.getQueryString)(options.query)}`;\n }\n return url;\n};\nconst getFormData = (options) => {\n if (options.formData) {\n const formData = new FormData();\n const process = (key, value) => {\n if ((0, exports.isString)(value) || (0, exports.isBlob)(value)) {\n formData.append(key, value);\n }\n else {\n formData.append(key, JSON.stringify(value));\n }\n };\n Object.entries(options.formData)\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n }\n else {\n process(key, value);\n }\n });\n return formData;\n }\n return undefined;\n};\nexports.getFormData = getFormData;\nconst resolve = async (options, resolver) => {\n if (typeof resolver === 'function') {\n return resolver(options);\n }\n return resolver;\n};\nexports.resolve = resolve;\nconst getHeaders = async (config, options) => {\n const [token, username, password, additionalHeaders] = await Promise.all([\n (0, exports.resolve)(options, config.TOKEN),\n (0, exports.resolve)(options, config.USERNAME),\n (0, exports.resolve)(options, config.PASSWORD),\n (0, exports.resolve)(options, config.HEADERS),\n ]);\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n })\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {});\n if ((0, exports.isStringWithValue)(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n if ((0, exports.isStringWithValue)(username) && (0, exports.isStringWithValue)(password)) {\n const credentials = (0, exports.base64)(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n if (options.body !== undefined) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n }\n else if ((0, exports.isBlob)(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n }\n else if ((0, exports.isString)(options.body)) {\n headers['Content-Type'] = 'text/plain';\n }\n else if (!(0, exports.isFormData)(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n return new Headers(headers);\n};\nexports.getHeaders = getHeaders;\nconst getRequestBody = (options) => {\n if (options.body !== undefined) {\n if (options.mediaType?.includes('/json')) {\n return JSON.stringify(options.body);\n }\n else if ((0, exports.isString)(options.body) || (0, exports.isBlob)(options.body) || (0, exports.isFormData)(options.body)) {\n return options.body;\n }\n else {\n return JSON.stringify(options.body);\n }\n }\n return undefined;\n};\nexports.getRequestBody = getRequestBody;\nconst sendRequest = async (config, options, url, body, formData, headers, onCancel) => {\n const controller = new AbortController();\n const request = {\n headers,\n body: body ?? formData,\n method: options.method,\n signal: controller.signal,\n };\n if (config.WITH_CREDENTIALS) {\n request.credentials = config.CREDENTIALS;\n }\n onCancel(() => controller.abort());\n return await fetch(url, request);\n};\nexports.sendRequest = sendRequest;\nconst getResponseHeader = (response, responseHeader) => {\n if (responseHeader) {\n const content = response.headers.get(responseHeader);\n if ((0, exports.isString)(content)) {\n return content;\n }\n }\n return undefined;\n};\nexports.getResponseHeader = getResponseHeader;\nconst getResponseBody = async (response) => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type');\n if (contentType) {\n const jsonTypes = ['application/json', 'application/problem+json'];\n const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));\n if (isJSON) {\n return await response.json();\n }\n else {\n return await response.text();\n }\n }\n }\n catch (error) {\n console.error(error);\n }\n }\n return undefined;\n};\nexports.getResponseBody = getResponseBody;\nconst catchErrorCodes = (options, result) => {\n const errors = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n };\n const error = errors[result.status];\n if (error) {\n throw new ApiError_1.ApiError(options, result, error);\n }\n if (!result.ok) {\n const errorStatus = result.status ?? 'unknown';\n const errorStatusText = result.statusText ?? 'unknown';\n const errorBody = (() => {\n try {\n return JSON.stringify(result.body, null, 2);\n }\n catch (e) {\n return undefined;\n }\n })();\n throw new ApiError_1.ApiError(options, result, `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`);\n }\n};\nexports.catchErrorCodes = catchErrorCodes;\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\nconst request = (config, options) => {\n return new CancelablePromise_1.CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = (0, exports.getFormData)(options);\n const body = (0, exports.getRequestBody)(options);\n const headers = await (0, exports.getHeaders)(config, options);\n if (!onCancel.isCancelled) {\n const response = await (0, exports.sendRequest)(config, options, url, body, formData, headers, onCancel);\n const responseBody = await (0, exports.getResponseBody)(response);\n const responseHeader = (0, exports.getResponseHeader)(response, options.responseHeader);\n const result = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n (0, exports.catchErrorCodes)(options, result);\n resolve(result.body);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n};\nexports.request = request;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = void 0;\nconst BaseHttpRequest_1 = require(\"./BaseHttpRequest\");\nconst request_1 = require(\"./request\");\nclass FetchHttpRequest extends BaseHttpRequest_1.BaseHttpRequest {\n constructor(config) {\n super(config);\n }\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\n request(options) {\n return (0, request_1.request)(this.config, options);\n }\n}\nexports.FetchHttpRequest = FetchHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultService = void 0;\nclass DefaultService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * GetIdentity - Fetches the identity of the user.\n * @returns any Identity\n * @throws ApiError\n */\n getIdentity() {\n return this.httpRequest.request({\n method: 'GET',\n url: '/me',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n}\nexports.DefaultService = DefaultService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = void 0;\nconst FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nconst DefaultService_1 = require(\"./services/DefaultService\");\nclass Client {\n constructor(config, HttpRequest = FetchHttpRequest_1.FetchHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? '',\n VERSION: config?.VERSION ?? '0.1.0',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n this.default = new DefaultService_1.DefaultService(this.request);\n }\n}\nexports.Client = Client;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPI = void 0;\nexports.OpenAPI = {\n BASE: '',\n VERSION: '0.1.0',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = exports.DefaultService = exports.OpenAPI = exports.CancelError = exports.CancelablePromise = exports.BaseHttpRequest = exports.ApiError = exports.Client = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nvar Client_1 = require(\"./Client\");\nObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return Client_1.Client; } });\nvar ApiError_1 = require(\"./core/ApiError\");\nObject.defineProperty(exports, \"ApiError\", { enumerable: true, get: function () { return ApiError_1.ApiError; } });\nvar BaseHttpRequest_1 = require(\"./core/BaseHttpRequest\");\nObject.defineProperty(exports, \"BaseHttpRequest\", { enumerable: true, get: function () { return BaseHttpRequest_1.BaseHttpRequest; } });\nvar CancelablePromise_1 = require(\"./core/CancelablePromise\");\nObject.defineProperty(exports, \"CancelablePromise\", { enumerable: true, get: function () { return CancelablePromise_1.CancelablePromise; } });\nObject.defineProperty(exports, \"CancelError\", { enumerable: true, get: function () { return CancelablePromise_1.CancelError; } });\nvar OpenAPI_1 = require(\"./core/OpenAPI\");\nObject.defineProperty(exports, \"OpenAPI\", { enumerable: true, get: function () { return OpenAPI_1.OpenAPI; } });\nvar DefaultService_1 = require(\"./services/DefaultService\");\nObject.defineProperty(exports, \"DefaultService\", { enumerable: true, get: function () { return DefaultService_1.DefaultService; } });\nvar FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nObject.defineProperty(exports, \"FetchHttpRequest\", { enumerable: true, get: function () { return FetchHttpRequest_1.FetchHttpRequest; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseHttpRequest = void 0;\nclass BaseHttpRequest {\n constructor(config) {\n this.config = config;\n }\n}\nexports.BaseHttpRequest = BaseHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApiError = void 0;\nclass ApiError extends Error {\n constructor(request, response, message) {\n super(message);\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\nexports.ApiError = ApiError;\n","\"use strict\";\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CancelablePromise_isResolved, _CancelablePromise_isRejected, _CancelablePromise_isCancelled, _CancelablePromise_cancelHandlers, _CancelablePromise_promise, _CancelablePromise_resolve, _CancelablePromise_reject;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancelablePromise = exports.CancelError = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nclass CancelError extends Error {\n constructor(message) {\n super(message);\n this.name = 'CancelError';\n }\n get isCancelled() {\n return true;\n }\n}\nexports.CancelError = CancelError;\nclass CancelablePromise {\n constructor(executor) {\n _CancelablePromise_isResolved.set(this, void 0);\n _CancelablePromise_isRejected.set(this, void 0);\n _CancelablePromise_isCancelled.set(this, void 0);\n _CancelablePromise_cancelHandlers.set(this, void 0);\n _CancelablePromise_promise.set(this, void 0);\n _CancelablePromise_resolve.set(this, void 0);\n _CancelablePromise_reject.set(this, void 0);\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, false, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_cancelHandlers, [], \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_promise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _CancelablePromise_resolve, resolve, \"f\");\n __classPrivateFieldSet(this, _CancelablePromise_reject, reject, \"f\");\n const onResolve = (value) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isResolved, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_resolve, \"f\").call(this, value);\n };\n const onReject = (reason) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isRejected, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, reason);\n };\n const onCancel = (cancelHandler) => {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").push(cancelHandler);\n };\n Object.defineProperty(onCancel, 'isResolved', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\"),\n });\n Object.defineProperty(onCancel, 'isRejected', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\"),\n });\n Object.defineProperty(onCancel, 'isCancelled', {\n get: () => __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\"),\n });\n return executor(onResolve, onReject, onCancel);\n }), \"f\");\n }\n get [(_CancelablePromise_isResolved = new WeakMap(), _CancelablePromise_isRejected = new WeakMap(), _CancelablePromise_isCancelled = new WeakMap(), _CancelablePromise_cancelHandlers = new WeakMap(), _CancelablePromise_promise = new WeakMap(), _CancelablePromise_resolve = new WeakMap(), _CancelablePromise_reject = new WeakMap(), Symbol.toStringTag)]() {\n return \"Cancellable Promise\";\n }\n then(onFulfilled, onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").then(onFulfilled, onRejected);\n }\n catch(onRejected) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").catch(onRejected);\n }\n finally(onFinally) {\n return __classPrivateFieldGet(this, _CancelablePromise_promise, \"f\").finally(onFinally);\n }\n cancel() {\n if (__classPrivateFieldGet(this, _CancelablePromise_isResolved, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isRejected, \"f\") || __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CancelablePromise_isCancelled, true, \"f\");\n if (__classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length) {\n try {\n for (const cancelHandler of __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\")) {\n cancelHandler();\n }\n }\n catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n __classPrivateFieldGet(this, _CancelablePromise_cancelHandlers, \"f\").length = 0;\n if (__classPrivateFieldGet(this, _CancelablePromise_reject, \"f\"))\n __classPrivateFieldGet(this, _CancelablePromise_reject, \"f\").call(this, new CancelError('Request aborted'));\n }\n get isCancelled() {\n return __classPrivateFieldGet(this, _CancelablePromise_isCancelled, \"f\");\n }\n}\nexports.CancelablePromise = CancelablePromise;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.request = exports.catchErrorCodes = exports.getResponseBody = exports.getResponseHeader = exports.sendRequest = exports.getRequestBody = exports.getHeaders = exports.resolve = exports.getFormData = exports.getQueryString = exports.base64 = exports.isFormData = exports.isBlob = exports.isStringWithValue = exports.isString = exports.isDefined = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nconst ApiError_1 = require(\"./ApiError\");\nconst CancelablePromise_1 = require(\"./CancelablePromise\");\nconst isDefined = (value) => {\n return value !== undefined && value !== null;\n};\nexports.isDefined = isDefined;\nconst isString = (value) => {\n return typeof value === 'string';\n};\nexports.isString = isString;\nconst isStringWithValue = (value) => {\n return (0, exports.isString)(value) && value !== '';\n};\nexports.isStringWithValue = isStringWithValue;\nconst isBlob = (value) => {\n return (typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag]));\n};\nexports.isBlob = isBlob;\nconst isFormData = (value) => {\n return value instanceof FormData;\n};\nexports.isFormData = isFormData;\nconst base64 = (str) => {\n try {\n return btoa(str);\n }\n catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\nexports.base64 = base64;\nconst getQueryString = (params) => {\n const qs = [];\n const append = (key, value) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n const process = (key, value) => {\n if ((0, exports.isDefined)(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n }\n else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n }\n else {\n append(key, value);\n }\n }\n };\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n return '';\n};\nexports.getQueryString = getQueryString;\nconst getUrl = (config, options) => {\n const encoder = config.ENCODE_PATH || encodeURI;\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring, group) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${(0, exports.getQueryString)(options.query)}`;\n }\n return url;\n};\nconst getFormData = (options) => {\n if (options.formData) {\n const formData = new FormData();\n const process = (key, value) => {\n if ((0, exports.isString)(value) || (0, exports.isBlob)(value)) {\n formData.append(key, value);\n }\n else {\n formData.append(key, JSON.stringify(value));\n }\n };\n Object.entries(options.formData)\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n }\n else {\n process(key, value);\n }\n });\n return formData;\n }\n return undefined;\n};\nexports.getFormData = getFormData;\nconst resolve = async (options, resolver) => {\n if (typeof resolver === 'function') {\n return resolver(options);\n }\n return resolver;\n};\nexports.resolve = resolve;\nconst getHeaders = async (config, options) => {\n const [token, username, password, additionalHeaders] = await Promise.all([\n (0, exports.resolve)(options, config.TOKEN),\n (0, exports.resolve)(options, config.USERNAME),\n (0, exports.resolve)(options, config.PASSWORD),\n (0, exports.resolve)(options, config.HEADERS),\n ]);\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n })\n .filter(([_, value]) => (0, exports.isDefined)(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {});\n if ((0, exports.isStringWithValue)(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n if ((0, exports.isStringWithValue)(username) && (0, exports.isStringWithValue)(password)) {\n const credentials = (0, exports.base64)(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n if (options.body !== undefined) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n }\n else if ((0, exports.isBlob)(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n }\n else if ((0, exports.isString)(options.body)) {\n headers['Content-Type'] = 'text/plain';\n }\n else if (!(0, exports.isFormData)(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n return new Headers(headers);\n};\nexports.getHeaders = getHeaders;\nconst getRequestBody = (options) => {\n if (options.body !== undefined) {\n if (options.mediaType?.includes('/json')) {\n return JSON.stringify(options.body);\n }\n else if ((0, exports.isString)(options.body) || (0, exports.isBlob)(options.body) || (0, exports.isFormData)(options.body)) {\n return options.body;\n }\n else {\n return JSON.stringify(options.body);\n }\n }\n return undefined;\n};\nexports.getRequestBody = getRequestBody;\nconst sendRequest = async (config, options, url, body, formData, headers, onCancel) => {\n const controller = new AbortController();\n const request = {\n headers,\n body: body ?? formData,\n method: options.method,\n signal: controller.signal,\n };\n if (config.WITH_CREDENTIALS) {\n request.credentials = config.CREDENTIALS;\n }\n onCancel(() => controller.abort());\n return await fetch(url, request);\n};\nexports.sendRequest = sendRequest;\nconst getResponseHeader = (response, responseHeader) => {\n if (responseHeader) {\n const content = response.headers.get(responseHeader);\n if ((0, exports.isString)(content)) {\n return content;\n }\n }\n return undefined;\n};\nexports.getResponseHeader = getResponseHeader;\nconst getResponseBody = async (response) => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type');\n if (contentType) {\n const jsonTypes = ['application/json', 'application/problem+json'];\n const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));\n if (isJSON) {\n return await response.json();\n }\n else {\n return await response.text();\n }\n }\n }\n catch (error) {\n console.error(error);\n }\n }\n return undefined;\n};\nexports.getResponseBody = getResponseBody;\nconst catchErrorCodes = (options, result) => {\n const errors = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n };\n const error = errors[result.status];\n if (error) {\n throw new ApiError_1.ApiError(options, result, error);\n }\n if (!result.ok) {\n const errorStatus = result.status ?? 'unknown';\n const errorStatusText = result.statusText ?? 'unknown';\n const errorBody = (() => {\n try {\n return JSON.stringify(result.body, null, 2);\n }\n catch (e) {\n return undefined;\n }\n })();\n throw new ApiError_1.ApiError(options, result, `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`);\n }\n};\nexports.catchErrorCodes = catchErrorCodes;\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\nconst request = (config, options) => {\n return new CancelablePromise_1.CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = (0, exports.getFormData)(options);\n const body = (0, exports.getRequestBody)(options);\n const headers = await (0, exports.getHeaders)(config, options);\n if (!onCancel.isCancelled) {\n const response = await (0, exports.sendRequest)(config, options, url, body, formData, headers, onCancel);\n const responseBody = await (0, exports.getResponseBody)(response);\n const responseHeader = (0, exports.getResponseHeader)(response, options.responseHeader);\n const result = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n (0, exports.catchErrorCodes)(options, result);\n resolve(result.body);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n};\nexports.request = request;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = void 0;\nconst BaseHttpRequest_1 = require(\"./BaseHttpRequest\");\nconst request_1 = require(\"./request\");\nclass FetchHttpRequest extends BaseHttpRequest_1.BaseHttpRequest {\n constructor(config) {\n super(config);\n }\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\n request(options) {\n return (0, request_1.request)(this.config, options);\n }\n}\nexports.FetchHttpRequest = FetchHttpRequest;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultService = void 0;\nclass DefaultService {\n constructor(httpRequest) {\n this.httpRequest = httpRequest;\n }\n /**\n * GetVersion - Fetches the version of Yagna\n * @returns any Yagna Version Response\n * @throws ApiError\n */\n getVersion() {\n return this.httpRequest.request({\n method: 'GET',\n url: '/version/get',\n errors: {\n 400: `(400) Bad request`,\n 401: `(401) Authorization information is missing or invalid.`,\n },\n });\n }\n}\nexports.DefaultService = DefaultService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = void 0;\nconst FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nconst DefaultService_1 = require(\"./services/DefaultService\");\nclass Client {\n constructor(config, HttpRequest = FetchHttpRequest_1.FetchHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? '',\n VERSION: config?.VERSION ?? '0.1.0',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n this.default = new DefaultService_1.DefaultService(this.request);\n }\n}\nexports.Client = Client;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPI = void 0;\nexports.OpenAPI = {\n BASE: '',\n VERSION: '0.1.0',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpRequest = exports.DefaultService = exports.OpenAPI = exports.CancelError = exports.CancelablePromise = exports.BaseHttpRequest = exports.ApiError = exports.Client = void 0;\n/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nvar Client_1 = require(\"./Client\");\nObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return Client_1.Client; } });\nvar ApiError_1 = require(\"./core/ApiError\");\nObject.defineProperty(exports, \"ApiError\", { enumerable: true, get: function () { return ApiError_1.ApiError; } });\nvar BaseHttpRequest_1 = require(\"./core/BaseHttpRequest\");\nObject.defineProperty(exports, \"BaseHttpRequest\", { enumerable: true, get: function () { return BaseHttpRequest_1.BaseHttpRequest; } });\nvar CancelablePromise_1 = require(\"./core/CancelablePromise\");\nObject.defineProperty(exports, \"CancelablePromise\", { enumerable: true, get: function () { return CancelablePromise_1.CancelablePromise; } });\nObject.defineProperty(exports, \"CancelError\", { enumerable: true, get: function () { return CancelablePromise_1.CancelError; } });\nvar OpenAPI_1 = require(\"./core/OpenAPI\");\nObject.defineProperty(exports, \"OpenAPI\", { enumerable: true, get: function () { return OpenAPI_1.OpenAPI; } });\nvar DefaultService_1 = require(\"./services/DefaultService\");\nObject.defineProperty(exports, \"DefaultService\", { enumerable: true, get: function () { return DefaultService_1.DefaultService; } });\nvar FetchHttpRequest_1 = require(\"./core/FetchHttpRequest\");\nObject.defineProperty(exports, \"FetchHttpRequest\", { enumerable: true, get: function () { return FetchHttpRequest_1.FetchHttpRequest; } });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VersionApi = exports.IdentityApi = exports.GsbApi = exports.NetApi = exports.PaymentApi = exports.ActivityApi = exports.MarketApi = void 0;\nexports.MarketApi = __importStar(require(\"./market-api\"));\nexports.ActivityApi = __importStar(require(\"./activity-api\"));\nexports.PaymentApi = __importStar(require(\"./payment-api\"));\nexports.NetApi = __importStar(require(\"./net-api\"));\nexports.GsbApi = __importStar(require(\"./gsb-api\"));\nexports.IdentityApi = __importStar(require(\"./identity\"));\nexports.VersionApi = __importStar(require(\"./version\"));\n","import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n var uuid = unsafeStringify(arr, offset);\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n return getRandomValues(rnds8);\n}","var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n offset = offset || 0;\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;","class LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n//# sourceMappingURL=args.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n return from(args, scheduler);\n}\n//# sourceMappingURL=of.js.map","import { createErrorClass } from './createErrorClass';\nexport var EmptyError = createErrorClass(function (_super) { return function EmptyErrorImpl() {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n}; });\n//# sourceMappingURL=EmptyError.js.map","import { EmptyError } from './util/EmptyError';\nexport function lastValueFrom(source, config) {\n var hasConfig = typeof config === 'object';\n return new Promise(function (resolve, reject) {\n var _hasValue = false;\n var _value;\n source.subscribe({\n next: function (value) {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: function () {\n if (_hasValue) {\n resolve(_value);\n }\n else if (hasConfig) {\n resolve(config.defaultValue);\n }\n else {\n reject(new EmptyError());\n }\n },\n });\n });\n}\n//# sourceMappingURL=lastValueFrom.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","var isArray = Array.isArray;\nexport function argsOrArgArray(args) {\n return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n//# sourceMappingURL=argsOrArgArray.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); }));\n });\n}\n//# sourceMappingURL=filter.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\nexport function catchError(selector) {\n return operate(function (source, subscriber) {\n var innerSub = null;\n var syncUnsub = false;\n var handledResult;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, function (err) {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n else {\n syncUnsub = true;\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n });\n}\n//# sourceMappingURL=catchError.js.map","import { scanInternals } from './scanInternals';\nimport { operate } from '../util/lift';\nexport function reduce(accumulator, seed) {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, false, true));\n}\n//# sourceMappingURL=reduce.js.map","import { createOperatorSubscriber } from './OperatorSubscriber';\nexport function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) {\n return function (source, subscriber) {\n var hasState = hasSeed;\n var state = seed;\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var i = index++;\n state = hasState\n ?\n accumulator(state, value, i)\n :\n ((hasState = true), value);\n emitOnNext && subscriber.next(state);\n }, emitBeforeComplete &&\n (function () {\n hasState && subscriber.next(state);\n subscriber.complete();\n })));\n };\n}\n//# sourceMappingURL=scanInternals.js.map","import { reduce } from './reduce';\nimport { operate } from '../util/lift';\nvar arrReducer = function (arr, value) { return (arr.push(value), arr); };\nexport function toArray() {\n return operate(function (source, subscriber) {\n reduce(arrReducer, [])(source).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=toArray.js.map","import { operate } from '../util/lift';\nexport function finalize(callback) {\n return operate(function (source, subscriber) {\n try {\n source.subscribe(subscriber);\n }\n finally {\n subscriber.add(callback);\n }\n });\n}\n//# sourceMappingURL=finalize.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { operate } from '../util/lift';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { mergeAll } from './mergeAll';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from '../observable/from';\nexport function merge() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var concurrent = popNumber(args, Infinity);\n args = argsOrArgArray(args);\n return operate(function (source, subscriber) {\n mergeAll(concurrent)(from(__spreadArray([source], __read(args)), scheduler)).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=merge.js.map","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n return mergeMap(identity, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n return operate(function (source, subscriber) {\n var innerSubscriber = null;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n var innerIndex = 0;\n var outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {\n innerSubscriber = null;\n checkComplete();\n })));\n }, function () {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n//# sourceMappingURL=switchMap.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n return operate(function (source, subscriber) {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function () { return subscriber.complete(); }, noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n//# sourceMappingURL=takeUntil.js.map","import { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nexport function tap(observerOrNext, error, complete) {\n var tapObserver = isFunction(observerOrNext) || error || complete\n ?\n { next: observerOrNext, error: error, complete: complete }\n : observerOrNext;\n return tapObserver\n ? operate(function (source, subscriber) {\n var _a;\n (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n var isUnsub = true;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var _a;\n (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);\n subscriber.next(value);\n }, function () {\n var _a;\n isUnsub = false;\n (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n subscriber.complete();\n }, function (err) {\n var _a;\n isUnsub = false;\n (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);\n subscriber.error(err);\n }, function () {\n var _a, _b;\n if (isUnsub) {\n (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n }\n (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);\n }));\n })\n :\n identity;\n}\n//# sourceMappingURL=tap.js.map",null,null,"var parse = require('url').parse\nvar events = require('events')\nvar https = require('https')\nvar http = require('http')\nvar util = require('util')\n\nvar httpsOptions = [\n 'pfx', 'key', 'passphrase', 'cert', 'ca', 'ciphers',\n 'rejectUnauthorized', 'secureProtocol', 'servername', 'checkServerIdentity'\n]\n\nvar bom = [239, 187, 191]\nvar colon = 58\nvar space = 32\nvar lineFeed = 10\nvar carriageReturn = 13\n// Beyond 256KB we could not observe any gain in performance\nvar maxBufferAheadAllocation = 1024 * 256\n// Headers matching the pattern should be removed when redirecting to different origin\nvar reUnsafeHeader = /^(cookie|authorization)$/i\n\nfunction hasBom (buf) {\n return bom.every(function (charCode, index) {\n return buf[index] === charCode\n })\n}\n\n/**\n * Creates a new EventSource object\n *\n * @param {String} url the URL to which to connect\n * @param {Object} [eventSourceInitDict] extra init params. See README for details.\n * @api public\n **/\nfunction EventSource (url, eventSourceInitDict) {\n var readyState = EventSource.CONNECTING\n var headers = eventSourceInitDict && eventSourceInitDict.headers\n var hasNewOrigin = false\n Object.defineProperty(this, 'readyState', {\n get: function () {\n return readyState\n }\n })\n\n Object.defineProperty(this, 'url', {\n get: function () {\n return url\n }\n })\n\n var self = this\n self.reconnectInterval = 1000\n self.connectionInProgress = false\n\n function onConnectionClosed (message) {\n if (readyState === EventSource.CLOSED) return\n readyState = EventSource.CONNECTING\n _emit('error', new Event('error', {message: message}))\n\n // The url may have been changed by a temporary redirect. If that's the case,\n // revert it now, and flag that we are no longer pointing to a new origin\n if (reconnectUrl) {\n url = reconnectUrl\n reconnectUrl = null\n hasNewOrigin = false\n }\n setTimeout(function () {\n if (readyState !== EventSource.CONNECTING || self.connectionInProgress) {\n return\n }\n self.connectionInProgress = true\n connect()\n }, self.reconnectInterval)\n }\n\n var req\n var lastEventId = ''\n if (headers && headers['Last-Event-ID']) {\n lastEventId = headers['Last-Event-ID']\n delete headers['Last-Event-ID']\n }\n\n var discardTrailingNewline = false\n var data = ''\n var eventName = ''\n\n var reconnectUrl = null\n\n function connect () {\n var options = parse(url)\n var isSecure = options.protocol === 'https:'\n options.headers = { 'Cache-Control': 'no-cache', 'Accept': 'text/event-stream' }\n if (lastEventId) options.headers['Last-Event-ID'] = lastEventId\n if (headers) {\n var reqHeaders = hasNewOrigin ? removeUnsafeHeaders(headers) : headers\n for (var i in reqHeaders) {\n var header = reqHeaders[i]\n if (header) {\n options.headers[i] = header\n }\n }\n }\n\n // Legacy: this should be specified as `eventSourceInitDict.https.rejectUnauthorized`,\n // but for now exists as a backwards-compatibility layer\n options.rejectUnauthorized = !(eventSourceInitDict && !eventSourceInitDict.rejectUnauthorized)\n\n if (eventSourceInitDict && eventSourceInitDict.createConnection !== undefined) {\n options.createConnection = eventSourceInitDict.createConnection\n }\n\n // If specify http proxy, make the request to sent to the proxy server,\n // and include the original url in path and Host headers\n var useProxy = eventSourceInitDict && eventSourceInitDict.proxy\n if (useProxy) {\n var proxy = parse(eventSourceInitDict.proxy)\n isSecure = proxy.protocol === 'https:'\n\n options.protocol = isSecure ? 'https:' : 'http:'\n options.path = url\n options.headers.Host = options.host\n options.hostname = proxy.hostname\n options.host = proxy.host\n options.port = proxy.port\n }\n\n // If https options are specified, merge them into the request options\n if (eventSourceInitDict && eventSourceInitDict.https) {\n for (var optName in eventSourceInitDict.https) {\n if (httpsOptions.indexOf(optName) === -1) {\n continue\n }\n\n var option = eventSourceInitDict.https[optName]\n if (option !== undefined) {\n options[optName] = option\n }\n }\n }\n\n // Pass this on to the XHR\n if (eventSourceInitDict && eventSourceInitDict.withCredentials !== undefined) {\n options.withCredentials = eventSourceInitDict.withCredentials\n }\n\n req = (isSecure ? https : http).request(options, function (res) {\n self.connectionInProgress = false\n // Handle HTTP errors\n if (res.statusCode === 500 || res.statusCode === 502 || res.statusCode === 503 || res.statusCode === 504) {\n _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage}))\n onConnectionClosed()\n return\n }\n\n // Handle HTTP redirects\n if (res.statusCode === 301 || res.statusCode === 302 || res.statusCode === 307) {\n var location = res.headers.location\n if (!location) {\n // Server sent redirect response without Location header.\n _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage}))\n return\n }\n var prevOrigin = new URL(url).origin\n var nextOrigin = new URL(location).origin\n hasNewOrigin = prevOrigin !== nextOrigin\n if (res.statusCode === 307) reconnectUrl = url\n url = location\n process.nextTick(connect)\n return\n }\n\n if (res.statusCode !== 200) {\n _emit('error', new Event('error', {status: res.statusCode, message: res.statusMessage}))\n return self.close()\n }\n\n readyState = EventSource.OPEN\n res.on('close', function () {\n res.removeAllListeners('close')\n res.removeAllListeners('end')\n onConnectionClosed()\n })\n\n res.on('end', function () {\n res.removeAllListeners('close')\n res.removeAllListeners('end')\n onConnectionClosed()\n })\n _emit('open', new Event('open'))\n\n // text/event-stream parser adapted from webkit's\n // Source/WebCore/page/EventSource.cpp\n var buf\n var newBuffer\n var startingPos = 0\n var startingFieldLength = -1\n var newBufferSize = 0\n var bytesUsed = 0\n\n res.on('data', function (chunk) {\n if (!buf) {\n buf = chunk\n if (hasBom(buf)) {\n buf = buf.slice(bom.length)\n }\n bytesUsed = buf.length\n } else {\n if (chunk.length > buf.length - bytesUsed) {\n newBufferSize = (buf.length * 2) + chunk.length\n if (newBufferSize > maxBufferAheadAllocation) {\n newBufferSize = buf.length + chunk.length + maxBufferAheadAllocation\n }\n newBuffer = Buffer.alloc(newBufferSize)\n buf.copy(newBuffer, 0, 0, bytesUsed)\n buf = newBuffer\n }\n chunk.copy(buf, bytesUsed)\n bytesUsed += chunk.length\n }\n\n var pos = 0\n var length = bytesUsed\n\n while (pos < length) {\n if (discardTrailingNewline) {\n if (buf[pos] === lineFeed) {\n ++pos\n }\n discardTrailingNewline = false\n }\n\n var lineLength = -1\n var fieldLength = startingFieldLength\n var c\n\n for (var i = startingPos; lineLength < 0 && i < length; ++i) {\n c = buf[i]\n if (c === colon) {\n if (fieldLength < 0) {\n fieldLength = i - pos\n }\n } else if (c === carriageReturn) {\n discardTrailingNewline = true\n lineLength = i - pos\n } else if (c === lineFeed) {\n lineLength = i - pos\n }\n }\n\n if (lineLength < 0) {\n startingPos = length - pos\n startingFieldLength = fieldLength\n break\n } else {\n startingPos = 0\n startingFieldLength = -1\n }\n\n parseEventStreamLine(buf, pos, fieldLength, lineLength)\n\n pos += lineLength + 1\n }\n\n if (pos === length) {\n buf = void 0\n bytesUsed = 0\n } else if (pos > 0) {\n buf = buf.slice(pos, bytesUsed)\n bytesUsed = buf.length\n }\n })\n })\n\n req.on('error', function (err) {\n self.connectionInProgress = false\n onConnectionClosed(err.message)\n })\n\n if (req.setNoDelay) req.setNoDelay(true)\n req.end()\n }\n\n connect()\n\n function _emit () {\n if (self.listeners(arguments[0]).length > 0) {\n self.emit.apply(self, arguments)\n }\n }\n\n this._close = function () {\n if (readyState === EventSource.CLOSED) return\n readyState = EventSource.CLOSED\n if (req.abort) req.abort()\n if (req.xhr && req.xhr.abort) req.xhr.abort()\n }\n\n function parseEventStreamLine (buf, pos, fieldLength, lineLength) {\n if (lineLength === 0) {\n if (data.length > 0) {\n var type = eventName || 'message'\n _emit(type, new MessageEvent(type, {\n data: data.slice(0, -1), // remove trailing newline\n lastEventId: lastEventId,\n origin: new URL(url).origin\n }))\n data = ''\n }\n eventName = void 0\n } else if (fieldLength > 0) {\n var noValue = fieldLength < 0\n var step = 0\n var field = buf.slice(pos, pos + (noValue ? lineLength : fieldLength)).toString()\n\n if (noValue) {\n step = lineLength\n } else if (buf[pos + fieldLength + 1] !== space) {\n step = fieldLength + 1\n } else {\n step = fieldLength + 2\n }\n pos += step\n\n var valueLength = lineLength - step\n var value = buf.slice(pos, pos + valueLength).toString()\n\n if (field === 'data') {\n data += value + '\\n'\n } else if (field === 'event') {\n eventName = value\n } else if (field === 'id') {\n lastEventId = value\n } else if (field === 'retry') {\n var retry = parseInt(value, 10)\n if (!Number.isNaN(retry)) {\n self.reconnectInterval = retry\n }\n }\n }\n }\n}\n\nmodule.exports = EventSource\n\nutil.inherits(EventSource, events.EventEmitter)\nEventSource.prototype.constructor = EventSource; // make stacktraces readable\n\n['open', 'error', 'message'].forEach(function (method) {\n Object.defineProperty(EventSource.prototype, 'on' + method, {\n /**\n * Returns the current listener\n *\n * @return {Mixed} the set function or undefined\n * @api private\n */\n get: function get () {\n var listener = this.listeners(method)[0]\n return listener ? (listener._listener ? listener._listener : listener) : undefined\n },\n\n /**\n * Start listening for events\n *\n * @param {Function} listener the listener\n * @return {Mixed} the set function or undefined\n * @api private\n */\n set: function set (listener) {\n this.removeAllListeners(method)\n this.addEventListener(method, listener)\n }\n })\n})\n\n/**\n * Ready states\n */\nObject.defineProperty(EventSource, 'CONNECTING', {enumerable: true, value: 0})\nObject.defineProperty(EventSource, 'OPEN', {enumerable: true, value: 1})\nObject.defineProperty(EventSource, 'CLOSED', {enumerable: true, value: 2})\n\nEventSource.prototype.CONNECTING = 0\nEventSource.prototype.OPEN = 1\nEventSource.prototype.CLOSED = 2\n\n/**\n * Closes the connection, if one is made, and sets the readyState attribute to 2 (closed)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/close\n * @api public\n */\nEventSource.prototype.close = function () {\n this._close()\n}\n\n/**\n * Emulates the W3C Browser based WebSocket interface using addEventListener.\n *\n * @param {String} type A string representing the event type to listen out for\n * @param {Function} listener callback\n * @see https://developer.mozilla.org/en/DOM/element.addEventListener\n * @see http://dev.w3.org/html5/websockets/#the-websocket-interface\n * @api public\n */\nEventSource.prototype.addEventListener = function addEventListener (type, listener) {\n if (typeof listener === 'function') {\n // store a reference so we can return the original function again\n listener._listener = listener\n this.on(type, listener)\n }\n}\n\n/**\n * Emulates the W3C Browser based WebSocket interface using dispatchEvent.\n *\n * @param {Event} event An event to be dispatched\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent\n * @api public\n */\nEventSource.prototype.dispatchEvent = function dispatchEvent (event) {\n if (!event.type) {\n throw new Error('UNSPECIFIED_EVENT_TYPE_ERR')\n }\n // if event is instance of an CustomEvent (or has 'details' property),\n // send the detail object as the payload for the event\n this.emit(event.type, event.detail)\n}\n\n/**\n * Emulates the W3C Browser based WebSocket interface using removeEventListener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {Function} listener callback\n * @see https://developer.mozilla.org/en/DOM/element.removeEventListener\n * @see http://dev.w3.org/html5/websockets/#the-websocket-interface\n * @api public\n */\nEventSource.prototype.removeEventListener = function removeEventListener (type, listener) {\n if (typeof listener === 'function') {\n listener._listener = undefined\n this.removeListener(type, listener)\n }\n}\n\n/**\n * W3C Event\n *\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-Event\n * @api private\n */\nfunction Event (type, optionalProperties) {\n Object.defineProperty(this, 'type', { writable: false, value: type, enumerable: true })\n if (optionalProperties) {\n for (var f in optionalProperties) {\n if (optionalProperties.hasOwnProperty(f)) {\n Object.defineProperty(this, f, { writable: false, value: optionalProperties[f], enumerable: true })\n }\n }\n }\n}\n\n/**\n * W3C MessageEvent\n *\n * @see http://www.w3.org/TR/webmessaging/#event-definitions\n * @api private\n */\nfunction MessageEvent (type, eventInitDict) {\n Object.defineProperty(this, 'type', { writable: false, value: type, enumerable: true })\n for (var f in eventInitDict) {\n if (eventInitDict.hasOwnProperty(f)) {\n Object.defineProperty(this, f, { writable: false, value: eventInitDict[f], enumerable: true })\n }\n }\n}\n\n/**\n * Returns a new object of headers that does not include any authorization and cookie headers\n *\n * @param {Object} headers An object of headers ({[headerName]: headerValue})\n * @return {Object} a new object of headers\n * @api private\n */\nfunction removeUnsafeHeaders (headers) {\n var safe = {}\n for (var key in headers) {\n if (reUnsafeHeader.test(key)) {\n continue\n }\n\n safe[key] = headers[key]\n }\n\n return safe\n}\n",null,null,null,null,"import { __read, __spreadArray } from \"tslib\";\nimport { merge } from './merge';\nexport function mergeWith() {\n var otherSources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n otherSources[_i] = arguments[_i];\n }\n return merge.apply(void 0, __spreadArray([], __read(otherSources)));\n}\n//# sourceMappingURL=mergeWith.js.map",null,null,null,null,null,null,"'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n",null,null,null,"'use strict';\n\nvar AsyncLock = function (opts) {\n\topts = opts || {};\n\n\tthis.Promise = opts.Promise || Promise;\n\n\t// format: {key : [fn, fn]}\n\t// queues[key] = null indicates no job running for key\n\tthis.queues = Object.create(null);\n\n\t// lock is reentrant for same domain\n\tthis.domainReentrant = opts.domainReentrant || false;\n\tif (this.domainReentrant) {\n\t\tif (typeof process === 'undefined' || typeof process.domain === 'undefined') {\n\t\t\tthrow new Error(\n\t\t\t\t'Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, ' +\n\t\t\t\t'use a NodeJS version that still implements Domain, or install a browser polyfill.');\n\t\t}\n\t\t// domain of current running func {key : fn}\n\t\tthis.domains = Object.create(null);\n\t}\n\n\tthis.timeout = opts.timeout || AsyncLock.DEFAULT_TIMEOUT;\n\tthis.maxOccupationTime = opts.maxOccupationTime || AsyncLock.DEFAULT_MAX_OCCUPATION_TIME;\n\tthis.maxExecutionTime = opts.maxExecutionTime || AsyncLock.DEFAULT_MAX_EXECUTION_TIME;\n\tif (opts.maxPending === Infinity || (Number.isInteger(opts.maxPending) && opts.maxPending >= 0)) {\n\t\tthis.maxPending = opts.maxPending;\n\t} else {\n\t\tthis.maxPending = AsyncLock.DEFAULT_MAX_PENDING;\n\t}\n};\n\nAsyncLock.DEFAULT_TIMEOUT = 0; //Never\nAsyncLock.DEFAULT_MAX_OCCUPATION_TIME = 0; //Never\nAsyncLock.DEFAULT_MAX_EXECUTION_TIME = 0; //Never\nAsyncLock.DEFAULT_MAX_PENDING = 1000;\n\n/**\n * Acquire Locks\n *\n * @param {String|Array} key \tresource key or keys to lock\n * @param {function} fn \tasync function\n * @param {function} cb \tcallback function, otherwise will return a promise\n * @param {Object} opts \toptions\n */\nAsyncLock.prototype.acquire = function (key, fn, cb, opts) {\n\tif (Array.isArray(key)) {\n\t\treturn this._acquireBatch(key, fn, cb, opts);\n\t}\n\n\tif (typeof (fn) !== 'function') {\n\t\tthrow new Error('You must pass a function to execute');\n\t}\n\n\t// faux-deferred promise using new Promise() (as Promise.defer is deprecated)\n\tvar deferredResolve = null;\n\tvar deferredReject = null;\n\tvar deferred = null;\n\n\tif (typeof (cb) !== 'function') {\n\t\topts = cb;\n\t\tcb = null;\n\n\t\t// will return a promise\n\t\tdeferred = new this.Promise(function(resolve, reject) {\n\t\t\tdeferredResolve = resolve;\n\t\t\tdeferredReject = reject;\n\t\t});\n\t}\n\n\topts = opts || {};\n\n\tvar resolved = false;\n\tvar timer = null;\n\tvar occupationTimer = null;\n\tvar executionTimer = null;\n\tvar self = this;\n\n\tvar done = function (locked, err, ret) {\n\n\t\tif (occupationTimer) {\n\t\t\tclearTimeout(occupationTimer);\n\t\t\toccupationTimer = null;\n\t\t}\n\n\t\tif (executionTimer) {\n\t\t\tclearTimeout(executionTimer);\n\t\t\texecutionTimer = null;\n\t\t}\n\n\t\tif (locked) {\n\t\t\tif (!!self.queues[key] && self.queues[key].length === 0) {\n\t\t\t\tdelete self.queues[key];\n\t\t\t}\n\t\t\tif (self.domainReentrant) {\n\t\t\t\tdelete self.domains[key];\n\t\t\t}\n\t\t}\n\n\t\tif (!resolved) {\n\t\t\tif (!deferred) {\n\t\t\t\tif (typeof (cb) === 'function') {\n\t\t\t\t\tcb(err, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t//promise mode\n\t\t\t\tif (err) {\n\t\t\t\t\tdeferredReject(err);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdeferredResolve(ret);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolved = true;\n\t\t}\n\n\t\tif (locked) {\n\t\t\t//run next func\n\t\t\tif (!!self.queues[key] && self.queues[key].length > 0) {\n\t\t\t\tself.queues[key].shift()();\n\t\t\t}\n\t\t}\n\t};\n\n\tvar exec = function (locked) {\n\t\tif (resolved) { // may due to timed out\n\t\t\treturn done(locked);\n\t\t}\n\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\n\t\tif (self.domainReentrant && locked) {\n\t\t\tself.domains[key] = process.domain;\n\t\t}\n\n\t\tvar maxExecutionTime = opts.maxExecutionTime || self.maxExecutionTime;\n\t\tif (maxExecutionTime) {\n\t\t\texecutionTimer = setTimeout(function () {\n\t\t\t\tif (!!self.queues[key]) {\n\t\t\t\t\tdone(locked, new Error('Maximum execution time is exceeded ' + key));\n\t\t\t\t}\n\t\t\t}, maxExecutionTime);\n\t\t}\n\n\t\t// Callback mode\n\t\tif (fn.length === 1) {\n\t\t\tvar called = false;\n\t\t\ttry {\n\t\t\t\tfn(function (err, ret) {\n\t\t\t\t\tif (!called) {\n\t\t\t\t\t\tcalled = true;\n\t\t\t\t\t\tdone(locked, err, ret);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\t// catching error thrown in user function fn\n\t\t\t\tif (!called) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tdone(locked, err);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Promise mode\n\t\t\tself._promiseTry(function () {\n\t\t\t\treturn fn();\n\t\t\t})\n\t\t\t.then(function(ret){\n\t\t\t\tdone(locked, undefined, ret);\n\t\t\t}, function(error){\n\t\t\t\tdone(locked, error);\n\t\t\t});\n\t\t}\n\t};\n\n\tif (self.domainReentrant && !!process.domain) {\n\t\texec = process.domain.bind(exec);\n\t}\n\n\tvar maxPending = opts.maxPending || self.maxPending;\n\n\tif (!self.queues[key]) {\n\t\tself.queues[key] = [];\n\t\texec(true);\n\t}\n\telse if (self.domainReentrant && !!process.domain && process.domain === self.domains[key]) {\n\t\t// If code is in the same domain of current running task, run it directly\n\t\t// Since lock is re-enterable\n\t\texec(false);\n\t}\n\telse if (self.queues[key].length >= maxPending) {\n\t\tdone(false, new Error('Too many pending tasks in queue ' + key));\n\t}\n\telse {\n\t\tvar taskFn = function () {\n\t\t\texec(true);\n\t\t};\n\t\tif (opts.skipQueue) {\n\t\t\tself.queues[key].unshift(taskFn);\n\t\t} else {\n\t\t\tself.queues[key].push(taskFn);\n\t\t}\n\n\t\tvar timeout = opts.timeout || self.timeout;\n\t\tif (timeout) {\n\t\t\ttimer = setTimeout(function () {\n\t\t\t\ttimer = null;\n\t\t\t\tdone(false, new Error('async-lock timed out in queue ' + key));\n\t\t\t}, timeout);\n\t\t}\n\t}\n\n\tvar maxOccupationTime = opts.maxOccupationTime || self.maxOccupationTime;\n\t\tif (maxOccupationTime) {\n\t\t\toccupationTimer = setTimeout(function () {\n\t\t\t\tif (!!self.queues[key]) {\n\t\t\t\t\tdone(false, new Error('Maximum occupation time is exceeded in queue ' + key));\n\t\t\t\t}\n\t\t\t}, maxOccupationTime);\n\t\t}\n\n\tif (deferred) {\n\t\treturn deferred;\n\t}\n};\n\n/*\n * Below is how this function works:\n *\n * Equivalent code:\n * self.acquire(key1, function(cb){\n * self.acquire(key2, function(cb){\n * self.acquire(key3, fn, cb);\n * }, cb);\n * }, cb);\n *\n * Equivalent code:\n * var fn3 = getFn(key3, fn);\n * var fn2 = getFn(key2, fn3);\n * var fn1 = getFn(key1, fn2);\n * fn1(cb);\n */\nAsyncLock.prototype._acquireBatch = function (keys, fn, cb, opts) {\n\tif (typeof (cb) !== 'function') {\n\t\topts = cb;\n\t\tcb = null;\n\t}\n\n\tvar self = this;\n\tvar getFn = function (key, fn) {\n\t\treturn function (cb) {\n\t\t\tself.acquire(key, fn, cb, opts);\n\t\t};\n\t};\n\n\tvar fnx = keys.reduceRight(function (prev, key) {\n\t\treturn getFn(key, prev);\n\t}, fn);\n\n\tif (typeof (cb) === 'function') {\n\t\tfnx(cb);\n\t}\n\telse {\n\t\treturn new this.Promise(function (resolve, reject) {\n\t\t\t// check for promise mode in case keys is empty array\n\t\t\tif (fnx.length === 1) {\n\t\t\t\tfnx(function (err, ret) {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(ret);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresolve(fnx());\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\n *\tWhether there is any running or pending asyncFunc\n *\n *\t@param {String} key\n */\nAsyncLock.prototype.isBusy = function (key) {\n\tif (!key) {\n\t\treturn Object.keys(this.queues).length > 0;\n\t}\n\telse {\n\t\treturn !!this.queues[key];\n\t}\n};\n\n/**\n * Promise.try() implementation to become independent of Q-specific methods\n */\nAsyncLock.prototype._promiseTry = function(fn) {\n\ttry {\n\t\treturn this.Promise.resolve(fn());\n\t} catch (e) {\n\t\treturn this.Promise.reject(e);\n\t}\n};\n\nmodule.exports = AsyncLock;\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */\r\n;(function (globalScope) {\r\n 'use strict';\r\n\r\n\r\n /*\r\n * decimal.js-light v2.5.1\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js-light\r\n * Copyright (c) 2020 Michael Mclaughlin \r\n * MIT Expat Licence\r\n */\r\n\r\n\r\n // ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n var MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n Decimal = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed during run-time using `Decimal.config`.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,\r\n // `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -MAX_E\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to MAX_E\r\n\r\n // The natural logarithm of 10.\r\n // 115 digits\r\n LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n },\r\n\r\n\r\n // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n ONE,\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE), // 1286742750677284\r\n\r\n // Decimal.prototype object\r\n P = {};\r\n\r\n\r\n // Decimal prototype methods\r\n\r\n\r\n /*\r\n * absoluteValue abs\r\n * comparedTo cmp\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy idiv\r\n * equals eq\r\n * exponent\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * isInteger isint\r\n * isNegative isneg\r\n * isPositive ispos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * squareRoot sqrt\r\n * times mul\r\n * toDecimalPlaces todp\r\n * toExponential\r\n * toFixed\r\n * toInteger toint\r\n * toNumber\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits tosd\r\n * toString\r\n * valueOf val\r\n */\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value\r\n *\r\n */\r\n P.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this;\r\n\r\n y = new x.constructor(y);\r\n\r\n // Signs differ?\r\n if (x.s !== y.s) return x.s || -y.s;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n xdL = x.d.length;\r\n ydL = y.d.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n };\r\n\r\n\r\n /*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\n P.decimalPlaces = P.dp = function () {\r\n var x = this,\r\n w = x.d.length - 1,\r\n dp = (w - x.e) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = x.d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n return dp < 0 ? 0 : dp;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, truncated to `precision` significant digits.\r\n *\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\n P.equals = P.eq = function (y) {\r\n return !this.cmp(y);\r\n };\r\n\r\n\r\n /*\r\n * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n *\r\n */\r\n P.exponent = function () {\r\n return getBase10Exponent(this);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\n P.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\n P.greaterThanOrEqualTo = P.gte = function (y) {\r\n return this.cmp(y) >= 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\n P.isInteger = P.isint = function () {\r\n return this.e > this.d.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\n P.isNegative = P.isneg = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\n P.isPositive = P.ispos = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is 0, otherwise return false.\r\n *\r\n */\r\n P.isZero = function () {\r\n return this.s === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\n P.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\n P.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n };\r\n\r\n\r\n /*\r\n * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n * `precision` significant digits.\r\n *\r\n * If no base is specified, return log[10](x).\r\n *\r\n * log[base](x) = ln(x) / ln(base)\r\n *\r\n * The maximum error of the result is 1 ulp (unit in the last place).\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\n P.logarithm = P.log = function (base) {\r\n var r,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n wpr = pr + 5;\r\n\r\n // Default base is 10.\r\n if (base === void 0) {\r\n base = new Ctor(10);\r\n } else {\r\n base = new Ctor(base);\r\n\r\n // log[-b](x) = NaN\r\n // log[0](x) = NaN\r\n // log[1](x) = NaN\r\n if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n }\r\n\r\n // log[b](-x) = NaN\r\n // log[b](0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // log[b](1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n external = false;\r\n r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.minus = P.sub = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n y = new Ctor(y);\r\n\r\n // x % 0 = NaN\r\n if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n // Return x if x is 0.\r\n if (!x.s) return round(new Ctor(x), pr);\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n q = divide(x, y, 0, 1).times(y);\r\n external = true;\r\n\r\n return x.minus(q);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\n P.naturalExponential = P.exp = function () {\r\n return exp(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * truncated to `precision` significant digits.\r\n *\r\n */\r\n P.naturalLogarithm = P.ln = function () {\r\n return ln(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\n P.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s || 0;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.plus = P.add = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\n P.precision = P.sd = function (z) {\r\n var e, sd, w,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n e = getBase10Exponent(x) + 1;\r\n w = x.d.length - 1;\r\n sd = w * LOG_BASE + 1;\r\n w = x.d[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n }\r\n\r\n return z && e > sd ? e : sd;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var e, n, pr, r, s, t, wpr,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n // Negative or zero?\r\n if (x.s < 1) {\r\n if (!x.s) return new Ctor(0);\r\n\r\n // sqrt(-x) = NaN\r\n throw Error(decimalError + 'NaN');\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(x.d);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n pr = Ctor.precision;\r\n s = wpr = pr + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n n = n.slice(wpr - 3, wpr + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (s == wpr && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n round(t, pr + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n } else if (n != '9999') {\r\n break;\r\n }\r\n\r\n wpr += 4;\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n // Return 0 if either is 0.\r\n if (!x.s || !y.s) return new Ctor(0);\r\n\r\n y.s *= x.s;\r\n e = x.e + y.e;\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = e;\r\n\r\n return external ? round(y, Ctor.precision) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toDecimalPlaces = P.todp = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = toString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), dp + 1, rm);\r\n str = toString(x, true, dp + 1);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\n P.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) return toString(x);\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isneg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\n P.toInteger = P.toint = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this Decimal converted to a number primitive.\r\n *\r\n */\r\n P.toNumber = function () {\r\n return +this;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,\r\n * truncated to `precision` significant digits.\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * The maximum error is 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\n P.toPower = P.pow = function (y) {\r\n var e, k, pr, r, sign, yIsInt,\r\n x = this,\r\n Ctor = x.constructor,\r\n guard = 12,\r\n yn = +(y = new Ctor(y));\r\n\r\n // pow(x, 0) = 1\r\n if (!y.s) return new Ctor(ONE);\r\n\r\n x = new Ctor(x);\r\n\r\n // pow(0, y > 0) = 0\r\n // pow(0, y < 0) = Infinity\r\n if (!x.s) {\r\n if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n return x;\r\n }\r\n\r\n // pow(1, y) = 1\r\n if (x.eq(ONE)) return x;\r\n\r\n pr = Ctor.precision;\r\n\r\n // pow(x, 1) = x\r\n if (y.eq(ONE)) return round(x, pr);\r\n\r\n e = y.e;\r\n k = y.d.length - 1;\r\n yIsInt = e >= k;\r\n sign = x.s;\r\n\r\n if (!yIsInt) {\r\n\r\n // pow(x < 0, y non-integer) = NaN\r\n if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = new Ctor(ONE);\r\n\r\n // Max k of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (k % 2) {\r\n r = r.times(x);\r\n truncate(r.d, e);\r\n }\r\n\r\n k = mathfloor(k / 2);\r\n if (k === 0) break;\r\n\r\n x = x.times(x);\r\n truncate(x.d, e);\r\n }\r\n\r\n external = true;\r\n\r\n return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n }\r\n\r\n // Result is negative if x is negative and the last digit of integer y is odd.\r\n sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n x.s = 1;\r\n external = false;\r\n r = y.times(ln(x, pr + guard));\r\n external = true;\r\n r = exp(r);\r\n r.s = sign;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n var e, str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n e = getBase10Exponent(x);\r\n str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), sd, rm);\r\n e = getBase10Exponent(x);\r\n str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toSignificantDigits = P.tosd = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return round(new Ctor(x), sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\n P.toString = P.valueOf = P.val = P.toJSON = function () {\r\n var x = this,\r\n e = getBase10Exponent(x),\r\n Ctor = x.constructor;\r\n\r\n return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n };\r\n\r\n\r\n // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n /*\r\n * add P.minus, P.plus\r\n * checkInt32 P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n * digitsToString P.log, P.sqrt, P.pow, toString, exp, ln\r\n * divide P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n * exp P.exp, P.pow\r\n * getBase10Exponent P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n * P.toString, divide, round, toString, exp, ln\r\n * getLn10 P.log, ln\r\n * getZeroString digitsToString, toString\r\n * ln P.log, P.ln, P.pow, exp\r\n * parseDecimal Decimal\r\n * round P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n * P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n * divide, getLn10, exp, ln\r\n * subtract P.minus, P.plus\r\n * toString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n * truncate P.pow\r\n *\r\n * Throws: P.log, P.mod, P.sd, P.sqrt, P.pow, checkInt32, divide, round,\r\n * getLn10, exp, ln, parseDecimal, Decimal, config\r\n */\r\n\r\n\r\n function add(x, y) {\r\n var carry, d, e, i, k, len, xd, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // If either is zero...\r\n if (!x.s || !y.s) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!y.s) y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n k = x.e;\r\n e = y.e;\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n }\r\n\r\n\r\n function digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n }\r\n\r\n\r\n var divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % BASE | 0;\r\n carry = temp / BASE | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * BASE + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, dp) {\r\n var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either 0?\r\n if (!x.s) return new Ctor(x);\r\n if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n e = x.e - y.e;\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n } else if (dp) {\r\n sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) return new Ctor(0);\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / LOG_BASE + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * BASE + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n k = BASE / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k);\r\n xd = multiplyInteger(xd, k);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= BASE) k = BASE - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n\r\n q.e = e;\r\n\r\n return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`\r\n * significant digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n */\r\n function exp(x, sd) {\r\n var denominator, guard, pow, sum, t, wpr,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n // exp(0) = 1\r\n if (!x.s) return new Ctor(ONE);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n while (x.abs().gte(0.1)) {\r\n x = x.times(t); // x = x / 2^5\r\n k += 5;\r\n }\r\n\r\n // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(ONE);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = round(pow.times(x), wpr);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n while (k--) sum = round(sum.times(sum), wpr);\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n }\r\n }\r\n\r\n\r\n // Calculate the base 10 exponent from the base 1e7 exponent.\r\n function getBase10Exponent(x) {\r\n var e = x.e * LOG_BASE,\r\n w = x.d[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for (; w >= 10; w /= 10) e++;\r\n return e;\r\n }\r\n\r\n\r\n function getLn10(Ctor, sd, pr) {\r\n\r\n if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(decimalError + 'LN10 precision limit exceeded');\r\n }\r\n\r\n return round(new Ctor(Ctor.LN10), sd);\r\n }\r\n\r\n\r\n function getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant\r\n * digits.\r\n *\r\n * ln(n) is non-terminating (n != 1)\r\n *\r\n */\r\n function ln(y, sd) {\r\n var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // ln(-x) = NaN\r\n // ln(0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // ln(1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n if (x.eq(10)) {\r\n if (sd == null) external = true;\r\n return getLn10(Ctor, wpr);\r\n }\r\n\r\n wpr += guard;\r\n Ctor.precision = wpr;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n e = getBase10Exponent(x);\r\n\r\n if (Math.abs(e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(x, pr)) : x;\r\n }\r\n\r\n // x is reduced to a value near 1.\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n x2 = round(x.times(x), wpr);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = round(numerator.times(x2), wpr);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\n function parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n e = e - i - 1;\r\n x.e = mathfloor(e / LOG_BASE);\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n } else {\r\n\r\n // Zero.\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).\r\n */\r\n function round(x, sd, rm) {\r\n var i, j, k, n, rd, doRound, w, xdi,\r\n xd = x.d;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // n: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n i = sd - n;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) return x;\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - n.\r\n j = i - LOG_BASE + n;\r\n }\r\n\r\n if (rm !== void 0) {\r\n k = mathpow(10, n - j - 1);\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / k % 10 | 0;\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the\r\n // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n // 714.\r\n\r\n doRound = rm < 4\r\n ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n }\r\n\r\n if (sd < 1 || !xd[0]) {\r\n if (doRound) {\r\n k = getBase10Exponent(x);\r\n xd.length = 1;\r\n\r\n // Convert sd to decimal places.\r\n sd = sd - k - 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n } else {\r\n xd.length = 1;\r\n\r\n // Zero.\r\n xd[0] = x.e = x.s = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (doRound) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n if ((xd[0] += k) == BASE) {\r\n xd[0] = 1;\r\n ++x.e;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function subtract(x, y) {\r\n var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // Return y negated if x is zero.\r\n // Return x if y is zero and x is non-zero.\r\n if (!x.s || !y.s) {\r\n if (y.s) y.s = -y.s;\r\n else y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are non-zero numbers with the same sign.\r\n\r\n e = y.e;\r\n xe = x.e;\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of zeros\r\n // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to xd if shorter.\r\n // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(0);\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function toString(x, isExp, sd) {\r\n var k,\r\n e = getBase10Exponent(x),\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (e < 0 ? 'e' : 'e+') + e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Does not strip trailing zeros.\r\n function truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n }\r\n\r\n\r\n // Decimal methods\r\n\r\n\r\n /*\r\n * clone\r\n * config/set\r\n */\r\n\r\n\r\n /*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\n function clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * value {number|string|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(value) {\r\n var x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n // Duplicate.\r\n if (value instanceof Decimal) {\r\n x.s = value.s;\r\n x.e = value.e;\r\n x.d = (value = value.d) ? value.slice() : value;\r\n return;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n\r\n // Reject Infinity/NaN.\r\n if (value * 0 !== 0) {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n if (value > 0) {\r\n x.s = 1;\r\n } else if (value < 0) {\r\n value = -value;\r\n x.s = -1;\r\n } else {\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (value === ~~value && value < 1e7) {\r\n x.e = 0;\r\n x.d = [value];\r\n return;\r\n }\r\n\r\n return parseDecimal(x, value.toString());\r\n } else if (typeof value !== 'string') {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n // Minus sign?\r\n if (value.charCodeAt(0) === 45) {\r\n value = value.slice(1);\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n if (isDecimal.test(value)) parseDecimal(x, value);\r\n else throw Error(invalidArgument + value);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n Decimal.clone = clone;\r\n Decimal.config = Decimal.set = config;\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n }\r\n\r\n\r\n /*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\n function config(obj) {\r\n if (!obj || typeof obj !== 'object') {\r\n throw Error(decimalError + 'Object expected');\r\n }\r\n var i, p, v,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -1 / 0, 0,\r\n 'toExpPos', 0, 1 / 0\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if ((v = obj[p = ps[i]]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if ((v = obj[p = 'LN10']) !== void 0) {\r\n if (v == Math.LN10) this[p] = new this(v);\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n // Create and configure initial Decimal constructor.\r\n Decimal = clone(Decimal);\r\n\r\n Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n // Internal constant.\r\n ONE = new Decimal(1);\r\n\r\n\r\n // Export.\r\n\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () {\r\n return Decimal;\r\n });\r\n\r\n // Node and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = Decimal;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalScope) {\r\n globalScope = typeof self != 'undefined' && self && self.self == self\r\n ? self : Function('return this')();\r\n }\r\n\r\n globalScope.Decimal = Decimal;\r\n }\r\n})(this);\r\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n core = require('./windows.js')\n} else {\n core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n if (!cb) {\n if (typeof Promise !== 'function') {\n throw new TypeError('callback not provided')\n }\n\n return new Promise(function (resolve, reject) {\n isexe(path, options || {}, function (er, is) {\n if (er) {\n reject(er)\n } else {\n resolve(is)\n }\n })\n })\n }\n\n core(path, options || {}, function (er, is) {\n // ignore EACCES because that just means we aren't allowed to run it\n if (er) {\n if (er.code === 'EACCES' || options && options.ignoreErrors) {\n er = null\n is = false\n }\n }\n cb(er, is)\n })\n}\n\nfunction sync (path, options) {\n // my kingdom for a filtered catch\n try {\n return core.sync(path, options || {})\n } catch (er) {\n if (options && options.ignoreErrors || er.code === 'EACCES') {\n return false\n } else {\n throw er\n }\n }\n}\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n var pathext = options.pathExt !== undefined ?\n options.pathExt : process.env.PATHEXT\n\n if (!pathext) {\n return true\n }\n\n pathext = pathext.split(';')\n if (pathext.indexOf('') !== -1) {\n return true\n }\n for (var i = 0; i < pathext.length; i++) {\n var p = pathext[i].toLowerCase()\n if (p && path.substr(-p.length).toLowerCase() === p) {\n return true\n }\n }\n return false\n}\n\nfunction checkStat (stat, path, options) {\n if (!stat.isSymbolicLink() && !stat.isFile()) {\n return false\n }\n return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, path, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), path, options)\n}\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n var mod = stat.mode\n var uid = stat.uid\n var gid = stat.gid\n\n var myUid = options.uid !== undefined ?\n options.uid : process.getuid && process.getuid()\n var myGid = options.gid !== undefined ?\n options.gid : process.getgid && process.getgid()\n\n var u = parseInt('100', 8)\n var g = parseInt('010', 8)\n var o = parseInt('001', 8)\n var ug = u | g\n\n var ret = (mod & o) ||\n (mod & g) && gid === myGid ||\n (mod & u) && uid === myUid ||\n (mod & ug) && myUid === 0\n\n return ret\n}\n","const isWindows = process.platform === 'win32' ||\n process.env.OSTYPE === 'cygwin' ||\n process.env.OSTYPE === 'msys'\n\nconst path = require('path')\nconst COLON = isWindows ? ';' : ':'\nconst isexe = require('isexe')\n\nconst getNotFoundError = (cmd) =>\n Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })\n\nconst getPathInfo = (cmd, opt) => {\n const colon = opt.colon || COLON\n\n // If it has a slash, then we don't bother searching the pathenv.\n // just check the file itself, and that's it.\n const pathEnv = cmd.match(/\\//) || isWindows && cmd.match(/\\\\/) ? ['']\n : (\n [\n // windows always checks the cwd first\n ...(isWindows ? [process.cwd()] : []),\n ...(opt.path || process.env.PATH ||\n /* istanbul ignore next: very unusual */ '').split(colon),\n ]\n )\n const pathExtExe = isWindows\n ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'\n : ''\n const pathExt = isWindows ? pathExtExe.split(colon) : ['']\n\n if (isWindows) {\n if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n pathExt.unshift('')\n }\n\n return {\n pathEnv,\n pathExt,\n pathExtExe,\n }\n}\n\nconst which = (cmd, opt, cb) => {\n if (typeof opt === 'function') {\n cb = opt\n opt = {}\n }\n if (!opt)\n opt = {}\n\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n const step = i => new Promise((resolve, reject) => {\n if (i === pathEnv.length)\n return opt.all && found.length ? resolve(found)\n : reject(getNotFoundError(cmd))\n\n const ppRaw = pathEnv[i]\n const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n const pCmd = path.join(pathPart, cmd)\n const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n : pCmd\n\n resolve(subStep(p, i, 0))\n })\n\n const subStep = (p, i, ii) => new Promise((resolve, reject) => {\n if (ii === pathExt.length)\n return resolve(step(i + 1))\n const ext = pathExt[ii]\n isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {\n if (!er && is) {\n if (opt.all)\n found.push(p + ext)\n else\n return resolve(p + ext)\n }\n return resolve(subStep(p, i, ii + 1))\n })\n })\n\n return cb ? step(0).then(res => cb(null, res), cb) : step(0)\n}\n\nconst whichSync = (cmd, opt) => {\n opt = opt || {}\n\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n for (let i = 0; i < pathEnv.length; i ++) {\n const ppRaw = pathEnv[i]\n const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n const pCmd = path.join(pathPart, cmd)\n const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n : pCmd\n\n for (let j = 0; j < pathExt.length; j ++) {\n const cur = p + pathExt[j]\n try {\n const is = isexe.sync(cur, { pathExt: pathExtExe })\n if (is) {\n if (opt.all)\n found.push(cur)\n else\n return cur\n }\n } catch (ex) {}\n }\n }\n\n if (opt.all && found.length)\n return found\n\n if (opt.nothrow)\n return null\n\n throw getNotFoundError(cmd)\n}\n\nmodule.exports = which\nwhich.sync = whichSync\n","'use strict';\n\nconst pathKey = (options = {}) => {\n\tconst environment = options.env || process.env;\n\tconst platform = options.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n};\n\nmodule.exports = pathKey;\n// TODO: Remove this for the next major release\nmodule.exports.default = pathKey;\n","'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst getPathKey = require('path-key');\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n const env = parsed.options.env || process.env;\n const cwd = process.cwd();\n const hasCustomCwd = parsed.options.cwd != null;\n // Worker threads do not have process.chdir()\n const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;\n\n // If a custom `cwd` was specified, we need to change the process cwd\n // because `which` will do stat calls but does not support a custom cwd\n if (shouldSwitchCwd) {\n try {\n process.chdir(parsed.options.cwd);\n } catch (err) {\n /* Empty */\n }\n }\n\n let resolved;\n\n try {\n resolved = which.sync(parsed.command, {\n path: env[getPathKey({ env })],\n pathExt: withoutPathExt ? path.delimiter : undefined,\n });\n } catch (e) {\n /* Empty */\n } finally {\n if (shouldSwitchCwd) {\n process.chdir(cwd);\n }\n }\n\n // If we successfully resolved, ensure that an absolute path is returned\n // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n }\n\n return resolved;\n}\n\nfunction resolveCommand(parsed) {\n return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n","'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n // Convert to string\n arg = `${arg}`;\n\n // Algorithm below is based on https://qntm.org/cmd\n // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input\n // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information\n\n // Sequence of backslashes followed by a double quote:\n // double up all the backslashes and escape the double quote\n arg = arg.replace(/(?=(\\\\+?)?)\\1\"/g, '$1$1\\\\\"');\n\n // Sequence of backslashes followed by the end of the string\n // (which will become a double quote later):\n // double up all the backslashes\n arg = arg.replace(/(?=(\\\\+?)?)\\1$/, '$1$1');\n\n // All other backslashes occur literally\n\n // Quote the whole thing:\n arg = `\"${arg}\"`;\n\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n // Double escape meta chars if necessary\n if (doubleEscapeMetaChars) {\n arg = arg.replace(metaCharsRegExp, '^$1');\n }\n\n return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n","'use strict';\nconst shebangRegex = require('shebang-regex');\n\nmodule.exports = (string = '') => {\n\tconst match = string.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst [path, argument] = match[0].replace(/#! ?/, '').split(' ');\n\tconst binary = path.split('/').pop();\n\n\tif (binary === 'env') {\n\t\treturn argument;\n\t}\n\n\treturn argument ? `${binary} ${argument}` : binary;\n};\n","'use strict';\nmodule.exports = /^#!(.*)/;\n","'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n // Read the first 150 bytes from the file\n const size = 150;\n const buffer = Buffer.alloc(size);\n\n let fd;\n\n try {\n fd = fs.openSync(command, 'r');\n fs.readSync(fd, buffer, 0, size, 0);\n fs.closeSync(fd);\n } catch (e) { /* Empty */ }\n\n // Attempt to extract shebang (null is returned if not a shebang)\n return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n","'use strict';\n\nconst path = require('path');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\nfunction detectShebang(parsed) {\n parsed.file = resolveCommand(parsed);\n\n const shebang = parsed.file && readShebang(parsed.file);\n\n if (shebang) {\n parsed.args.unshift(parsed.file);\n parsed.command = shebang;\n\n return resolveCommand(parsed);\n }\n\n return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n if (!isWin) {\n return parsed;\n }\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile);\n\n // If a shell is required, use cmd.exe and take care of escaping everything correctly\n // Note that `forceShell` is an hidden option used only in tests\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n // we need to double escape them\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n // This is necessary otherwise it will always fail with ENOENT in those cases\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escape.command(parsed.command);\n parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n }\n\n return parsed;\n}\n\nfunction parse(command, args, options) {\n // Normalize arguments, similar to nodejs\n if (args && !Array.isArray(args)) {\n options = args;\n args = null;\n }\n\n args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n options = Object.assign({}, options); // Clone object to avoid changing the original\n\n // Build our parsed object\n const parsed = {\n command,\n args,\n options,\n file: undefined,\n original: {\n command,\n args,\n },\n };\n\n // Delegate further parsing to shell or non-shell\n return options.shell ? parsed : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n","'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n code: 'ENOENT',\n errno: 'ENOENT',\n syscall: `${syscall} ${original.command}`,\n path: original.command,\n spawnargs: original.args,\n });\n}\n\nfunction hookChildProcess(cp, parsed) {\n if (!isWin) {\n return;\n }\n\n const originalEmit = cp.emit;\n\n cp.emit = function (name, arg1) {\n // If emitting \"exit\" event and exit code is 1, we need to check if\n // the command exists and emit an \"error\" instead\n // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n if (name === 'exit') {\n const err = verifyENOENT(arg1, parsed);\n\n if (err) {\n return originalEmit.call(cp, 'error', err);\n }\n }\n\n return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n };\n}\n\nfunction verifyENOENT(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n\n return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n\n return null;\n}\n\nmodule.exports = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n","'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n // Hook into child process \"exit\" event to emit an error if the command\n // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n enoent.hookChildProcess(spawned, parsed);\n\n return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n",null,null,"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BitWidth = void 0;\nvar BitWidth;\n(function (BitWidth) {\n BitWidth[BitWidth[\"WIDTH8\"] = 0] = \"WIDTH8\";\n BitWidth[BitWidth[\"WIDTH16\"] = 1] = \"WIDTH16\";\n BitWidth[BitWidth[\"WIDTH32\"] = 2] = \"WIDTH32\";\n BitWidth[BitWidth[\"WIDTH64\"] = 3] = \"WIDTH64\";\n})(BitWidth || (exports.BitWidth = BitWidth = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.paddingSize = exports.fromByteWidth = exports.uwidth = exports.fwidth = exports.iwidth = exports.toByteWidth = void 0;\nconst bit_width_js_1 = require(\"./bit-width.js\");\nfunction toByteWidth(bitWidth) {\n return 1 << bitWidth;\n}\nexports.toByteWidth = toByteWidth;\nfunction iwidth(value) {\n if (value >= -128 && value <= 127)\n return bit_width_js_1.BitWidth.WIDTH8;\n if (value >= -32768 && value <= 32767)\n return bit_width_js_1.BitWidth.WIDTH16;\n if (value >= -2147483648 && value <= 2147483647)\n return bit_width_js_1.BitWidth.WIDTH32;\n return bit_width_js_1.BitWidth.WIDTH64;\n}\nexports.iwidth = iwidth;\nfunction fwidth(value) {\n return value === Math.fround(value) ? bit_width_js_1.BitWidth.WIDTH32 : bit_width_js_1.BitWidth.WIDTH64;\n}\nexports.fwidth = fwidth;\nfunction uwidth(value) {\n if (value <= 255)\n return bit_width_js_1.BitWidth.WIDTH8;\n if (value <= 65535)\n return bit_width_js_1.BitWidth.WIDTH16;\n if (value <= 4294967295)\n return bit_width_js_1.BitWidth.WIDTH32;\n return bit_width_js_1.BitWidth.WIDTH64;\n}\nexports.uwidth = uwidth;\nfunction fromByteWidth(value) {\n if (value === 1)\n return bit_width_js_1.BitWidth.WIDTH8;\n if (value === 2)\n return bit_width_js_1.BitWidth.WIDTH16;\n if (value === 4)\n return bit_width_js_1.BitWidth.WIDTH32;\n return bit_width_js_1.BitWidth.WIDTH64;\n}\nexports.fromByteWidth = fromByteWidth;\nfunction paddingSize(bufSize, scalarSize) {\n return (~bufSize + 1) & (scalarSize - 1);\n}\nexports.paddingSize = paddingSize;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toUTF8Array = exports.fromUTF8Array = void 0;\nfunction fromUTF8Array(data) {\n const decoder = new TextDecoder();\n return decoder.decode(data);\n}\nexports.fromUTF8Array = fromUTF8Array;\nfunction toUTF8Array(str) {\n const encoder = new TextEncoder();\n return encoder.encode(str);\n}\nexports.toUTF8Array = toUTF8Array;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueType = void 0;\nvar ValueType;\n(function (ValueType) {\n ValueType[ValueType[\"NULL\"] = 0] = \"NULL\";\n ValueType[ValueType[\"INT\"] = 1] = \"INT\";\n ValueType[ValueType[\"UINT\"] = 2] = \"UINT\";\n ValueType[ValueType[\"FLOAT\"] = 3] = \"FLOAT\";\n ValueType[ValueType[\"KEY\"] = 4] = \"KEY\";\n ValueType[ValueType[\"STRING\"] = 5] = \"STRING\";\n ValueType[ValueType[\"INDIRECT_INT\"] = 6] = \"INDIRECT_INT\";\n ValueType[ValueType[\"INDIRECT_UINT\"] = 7] = \"INDIRECT_UINT\";\n ValueType[ValueType[\"INDIRECT_FLOAT\"] = 8] = \"INDIRECT_FLOAT\";\n ValueType[ValueType[\"MAP\"] = 9] = \"MAP\";\n ValueType[ValueType[\"VECTOR\"] = 10] = \"VECTOR\";\n ValueType[ValueType[\"VECTOR_INT\"] = 11] = \"VECTOR_INT\";\n ValueType[ValueType[\"VECTOR_UINT\"] = 12] = \"VECTOR_UINT\";\n ValueType[ValueType[\"VECTOR_FLOAT\"] = 13] = \"VECTOR_FLOAT\";\n ValueType[ValueType[\"VECTOR_KEY\"] = 14] = \"VECTOR_KEY\";\n ValueType[ValueType[\"VECTOR_STRING_DEPRECATED\"] = 15] = \"VECTOR_STRING_DEPRECATED\";\n ValueType[ValueType[\"VECTOR_INT2\"] = 16] = \"VECTOR_INT2\";\n ValueType[ValueType[\"VECTOR_UINT2\"] = 17] = \"VECTOR_UINT2\";\n ValueType[ValueType[\"VECTOR_FLOAT2\"] = 18] = \"VECTOR_FLOAT2\";\n ValueType[ValueType[\"VECTOR_INT3\"] = 19] = \"VECTOR_INT3\";\n ValueType[ValueType[\"VECTOR_UINT3\"] = 20] = \"VECTOR_UINT3\";\n ValueType[ValueType[\"VECTOR_FLOAT3\"] = 21] = \"VECTOR_FLOAT3\";\n ValueType[ValueType[\"VECTOR_INT4\"] = 22] = \"VECTOR_INT4\";\n ValueType[ValueType[\"VECTOR_UINT4\"] = 23] = \"VECTOR_UINT4\";\n ValueType[ValueType[\"VECTOR_FLOAT4\"] = 24] = \"VECTOR_FLOAT4\";\n ValueType[ValueType[\"BLOB\"] = 25] = \"BLOB\";\n ValueType[ValueType[\"BOOL\"] = 26] = \"BOOL\";\n ValueType[ValueType[\"VECTOR_BOOL\"] = 36] = \"VECTOR_BOOL\";\n})(ValueType || (exports.ValueType = ValueType = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.packedType = exports.fixedTypedVectorElementSize = exports.fixedTypedVectorElementType = exports.typedVectorElementType = exports.toTypedVector = exports.isAVector = exports.isFixedTypedVector = exports.isTypedVector = exports.isTypedVectorElement = exports.isIndirectNumber = exports.isNumber = exports.isInline = void 0;\nconst value_type_js_1 = require(\"./value-type.js\");\nfunction isInline(value) {\n return value === value_type_js_1.ValueType.BOOL\n || value <= value_type_js_1.ValueType.FLOAT;\n}\nexports.isInline = isInline;\nfunction isNumber(value) {\n return value >= value_type_js_1.ValueType.INT\n && value <= value_type_js_1.ValueType.FLOAT;\n}\nexports.isNumber = isNumber;\nfunction isIndirectNumber(value) {\n return value >= value_type_js_1.ValueType.INDIRECT_INT\n && value <= value_type_js_1.ValueType.INDIRECT_FLOAT;\n}\nexports.isIndirectNumber = isIndirectNumber;\nfunction isTypedVectorElement(value) {\n return value === value_type_js_1.ValueType.BOOL\n || (value >= value_type_js_1.ValueType.INT\n && value <= value_type_js_1.ValueType.STRING);\n}\nexports.isTypedVectorElement = isTypedVectorElement;\nfunction isTypedVector(value) {\n return value === value_type_js_1.ValueType.VECTOR_BOOL\n || (value >= value_type_js_1.ValueType.VECTOR_INT\n && value <= value_type_js_1.ValueType.VECTOR_STRING_DEPRECATED);\n}\nexports.isTypedVector = isTypedVector;\nfunction isFixedTypedVector(value) {\n return value >= value_type_js_1.ValueType.VECTOR_INT2\n && value <= value_type_js_1.ValueType.VECTOR_FLOAT4;\n}\nexports.isFixedTypedVector = isFixedTypedVector;\nfunction isAVector(value) {\n return isTypedVector(value)\n || isFixedTypedVector(value)\n || value === value_type_js_1.ValueType.VECTOR;\n}\nexports.isAVector = isAVector;\nfunction toTypedVector(valueType, length) {\n if (length === 0)\n return valueType - value_type_js_1.ValueType.INT + value_type_js_1.ValueType.VECTOR_INT;\n if (length === 2)\n return valueType - value_type_js_1.ValueType.INT + value_type_js_1.ValueType.VECTOR_INT2;\n if (length === 3)\n return valueType - value_type_js_1.ValueType.INT + value_type_js_1.ValueType.VECTOR_INT3;\n if (length === 4)\n return valueType - value_type_js_1.ValueType.INT + value_type_js_1.ValueType.VECTOR_INT4;\n throw \"Unexpected length \" + length;\n}\nexports.toTypedVector = toTypedVector;\nfunction typedVectorElementType(valueType) {\n return valueType - value_type_js_1.ValueType.VECTOR_INT + value_type_js_1.ValueType.INT;\n}\nexports.typedVectorElementType = typedVectorElementType;\nfunction fixedTypedVectorElementType(valueType) {\n return ((valueType - value_type_js_1.ValueType.VECTOR_INT2) % 3) + value_type_js_1.ValueType.INT;\n}\nexports.fixedTypedVectorElementType = fixedTypedVectorElementType;\nfunction fixedTypedVectorElementSize(valueType) {\n // The x / y >> 0 trick is to have an int division. Suppose to be faster than Math.floor()\n return (((valueType - value_type_js_1.ValueType.VECTOR_INT2) / 3) >> 0) + 2;\n}\nexports.fixedTypedVectorElementSize = fixedTypedVectorElementSize;\nfunction packedType(valueType, bitWidth) {\n return bitWidth | (valueType << 2);\n}\nexports.packedType = packedType;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StackValue = void 0;\nconst bit_width_js_1 = require(\"./bit-width.js\");\nconst bit_width_util_js_1 = require(\"./bit-width-util.js\");\nconst value_type_js_1 = require(\"./value-type.js\");\nconst value_type_util_js_1 = require(\"./value-type-util.js\");\nclass StackValue {\n constructor(builder, type, width, value = null, offset = 0) {\n this.builder = builder;\n this.type = type;\n this.width = width;\n this.value = value;\n this.offset = offset;\n }\n elementWidth(size, index) {\n if ((0, value_type_util_js_1.isInline)(this.type))\n return this.width;\n for (let i = 0; i < 4; i++) {\n const width = 1 << i;\n const offsetLoc = size + (0, bit_width_util_js_1.paddingSize)(size, width) + index * width;\n const offset = offsetLoc - this.offset;\n const bitWidth = (0, bit_width_util_js_1.uwidth)(offset);\n if (1 << bitWidth === width) {\n return bitWidth;\n }\n }\n throw `Element is unknown. Size: ${size} at index: ${index}. This might be a bug. Please create an issue https://github.com/google/flatbuffers/issues/new`;\n }\n writeToBuffer(byteWidth) {\n const newOffset = this.builder.computeOffset(byteWidth);\n if (this.type === value_type_js_1.ValueType.FLOAT) {\n if (this.width === bit_width_js_1.BitWidth.WIDTH32) {\n this.builder.view.setFloat32(this.builder.offset, this.value, true);\n }\n else {\n this.builder.view.setFloat64(this.builder.offset, this.value, true);\n }\n }\n else if (this.type === value_type_js_1.ValueType.INT) {\n const bitWidth = (0, bit_width_util_js_1.fromByteWidth)(byteWidth);\n this.builder.pushInt(this.value, bitWidth);\n }\n else if (this.type === value_type_js_1.ValueType.UINT) {\n const bitWidth = (0, bit_width_util_js_1.fromByteWidth)(byteWidth);\n this.builder.pushUInt(this.value, bitWidth);\n }\n else if (this.type === value_type_js_1.ValueType.NULL) {\n this.builder.pushInt(0, this.width);\n }\n else if (this.type === value_type_js_1.ValueType.BOOL) {\n this.builder.pushInt(this.value ? 1 : 0, this.width);\n }\n else {\n throw `Unexpected type: ${this.type}. This might be a bug. Please create an issue https://github.com/google/flatbuffers/issues/new`;\n }\n this.offset = newOffset;\n }\n storedWidth(width = bit_width_js_1.BitWidth.WIDTH8) {\n return (0, value_type_util_js_1.isInline)(this.type) ? Math.max(width, this.width) : this.width;\n }\n storedPackedType(width = bit_width_js_1.BitWidth.WIDTH8) {\n return (0, value_type_util_js_1.packedType)(this.type, this.storedWidth(width));\n }\n isOffset() {\n return !(0, value_type_util_js_1.isInline)(this.type);\n }\n}\nexports.StackValue = StackValue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Builder = void 0;\nconst bit_width_js_1 = require(\"./bit-width.js\");\nconst bit_width_util_js_1 = require(\"./bit-width-util.js\");\nconst flexbuffers_util_js_1 = require(\"./flexbuffers-util.js\");\nconst value_type_js_1 = require(\"./value-type.js\");\nconst value_type_util_js_1 = require(\"./value-type-util.js\");\nconst stack_value_js_1 = require(\"./stack-value.js\");\nclass Builder {\n constructor(size = 2048, dedupStrings = true, dedupKeys = true, dedupKeyVectors = true) {\n this.dedupStrings = dedupStrings;\n this.dedupKeys = dedupKeys;\n this.dedupKeyVectors = dedupKeyVectors;\n this.stack = [];\n this.stackPointers = [];\n this.offset = 0;\n this.finished = false;\n this.stringLookup = {};\n this.keyLookup = {};\n this.keyVectorLookup = {};\n this.indirectIntLookup = {};\n this.indirectUIntLookup = {};\n this.indirectFloatLookup = {};\n this.buffer = new ArrayBuffer(size > 0 ? size : 2048);\n this.view = new DataView(this.buffer);\n }\n align(width) {\n const byteWidth = (0, bit_width_util_js_1.toByteWidth)(width);\n this.offset += (0, bit_width_util_js_1.paddingSize)(this.offset, byteWidth);\n return byteWidth;\n }\n computeOffset(newValueSize) {\n const targetOffset = this.offset + newValueSize;\n let size = this.buffer.byteLength;\n const prevSize = size;\n while (size < targetOffset) {\n size <<= 1;\n }\n if (prevSize < size) {\n const prevBuffer = this.buffer;\n this.buffer = new ArrayBuffer(size);\n this.view = new DataView(this.buffer);\n new Uint8Array(this.buffer).set(new Uint8Array(prevBuffer), 0);\n }\n return targetOffset;\n }\n pushInt(value, width) {\n if (width === bit_width_js_1.BitWidth.WIDTH8) {\n this.view.setInt8(this.offset, value);\n }\n else if (width === bit_width_js_1.BitWidth.WIDTH16) {\n this.view.setInt16(this.offset, value, true);\n }\n else if (width === bit_width_js_1.BitWidth.WIDTH32) {\n this.view.setInt32(this.offset, value, true);\n }\n else if (width === bit_width_js_1.BitWidth.WIDTH64) {\n this.view.setBigInt64(this.offset, BigInt(value), true);\n }\n else {\n throw `Unexpected width: ${width} for value: ${value}`;\n }\n }\n pushUInt(value, width) {\n if (width === bit_width_js_1.BitWidth.WIDTH8) {\n this.view.setUint8(this.offset, value);\n }\n else if (width === bit_width_js_1.BitWidth.WIDTH16) {\n this.view.setUint16(this.offset, value, true);\n }\n else if (width === bit_width_js_1.BitWidth.WIDTH32) {\n this.view.setUint32(this.offset, value, true);\n }\n else if (width === bit_width_js_1.BitWidth.WIDTH64) {\n this.view.setBigUint64(this.offset, BigInt(value), true);\n }\n else {\n throw `Unexpected width: ${width} for value: ${value}`;\n }\n }\n writeInt(value, byteWidth) {\n const newOffset = this.computeOffset(byteWidth);\n this.pushInt(value, (0, bit_width_util_js_1.fromByteWidth)(byteWidth));\n this.offset = newOffset;\n }\n writeUInt(value, byteWidth) {\n const newOffset = this.computeOffset(byteWidth);\n this.pushUInt(value, (0, bit_width_util_js_1.fromByteWidth)(byteWidth));\n this.offset = newOffset;\n }\n writeBlob(arrayBuffer) {\n const length = arrayBuffer.byteLength;\n const bitWidth = (0, bit_width_util_js_1.uwidth)(length);\n const byteWidth = this.align(bitWidth);\n this.writeUInt(length, byteWidth);\n const blobOffset = this.offset;\n const newOffset = this.computeOffset(length);\n new Uint8Array(this.buffer).set(new Uint8Array(arrayBuffer), blobOffset);\n this.stack.push(this.offsetStackValue(blobOffset, value_type_js_1.ValueType.BLOB, bitWidth));\n this.offset = newOffset;\n }\n writeString(str) {\n if (this.dedupStrings && Object.prototype.hasOwnProperty.call(this.stringLookup, str)) {\n this.stack.push(this.stringLookup[str]);\n return;\n }\n const utf8 = (0, flexbuffers_util_js_1.toUTF8Array)(str);\n const length = utf8.length;\n const bitWidth = (0, bit_width_util_js_1.uwidth)(length);\n const byteWidth = this.align(bitWidth);\n this.writeUInt(length, byteWidth);\n const stringOffset = this.offset;\n const newOffset = this.computeOffset(length + 1);\n new Uint8Array(this.buffer).set(utf8, stringOffset);\n const stackValue = this.offsetStackValue(stringOffset, value_type_js_1.ValueType.STRING, bitWidth);\n this.stack.push(stackValue);\n if (this.dedupStrings) {\n this.stringLookup[str] = stackValue;\n }\n this.offset = newOffset;\n }\n writeKey(str) {\n if (this.dedupKeys && Object.prototype.hasOwnProperty.call(this.keyLookup, str)) {\n this.stack.push(this.keyLookup[str]);\n return;\n }\n const utf8 = (0, flexbuffers_util_js_1.toUTF8Array)(str);\n const length = utf8.length;\n const newOffset = this.computeOffset(length + 1);\n new Uint8Array(this.buffer).set(utf8, this.offset);\n const stackValue = this.offsetStackValue(this.offset, value_type_js_1.ValueType.KEY, bit_width_js_1.BitWidth.WIDTH8);\n this.stack.push(stackValue);\n if (this.dedupKeys) {\n this.keyLookup[str] = stackValue;\n }\n this.offset = newOffset;\n }\n writeStackValue(value, byteWidth) {\n const newOffset = this.computeOffset(byteWidth);\n if (value.isOffset()) {\n const relativeOffset = this.offset - value.offset;\n if (byteWidth === 8 || BigInt(relativeOffset) < (BigInt(1) << BigInt(byteWidth * 8))) {\n this.writeUInt(relativeOffset, byteWidth);\n }\n else {\n throw `Unexpected size ${byteWidth}. This might be a bug. Please create an issue https://github.com/google/flatbuffers/issues/new`;\n }\n }\n else {\n value.writeToBuffer(byteWidth);\n }\n this.offset = newOffset;\n }\n integrityCheckOnValueAddition() {\n if (this.finished) {\n throw \"Adding values after finish is prohibited\";\n }\n if (this.stackPointers.length !== 0 && this.stackPointers[this.stackPointers.length - 1].isVector === false) {\n if (this.stack[this.stack.length - 1].type !== value_type_js_1.ValueType.KEY) {\n throw \"Adding value to a map before adding a key is prohibited\";\n }\n }\n }\n integrityCheckOnKeyAddition() {\n if (this.finished) {\n throw \"Adding values after finish is prohibited\";\n }\n if (this.stackPointers.length === 0 || this.stackPointers[this.stackPointers.length - 1].isVector) {\n throw \"Adding key before starting a map is prohibited\";\n }\n }\n startVector() {\n this.stackPointers.push({ stackPosition: this.stack.length, isVector: true });\n }\n startMap(presorted = false) {\n this.stackPointers.push({ stackPosition: this.stack.length, isVector: false, presorted: presorted });\n }\n endVector(stackPointer) {\n const vecLength = this.stack.length - stackPointer.stackPosition;\n const vec = this.createVector(stackPointer.stackPosition, vecLength, 1);\n this.stack.splice(stackPointer.stackPosition, vecLength);\n this.stack.push(vec);\n }\n endMap(stackPointer) {\n if (!stackPointer.presorted) {\n this.sort(stackPointer);\n }\n let keyVectorHash = \"\";\n for (let i = stackPointer.stackPosition; i < this.stack.length; i += 2) {\n keyVectorHash += `,${this.stack[i].offset}`;\n }\n const vecLength = (this.stack.length - stackPointer.stackPosition) >> 1;\n if (this.dedupKeyVectors && !Object.prototype.hasOwnProperty.call(this.keyVectorLookup, keyVectorHash)) {\n this.keyVectorLookup[keyVectorHash] = this.createVector(stackPointer.stackPosition, vecLength, 2);\n }\n const keysStackValue = this.dedupKeyVectors ? this.keyVectorLookup[keyVectorHash] : this.createVector(stackPointer.stackPosition, vecLength, 2);\n const valuesStackValue = this.createVector(stackPointer.stackPosition + 1, vecLength, 2, keysStackValue);\n this.stack.splice(stackPointer.stackPosition, vecLength << 1);\n this.stack.push(valuesStackValue);\n }\n sort(stackPointer) {\n const view = this.view;\n const stack = this.stack;\n function shouldFlip(v1, v2) {\n if (v1.type !== value_type_js_1.ValueType.KEY || v2.type !== value_type_js_1.ValueType.KEY) {\n throw `Stack values are not keys ${v1} | ${v2}. Check if you combined [addKey] with add... method calls properly.`;\n }\n let c1, c2;\n let index = 0;\n do {\n c1 = view.getUint8(v1.offset + index);\n c2 = view.getUint8(v2.offset + index);\n if (c2 < c1)\n return true;\n if (c1 < c2)\n return false;\n index += 1;\n } while (c1 !== 0 && c2 !== 0);\n return false;\n }\n function swap(stack, flipIndex, i) {\n if (flipIndex === i)\n return;\n const k = stack[flipIndex];\n const v = stack[flipIndex + 1];\n stack[flipIndex] = stack[i];\n stack[flipIndex + 1] = stack[i + 1];\n stack[i] = k;\n stack[i + 1] = v;\n }\n function selectionSort() {\n for (let i = stackPointer.stackPosition; i < stack.length; i += 2) {\n let flipIndex = i;\n for (let j = i + 2; j < stack.length; j += 2) {\n if (shouldFlip(stack[flipIndex], stack[j])) {\n flipIndex = j;\n }\n }\n if (flipIndex !== i) {\n swap(stack, flipIndex, i);\n }\n }\n }\n function smaller(v1, v2) {\n if (v1.type !== value_type_js_1.ValueType.KEY || v2.type !== value_type_js_1.ValueType.KEY) {\n throw `Stack values are not keys ${v1} | ${v2}. Check if you combined [addKey] with add... method calls properly.`;\n }\n if (v1.offset === v2.offset) {\n return false;\n }\n let c1, c2;\n let index = 0;\n do {\n c1 = view.getUint8(v1.offset + index);\n c2 = view.getUint8(v2.offset + index);\n if (c1 < c2)\n return true;\n if (c2 < c1)\n return false;\n index += 1;\n } while (c1 !== 0 && c2 !== 0);\n return false;\n }\n function quickSort(left, right) {\n if (left < right) {\n const mid = left + (((right - left) >> 2)) * 2;\n const pivot = stack[mid];\n let left_new = left;\n let right_new = right;\n do {\n while (smaller(stack[left_new], pivot)) {\n left_new += 2;\n }\n while (smaller(pivot, stack[right_new])) {\n right_new -= 2;\n }\n if (left_new <= right_new) {\n swap(stack, left_new, right_new);\n left_new += 2;\n right_new -= 2;\n }\n } while (left_new <= right_new);\n quickSort(left, right_new);\n quickSort(left_new, right);\n }\n }\n let sorted = true;\n for (let i = stackPointer.stackPosition; i < this.stack.length - 2; i += 2) {\n if (shouldFlip(this.stack[i], this.stack[i + 2])) {\n sorted = false;\n break;\n }\n }\n if (!sorted) {\n if (this.stack.length - stackPointer.stackPosition > 40) {\n quickSort(stackPointer.stackPosition, this.stack.length - 2);\n }\n else {\n selectionSort();\n }\n }\n }\n end() {\n if (this.stackPointers.length < 1)\n return;\n const pointer = this.stackPointers.pop();\n if (pointer.isVector) {\n this.endVector(pointer);\n }\n else {\n this.endMap(pointer);\n }\n }\n createVector(start, vecLength, step, keys = null) {\n let bitWidth = (0, bit_width_util_js_1.uwidth)(vecLength);\n let prefixElements = 1;\n if (keys !== null) {\n const elementWidth = keys.elementWidth(this.offset, 0);\n if (elementWidth > bitWidth) {\n bitWidth = elementWidth;\n }\n prefixElements += 2;\n }\n let vectorType = value_type_js_1.ValueType.KEY;\n let typed = keys === null;\n for (let i = start; i < this.stack.length; i += step) {\n const elementWidth = this.stack[i].elementWidth(this.offset, i + prefixElements);\n if (elementWidth > bitWidth) {\n bitWidth = elementWidth;\n }\n if (i === start) {\n vectorType = this.stack[i].type;\n typed = typed && (0, value_type_util_js_1.isTypedVectorElement)(vectorType);\n }\n else {\n if (vectorType !== this.stack[i].type) {\n typed = false;\n }\n }\n }\n const byteWidth = this.align(bitWidth);\n const fix = typed && (0, value_type_util_js_1.isNumber)(vectorType) && vecLength >= 2 && vecLength <= 4;\n if (keys !== null) {\n this.writeStackValue(keys, byteWidth);\n this.writeUInt(1 << keys.width, byteWidth);\n }\n if (!fix) {\n this.writeUInt(vecLength, byteWidth);\n }\n const vecOffset = this.offset;\n for (let i = start; i < this.stack.length; i += step) {\n this.writeStackValue(this.stack[i], byteWidth);\n }\n if (!typed) {\n for (let i = start; i < this.stack.length; i += step) {\n this.writeUInt(this.stack[i].storedPackedType(), 1);\n }\n }\n if (keys !== null) {\n return this.offsetStackValue(vecOffset, value_type_js_1.ValueType.MAP, bitWidth);\n }\n if (typed) {\n const vType = (0, value_type_util_js_1.toTypedVector)(vectorType, fix ? vecLength : 0);\n return this.offsetStackValue(vecOffset, vType, bitWidth);\n }\n return this.offsetStackValue(vecOffset, value_type_js_1.ValueType.VECTOR, bitWidth);\n }\n nullStackValue() {\n return new stack_value_js_1.StackValue(this, value_type_js_1.ValueType.NULL, bit_width_js_1.BitWidth.WIDTH8);\n }\n boolStackValue(value) {\n return new stack_value_js_1.StackValue(this, value_type_js_1.ValueType.BOOL, bit_width_js_1.BitWidth.WIDTH8, value);\n }\n intStackValue(value) {\n return new stack_value_js_1.StackValue(this, value_type_js_1.ValueType.INT, (0, bit_width_util_js_1.iwidth)(value), value);\n }\n uintStackValue(value) {\n return new stack_value_js_1.StackValue(this, value_type_js_1.ValueType.UINT, (0, bit_width_util_js_1.uwidth)(value), value);\n }\n floatStackValue(value) {\n return new stack_value_js_1.StackValue(this, value_type_js_1.ValueType.FLOAT, (0, bit_width_util_js_1.fwidth)(value), value);\n }\n offsetStackValue(offset, valueType, bitWidth) {\n return new stack_value_js_1.StackValue(this, valueType, bitWidth, null, offset);\n }\n finishBuffer() {\n if (this.stack.length !== 1) {\n throw `Stack has to be exactly 1, but it is ${this.stack.length}. You have to end all started vectors and maps before calling [finish]`;\n }\n const value = this.stack[0];\n const byteWidth = this.align(value.elementWidth(this.offset, 0));\n this.writeStackValue(value, byteWidth);\n this.writeUInt(value.storedPackedType(), 1);\n this.writeUInt(byteWidth, 1);\n this.finished = true;\n }\n add(value) {\n this.integrityCheckOnValueAddition();\n if (typeof value === 'undefined') {\n throw \"You need to provide a value\";\n }\n if (value === null) {\n this.stack.push(this.nullStackValue());\n }\n else if (typeof value === \"boolean\") {\n this.stack.push(this.boolStackValue(value));\n }\n else if (typeof value === \"bigint\") {\n this.stack.push(this.intStackValue(value));\n }\n else if (typeof value == 'number') {\n if (Number.isInteger(value)) {\n this.stack.push(this.intStackValue(value));\n }\n else {\n this.stack.push(this.floatStackValue(value));\n }\n }\n else if (ArrayBuffer.isView(value)) {\n this.writeBlob(value.buffer);\n }\n else if (typeof value === 'string' || value instanceof String) {\n this.writeString(value);\n }\n else if (Array.isArray(value)) {\n this.startVector();\n for (let i = 0; i < value.length; i++) {\n this.add(value[i]);\n }\n this.end();\n }\n else if (typeof value === 'object') {\n const properties = Object.getOwnPropertyNames(value).sort();\n this.startMap(true);\n for (let i = 0; i < properties.length; i++) {\n const key = properties[i];\n this.addKey(key);\n this.add(value[key]);\n }\n this.end();\n }\n else {\n throw `Unexpected value input ${value}`;\n }\n }\n finish() {\n if (!this.finished) {\n this.finishBuffer();\n }\n const result = this.buffer.slice(0, this.offset);\n return new Uint8Array(result);\n }\n isFinished() {\n return this.finished;\n }\n addKey(key) {\n this.integrityCheckOnKeyAddition();\n this.writeKey(key);\n }\n addInt(value, indirect = false, deduplicate = false) {\n this.integrityCheckOnValueAddition();\n if (!indirect) {\n this.stack.push(this.intStackValue(value));\n return;\n }\n if (deduplicate && Object.prototype.hasOwnProperty.call(this.indirectIntLookup, value)) {\n this.stack.push(this.indirectIntLookup[value]);\n return;\n }\n const stackValue = this.intStackValue(value);\n const byteWidth = this.align(stackValue.width);\n const newOffset = this.computeOffset(byteWidth);\n const valueOffset = this.offset;\n stackValue.writeToBuffer(byteWidth);\n const stackOffset = this.offsetStackValue(valueOffset, value_type_js_1.ValueType.INDIRECT_INT, stackValue.width);\n this.stack.push(stackOffset);\n this.offset = newOffset;\n if (deduplicate) {\n this.indirectIntLookup[value] = stackOffset;\n }\n }\n addUInt(value, indirect = false, deduplicate = false) {\n this.integrityCheckOnValueAddition();\n if (!indirect) {\n this.stack.push(this.uintStackValue(value));\n return;\n }\n if (deduplicate && Object.prototype.hasOwnProperty.call(this.indirectUIntLookup, value)) {\n this.stack.push(this.indirectUIntLookup[value]);\n return;\n }\n const stackValue = this.uintStackValue(value);\n const byteWidth = this.align(stackValue.width);\n const newOffset = this.computeOffset(byteWidth);\n const valueOffset = this.offset;\n stackValue.writeToBuffer(byteWidth);\n const stackOffset = this.offsetStackValue(valueOffset, value_type_js_1.ValueType.INDIRECT_UINT, stackValue.width);\n this.stack.push(stackOffset);\n this.offset = newOffset;\n if (deduplicate) {\n this.indirectUIntLookup[value] = stackOffset;\n }\n }\n addFloat(value, indirect = false, deduplicate = false) {\n this.integrityCheckOnValueAddition();\n if (!indirect) {\n this.stack.push(this.floatStackValue(value));\n return;\n }\n if (deduplicate && Object.prototype.hasOwnProperty.call(this.indirectFloatLookup, value)) {\n this.stack.push(this.indirectFloatLookup[value]);\n return;\n }\n const stackValue = this.floatStackValue(value);\n const byteWidth = this.align(stackValue.width);\n const newOffset = this.computeOffset(byteWidth);\n const valueOffset = this.offset;\n stackValue.writeToBuffer(byteWidth);\n const stackOffset = this.offsetStackValue(valueOffset, value_type_js_1.ValueType.INDIRECT_FLOAT, stackValue.width);\n this.stack.push(stackOffset);\n this.offset = newOffset;\n if (deduplicate) {\n this.indirectFloatLookup[value] = stackOffset;\n }\n }\n}\nexports.Builder = Builder;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.keyForIndex = exports.diffKeys = exports.keyIndex = exports.indirect = exports.readFloat = exports.readUInt = exports.readInt = exports.validateOffset = void 0;\nconst bit_width_js_1 = require(\"./bit-width.js\");\nconst bit_width_util_js_1 = require(\"./bit-width-util.js\");\nconst flexbuffers_util_js_1 = require(\"./flexbuffers-util.js\");\nfunction validateOffset(dataView, offset, width) {\n if (dataView.byteLength <= offset + width || (offset & ((0, bit_width_util_js_1.toByteWidth)(width) - 1)) !== 0) {\n throw \"Bad offset: \" + offset + \", width: \" + width;\n }\n}\nexports.validateOffset = validateOffset;\nfunction readInt(dataView, offset, width) {\n if (width < 2) {\n if (width < 1) {\n return dataView.getInt8(offset);\n }\n else {\n return dataView.getInt16(offset, true);\n }\n }\n else {\n if (width < 3) {\n return dataView.getInt32(offset, true);\n }\n else {\n if (dataView.setBigInt64 === undefined) {\n return BigInt(dataView.getUint32(offset, true)) + (BigInt(dataView.getUint32(offset + 4, true)) << BigInt(32));\n }\n return dataView.getBigInt64(offset, true);\n }\n }\n}\nexports.readInt = readInt;\nfunction readUInt(dataView, offset, width) {\n if (width < 2) {\n if (width < 1) {\n return dataView.getUint8(offset);\n }\n else {\n return dataView.getUint16(offset, true);\n }\n }\n else {\n if (width < 3) {\n return dataView.getUint32(offset, true);\n }\n else {\n if (dataView.getBigUint64 === undefined) {\n return BigInt(dataView.getUint32(offset, true)) + (BigInt(dataView.getUint32(offset + 4, true)) << BigInt(32));\n }\n return dataView.getBigUint64(offset, true);\n }\n }\n}\nexports.readUInt = readUInt;\nfunction readFloat(dataView, offset, width) {\n if (width < bit_width_js_1.BitWidth.WIDTH32) {\n throw \"Bad width: \" + width;\n }\n if (width === bit_width_js_1.BitWidth.WIDTH32) {\n return dataView.getFloat32(offset, true);\n }\n return dataView.getFloat64(offset, true);\n}\nexports.readFloat = readFloat;\nfunction indirect(dataView, offset, width) {\n const step = readUInt(dataView, offset, width);\n return offset - step;\n}\nexports.indirect = indirect;\nfunction keyIndex(key, dataView, offset, parentWidth, byteWidth, length) {\n const input = (0, flexbuffers_util_js_1.toUTF8Array)(key);\n const keysVectorOffset = indirect(dataView, offset, parentWidth) - byteWidth * 3;\n const bitWidth = (0, bit_width_util_js_1.fromByteWidth)(byteWidth);\n const indirectOffset = keysVectorOffset - Number(readUInt(dataView, keysVectorOffset, bitWidth));\n const _byteWidth = Number(readUInt(dataView, keysVectorOffset + byteWidth, bitWidth));\n let low = 0;\n let high = length - 1;\n while (low <= high) {\n const mid = (high + low) >> 1;\n const dif = diffKeys(input, mid, dataView, indirectOffset, _byteWidth);\n if (dif === 0)\n return mid;\n if (dif < 0) {\n high = mid - 1;\n }\n else {\n low = mid + 1;\n }\n }\n return null;\n}\nexports.keyIndex = keyIndex;\nfunction diffKeys(input, index, dataView, offset, width) {\n const keyOffset = offset + index * width;\n const keyIndirectOffset = keyOffset - Number(readUInt(dataView, keyOffset, (0, bit_width_util_js_1.fromByteWidth)(width)));\n for (let i = 0; i < input.length; i++) {\n const dif = input[i] - dataView.getUint8(keyIndirectOffset + i);\n if (dif !== 0) {\n return dif;\n }\n }\n return dataView.getUint8(keyIndirectOffset + input.length) === 0 ? 0 : -1;\n}\nexports.diffKeys = diffKeys;\nfunction keyForIndex(index, dataView, offset, parentWidth, byteWidth) {\n const keysVectorOffset = indirect(dataView, offset, parentWidth) - byteWidth * 3;\n const bitWidth = (0, bit_width_util_js_1.fromByteWidth)(byteWidth);\n const indirectOffset = keysVectorOffset - Number(readUInt(dataView, keysVectorOffset, bitWidth));\n const _byteWidth = Number(readUInt(dataView, keysVectorOffset + byteWidth, bitWidth));\n const keyOffset = indirectOffset + index * _byteWidth;\n const keyIndirectOffset = keyOffset - Number(readUInt(dataView, keyOffset, (0, bit_width_util_js_1.fromByteWidth)(_byteWidth)));\n let length = 0;\n while (dataView.getUint8(keyIndirectOffset + length) !== 0) {\n length++;\n }\n return (0, flexbuffers_util_js_1.fromUTF8Array)(new Uint8Array(dataView.buffer, keyIndirectOffset, length));\n}\nexports.keyForIndex = keyForIndex;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Reference = exports.toReference = void 0;\nconst bit_width_util_js_1 = require(\"./bit-width-util.js\");\nconst value_type_js_1 = require(\"./value-type.js\");\nconst value_type_util_js_1 = require(\"./value-type-util.js\");\nconst reference_util_js_1 = require(\"./reference-util.js\");\nconst flexbuffers_util_js_1 = require(\"./flexbuffers-util.js\");\nconst bit_width_js_1 = require(\"./bit-width.js\");\nfunction toReference(buffer) {\n const len = buffer.byteLength;\n if (len < 3) {\n throw \"Buffer needs to be bigger than 3\";\n }\n const dataView = new DataView(buffer);\n const byteWidth = dataView.getUint8(len - 1);\n const packedType = dataView.getUint8(len - 2);\n const parentWidth = (0, bit_width_util_js_1.fromByteWidth)(byteWidth);\n const offset = len - byteWidth - 2;\n return new Reference(dataView, offset, parentWidth, packedType, \"/\");\n}\nexports.toReference = toReference;\nfunction valueForIndexWithKey(index, key, dataView, offset, parentWidth, byteWidth, length, path) {\n const _indirect = (0, reference_util_js_1.indirect)(dataView, offset, parentWidth);\n const elementOffset = _indirect + index * byteWidth;\n const packedType = dataView.getUint8(_indirect + length * byteWidth + index);\n return new Reference(dataView, elementOffset, (0, bit_width_util_js_1.fromByteWidth)(byteWidth), packedType, `${path}/${key}`);\n}\nclass Reference {\n constructor(dataView, offset, parentWidth, packedType, path) {\n this.dataView = dataView;\n this.offset = offset;\n this.parentWidth = parentWidth;\n this.packedType = packedType;\n this.path = path;\n this._length = -1;\n this.byteWidth = 1 << (packedType & 3);\n this.valueType = packedType >> 2;\n }\n isNull() { return this.valueType === value_type_js_1.ValueType.NULL; }\n isNumber() { return (0, value_type_util_js_1.isNumber)(this.valueType) || (0, value_type_util_js_1.isIndirectNumber)(this.valueType); }\n isFloat() { return value_type_js_1.ValueType.FLOAT === this.valueType || value_type_js_1.ValueType.INDIRECT_FLOAT === this.valueType; }\n isInt() { return this.isNumber() && !this.isFloat(); }\n isString() { return value_type_js_1.ValueType.STRING === this.valueType || value_type_js_1.ValueType.KEY === this.valueType; }\n isBool() { return value_type_js_1.ValueType.BOOL === this.valueType; }\n isBlob() { return value_type_js_1.ValueType.BLOB === this.valueType; }\n isVector() { return (0, value_type_util_js_1.isAVector)(this.valueType); }\n isMap() { return value_type_js_1.ValueType.MAP === this.valueType; }\n boolValue() {\n if (this.isBool()) {\n return (0, reference_util_js_1.readInt)(this.dataView, this.offset, this.parentWidth) > 0;\n }\n return null;\n }\n intValue() {\n if (this.valueType === value_type_js_1.ValueType.INT) {\n return (0, reference_util_js_1.readInt)(this.dataView, this.offset, this.parentWidth);\n }\n if (this.valueType === value_type_js_1.ValueType.UINT) {\n return (0, reference_util_js_1.readUInt)(this.dataView, this.offset, this.parentWidth);\n }\n if (this.valueType === value_type_js_1.ValueType.INDIRECT_INT) {\n return (0, reference_util_js_1.readInt)(this.dataView, (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth), (0, bit_width_util_js_1.fromByteWidth)(this.byteWidth));\n }\n if (this.valueType === value_type_js_1.ValueType.INDIRECT_UINT) {\n return (0, reference_util_js_1.readUInt)(this.dataView, (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth), (0, bit_width_util_js_1.fromByteWidth)(this.byteWidth));\n }\n return null;\n }\n floatValue() {\n if (this.valueType === value_type_js_1.ValueType.FLOAT) {\n return (0, reference_util_js_1.readFloat)(this.dataView, this.offset, this.parentWidth);\n }\n if (this.valueType === value_type_js_1.ValueType.INDIRECT_FLOAT) {\n return (0, reference_util_js_1.readFloat)(this.dataView, (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth), (0, bit_width_util_js_1.fromByteWidth)(this.byteWidth));\n }\n return null;\n }\n numericValue() { return this.floatValue() || this.intValue(); }\n stringValue() {\n if (this.valueType === value_type_js_1.ValueType.STRING || this.valueType === value_type_js_1.ValueType.KEY) {\n const begin = (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth);\n return (0, flexbuffers_util_js_1.fromUTF8Array)(new Uint8Array(this.dataView.buffer, begin, this.length()));\n }\n return null;\n }\n blobValue() {\n if (this.isBlob()) {\n const begin = (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth);\n return new Uint8Array(this.dataView.buffer, begin, this.length());\n }\n return null;\n }\n get(key) {\n const length = this.length();\n if (Number.isInteger(key) && (0, value_type_util_js_1.isAVector)(this.valueType)) {\n if (key >= length || key < 0) {\n throw `Key: [${key}] is not applicable on ${this.path} of ${this.valueType} length: ${length}`;\n }\n const _indirect = (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth);\n const elementOffset = _indirect + key * this.byteWidth;\n let _packedType = this.dataView.getUint8(_indirect + length * this.byteWidth + key);\n if ((0, value_type_util_js_1.isTypedVector)(this.valueType)) {\n const _valueType = (0, value_type_util_js_1.typedVectorElementType)(this.valueType);\n _packedType = (0, value_type_util_js_1.packedType)(_valueType, bit_width_js_1.BitWidth.WIDTH8);\n }\n else if ((0, value_type_util_js_1.isFixedTypedVector)(this.valueType)) {\n const _valueType = (0, value_type_util_js_1.fixedTypedVectorElementType)(this.valueType);\n _packedType = (0, value_type_util_js_1.packedType)(_valueType, bit_width_js_1.BitWidth.WIDTH8);\n }\n return new Reference(this.dataView, elementOffset, (0, bit_width_util_js_1.fromByteWidth)(this.byteWidth), _packedType, `${this.path}[${key}]`);\n }\n if (typeof key === 'string') {\n const index = (0, reference_util_js_1.keyIndex)(key, this.dataView, this.offset, this.parentWidth, this.byteWidth, length);\n if (index !== null) {\n return valueForIndexWithKey(index, key, this.dataView, this.offset, this.parentWidth, this.byteWidth, length, this.path);\n }\n }\n throw `Key [${key}] is not applicable on ${this.path} of ${this.valueType}`;\n }\n length() {\n let size;\n if (this._length > -1) {\n return this._length;\n }\n if ((0, value_type_util_js_1.isFixedTypedVector)(this.valueType)) {\n this._length = (0, value_type_util_js_1.fixedTypedVectorElementSize)(this.valueType);\n }\n else if (this.valueType === value_type_js_1.ValueType.BLOB\n || this.valueType === value_type_js_1.ValueType.MAP\n || (0, value_type_util_js_1.isAVector)(this.valueType)) {\n this._length = (0, reference_util_js_1.readUInt)(this.dataView, (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth) - this.byteWidth, (0, bit_width_util_js_1.fromByteWidth)(this.byteWidth));\n }\n else if (this.valueType === value_type_js_1.ValueType.NULL) {\n this._length = 0;\n }\n else if (this.valueType === value_type_js_1.ValueType.STRING) {\n const _indirect = (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth);\n let sizeByteWidth = this.byteWidth;\n size = (0, reference_util_js_1.readUInt)(this.dataView, _indirect - sizeByteWidth, (0, bit_width_util_js_1.fromByteWidth)(this.byteWidth));\n while (this.dataView.getInt8(_indirect + size) !== 0) {\n sizeByteWidth <<= 1;\n size = (0, reference_util_js_1.readUInt)(this.dataView, _indirect - sizeByteWidth, (0, bit_width_util_js_1.fromByteWidth)(this.byteWidth));\n }\n this._length = size;\n }\n else if (this.valueType === value_type_js_1.ValueType.KEY) {\n const _indirect = (0, reference_util_js_1.indirect)(this.dataView, this.offset, this.parentWidth);\n size = 1;\n while (this.dataView.getInt8(_indirect + size) !== 0) {\n size++;\n }\n this._length = size;\n }\n else {\n this._length = 1;\n }\n return Number(this._length);\n }\n toObject() {\n const length = this.length();\n if (this.isVector()) {\n const result = [];\n for (let i = 0; i < length; i++) {\n result.push(this.get(i).toObject());\n }\n return result;\n }\n if (this.isMap()) {\n const result = {};\n for (let i = 0; i < length; i++) {\n const key = (0, reference_util_js_1.keyForIndex)(i, this.dataView, this.offset, this.parentWidth, this.byteWidth);\n result[key] = valueForIndexWithKey(i, key, this.dataView, this.offset, this.parentWidth, this.byteWidth, length, this.path).toObject();\n }\n return result;\n }\n if (this.isNull()) {\n return null;\n }\n if (this.isBool()) {\n return this.boolValue();\n }\n if (this.isNumber()) {\n return this.numericValue();\n }\n return this.blobValue() || this.stringValue();\n }\n}\nexports.Reference = Reference;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encode = exports.toObject = exports.builder = exports.toReference = void 0;\n/* eslint-disable @typescript-eslint/no-namespace */\nconst builder_js_1 = require(\"./flexbuffers/builder.js\");\nconst reference_js_1 = require(\"./flexbuffers/reference.js\");\nvar reference_js_2 = require(\"./flexbuffers/reference.js\");\nObject.defineProperty(exports, \"toReference\", { enumerable: true, get: function () { return reference_js_2.toReference; } });\nfunction builder() {\n return new builder_js_1.Builder();\n}\nexports.builder = builder;\nfunction toObject(buffer) {\n return (0, reference_js_1.toReference)(buffer).toObject();\n}\nexports.toObject = toObject;\nfunction encode(object, size = 2048, deduplicateStrings = true, deduplicateKeys = true, deduplicateKeyVectors = true) {\n const builder = new builder_js_1.Builder(size > 0 ? size : 2048, deduplicateStrings, deduplicateKeys, deduplicateKeyVectors);\n builder.add(object);\n return builder.finish();\n}\nexports.encode = encode;\n","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.9.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2023\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n\n var isArray = root.JS_SHA3_NO_NODE_JS || !Array.isArray\n ? function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n }\n : Array.isArray;\n\n var isView = (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView))\n ? function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n }\n : ArrayBuffer.isView;\n\n // [message: string, isString: bool]\n var formatMessage = function (message) {\n var type = typeof message;\n if (type === 'string') {\n return [message, true];\n }\n if (type !== 'object' || message === null) {\n throw new Error(INPUT_ERROR);\n }\n if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n return [new Uint8Array(message), false];\n }\n if (!isArray(message) && !isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n return [message, false];\n }\n\n var empty = function (message) {\n return formatMessage(message)[0].length === 0;\n };\n\n var cloneArray = function (array) {\n var newArray = [];\n for (var i = 0; i < array.length; ++i) {\n newArray[i] = array[i];\n }\n return newArray;\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (empty(n) && empty(s)) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var result = formatMessage(message);\n message = result[0];\n var isString = result[1];\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (isString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var result = formatMessage(str);\n str = result[0];\n var isString = result[1];\n var bytes = 0, length = str.length;\n if (isString) {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n } else {\n bytes = length;\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = (w - bytes % w) % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n s = cloneArray(s);\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n s = cloneArray(s);\n f(s);\n }\n }\n if (extraBytes) {\n array[j] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n s = cloneArray(s);\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n",null,null,null,null,null,null,null,null,"function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","// Packages\nvar retrier = require('retry');\n\nfunction retry(fn, opts) {\n function run(resolve, reject) {\n var options = opts || {};\n var op;\n\n // Default `randomize` to true\n if (!('randomize' in options)) {\n options.randomize = true;\n }\n\n op = retrier.operation(options);\n\n // We allow the user to abort retrying\n // this makes sense in the cases where\n // knowledge is obtained that retrying\n // would be futile (e.g.: auth errors)\n\n function bail(err) {\n reject(err || new Error('Aborted'));\n }\n\n function onError(err, num) {\n if (err.bail) {\n bail(err);\n return;\n }\n\n if (!op.retry(err)) {\n reject(op.mainError());\n } else if (options.onRetry) {\n options.onRetry(err, num);\n }\n }\n\n function runAttempt(num) {\n var val;\n\n try {\n val = fn(bail, num);\n } catch (err) {\n onError(err, num);\n return;\n }\n\n Promise.resolve(val)\n .then(resolve)\n .catch(function catchIt(err) {\n onError(err, num);\n });\n }\n\n op.attempt(runAttempt);\n }\n\n return new Promise(run);\n}\n\nmodule.exports = retry;\n",null,"import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeWhile(predicate, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var result = predicate(value, index++);\n (result || inclusive) && subscriber.next(value);\n !result && subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=takeWhile.js.map",null,"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.matchingBitCount = exports.intLog2 = exports.cidrPrefixToMaskBinaryString = exports.leftPadWithZeroBit = exports.dottedDecimalNotationToBinaryString = exports.parseBinaryStringToBigInt = exports.decimalNumberToOctetString = exports.numberToBinaryString = void 0;\n/**\n * Converts a decimal number to binary string\n *\n * @param num number to parse\n * @returns {string} the binary string representation of number\n */\nexports.numberToBinaryString = (num) => {\n return num.toString(2);\n};\n/**\n * Converts a decimal number to binary octet (8 bit) string. If needed the octet will be padded with zeros\n * to make it up to 8 bits\n *\n * @param {number} num to convert to octet string\n * @returns {string} the octet string representation of given number\n */\nexports.decimalNumberToOctetString = (num) => {\n let binaryString = exports.numberToBinaryString(num);\n let length = binaryString.length;\n if (length > 8) {\n throw new Error(\"Given decimal in binary contains digits greater than an octet\");\n }\n return exports.leftPadWithZeroBit(binaryString, 8);\n};\n/**\n * Parses number in binary to number in BigInt\n *\n * @param num binary number in string to parse\n * @returns {number} binary number in BigInt\n */\nexports.parseBinaryStringToBigInt = (num) => {\n return BigInt(`0b${num}`);\n};\n/**\n * Given an IPv4 number in dot-decimal notated string, e.g 192.168.0.1 converts it to\n * binary string, e.g. '11000000101010000000000000000001'\n *\n * @param dottedDecimal IPv4 string in dot-decimal notation\n * @returns {string} the binary value of the given ipv4 number in string\n */\nexports.dottedDecimalNotationToBinaryString = (dottedDecimal) => {\n let stringOctets = dottedDecimal.split(\".\");\n return stringOctets.reduce((binaryAsString, octet) => {\n return binaryAsString.concat(exports.decimalNumberToOctetString(parseInt(octet)));\n }, '');\n};\n/**\n * Given a binary string, adds a number of zero to the left until string is as long as the given string length\n * @param {string} binaryString the string to pad\n * @param {number} finalStringLength the final length of string after padding\n * @returns {string}\n */\nexports.leftPadWithZeroBit = (binaryString, finalStringLength) => {\n if (binaryString.length > finalStringLength) {\n throw new Error(`Given string is already longer than given final length after padding: ${finalStringLength}`);\n }\n return \"0\".repeat(finalStringLength - binaryString.length).concat(binaryString);\n};\n/**\n * Given the prefix portion of a cidr notation and the type of IP number, returns the mask in binary string\n *\n * @param {number} cidrPrefix the prefix part of a cidr notation\n * @param {IPNumType.IPv4 | IPNumType.IPv6} ipType the type of the ip number in the range the cidr represents\n */\nexports.cidrPrefixToMaskBinaryString = (cidrPrefix, ipType) => {\n let cidrUpperValue;\n if (ipType == \"IPv4\" /* IPv4 */) {\n cidrUpperValue = 32;\n }\n else {\n cidrUpperValue = 128;\n }\n if (cidrPrefix > cidrUpperValue)\n throw Error(`Value is greater than ${cidrUpperValue}`);\n let onBits = '1'.repeat(cidrPrefix);\n let offBits = '0'.repeat(cidrUpperValue - cidrPrefix);\n return `${onBits}${offBits}`;\n};\n/**\n * Calculates the log, to base 2 of given number.\n *\n * @throws Error if number cannot be converted to log base 2\n * @param givenNumber the number to calculate log base 2\n * @return the log base 2 of given number\n */\nexports.intLog2 = (givenNumber) => {\n let result = 0;\n while (givenNumber % 2n === 0n) {\n if (givenNumber === 2n) {\n result++;\n break;\n }\n givenNumber = givenNumber >> 1n;\n if (givenNumber % 2n !== 0n) {\n result = 0;\n break;\n }\n result++;\n }\n if (result == 0) {\n throw new Error(`The value of log2 for ${givenNumber.toString()} is not an integer`);\n }\n return result;\n};\n/**\n * Starting from the most significant bit (from left) returns the number of first bits from both string that are equal\n * @param firstBinaryString first binary string\n * @param secondBinaryString second binary string\n */\nexports.matchingBitCount = (firstBinaryString, secondBinaryString) => {\n let longerString;\n let otherString;\n if (firstBinaryString.length >= secondBinaryString.length) {\n longerString = firstBinaryString;\n otherString = secondBinaryString;\n }\n else {\n longerString = secondBinaryString;\n otherString = firstBinaryString;\n }\n let count = 0;\n for (; count < longerString.length; count++) {\n if (longerString.charAt(count) === otherString.charAt(count)) {\n continue;\n }\n break;\n }\n return count;\n};\n//# sourceMappingURL=BinaryUtils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collapseIPv6Number = exports.expandIPv6Number = void 0;\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst Validator_1 = require(\"./Validator\");\nlet extractPrefix = (ipv6String) => {\n return ipv6String.includes(\"/\") ? `/${ipv6String.split(\"/\")[1]}` : \"\";\n};\n/**\n * Expands an IPv6 number in abbreviated format into its full form\n *\n * {@see https://en.wikipedia.org/wiki/IPv6_address#Representation} for more on the representation of IPv6 addresses\n *\n * @param {string} ipv6String the abbreviated IPv6 address to expand\n * @returns {string} the expanded IPv6 address\n */\nexports.expandIPv6Number = (ipv6String) => {\n let expandWithZero = (hexadecimalArray) => {\n let paddedArray = hexadecimalArray.map((hexadecimal) => {\n return BinaryUtils_1.leftPadWithZeroBit(hexadecimal, 4);\n });\n return paddedArray.join(\":\");\n };\n let expandDoubleColon = (gapCount) => {\n let pads = [];\n for (let count = 0; count < gapCount; count++) {\n pads.push(\"0000\");\n }\n return pads.join(\":\");\n };\n if (/(:){3,}/.test(ipv6String))\n throw \"given IPv6 contains consecutive : more than two\";\n const prefix = extractPrefix(ipv6String);\n if (ipv6String.includes(\"/\")) {\n ipv6String = ipv6String.split(\"/\")[0];\n }\n let isValid = Validator_1.Validator.IPV6_PATTERN.test(ipv6String);\n if (!isValid) {\n throw Error(Validator_1.Validator.invalidIPv6PatternMessage);\n }\n if (ipv6String.includes(\"::\")) {\n let split = ipv6String.split(\"::\");\n let leftPortion = split[0];\n let rightPortion = split[1];\n let leftPortionSplit = leftPortion.split(\":\").filter(hexadecimal => { return hexadecimal !== \"\"; });\n let rightPortionSplit = rightPortion.split(\":\").filter(hexadecimal => { return hexadecimal !== \"\"; });\n let doublePortion = expandDoubleColon(8 - (leftPortionSplit.length + rightPortionSplit.length));\n let leftString = expandWithZero(leftPortionSplit);\n if (leftString !== \"\") {\n leftString += \":\";\n }\n let rightString = expandWithZero(rightPortionSplit);\n if (rightString !== \"\") {\n rightString = \":\" + rightString;\n }\n return `${leftString}${doublePortion}${rightString}${prefix}`;\n }\n else {\n return `${expandWithZero(ipv6String.split(\":\"))}${prefix}`;\n }\n};\n/**\n * Collapses an IPv6 number in full format into its abbreviated form\n *\n * {@see https://en.wikipedia.org/wiki/IPv6_address#Representation} for more on the representation of IPv6 addresses\n *\n * @param {string} ipv6String the full form IPv6 number to collapse\n * @returns {string} the collapsed IPv6 number\n */\nexports.collapseIPv6Number = (ipv6String) => {\n const prefix = extractPrefix(ipv6String);\n if (ipv6String.includes(\"/\")) {\n ipv6String = ipv6String.split(\"/\")[0];\n }\n let isValid = Validator_1.Validator.IPV6_PATTERN.test(ipv6String);\n if (!isValid) {\n throw Error(Validator_1.Validator.invalidIPv6PatternMessage);\n }\n let hexadecimals = ipv6String.split(\":\");\n let hexadecimalsWithoutLeadingZeros = hexadecimals.map((hexidecimal) => {\n let withoutLeadingZero = hexidecimal.replace(/^0+/, '');\n if (withoutLeadingZero !== '') {\n return withoutLeadingZero;\n }\n else {\n return \"0\";\n }\n });\n let contracted = hexadecimalsWithoutLeadingZeros.join(\":\").replace(/((^0)?(:0){2,}|(^0)(:0){1,})/, ':');\n if (contracted.slice(-1) === \":\") {\n return `${contracted}:${prefix}`;\n }\n contracted = contracted.replace(\":0:\", \"::\");\n return `${contracted}${prefix}`;\n};\n//# sourceMappingURL=IPv6Utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hexadectetNotationToBinaryString = exports.binaryStringToHexadecimalString = exports.colonHexadecimalNotationToBinaryString = exports.hexadecimalStringToHexadecatetString = exports.hexadecimalStringToBinaryString = exports.bigIntToHexadecimalString = void 0;\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\n/**\n * Converts a given bigint number to a hexadecimal string\n * @param num the bigint number\n * @returns {string} the hexadeciaml string\n */\nexports.bigIntToHexadecimalString = (num) => {\n return num.toString(16);\n};\n/**\n * Converts a number in hexadecimal (base 16) to binary string\n * @param {string} hexadecimalString the number in base 16\n * @returns {string} the number converted to base 2\n */\nexports.hexadecimalStringToBinaryString = (hexadecimalString) => {\n let inDecimal = BigInt(`0x${hexadecimalString}`);\n return inDecimal.toString(2);\n};\n/**\n * Converts a number in hexadecimal (base 16) to binary hexadecatet string.\n * This means the bits in the output cannot be more than 16\n *\n * @param hexadecimalString {string} the number converted to binary hexadecatet string\n */\nexports.hexadecimalStringToHexadecatetString = (hexadecimalString) => {\n let binaryString = exports.hexadecimalStringToBinaryString(hexadecimalString);\n let length = binaryString.length;\n if (length > 16) {\n throw new Error(\"Given decimal in binary contains digits greater than an Hexadecatet\");\n }\n return BinaryUtils_1.leftPadWithZeroBit(binaryString, 16);\n};\n/**\n * Given an IPv6 number in hexadecimal notated string, e.g 2001:0db8:0000:0000:0000:0000:0000:0000 converts it to\n * binary string\n *\n * @param hexadecimalString IPv6 string\n * @returns {string} the binary value of the given ipv6 number in string\n */\nexports.colonHexadecimalNotationToBinaryString = (hexadecimalString) => {\n let expandedIPv6 = IPv6Utils_1.expandIPv6Number(hexadecimalString);\n let stringHexadecimal = expandedIPv6.split(\":\");\n return stringHexadecimal.reduce((binaryAsString, hexidecimal) => {\n return binaryAsString.concat(exports.hexadecimalStringToHexadecatetString(hexidecimal));\n }, '');\n};\n/**\n * Converts number in binary string to hexadecimal string\n * @param {string} num in binary string\n * @returns {string} num in hexadecimal string\n */\nexports.binaryStringToHexadecimalString = (num) => {\n // first convert to binary string to decimal (big Integer)\n let inDecimal = BigInt(`0b${num}`);\n return inDecimal.toString(16);\n};\n/**\n * Converts a given IPv6 number expressed in the hexadecimal string notation into a 16 bit binary number in string\n * @param {string} hexadectetString the IPv6 number\n * @returns {string} the IPv6 number converted to binary string\n */\nexports.hexadectetNotationToBinaryString = (hexadectetString) => {\n let expand = IPv6Utils_1.expandIPv6Number(hexadectetString);\n let hexadecimals = expand.split(\":\");\n return hexadecimals.reduce((hexadecimalAsString, hexavalue) => {\n return hexadecimalAsString.concat(BinaryUtils_1.leftPadWithZeroBit(exports.hexadecimalStringToBinaryString(hexavalue), 16));\n }, '');\n};\n//# sourceMappingURL=HexadecimalUtils.js.map","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Validator = void 0;\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst BinaryUtils_2 = require(\"./BinaryUtils\");\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst HexadecimalUtils_2 = require(\"./HexadecimalUtils\");\nclass Validator {\n /**\n * Checks if given ipNumber is in between the given lower and upper bound\n *\n * @param ipNumber ipNumber to check\n * @param lowerBound lower bound\n * @param upperBound upper bound\n * @returns {boolean} true if ipNumber is between lower and upper bound\n */\n static isWithinRange(ipNumber, lowerBound, upperBound) {\n return ipNumber >= lowerBound && ipNumber <= upperBound;\n }\n /**\n * Checks if the number given is within the value considered valid for an ASN number\n *\n * @param asnNumber the asn number to validate\n * @returns {[boolean , string]} first value is true if valid ASN, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidAsnNumber(asnNumber) {\n let isValid = this.isWithinRange(asnNumber, 0n, this.THIRTY_TWO_BIT_SIZE);\n return [isValid, isValid ? [] : [Validator.invalidAsnRangeMessage]];\n }\n /**\n * Checks if the given ASN number is a 16bit ASN number\n *\n * @param {bigint} asnNumber to check if 16bit or not\n * @returns {[boolean , string]} first value is true if valid 16bit ASN, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValid16BitAsnNumber(asnNumber) {\n let isValid = Validator.isWithinRange(asnNumber, 0n, Validator.SIXTEEN_BIT_SIZE);\n return [isValid, isValid ? [] : [Validator.invalid16BitAsnRangeMessage]];\n }\n /**\n * Checks if the number given is within the value considered valid for an IPv4 number\n *\n * @param ipv4Number the asn number to validate\n * @returns {[boolean , string]} first value is true if valid IPv4 number, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv4Number(ipv4Number) {\n ipv4Number = typeof ipv4Number === \"bigint\" ? ipv4Number : BigInt(ipv4Number);\n let isValid = this.isWithinRange(ipv4Number, 0n, this.THIRTY_TWO_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv4NumberMessage]];\n }\n /**\n * Checks if the number given is within the value considered valid for an IPv6 number\n *\n * @param ipv6Number the asn number to validate\n * @returns {[boolean , string]} first value is true if valid IPv6 number, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Number(ipv6Number) {\n let isValid = this.isWithinRange(ipv6Number, 0n, this.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv6NumberMessage]];\n }\n /**\n * Checks if the number given is valid for an IPv4 octet\n *\n * @param octetNumber the octet value\n * @returns {boolean} true if valid octet, false otherwise\n */\n static isValidIPv4Octet(octetNumber) {\n let withinRange = this.isWithinRange(octetNumber, 0n, this.EIGHT_BIT_SIZE);\n return [withinRange, withinRange ? [] : [Validator.invalidOctetRangeMessage]];\n }\n /**\n * Checks if the number given is valid for an IPv6 hexadecatet\n *\n * @param {bigint} hexadecatetNum the hexadecatet value\n * @returns {[boolean , string]} first value is true if valid hexadecatet, false otherwise. Second value contains\n * \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Hexadecatet(hexadecatetNum) {\n let isValid = this.isWithinRange(hexadecatetNum, 0n, this.SIXTEEN_BIT_SIZE);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidHexadecatetMessage]];\n }\n /**\n * Checks if given string is a valid IPv4 value.\n *\n * @param {string} ipv4String the IPv4 string to validate\n * @returns {[boolean , string]} result of validation, first value represents if is valid IPv4, second value\n * contains error message if invalid IPv4\n */\n static isValidIPv4String(ipv4String) {\n let rawOctets = ipv4String.split(\".\");\n if (rawOctets.length != 4 || rawOctets.includes('')) {\n return [false, [Validator.invalidOctetCountMessage]];\n }\n let isValid = rawOctets.every(octet => {\n return Validator.isNumeric(octet) ? Validator.isValidIPv4Octet(BigInt(octet))[0] : false;\n });\n if (!isValid) {\n return [false, [Validator.invalidOctetRangeMessage]];\n }\n isValid = Validator.IPV4_PATTERN.test(ipv4String);\n return [isValid, isValid ? [] : [Validator.invalidIPv4PatternMessage]];\n }\n /**\n * Checks if given string is a valid IPv6 value.\n *\n * @param {string} ipv6String the IPv6 string to validate\n * @returns {[boolean , string]} result of validation, first value represents if is valid IPv6, second value\n * contains error message if invalid IPv6\n */\n static isValidIPv6String(ipv6String) {\n try {\n let hexadecimals = IPv6Utils_1.expandIPv6Number(ipv6String).split(\":\");\n if (hexadecimals.length != 8) {\n return [false, [Validator.invalidHexadecatetCountMessage]];\n }\n let isValid = hexadecimals.every(hexadecimal => {\n return Validator.isHexadecatet(hexadecimal) ?\n Validator.isValidIPv6Hexadecatet(BigInt(`0x${hexadecimal}`))[0] : false;\n });\n if (!isValid) {\n return [false, [Validator.invalidHexadecatetMessage]];\n }\n isValid = Validator.IPV6_PATTERN.test(ipv6String);\n return [isValid, isValid ? [] : [Validator.invalidIPv6PatternMessage]];\n }\n catch (error) {\n return [false, [error]];\n }\n }\n /**\n * Checks if given value is a valid prefix value\n *\n * @param prefixValue value to check\n * @param ipNumType The type of IP number\n * @returns {(boolean|string)[]} a tuple representing if valid or not and corresponding message\n */\n static isValidPrefixValue(prefixValue, ipNumType) {\n if (\"IPv4\" /* IPv4 */ === ipNumType) {\n let withinRange = Validator.isWithinRange(BigInt(prefixValue), 0n, 32n);\n return [withinRange, withinRange ? [] : [Validator.invalidPrefixValueMessage]];\n }\n if (\"IPv6\" /* IPv6 */ === ipNumType) {\n let withinRange = Validator.isWithinRange(BigInt(prefixValue), 0n, 128n);\n return [withinRange, withinRange ? [] : [Validator.invalidPrefixValueMessage]];\n }\n return [false, [Validator.invalidInetNumType]];\n }\n /**\n * Checks if given string is a valid IPv4 mask\n *\n * @param {string} ipv4MaskString the given IPv4 mask string\n * @returns {[boolean , string]} first value is true if valid IPv4 mask string, false otherwise. Second value\n * contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv4Mask(ipv4MaskString) {\n let ipv4InBinary = BinaryUtils_1.dottedDecimalNotationToBinaryString(ipv4MaskString);\n let isValid = Validator.IPV4_CONTIGUOUS_MASK_BIT_PATTERN.test(ipv4InBinary);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidMaskMessage]];\n }\n /**\n * Checks if given string is a valid IPv6 mask\n *\n * @param {string} ipv6MaskString the given IPv6 mask string\n * @returns {[boolean , string]} first value is true if valid IPv6 mask string, false otherwise. Second value\n * contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv6Mask(ipv6MaskString) {\n let ipv6InBinary = HexadecimalUtils_2.hexadectetNotationToBinaryString(ipv6MaskString);\n let isValid = Validator.IPV6_CONTIGUOUS_MASK_BIT_PATTERN.test(ipv6InBinary);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidMaskMessage]];\n }\n /**\n * Checks if the given string is a valid IPv4 range in Cidr notation\n *\n * @param {string} ipv4RangeAsCidrString the IPv4 range in Cidr notation\n *\n * @returns {[boolean , string[]]} first value is true if valid IPv4 range in Cidr notation, false otherwise. Second\n * value contains \"valid\" or an error message when value is invalid\n */\n static isValidIPv4CidrNotation(ipv4RangeAsCidrString) {\n let cidrComponents = ipv4RangeAsCidrString.split(\"/\");\n if (cidrComponents.length !== 2 || (cidrComponents[0].length === 0 || cidrComponents[1].length === 0)) {\n return [false, [Validator.invalidIPv4CidrNotationMessage]];\n }\n let ip = cidrComponents[0];\n let range = cidrComponents[1];\n if (isNaN(Number(range))) {\n return [false, [Validator.invalidIPv4CidrNotationMessage]];\n }\n let [validIpv4, invalidIpv4Message] = Validator.isValidIPv4String(ip);\n let [validPrefix, invalidPrefixMessage] = Validator.isValidPrefixValue(BigInt(range), \"IPv4\" /* IPv4 */);\n let isValid = validIpv4 && validPrefix;\n let invalidMessage = invalidIpv4Message.concat(invalidPrefixMessage);\n return isValid ? [isValid, []] : [isValid, invalidMessage];\n }\n /**\n * Checks if the given string is a valid IPv4 range in Cidr notation, with the ip number in the cidr notation\n * being the start of the range\n *\n * @param {string} ipv4CidrNotation the IPv4 range in Cidr notation\n *\n * * @returns {[boolean , string[]]} first value is true if valid Cidr notation, false otherwise. Second\n * value contains [] or an array of error message when invalid\n */\n static isValidIPv4CidrRange(ipv4CidrNotation) {\n return Validator.isValidCidrRange(ipv4CidrNotation, Validator.isValidIPv4CidrNotation, BinaryUtils_1.dottedDecimalNotationToBinaryString, (value) => BinaryUtils_2.cidrPrefixToMaskBinaryString(value, \"IPv4\" /* IPv4 */));\n }\n /**\n * Checks if the given string is a valid IPv6 range in Cidr notation, with the ip number in the cidr notation\n * being the start of the range\n *\n * @param {string} ipv6CidrNotation the IPv6 range in Cidr notation\n *\n * * @returns {[boolean , string[]]} first value is true if valid Cidr notation, false otherwise. Second\n * value contains [] or an array of error message when invalid\n */\n static isValidIPv6CidrRange(ipv6CidrNotation) {\n return Validator.isValidCidrRange(ipv6CidrNotation, Validator.isValidIPv6CidrNotation, HexadecimalUtils_1.colonHexadecimalNotationToBinaryString, (value) => BinaryUtils_2.cidrPrefixToMaskBinaryString(value, \"IPv6\" /* IPv6 */));\n }\n static isValidCidrRange(rangeString, cidrNotationValidator, toBinaryStringConverter, prefixFactory) {\n let validationResult = cidrNotationValidator(rangeString);\n if (!validationResult[0]) {\n return validationResult;\n }\n let cidrComponents = rangeString.split(\"/\");\n let ip = cidrComponents[0];\n let range = cidrComponents[1];\n let ipNumber = BigInt(`0b${toBinaryStringConverter(ip)}`);\n let mask = BigInt(`0b${prefixFactory(parseInt(range))}`);\n let isValid = (ipNumber & (mask)) === (ipNumber);\n return isValid ? [isValid, []] : [isValid, [Validator.InvalidIPCidrRangeMessage]];\n }\n static isValidIPv4RangeString(ipv4RangeString) {\n let firstLastValidator = (firstIP, lastIP) => BigInt(`0b${BinaryUtils_1.dottedDecimalNotationToBinaryString(firstIP)}`)\n >= BigInt(`0b${BinaryUtils_1.dottedDecimalNotationToBinaryString(lastIP)}`);\n return this.isValidRange(ipv4RangeString, Validator.isValidIPv4String, firstLastValidator);\n }\n static isValidIPv6RangeString(ipv6RangeString) {\n let firstLastValidator = (firstIP, lastIP) => BigInt(`0b${HexadecimalUtils_2.hexadectetNotationToBinaryString(firstIP)}`)\n >= BigInt(`0b${HexadecimalUtils_2.hexadectetNotationToBinaryString(lastIP)}`);\n return this.isValidRange(ipv6RangeString, Validator.isValidIPv6String, firstLastValidator);\n }\n static isValidRange(rangeString, validator, firstLastValidator) {\n let rangeComponents = rangeString.split(\"-\").map(component => component.trim());\n if (rangeComponents.length !== 2 || (rangeComponents[0].length === 0 || rangeComponents[1].length === 0)) {\n return [false, [Validator.invalidRangeNotationMessage]];\n }\n let firstIP = rangeComponents[0];\n let lastIP = rangeComponents[1];\n let [validFirstIP, invalidFirstIPMessage] = validator(firstIP);\n let [validLastIP, invalidLastIPMessage] = validator(lastIP);\n let isValid = validFirstIP && validLastIP;\n if (isValid && firstLastValidator(firstIP, lastIP)) {\n return [false, [Validator.invalidRangeFirstNotGreaterThanLastMessage]];\n }\n let invalidMessage = invalidFirstIPMessage.concat(invalidLastIPMessage);\n return isValid ? [isValid, []] : [isValid, invalidMessage];\n }\n /**\n * Checks if the given string is a valid IPv6 range in Cidr notation\n *\n * @param {string} ipv6RangeAsCidrString the IPv6 range in Cidr notation\n *\n * @returns {[boolean , string]} first value is true if valid IPv6 range in Cidr notation, false otherwise.\n * Second value contains \"valid\" or an error message when value is invalid\n */\n // TODO change to be like isValidIPv4CidrNotation where validation is done on the component of the cidr notation\n // instead of a single regex check\n static isValidIPv6CidrNotation(ipv6RangeAsCidrString) {\n let isValid = Validator.IPV6_RANGE_PATTERN.test(ipv6RangeAsCidrString);\n return isValid ? [isValid, []] : [isValid, [Validator.invalidIPv6CidrNotationString]];\n }\n /**\n * Checks if the given string is a binary string. That is contains only contiguous 1s and 0s\n *\n * @param {string} binaryString the binary string\n * @returns {(boolean|string)[]} a tuple representing if valid or not and corresponding message\n */\n static isValidBinaryString(binaryString) {\n if (/^([10])+$/.test(binaryString)) {\n return [true, []];\n }\n else {\n return [false, [Validator.invalidBinaryStringErrorMessage]];\n }\n }\n static isNumeric(value) {\n return /^(\\d+)$/.test(value);\n }\n static isHexadecatet(value) {\n return /^[0-9A-Fa-f]{4}$/.test(value);\n }\n}\nexports.Validator = Validator;\nValidator.IPV4_PATTERN = new RegExp(/^(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/);\n// source: https://community.helpsystems.com/forums/intermapper/miscellaneous-topics/5acc4fcf-fa83-e511-80cf-0050568460e4\nValidator.IPV6_PATTERN = new RegExp(/^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/);\nValidator.IPV4_RANGE_PATTERN = new RegExp(/^(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.(0?[0-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\\/)([1-9]|[1-2][0-9]|3[0-2])$/);\nValidator.IPV6_RANGE_PATTERN = new RegExp(/^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/);\nValidator.IPV4_CONTIGUOUS_MASK_BIT_PATTERN = new RegExp(/^(1){0,32}(0){0,32}$/);\nValidator.IPV6_CONTIGUOUS_MASK_BIT_PATTERN = new RegExp(/^(1){0,128}(0){0,128}$/);\nValidator.EIGHT_BIT_SIZE = BigInt(`0b${\"1\".repeat(8)}`);\nValidator.SIXTEEN_BIT_SIZE = BigInt(`0b${\"1\".repeat(16)}`);\nValidator.THIRTY_TWO_BIT_SIZE = BigInt(`0b${\"1\".repeat(32)}`);\nValidator.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE = BigInt(`0b${\"1\".repeat(128)}`);\nValidator.IPV4_SIZE = BigInt(\"4294967296\");\nValidator.IPV6_SIZE = BigInt(\"340282366920938463463374607431768211456\");\nValidator.invalidAsnRangeMessage = \"ASN number given less than zero or is greater than 32bit\";\nValidator.invalid16BitAsnRangeMessage = \"ASN number given less than zero or is greater than 16bit\";\nValidator.invalidIPv4NumberMessage = \"IPv4 number given less than zero or is greater than 32bit\";\nValidator.invalidIPv6NumberMessage = \"IPv6 number given less than zero or is greater than 128bit\";\nValidator.invalidOctetRangeMessage = \"Value given contains an invalid Octet; Value is less than zero or is greater than 8bit\";\nValidator.invalidHexadecatetMessage = \"The value given is less than zero or is greater than 16bit\";\nValidator.invalidOctetCountMessage = \"An IP4 number cannot have less or greater than 4 octets\";\nValidator.invalidHexadecatetCountMessage = \"An IP6 number must have exactly 8 hexadecatet\";\nValidator.invalidMaskMessage = \"The Mask is invalid\";\nValidator.invalidPrefixValueMessage = \"A Prefix value cannot be less than 0 or greater than 32\";\nValidator.invalidIPv4CidrNotationMessage = \"Cidr notation should be in the form [ip number]/[range]\";\nValidator.InvalidIPCidrRangeMessage = \"Given IP number portion must is not the start of the range\";\nValidator.invalidRangeNotationMessage = \"Range notation should be in the form [first ip]-[last ip]\";\nValidator.invalidRangeFirstNotGreaterThanLastMessage = \"First IP in [first ip]-[last ip] must be less than Last IP\";\nValidator.invalidIPv6CidrNotationString = \"A Cidr notation string should contain an IPv6 number and prefix\";\nValidator.takeOutOfRangeSizeMessage = \"$count is greater than $size, the size of the range\";\nValidator.cannotSplitSingleRangeErrorMessage = \"Cannot split an IP range with a single IP number\";\nValidator.invalidInetNumType = \"Given ipNumType must be either InetNumType.IPv4 or InetNumType.IPv6\";\nValidator.invalidBinaryStringErrorMessage = \"Binary string should contain only contiguous 1s and 0s\";\nValidator.invalidIPRangeSizeMessage = \"Given size is zero or greater than maximum size of $iptype\";\nValidator.invalidIPRangeSizeForCidrMessage = \"Given size can't be created via cidr prefix\";\nValidator.invalidIPv4PatternMessage = \"Given IPv4 is not confirm to a valid IPv6 address\";\nValidator.invalidIPv6PatternMessage = \"Given IPv6 is not confirm to a valid IPv6 address\";\n//# sourceMappingURL=Validator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hexadecatet = void 0;\nconst Validator_1 = require(\"./Validator\");\n/**\n * A representation of a 4-digit hexadecimal number.\n *\n * It consists of four (base 16) number. ie FFFF\n *\n * It is used to represents the components of an IPv6 address\n */\nclass Hexadecatet {\n /**\n * Constructor for creating an instance of {@link Hexadecatet}\n *\n * @param {string | number} givenValue a string or numeric value. If given value is a string then it should be a\n * four (base 16) number representation of a 16bit value. If it is a number, then it should be a decimal number\n * representation of a 16 bit value\n */\n constructor(givenValue) {\n let hexadecatetValue;\n if (typeof givenValue === 'string') {\n hexadecatetValue = parseInt(givenValue, 16);\n }\n else {\n hexadecatetValue = parseInt(String(givenValue), 16);\n }\n let [isValid, message] = Validator_1.Validator.isValidIPv6Hexadecatet(BigInt(hexadecatetValue));\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = hexadecatetValue;\n }\n /**\n * A convenience method for constructing an instance of {@link Hexadecatet} from a four (base 16) number\n * representation of a 16bit value.\n *\n * @param {string} rawValue the four (base 16) number\n * @returns {Hexadecatet} an instance of {@link Hexadecatet}\n */\n static fromString(rawValue) {\n return new Hexadecatet(rawValue);\n }\n ;\n /**\n * A convenience method for constructing an instance of {@link Hexadecatet} from a decimal number representation\n * of a 16 bit value\n *\n * @param {number} rawValue decimal number representation of a 16 bit value\n * @returns {Hexadecatet} an instance of {@link Hexadecatet}\n */\n static fromNumber(rawValue) {\n return new Hexadecatet(rawValue);\n }\n ;\n /**\n * Returns the numeric value in base 10 (ie decimal)\n *\n * @returns {number} the numeric value in base 10 (ie decimal)\n */\n getValue() {\n return this.value;\n }\n /**\n * Returns the string representation of the base 16 representation of the value\n * @returns {string} the string representation of the base 16 representation of the value\n */\n // TODO pad with a zero if digit is less than 4\n toString() {\n return this.value.toString(16);\n }\n}\nexports.Hexadecatet = Hexadecatet;\n//# sourceMappingURL=Hexadecatet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Octet = void 0;\nconst Validator_1 = require(\"./Validator\");\n/**\n * A binary representation of a 8 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Octet_(computing)} for more information on Octets\n *\n * An octet is used in the textual representation of an {@link IPv4} number, where the IP number value is divided\n * into 4 octets\n */\nclass Octet {\n /**\n * Constructor for creating an instance of an Octet.\n *\n * The constructor parameter given could either be a string or number.\n *\n * If a string, it is the string representation of the numeric value of the octet\n * If a number, it is the numeric representation of the value of the octet\n *\n * @param {string | number} givenValue value of the octet to be created.\n */\n constructor(givenValue) {\n let octetValue;\n if (typeof givenValue === 'string') {\n octetValue = parseInt(givenValue);\n }\n else {\n octetValue = givenValue;\n }\n let [isValid, message] = Validator_1.Validator.isValidIPv4Octet(BigInt(octetValue));\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = octetValue;\n }\n /**\n * Convenience method for creating an Octet out of a string value representing the value of the octet\n *\n * @param {string} rawValue the octet value in string\n * @returns {Octet} the Octet instance\n */\n static fromString(rawValue) {\n return new Octet(rawValue);\n }\n ;\n /**\n * Convenience method for creating an Octet out of a numeric value representing the value of the octet\n *\n * @param {number} rawValue the octet value in number\n * @returns {Octet} the Octet instance\n */\n static fromNumber(rawValue) {\n return new Octet(rawValue);\n }\n ;\n /**\n * Method to get the numeric value of the octet\n *\n * @returns {number} the numeric value of the octet\n */\n getValue() {\n return this.value;\n }\n /**\n * Returns a decimal representation of the value of the octet in string\n *\n * @returns {string} a decimal representation of the value of the octet in string\n */\n toString() {\n return this.value.toString(10);\n }\n}\nexports.Octet = Octet;\n//# sourceMappingURL=Octet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isIPv4 = exports.IPv6Mask = exports.IPv4Mask = exports.IPv6 = exports.Asn = exports.IPv4 = exports.AbstractIPNum = void 0;\nconst Octet_1 = require(\"./Octet\");\nconst Validator_1 = require(\"./Validator\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst BinaryUtils_2 = require(\"./BinaryUtils\");\nconst BinaryUtils_3 = require(\"./BinaryUtils\");\nconst BinaryUtils_4 = require(\"./BinaryUtils\");\nconst Hexadecatet_1 = require(\"./Hexadecatet\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst IPv6Utils_1 = require(\"./IPv6Utils\");\nconst HexadecimalUtils_2 = require(\"./HexadecimalUtils\");\n/**\n * Provides the implementation of functionality that are common\n * to {@link IPv4}, {@link IPv6}, {@link IPv4Mask} and {@link IPv6Mask}\n */\nclass AbstractIPNum {\n /**\n * Gets the numeric value of an IP number as {@link BigInt}\n *\n * @returns bigInt the numeric value of an IP number.\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the binary string representation of an IP number.\n *\n * @returns {string} the string binary representation.\n */\n toBinaryString() {\n return BinaryUtils_3.leftPadWithZeroBit(this.value.toString(2), this.bitSize);\n }\n /**\n * Checks if an IP number has a value greater than the present value\n * @returns {boolean} true, if there is a value greater than the present value. Returns false otherwise.\n */\n hasNext() {\n return this.value < this.maximumBitSize;\n }\n /**\n * Checks if an IP number has a value lesser than the present value\n * @returns {boolean} true, if there is a value lesser than the present value. Returns false otherwise.\n */\n hasPrevious() {\n return this.value > 0n;\n }\n /**\n * Checks if the given IP number, is equals to the current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is equals\n */\n isEquals(anotherIPNum) {\n return this.value === anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is lesser than this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is less than this current one. False otherwise.\n */\n isLessThan(anotherIPNum) {\n return this.value < anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is greater than this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is greater than this current one. False otherwise.\n */\n isGreaterThan(anotherIPNum) {\n return this.value > anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is less than or equals to this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} true if the given IP number is less than or equals to this current one. False otherwise.\n */\n isLessThanOrEquals(anotherIPNum) {\n return this.value <= anotherIPNum.value;\n }\n /**\n * Checks if the given IP number is greater than or equals to this current IP number\n *\n * @param {AbstractIPNum} anotherIPNum the other IP number to compare with\n * @returns {boolean} {boolean} true if the given IP number is greater than or equals to this current one. False\n * otherwise.\n */\n isGreaterThanOrEquals(anotherIPNum) {\n return this.value >= anotherIPNum.value;\n }\n}\nexports.AbstractIPNum = AbstractIPNum;\n/**\n * Represents an IPv4 number. A 32 bit number that is used to uniquely identify a device that is part of a computer\n * network that uses the internet protocol for communication.\n *\n * @see https://en.wikipedia.org/wiki/IPv4\n * @see https://www.rfc-editor.org/info/rfc791\n */\nclass IPv4 extends AbstractIPNum {\n /**\n * Constructor for an IPv4 number.\n *\n * @param {string | bigint} ipValue value to construct an IPv4 from. The given value can either be\n * numeric or string. If a string is given then it needs to be in dot-decimal notation\n */\n constructor(ipValue) {\n super();\n /**\n * The number of bits needed to represents the value of the IPv4 number\n */\n this.bitSize = 32;\n /**\n * The maximum bit size (i.e. binary value) of the IPv4 number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.THIRTY_TWO_BIT_SIZE;\n /**\n * The type of IP number. Value is one of the values of the {@link IPNumType} enum\n * @type {IPNumType} the type of IP number\n */\n this.type = \"IPv4\" /* IPv4 */;\n /**\n * An array of {@link Octet}'s\n *\n * @type {Array} the octets that makes up the IPv4 number\n */\n this.octets = [];\n /**\n * The string character used to separate the individual octets when the IPv4 is rendered as strings\n *\n * @type {string} The string character used to separate the individual octets when rendered as strings\n */\n this.separator = \".\";\n if (typeof ipValue === \"string\") {\n let [value, octets] = this.constructFromDecimalDottedString(ipValue);\n this.value = value;\n this.octets = octets;\n }\n else {\n let [value, octets] = this.constructFromBigIntValue(ipValue);\n this.value = value;\n this.octets = octets;\n }\n }\n /**\n * A convenience method for creating an {@link IPv4} by providing the decimal value of the IP number in BigInt\n *\n * @param {bigint} bigIntValue the decimal value of the IP number in BigInt\n * @returns {IPv4} the IPv4 instance\n */\n static fromNumber(bigIntValue) {\n return new IPv4(bigIntValue);\n }\n /**\n * A convenience method for creating an {@link IPv4} by providing the IP number in dot-decimal notation. E.g\n * \"10.1.1.10\"\n *\n * {@see https://en.wikipedia.org/wiki/Dot-decimal_notation} for more information on dot-decimal notation.\n *\n * @param {string} ipString the IP number in dot-decimal notation\n * @returns {IPv4} the IPv4 instance\n */\n static fromDecimalDottedString(ipString) {\n return new IPv4(ipString);\n }\n /**\n * Alias for IPv4.fromDecimalDottedString.\n *\n * @param {string} ipString the IP number in dot-decimal notation\n * @returns {IPv4} the IPv4 instance\n */\n static fromString(ipString) {\n return IPv4.fromDecimalDottedString(ipString);\n }\n /**\n * A convenience method for creating an {@link IPv4} from binary string\n *\n * @param {string} ipBinaryString the binary string representing the IPv4 number to be created\n * @returns {IPv4} the IPv4 instance\n */\n static fromBinaryString(ipBinaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(ipBinaryString);\n if (validationResult[0]) {\n return new IPv4(BinaryUtils_2.parseBinaryStringToBigInt(ipBinaryString));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * A string representation of the IPv4 number. The string representation is in dot-decimal notation\n *\n * @returns {string} The string representation in dot-decimal notation\n */\n toString() {\n return this.octets.map((value) => { return value.toString(); }).join(this.separator);\n }\n /**\n * Gets the individual {@link Octet} that makes up the IPv4 number\n *\n * @returns {Array} The individual {@link Octet} that makes up the IPv4 number\n */\n getOctets() {\n return this.octets;\n }\n /**\n * Returns the next IPv4 number\n *\n * @returns {IPv4} the next IPv4 number\n */\n nextIPNumber() {\n return IPv4.fromNumber(this.getValue() + 1n);\n }\n /**\n * Returns the previous IPv4 number\n *\n * @returns {IPv4} the previous IPv4 number\n */\n previousIPNumber() {\n return IPv4.fromNumber(this.getValue() - 1n);\n }\n /**\n * Returns this IPv4 number as a IPv4-Mapped IPv6 Address\n *\n * The IPv4-Mapped IPv6 Address allows an IPv4 number to be embedded within an IPv6 number\n *\n * {@see https://tools.ietf.org/html/rfc4291#section-2.5.5} for more information on the IPv4-Mapped IPv6 Address\n *\n * @returns {IPv6} an IPv6 number with the IPv4 embedded within it\n */\n toIPv4MappedIPv6() {\n let binary = '1'.repeat(16) + this.toBinaryString();\n return IPv6.fromBinaryString(binary);\n }\n constructFromDecimalDottedString(ipString) {\n let octets;\n let value;\n let [isValid, message] = Validator_1.Validator.isValidIPv4String(ipString);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringOctets = ipString.split(\".\");\n octets = stringOctets.map((rawOctet) => {\n return Octet_1.Octet.fromString(rawOctet);\n });\n value = BigInt(`0b${BinaryUtils_1.dottedDecimalNotationToBinaryString(ipString)}`);\n return [value, octets];\n }\n constructFromBigIntValue(ipv4Number) {\n let [isValid, message] = Validator_1.Validator.isValidIPv4Number(ipv4Number);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let binaryString = BinaryUtils_4.numberToBinaryString(ipv4Number);\n ipv4Number = typeof ipv4Number === \"bigint\" ? ipv4Number : BigInt(ipv4Number);\n return [ipv4Number, this.binaryStringToDecimalOctets(binaryString)];\n }\n binaryStringToDecimalOctets(ipv4BinaryString) {\n if (ipv4BinaryString.length < 32) {\n ipv4BinaryString = BinaryUtils_3.leftPadWithZeroBit(ipv4BinaryString, 32);\n }\n let octets = ipv4BinaryString.match(/.{1,8}/g);\n return octets.map((octet) => {\n return Octet_1.Octet.fromString(BinaryUtils_2.parseBinaryStringToBigInt(octet).toString());\n });\n }\n}\nexports.IPv4 = IPv4;\n/**\n * Represents an Autonomous System Number. Which is a number that is used to identify\n * a group of IP addresses with a common, clearly defined routing policy.\n *\n * @see https://en.wikipedia.org/wiki/Autonomous_system_(Internet)\n * @see https://tools.ietf.org/html/rfc5396\n */\nclass Asn extends AbstractIPNum {\n /**\n * Constructor for an instance of {@link ASN}\n *\n * @param {string | number} rawValue value to construct an ASN from. The given value can either be numeric or\n * string. If in string then it can be in asplain, asdot or asdot+ string representation format\n */\n constructor(rawValue) {\n super();\n /**\n * The number of bits needed to represents the value of the ASN number\n */\n this.bitSize = 32;\n /**\n * The maximum bit size (i.e. binary value) of the ASN number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.THIRTY_TWO_BIT_SIZE;\n this.type = \"ASN\" /* ASN */;\n if (typeof rawValue === 'string') {\n if (Asn.startWithASPrefix(rawValue)) {\n this.value = BigInt(parseInt(rawValue.substring(2)));\n }\n else if (rawValue.indexOf(\".\") != -1) {\n this.value = BigInt(this.parseFromDotNotation(rawValue));\n }\n else {\n this.value = BigInt(parseInt(rawValue));\n }\n }\n else {\n let valueAsBigInt = BigInt(rawValue);\n let [isValid, message] = Validator_1.Validator.isValidAsnNumber(valueAsBigInt);\n if (!isValid) {\n throw Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = valueAsBigInt;\n }\n }\n /**\n * A convenience method for creating an instance of {@link Asn} from a string\n *\n * The given string can be in asplain, asdot or asdot+ representation format.\n * {@see https://tools.ietf.org/html/rfc5396} for more information on\n * the different ASN string representation\n *\n * @param {string} rawValue the asn string. In either asplain, asdot or asdot+ format\n * @returns {Asn} the constructed ASN instance\n */\n static fromString(rawValue) {\n return new Asn(rawValue);\n }\n ;\n /**\n * A convenience method for creating an instance of {@link Asn} from a numeric value\n *\n * @param {number} rawValue the asn numeric value\n * @returns {Asn} the constructed ASN instance\n */\n static fromNumber(rawValue) {\n return new Asn(rawValue);\n }\n ;\n /**\n * A convenience method for creating an instance of {@link Asn} from a binary string\n *\n * @param {string} binaryString to create an ASN instance from\n * @returns {Asn} the constructed ASN instance\n */\n static fromBinaryString(binaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(binaryString);\n if (validationResult[0]) {\n return new Asn(parseInt(binaryString, 2));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * A string representation where the asn value is prefixed by \"ASN\". For example \"AS65526\"\n *\n * @returns {string} A string representation where the asn value is prefixed by \"ASN\"\n */\n toString() {\n let stringValue = this.value.toString();\n return `${Asn.AS_PREFIX}${stringValue}`;\n }\n /**\n * A string representation where the ASN numeric value of is represented as a string. For example \"65526\"\n *\n * @returns {string} A string representation where the ASN numeric value of is represented as a string\n */\n toASPlain() {\n return this.value.toString();\n }\n /**\n * A string representation where the ASN value is represented using the asplain notation if the ASN value is\n * less than 65536 and uses asdot+ notation when the value is greater than 65536.\n *\n * For example 65526 will be represented as \"65526\" while 65546 will be represented as \"1.10\"\n *\n *\n * @returns {string} A string representation of the ASN in either asplain or asdot+ notation depending on\n * whether the numeric value of the ASN number is greater than 65526 or not.\n */\n toASDot() {\n if (this.value.valueOf() >= 65536n) {\n return this.toASDotPlus();\n }\n return this.toASPlain();\n }\n /**\n * A string representation where the ASN value is represented using the asdot+ notation\n *\n * @returns {string} A string representation where the ASN value is represented using the asdot+ notation\n *\n */\n toASDotPlus() {\n let high = this.value.valueOf() / 65535n;\n let low = (this.value.valueOf() % 65535n) - high;\n return `${high}.${low}`;\n }\n /**\n * Converts the ASN value to binary numbers represented with strings\n *\n * @returns {string} a binary string representation of the value of the ASN number\n */\n toBinaryString() {\n return BinaryUtils_4.numberToBinaryString(this.value);\n }\n /**\n * Checks if the ASN value is 16bit\n *\n * @returns {boolean} true if the ASN is a 16bit value. False otherwise.\n */\n is16Bit() {\n let [valid16BitAsnNumber,] = Validator_1.Validator.isValid16BitAsnNumber(this.value);\n return valid16BitAsnNumber;\n }\n /**\n * Checks if the ASN value is 32bit\n *\n * @returns {boolean} true if the ASN is a 32bit value. False otherwise.\n */\n is32Bit() {\n return !this.is16Bit();\n }\n /**\n * Returns the next ASN number\n *\n * @returns {AbstractIPNum} the next ASN number\n */\n nextIPNumber() {\n return new Asn(this.value.valueOf() + 1n);\n }\n /**\n * Returns the previous ASN number\n *\n * @returns {AbstractIPNum} the previous ASN number\n */\n previousIPNumber() {\n return new Asn(this.value.valueOf() - 1n);\n }\n static startWithASPrefix(word) {\n return word.indexOf(Asn.AS_PREFIX) === 0;\n }\n parseFromDotNotation(rawValue) {\n let values = rawValue.split(\".\");\n let high = parseInt(values[0]);\n let low = parseInt(values[1]);\n return (high * 65535) + (low + high);\n }\n}\nexports.Asn = Asn;\nAsn.AS_PREFIX = \"AS\";\n/**\n * Represents an IPv6 number. A 128 bit number that is used to uniquely identify a device that is part of a computer\n * network that uses the internet protocol for communication.\n *\n * @see https://en.wikipedia.org/wiki/IPv6\n * @see https://www.rfc-editor.org/info/rfc8200\n */\nclass IPv6 extends AbstractIPNum {\n /**\n * Constructor for an IPv6 number.\n *\n * @param {string | bigint} ipValue value to construct an IPv6 from. The given value can either be\n * numeric or string. If a string is given then it needs to be in hexadecatet string notation\n */\n constructor(ipValue) {\n super();\n /**\n * The number of bits needed to represents the value of the IPv6 number\n */\n this.bitSize = 128;\n /**\n * The maximum bit size (i.e. binary value) of the IPv6 number in BigInt\n */\n this.maximumBitSize = Validator_1.Validator.ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE;\n /**\n * The type of IP number. Value is one of the values of the {@link IPNumType} enum\n * @type {IPNumType} the type of IP number\n */\n this.type = \"IPv6\" /* IPv6 */;\n /**\n * An array of {@link Hexadecatet}'s\n *\n * @type {Array} the hexadecatet that makes up the IPv6 number\n */\n this.hexadecatet = [];\n /**\n * The string character used to separate the individual hexadecatet when the IPv6 is rendered as strings\n *\n * @type {string} The string character used to separate the individual hexadecatet when rendered as strings\n */\n this.separator = \":\";\n if (typeof ipValue === \"string\") {\n let expandedIPv6 = IPv6Utils_1.expandIPv6Number(ipValue);\n let [value, hexadecatet] = this.constructFromHexadecimalDottedString(expandedIPv6);\n this.value = value;\n this.hexadecatet = hexadecatet;\n }\n else {\n let [value, hexadecatet] = this.constructFromBigIntValue(ipValue);\n this.value = value;\n this.hexadecatet = hexadecatet;\n }\n }\n /**\n * A convenience method for creating an {@link IPv6} by providing the decimal value of the IP number in BigInt\n *\n * @param {bigint} bigIntValue the decimal value of the IP number in BigInt\n * @returns {IPv6} the IPv6 instance\n */\n static fromBigInt(bigIntValue) {\n return new IPv6(bigIntValue);\n }\n /**\n * A convenience method for creating an {@link IPv6} by providing the IP number in hexadecatet notation. E.g\n * \"2001:800:0:0:0:0:0:2002\"\n *\n * {@see https://en.wikipedia.org/wiki/IPv6_address#Representation} for more information on hexadecatet notation.\n *\n * @param {string} ipString the IP number in hexadecatet\n * @returns {IPv6} the IPv6 instance\n */\n static fromHexadecatet(ipString) {\n return new IPv6(ipString);\n }\n /**\n * Alias for IPv6.fromHexadecimalString\n *\n * @param {string} ipString the IP number in hexadecatet\n * @returns {IPv6} the IPv6 instance\n */\n static fromString(ipString) {\n return IPv6.fromHexadecatet(ipString);\n }\n /**\n * A convenience method for creating an {@link IPv6} from binary string\n *\n * @param {string} ipBinaryString the binary string representing the IPv6 number to be created\n * @returns {IPv6} the IPv6 instance\n */\n static fromBinaryString(ipBinaryString) {\n let validationResult = Validator_1.Validator.isValidBinaryString(ipBinaryString);\n if (validationResult[0]) {\n let paddedBinaryString = BinaryUtils_3.leftPadWithZeroBit(ipBinaryString, 128);\n return new IPv6(BinaryUtils_2.parseBinaryStringToBigInt(paddedBinaryString));\n }\n else {\n throw Error(validationResult[1].join(','));\n }\n }\n /**\n * A convenience method for creating an IPv4-Compatible {@link IPv6} Address from an instance of {@link IPv4}\n *\n * @param {IPv4} ipv4 to create an IPv4-Compatible {@link IPv6} Address\n * @returns {IPv6} the IPv4-Compatible {@link IPv6} Address\n */\n static fromIPv4(ipv4) {\n return ipv4.toIPv4MappedIPv6();\n }\n /**\n * A convenience method for creating an IPv4-Compatible {@link IPv6} Address from a IPv4 represented in\n * dot-decimal notation i.e. 127.0.0.1\n *\n * @param {IPv4} ip4DotDecimalString string represented in a dot decimal string\n * @returns {IPv6} the IPv4-Compatible {@link IPv6} Address\n */\n static fromIPv4DotDecimalString(ip4DotDecimalString) {\n return new IPv4(ip4DotDecimalString).toIPv4MappedIPv6();\n }\n /**\n * A string representation of the IPv6 number.\n *\n * @returns {string} The string representation of IPv6\n */\n toString() {\n let ipv6String = this.hexadecatet.map((value) => { return value.toString(); }).join(\":\");\n if (this.hexadecatet.length < 8) {\n return \"::\" + ipv6String;\n }\n else {\n return ipv6String;\n }\n }\n /**\n * Gets the individual {@link Hexadecatet} that makes up the IPv6 number\n *\n * @returns {Array} The individual {@link Hexadecatet} that makes up the IPv6 number\n */\n //TODO maybe rename to something like getSegments? so it can be same with getOctet\n getHexadecatet() {\n return this.hexadecatet;\n }\n /**\n * Returns the next IPv6 number\n *\n * @returns {IPv6} the next IPv6 number\n */\n nextIPNumber() {\n return IPv6.fromBigInt(this.getValue() + 1n);\n }\n /**\n * Returns the previous IPv6 number\n *\n * @returns {IPv6} the previous IPv6 number\n */\n previousIPNumber() {\n return IPv6.fromBigInt(this.getValue() - 1n);\n }\n constructFromBigIntValue(ipv6Number) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6Number(ipv6Number);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let binaryString = BinaryUtils_4.numberToBinaryString(ipv6Number);\n return [ipv6Number, this.binaryStringToHexadecatets(binaryString)];\n }\n constructFromHexadecimalDottedString(expandedIPv6) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6String(expandedIPv6);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringHexadecimals = expandedIPv6.split(\":\");\n let hexadecatet = stringHexadecimals.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n let value = BigInt(`0b${HexadecimalUtils_2.hexadectetNotationToBinaryString(expandedIPv6)}`);\n return [value, hexadecatet];\n }\n binaryStringToHexadecatets(binaryString) {\n let hexadecimalString = HexadecimalUtils_1.binaryStringToHexadecimalString(binaryString);\n while (hexadecimalString.length % 4 != 0) {\n hexadecimalString = '0' + hexadecimalString;\n }\n let hexadecimalStrings = hexadecimalString.match(/.{1,4}/g);\n return hexadecimalStrings.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n }\n}\nexports.IPv6 = IPv6;\n/**\n * The IPv4Mask can be seen as a specialized IPv4 number where, in a 32 bit number, starting from the left, you\n * have continuous bits turned on (with 1 value) followed by bits turned off (with 0 value). In networking, it is used\n * to demarcate which bits are used to identify a network, and the ones that are used to identify hosts on the network\n */\nclass IPv4Mask extends IPv4 {\n /**\n * Constructor for creating an instance of IPv4Mask.\n * The passed strings need to be a valid IPv4 mask number in dot-decimal notation.\n *\n * @param {string} ipString The passed string in dot-decimal notation\n */\n constructor(ipString) {\n super(ipString);\n /**\n * An array of {@link Octet}'s\n *\n * @type {Array} the octets that makes up the IPv4Mask\n */\n this.octets = [];\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidIPv4Mask(ipString);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringOctets = ipString.split(\".\");\n this.octets = stringOctets.map((rawOctet) => {\n return Octet_1.Octet.fromString(rawOctet);\n });\n let binaryString = BinaryUtils_1.dottedDecimalNotationToBinaryString(ipString);\n this.prefix = (binaryString.match(/1/g) || []).length;\n this.value = BigInt(`0b${binaryString}`);\n }\n /**\n * A convenience method for creating an instance of IPv4Mask. The passed strings need to be a valid IPv4\n * number in dot-decimal notation.\n *\n * @param {string} rawValue The passed string in dot-decimal notation\n * @returns {IPv4Mask} the instance of IPv4Mask\n */\n static fromDecimalDottedString(rawValue) {\n return new IPv4Mask(rawValue);\n }\n ;\n}\nexports.IPv4Mask = IPv4Mask;\n/**\n * The IPv6Mask can be seen as a specialized IPv4 number where, in a 128 bit number, starting from the left,\n * you have continuous bits turned on (with 1 value) followed by bits turned off (with 0 value). In networking, it\n * is used to demarcate which bits are used to identify a network, and the ones that are used to identify hosts\n * on the network\n */\nclass IPv6Mask extends IPv6 {\n /**\n * Constructor for creating an instance of IPv6Mask.\n * The passed strings need to be a valid IPv6 mask number in dot-decimal notation\n *\n * @param {string} ipString The passed IPv6 string\n */\n constructor(ipString) {\n super(ipString);\n /**\n * An array of {@link Hexadecatet}'s\n *\n * @type {Array} the hexadecatet that makes up the IPv6 number\n */\n this.hexadecatet = [];\n let isValid;\n let message;\n let expandedIPv6 = IPv6Utils_1.expandIPv6Number(ipString);\n [isValid, message] = Validator_1.Validator.isValidIPv6Mask(expandedIPv6);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let stringHexadecimals = expandedIPv6.split(\":\");\n this.hexadecatet = stringHexadecimals.map((stringHexadecatet) => {\n return Hexadecatet_1.Hexadecatet.fromString(stringHexadecatet);\n });\n let binaryString = HexadecimalUtils_2.hexadectetNotationToBinaryString(expandedIPv6);\n this.prefix = (binaryString.match(/1/g) || []).length;\n this.value = BigInt(`0b${binaryString}`);\n this.value = BigInt(`0b${HexadecimalUtils_2.hexadectetNotationToBinaryString(expandedIPv6)}`);\n }\n /**\n * A convenience method for creating an instance of IPv6Mask.\n * The passed strings need to be a valid IPv4 mask number in dot-decimal notation.\n *\n * @param {string} rawValue The passed string in textual notation\n * @returns {IPv6Mask} the instance of IPv6Mask\n */\n static fromHexadecatet(rawValue) {\n return new IPv6Mask(rawValue);\n }\n ;\n}\nexports.IPv6Mask = IPv6Mask;\n/**\n * Check is the given IP number is an {@link IPv4} or not\n * @param ip the IP number to check if it is IPv4.\n */\nfunction isIPv4(ip) {\n return ip.bitSize === 32;\n}\nexports.isIPv4 = isIPv4;\n//# sourceMappingURL=IPNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=IPNumType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isIPv4Prefix = exports.IPv6Prefix = exports.IPv4Prefix = void 0;\nconst Validator_1 = require(\"./Validator\");\nconst IPNumber_1 = require(\"./IPNumber\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst HexadecimalUtils_1 = require(\"./HexadecimalUtils\");\nconst Hexadecatet_1 = require(\"./Hexadecatet\");\n/**\n * Represents the prefix portion in the CIDR notation for representing IP ranges\n *\n * The IPv4 prefix portion represents the mask. It is the number of continuous bits turned on (with value 1)\n * counting from the left side of an 8 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing} for more information on CIDR\n */\nclass IPv4Prefix {\n /**\n * Constructor for an instance of IPv4 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv4 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv4 prefix\n */\n constructor(rawValue) {\n this.type = \"IPv4\";\n this.bitValue = 32n;\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidPrefixValue(rawValue, \"IPv4\" /* IPv4 */);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = rawValue;\n }\n /**\n * Convenience method for constructing an instance of IPv4 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv4 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv4 prefix\n */\n static fromNumber(rawValue) {\n return new IPv4Prefix(rawValue);\n }\n ;\n static fromRangeSize(rangeSize) {\n let prefixNumber = rangeSize === (1n) ? 32 : 32 - rangeSizeToPrefix(rangeSize, Validator_1.Validator.IPV4_SIZE);\n return IPv4Prefix.fromNumber(BigInt(prefixNumber));\n }\n ;\n /**\n * Gets the decimal value of the IPv4 prefix\n *\n * @returns {number} the decimal value of the IPv4 prefix\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the decimal value of the IPv4 prefix as string\n * @returns {string} The decimal value of the IPv4 prefix as string\n */\n toString() {\n return this.value.toString();\n }\n /**\n * Converts the IPv4 prefix to a {@link IPv4Mask}\n *\n * The IPv4 mask is the representation of the prefix in the dot-decimal notation\n *\n * @returns {IPv4Mask} the mask representation of the prefix\n */\n toMask() {\n let onBits = '1'.repeat(Number(this.value));\n let offBits = '0'.repeat(Number(32n - this.value));\n return IPNumber_1.IPv4Mask.fromDecimalDottedString(this.toDecimalNotation(`${onBits}${offBits}`));\n }\n /**\n * Returns the size (number of IP numbers) of range of this prefix\n *\n * @return {bigint} the size (number of IP numbers) of range of this prefix\n */\n toRangeSize() {\n /**\n * Using bitwise shift operation this will be\n * 1 << (this.bitValue - this.getValue())\n * Since left shift a number by x is equivalent to multiplying the number by the power x raised to 2\n * 2 << 4 = 2 * (2 raised to 4)\n */\n return 1n << (this.bitValue - this.getValue());\n }\n /**\n * Returns a prefix for when this prefix is merged\n * with another prefix of the same size\n */\n merge() {\n return new IPv4Prefix(this.value - 1n);\n }\n /**\n * Returns a prefix for when this prefix is split\n * into two equal halves\n */\n split() {\n return new IPv4Prefix(this.value + 1n);\n }\n toDecimalNotation(bits) {\n return `${BinaryUtils_1.parseBinaryStringToBigInt(bits.substr(0, 8))}.${BinaryUtils_1.parseBinaryStringToBigInt(bits.substr(8, 8))}.${BinaryUtils_1.parseBinaryStringToBigInt(bits.substr(16, 8))}.${BinaryUtils_1.parseBinaryStringToBigInt(bits.substr(24, 8))}`;\n }\n}\nexports.IPv4Prefix = IPv4Prefix;\n/**\n * Represents the prefix portion in the CIDR notation for representing IP ranges\n *\n * The IPv6 prefix portion represents the mask. It is the number of continuous bits turned on (with value 1)\n * counting from the left side of an 128 bit value.\n *\n * {@see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing} for more information on CIDR\n */\nclass IPv6Prefix {\n /**\n * Constructor for an instance of IPv6 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv6 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv6 prefix\n */\n constructor(rawValue) {\n this.type = \"IPv6\";\n this.bitValue = 128n;\n let isValid;\n let message;\n [isValid, message] = Validator_1.Validator.isValidPrefixValue(rawValue, \"IPv6\" /* IPv6 */);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n this.value = rawValue;\n }\n /**\n * Convenience method for constructing an instance of IPv46 prefix from a decimal number\n *\n * @param {number} rawValue the decimal value to construct the IPv6 prefix from.\n * @returns {IPv4Prefix} the instance of an IPv6 prefix\n */\n static fromNumber(rawValue) {\n return new IPv6Prefix(rawValue);\n }\n ;\n static fromRangeSize(rangeSize) {\n let prefixNumber = rangeSize === (1n) ? 128 : 128 - rangeSizeToPrefix(rangeSize, Validator_1.Validator.IPV6_SIZE);\n return IPv6Prefix.fromNumber(BigInt(prefixNumber));\n }\n /**\n * Gets the decimal value of the IPv6 prefix\n *\n * @returns {number} the decimal value of the IPv6 prefix\n */\n getValue() {\n return this.value;\n }\n /**\n * Gets the decimal value of the IPv4 prefix as string\n * @returns {string} he decimal value of the IPv4 prefix as string\n */\n toString() {\n return this.value.toString();\n }\n /**\n * Converts the IPv6 prefix to a {@link IPv6Mask}\n *\n * The IPv6 mask is the representation of the prefix in 8 groups of 16 bit values represented in hexadecimal\n *\n * @returns {IPv6Mask} the mask representation of the prefix\n */\n toMask() {\n let onBits = '1'.repeat(Number(this.value));\n let offBits = '0'.repeat(128 - Number(this.value));\n return IPNumber_1.IPv6Mask.fromHexadecatet(this.toHexadecatetNotation(`${onBits}${offBits}`));\n }\n /**\n * Returns the size (number of IP numbers) of range of this prefix\n *\n * @return {bigint} the size (number of IP numbers) of range of this prefix\n */\n toRangeSize() {\n /**\n * Using bitwise shift operation this will be\n * 1 << (this.bitValue - this.getValue())\n * Since left shift a number by x is equivalent to multiplying the number by the power x raised to 2\n * 2 << 4 = 2 * (2 raised to 4)\n */\n return 1n << (this.bitValue - this.getValue());\n }\n /**\n * Returns a prefix for when this prefix is merged\n * with another prefix of the same size\n */\n merge() {\n return new IPv6Prefix(this.value - 1n);\n }\n /**\n * Returns a prefix for when this prefix is split\n * into two equal halves\n */\n split() {\n return new IPv6Prefix(this.value + 1n);\n }\n toHexadecatetNotation(bits) {\n let binaryStrings = bits.match(/.{1,16}/g);\n let hexadecimalStrings = binaryStrings.map((binaryString) => {\n return Hexadecatet_1.Hexadecatet.fromString(HexadecimalUtils_1.binaryStringToHexadecimalString(binaryString));\n });\n return hexadecimalStrings.map((value) => { return value.toString(); }).join(\":\");\n }\n}\nexports.IPv6Prefix = IPv6Prefix;\nfunction rangeSizeToPrefix(rangeSize, rangeMaxSize) {\n let ipType = rangeMaxSize > (Validator_1.Validator.IPV4_SIZE) ? \"IPv6\" : \"IPv4\";\n if (rangeSize > (rangeMaxSize) || rangeSize === (0n)) {\n throw new Error(Validator_1.Validator.invalidIPRangeSizeMessage.replace(\"$iptype\", ipType));\n }\n try {\n return BinaryUtils_1.intLog2(rangeSize);\n }\n catch (e) {\n throw new Error(Validator_1.Validator.invalidIPRangeSizeForCidrMessage);\n }\n}\n/**\n * Check is the given Prefix is an {@link IPv4Prefix} or not\n * @param prefix the IP prefix to check if it is IPv4Prefix.\n */\nfunction isIPv4Prefix(prefix) {\n return prefix.type === \"IPv4\";\n}\nexports.isIPv4Prefix = isIPv4Prefix;\n/**\n * Check is the given Prefix is an {@link IPv4Prefix} or not\n * @param prefix the IP prefix to check if it is IPv4Prefix.\n */\nfunction isIPv6Prefix(prefix) {\n return prefix.type === \"IPv6\";\n}\n//# sourceMappingURL=Prefix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isIPv4CidrRange = exports.IPv6CidrRange = exports.IPv4CidrRange = exports.AbstractIPRange = exports.RangedSet = void 0;\nconst IPNumber_1 = require(\"./IPNumber\");\nconst Prefix_1 = require(\"./Prefix\");\nconst BinaryUtils_1 = require(\"./BinaryUtils\");\nconst Validator_1 = require(\"./Validator\");\n/**\n * Represents a continuous segment of either IPv4 or IPv6 numbers\n * without adhering to classless inter-domain routing scheme\n * for allocating IP addresses.\n */\nclass RangedSet {\n /**\n * Constructor for an instance of {@link RangedSet} from an\n * instance of either {@link IPv4CidrRange} or {@link IPv6CidrRange}\n *\n * Throws an exception if first IP number is not less than given last IP number\n *\n * @param first the first IP number of the range\n * @param last the last IP number of the range\n */\n constructor(first, last) {\n this.first = first;\n this.last = last;\n if (first.isGreaterThan(last)) {\n throw new Error(`${first.toString()} should be lower than ${last.toString()}`);\n }\n this.currentValue = first;\n this.bitValue = BigInt(first.bitSize);\n }\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from a\n * single IP number.\n *\n * @param ip The IP number, either IPv4 or IPv6 to construct the range from.\n */\n static fromSingleIP(ip) {\n return new RangedSet(ip, ip);\n }\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from an\n * instance of either {@link IPv4CidrRange} or {@link IPv6CidrRange}\n *\n * @param cidrRange an instance of {@link RangedSet}\n */\n static fromCidrRange(cidrRange) {\n return new RangedSet(cidrRange.getFirst(), cidrRange.getLast());\n }\n /**\n * Convenience method for constructing an instance of {@link RangedSet} from\n * a range string in the form of firstIp-lastIp\n *\n * @param rangeString string in the form of firstIp-lastIp\n */\n static fromRangeString(rangeString) {\n let ips = rangeString.split(\"-\").map(ip => ip.trim());\n if (ips.length !== 2) {\n throw new Error(\"Argument should be in the format firstip-lastip\");\n }\n let [firstIPString, lastIPString] = ips;\n let [isValidFirstIPv4,] = Validator_1.Validator.isValidIPv4String(firstIPString);\n let [isValidSecondIPv4,] = Validator_1.Validator.isValidIPv4String(lastIPString);\n let [isValidFirstIPv6,] = Validator_1.Validator.isValidIPv6String(firstIPString);\n let [isValidLastIPv6,] = Validator_1.Validator.isValidIPv6String(lastIPString);\n if (isValidFirstIPv4 && isValidSecondIPv4) {\n return new RangedSet(IPNumber_1.IPv4.fromDecimalDottedString(firstIPString), IPNumber_1.IPv4.fromDecimalDottedString(lastIPString));\n }\n else if (isValidFirstIPv6 && isValidLastIPv6) {\n return new RangedSet(IPNumber_1.IPv6.fromHexadecatet(firstIPString), IPNumber_1.IPv6.fromHexadecatet(lastIPString));\n }\n else {\n throw new Error(\"First IP and Last IP should be valid and same type\");\n }\n }\n /**\n * Returns the first IP number in the range\n */\n getFirst() {\n return this.first;\n }\n /**\n * Returns the last IP number in the range\n */\n getLast() {\n return this.last;\n }\n /**\n * Returns the size, which is the number of IP numbers in the range.\n */\n getSize() {\n return this.last.getValue() - (this.first.getValue()) + 1n;\n }\n /**\n * Converts to a string representation of the range in the form of:\n * -\n */\n toRangeString() {\n return `${this.getFirst()}-${this.getLast()}`;\n }\n /**\n * Checks if this range is inside another range.\n *\n * @param otherRange the other range to check if this range is inside of.\n */\n inside(otherRange) {\n return otherRange.contains(this);\n }\n /**\n * Checks if this range contains the given other range.\n *\n * @param otherRange the other range to check if this range contains\n */\n contains(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisFirst.isLessThanOrEquals(otherFirst) && thisLast.isGreaterThanOrEquals(otherLast));\n }\n /**\n * Check if this range is equal to the given other range.\n *\n * @param otherRange the other range to check if equal to this range.\n */\n isEquals(otherRange) {\n return this.getFirst().isEquals(otherRange.getFirst())\n && this.getLast().isEquals(otherRange.getLast());\n }\n ;\n /**\n * Check if this range is less than the given range.\n *\n * @param otherRange the other range to check if less than.\n */\n isLessThan(otherRange) {\n if (this.isEquals(otherRange)) {\n return false;\n }\n else {\n if (this.getFirst().isEquals(otherRange.getFirst())) {\n return this.getSize() < (otherRange.getSize());\n }\n return this.getFirst().isLessThan(otherRange.getFirst());\n }\n }\n /**\n * Check if this range is greater than the given range.\n *\n * @param otherRange the other range to check if greater than.\n */\n isGreaterThan(otherRange) {\n if (this.isEquals(otherRange)) {\n return false;\n }\n else {\n if (this.getFirst().isEquals(otherRange.getFirst())) {\n return this.getSize() > (otherRange.getSize());\n }\n return this.getFirst().isGreaterThan(otherRange.getFirst());\n }\n }\n /**\n * Checks of this range overlaps with a given other range.\n *\n * This means it checks if part of a range is part of another range without\n * being totally contained in the other range. Hence Equal or ranges contained inside one\n * another are not considered as overlapping.\n *\n * @param otherRange the other range to check if it overlaps with this range.\n */\n isOverlapping(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisLast.isGreaterThan(otherFirst) && thisLast.isLessThanOrEquals(otherLast) && thisFirst.isLessThan(otherFirst)\n ||\n otherLast.isGreaterThan(thisFirst) && otherLast.isLessThanOrEquals(thisLast) && otherFirst.isLessThan(thisFirst));\n }\n /**\n * Check if this range can be converted to a CIDR range.\n */\n isCidrAble() {\n if (this.getSize() === 1n) {\n return true;\n }\n try {\n let prefix = BinaryUtils_1.intLog2(this.getSize());\n let netmask = BinaryUtils_1.parseBinaryStringToBigInt(BinaryUtils_1.cidrPrefixToMaskBinaryString(prefix, IPNumber_1.isIPv4(this.currentValue) ? \"IPv4\" /* IPv4 */ : \"IPv6\" /* IPv6 */));\n return (this.first.getValue()) === (netmask & (this.first.getValue()));\n }\n catch (e) {\n return false;\n }\n }\n /**\n * Converts an instance of range to an instance of CIDR range\n */\n toCidrRange() {\n if (IPNumber_1.isIPv4(this.currentValue)) {\n return this.toIPv4CidrRange();\n }\n else {\n return this.toIPv6CidrRange();\n }\n }\n ;\n /**\n * Checks if this range is consecutive with another range.\n *\n * This means if the two ranges can be placed side by side, without any gap. Hence Equal\n * or ranges contained inside one another, or overlapping ranges are not considered as consecutive.\n *\n * @param otherRange the other range to check if this range is consecutive to.\n */\n isConsecutive(otherRange) {\n let thisFirst = this.getFirst();\n let thisLast = this.getLast();\n let otherFirst = otherRange.getFirst();\n let otherLast = otherRange.getLast();\n return (thisLast.hasNext() && thisLast.nextIPNumber().isEquals(otherFirst)\n ||\n otherLast.hasNext() && otherLast.nextIPNumber().isEquals(thisFirst));\n }\n /**\n * Creates a range that is a union of this range and the given other range.\n *\n * @param otherRange the other range to combine with this range\n */\n union(otherRange) {\n if (this.isEquals(otherRange)) {\n return new RangedSet(otherRange.getFirst(), otherRange.getLast());\n }\n if (this.isOverlapping(otherRange)) {\n if (this.getFirst().isLessThan(otherRange.getFirst())) {\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n else {\n return new RangedSet(otherRange.getFirst(), this.getLast());\n }\n }\n if (this.contains(otherRange)) {\n return new RangedSet(this.getFirst(), this.getLast());\n }\n else if (otherRange.contains(this)) {\n return new RangedSet(otherRange.getFirst(), otherRange.getLast());\n }\n throw new Error(\"Ranges do not overlap nor are equal\");\n }\n /**\n * Prepends given range with this range.\n * The last IP in the given range should be adjacent to the first IP in this range\n *\n * @param otherRange the other range to prepend\n */\n prepend(otherRange) {\n if (otherRange.getLast().nextIPNumber().isEquals(this.getFirst())) {\n return new RangedSet(otherRange.getFirst(), this.getLast());\n }\n else {\n throw new Error(\"Range to prepend must be adjacent\");\n }\n }\n /**\n * Appends given range with this range.\n * The last IP in this range should be adjacent to the first IP in range to append\n *\n * @param otherRange the other range to append\n */\n append(otherRange) {\n if (this.getLast().nextIPNumber().isEquals(otherRange.getFirst())) {\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n else {\n throw new Error(\"Range to append must be adjacent\");\n }\n }\n subtract(otherRange) {\n if (!this.isOverlapping(otherRange)) {\n throw new Error(\"Cannot subtract ranges that are not overlapping\");\n }\n if (!this.isLessThan(otherRange)) {\n throw new Error(\"Cannot subtract a larger range from this range\");\n }\n return new RangedSet(this.getFirst(), otherRange.getLast());\n }\n /**\n * Returns a sub range of a given size from this range.\n *\n * @param offset offset from this range where the subrange should begin\n * @param size the size of the range\n */\n takeSubRange(offset, size) {\n if (offset + (size) > (this.getSize())) {\n throw new RangeError(\"Requested range is greater than what can be taken\");\n }\n if (size === (0n)) {\n throw new Error(\"Sub range cannot be zero\");\n }\n let valueOfFirstIp = this.getFirst().value + (offset);\n let firstIp = IPNumber_1.isIPv4(this.getFirst()) ?\n IPNumber_1.IPv4.fromNumber(valueOfFirstIp) : IPNumber_1.IPv6.fromBigInt(valueOfFirstIp);\n let valueOfLastIp = firstIp.value + (size - 1n);\n let lastIp = IPNumber_1.isIPv4(firstIp) ? IPNumber_1.IPv4.fromNumber(valueOfLastIp) : IPNumber_1.IPv6.fromBigInt(valueOfLastIp);\n return new RangedSet(firstIp, lastIp);\n }\n /**\n * Performs a subtraction operation, where the passed range is removed from the original range.\n *\n * The return range from the subtraction operation could be a single or multiple ranges\n *\n * @param range\n */\n difference(range) {\n if (range.getSize() > (this.getSize())) {\n throw new Error(\"Range is greater than range to be subtracted from\");\n }\n if (!this.contains(range)) {\n throw new Error(\"Range to subtract is not contained in this range\");\n }\n let reminders = [];\n try {\n reminders.push(new RangedSet(this.getFirst(), range.getFirst().previousIPNumber()));\n }\n catch (e) { }\n try {\n reminders.push(new RangedSet(range.getLast().nextIPNumber(), this.getLast()));\n }\n catch (e) { }\n return reminders;\n }\n *take(count) {\n let computed = this.getFirst();\n let returnCount = count === undefined ? this.getSize().valueOf() : count;\n while (returnCount > 0) {\n returnCount--;\n yield computed;\n computed = computed.nextIPNumber();\n }\n }\n *[Symbol.iterator]() {\n yield* this.take();\n }\n toIPv4CidrRange() {\n let candidateRange = new IPv4CidrRange(IPNumber_1.IPv4.fromNumber(this.getFirst().getValue()), Prefix_1.IPv4Prefix.fromRangeSize(this.getSize()));\n if (candidateRange.getFirst().isEquals(this.getFirst())) {\n return candidateRange;\n }\n else {\n throw new Error(\"Range cannot be converted to CIDR\");\n }\n }\n toIPv6CidrRange() {\n let candidateRange = new IPv6CidrRange(IPNumber_1.IPv6.fromBigInt(this.getFirst().getValue()), Prefix_1.IPv6Prefix.fromRangeSize(this.getSize()));\n if (candidateRange.getFirst().isEquals(this.getFirst())) {\n return candidateRange;\n }\n else {\n throw new Error(\"Range cannot be converted to CIDR\");\n }\n }\n}\nexports.RangedSet = RangedSet;\n/**\n * Provides the implementation of functionality that are common to {@link IPv4CidrRange} and {@link IPv6CidrRange}\n */\nclass AbstractIPRange {\n hasNextRange() {\n let sizeOfCurrentRange = this.getSize();\n return ((2n ** this.bitValue) - sizeOfCurrentRange) >= (this.getFirst().getValue() + (sizeOfCurrentRange));\n }\n hasPreviousRange() {\n return this.getSize() <= (this.getFirst().getValue());\n }\n toRangeSet() {\n return new RangedSet(this.getFirst(), this.getLast());\n }\n inside(otherRange) {\n return this.toRangeSet().inside(otherRange.toRangeSet());\n }\n contains(otherRange) {\n return this.toRangeSet().contains(otherRange.toRangeSet());\n }\n toRangeString() {\n return this.toRangeSet().toRangeString();\n }\n isOverlapping(otherRange) {\n return this.toRangeSet().isOverlapping(otherRange.toRangeSet());\n }\n isConsecutive(otherRange) {\n return this.toRangeSet().isConsecutive(otherRange.toRangeSet());\n }\n isCidrMergeable(otherRange) {\n const count = BigInt(BinaryUtils_1.matchingBitCount(this.getFirst().toBinaryString(), otherRange.getFirst().toBinaryString()));\n if (this.getPrefix().value - count !== 1n) {\n return false;\n }\n return this.isConsecutive(otherRange) && this.getSize() === (otherRange.getSize());\n }\n isMergeable(otherRange) {\n return this.isCidrMergeable(otherRange)\n || this.contains(otherRange)\n || this.inside(otherRange);\n }\n isEquals(otherRange) {\n return this.toRangeSet().isEquals(otherRange.toRangeSet());\n }\n merge(otherRange) {\n if (!this.isCidrMergeable(otherRange)) {\n throw new Error(`Cannot merge. Ranges (${this.toRangeString()},${otherRange.toRangeString()}) are not consecutive and/or of same size`);\n }\n return this.newInstance(this.getFirst(), this.getPrefix().merge());\n }\n /**\n * Returns a lazily evaluated representation of the IP range that produces IP numbers by either:\n *\n * - iterating over using the for of syntax\n * - converting to array using spread syntax\n * - or assigning values to variables using deconstruction\n *\n * @param count the number of IP numbers to lazily evaluate.\n * If none is given, the whole IP range is lazily returned.\n */\n *takeStream(count) {\n return this.toRangeSet().take(count);\n }\n *[Symbol.iterator]() {\n yield* this.toRangeSet();\n }\n}\nexports.AbstractIPRange = AbstractIPRange;\n/**\n * Represents a continuous segment of IPv4 numbers following the\n * classless inter-domain routing scheme for allocating IP addresses.\n *\n * @see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\n */\nclass IPv4CidrRange extends AbstractIPRange {\n /**\n * Constructor for creating an instance of an IPv4 range.\n *\n * The arguments taken by the constructor is inspired by the CIDR notation which basically consists of the IP\n * number and the prefix.\n *\n * @param {IPv4} ipv4 the IP number used to construct the range. By convention this is the first IP number in\n * the range, but it could also be any IP number within the range\n * @param {IPv4Prefix} cidrPrefix the prefix which is a representation of the number of bits used to mask the\n * given IP number in other to create the range\n */\n constructor(ipv4, cidrPrefix) {\n super();\n this.ipv4 = ipv4;\n this.cidrPrefix = cidrPrefix;\n this.bitValue = 32n;\n }\n /**\n * Convenience method for constructing an instance of an IPv4CidrRange from an IP range represented in CIDR notation\n *\n * @param {string} rangeIncidrNotation the range of the IPv4 number in CIDR notation\n * @returns {IPv4CidrRange} the IPv4CidrRange\n */\n static fromCidr(rangeIncidrNotation) {\n let [isValid, errorMessages] = Validator_1.Validator.isValidIPv4CidrNotation(rangeIncidrNotation);\n if (!isValid) {\n let messages = errorMessages.filter(message => { return message !== ''; });\n throw new Error(messages.join(' and '));\n }\n let cidrComponents = rangeIncidrNotation.split(\"/\");\n let ipString = cidrComponents[0];\n let prefix = BigInt(parseInt(cidrComponents[1]));\n return new IPv4CidrRange(IPNumber_1.IPv4.fromDecimalDottedString(ipString), Prefix_1.IPv4Prefix.fromNumber(prefix));\n }\n /**\n * Gets the size of IPv4 numbers contained within the IPv4 range\n *\n * @returns {bigint} the amount of IPv4 numbers in the range\n */\n getSize() {\n return this.cidrPrefix.toRangeSize();\n }\n /**\n * Method that returns the IPv4 range in CIDR (Classless Inter-Domain Routing) notation.\n *\n * See {@link https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation} for more information\n * on the Classless Inter-Domain Routing notation\n *\n * @returns {string} the IPv4 range in CIDR (Classless Inter-Domain Routing) notation\n */\n toCidrString() {\n let first = this.ipv4.toString();\n return `${first.toString()}/${this.cidrPrefix.toString()}`;\n }\n /**\n * Method that returns the IPv4 range in string notation where the first IPv4 number and last IPv4 number are\n * separated by an hyphen. eg. 192.198.0.0-192.198.0.255\n *\n * @returns {string} the range in [first IPv4 number] - [last IPv4 number] format\n */\n toRangeString() {\n return super.toRangeString();\n }\n /**\n * Method that returns the first IPv4 number in the IPv4 range\n *\n * @returns {IPv4} the first IPv4 number in the IPv4 range\n */\n getFirst() {\n return IPNumber_1.IPv4.fromNumber(this.ipv4.getValue() & (this.cidrPrefix.toMask().getValue()));\n }\n /**\n * Method that returns the last IPv4 number in the IPv4 range\n *\n * @returns {IPv4} the last IPv4 number in the IPv4 range\n */\n getLast() {\n return last(this, this.ipv4);\n }\n newInstance(num, prefix) {\n return new IPv4CidrRange(num, prefix);\n }\n getPrefix() {\n return this.cidrPrefix;\n }\n /**\n * Indicates whether the given IPv4 range is an adjacent range.\n *\n * An adjacent range being one where the end of the given range, when incremented by one marks the start of the\n * other range. Or where the start of the given range, when decreased by one, marks the end of the other range\n *\n * @param {IPv4CidrRange} otherRange the other IPv4 range to compare with\n * @returns {boolean} true if the two IPv4 ranges are consecutive, false otherwise\n */\n isConsecutive(otherRange) {\n return super.isConsecutive(otherRange);\n }\n /**\n * Indicates if the given IPv4 range is a subset.\n *\n * By a subset range, it means all the values of the given range are contained by this IPv4 range\n *\n * @param {IPv4CidrRange} otherRange the other IPv4 range\n * @returns {boolean} true if the other Ipv4 range is a subset. False otherwise.\n */\n contains(otherRange) {\n return super.contains(otherRange);\n }\n /**\n * Indicate if the given range is a container range.\n *\n * By container range, it means all the IP number in this current range can be found within the given range.\n *\n * @param {IPv4CidrRange} otherRange he other IPv4 range\n * @returns {boolean} true if the other Ipv4 range is a container range. False otherwise.\n */\n inside(otherRange) {\n return super.inside(otherRange);\n }\n /**\n * Checks if two IPv4 ranges overlap\n * @param {IPv4CidrRange} otherRange the other IPv4 range\n * @returns {boolean} true if the ranges overlap, false otherwise\n */\n isOverlapping(otherRange) {\n return super.isOverlapping(otherRange);\n }\n /**\n * Method that takes IPv4 number from within an IPv4 range, starting from the first IPv4 number\n *\n * @param {bigint} count the amount of IPv4 number to take from the IPv4 range\n * @returns {Array} an array of IPv4 number, taken from the IPv4 range\n */\n take(count) {\n let ipv4s = [this.getFirst()];\n let iteratingIPv4 = this.getFirst();\n if (count > (this.getSize())) {\n let errMessage = Validator_1.Validator.takeOutOfRangeSizeMessage\n .replace(\"$count\", count.toString())\n .replace(\"$size\", this.getSize().toString());\n throw new Error(errMessage);\n }\n for (let counter = 0; counter < count - 1n; counter++) {\n ipv4s.push(iteratingIPv4.nextIPNumber());\n iteratingIPv4 = iteratingIPv4.nextIPNumber();\n }\n return ipv4s;\n }\n /**\n * Method that splits an IPv4 range into two halves\n *\n * @returns {Array} An array of two {@link IPv4CidrRange}\n */\n split() {\n let prefixToSplit = this.cidrPrefix.getValue();\n if (prefixToSplit === 32n) {\n throw new Error(\"Cannot split an IP range with a single IP number\");\n }\n let splitCidr = Prefix_1.IPv4Prefix.fromNumber(prefixToSplit + 1n);\n let firstIPOfFirstRange = this.getFirst();\n let firstRange = new IPv4CidrRange(firstIPOfFirstRange, splitCidr);\n let firstIPOfSecondRange = firstRange.getLast().nextIPNumber();\n let secondRange = new IPv4CidrRange(firstIPOfSecondRange, splitCidr);\n return [firstRange, secondRange];\n }\n /**\n * Method that split prefix into ranges of the given prefix,\n * throws an exception if the size of the given prefix is larger than target prefix\n *\n * @param prefix the prefix to use to split\n * @returns {Array} An array of two {@link IPv4CidrRange}\n */\n splitInto(prefix) {\n let splitCount = prefix.getValue() - this.cidrPrefix.getValue();\n if (splitCount < 0) {\n throw new Error(\"Prefix to split into is larger than source prefix\");\n }\n else if (splitCount === 0n) {\n return [new IPv4CidrRange(this.getFirst(), prefix)];\n }\n else if (splitCount === 1n) {\n return this.split();\n }\n else {\n let results = this.split();\n while (splitCount > 1) {\n results = results.flatMap(result => result.split());\n splitCount = splitCount - 1n;\n }\n return results;\n }\n }\n /**\n * Returns true if there is an adjacent IPv4 cidr range of exactly the same size next to this range\n */\n hasNextRange() {\n return super.hasNextRange();\n }\n /**\n * Returns true if there is an adjacent IPv4 cidr range of exactly the same size previous to this range\n */\n hasPreviousRange() {\n return super.hasPreviousRange();\n }\n /**\n * Return the next IPv6 cidr range, or undefined if no next range\n */\n nextRange() {\n if (this.hasNextRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfNextRange = this.getFirst().getValue() + (sizeOfCurrentRange);\n return new IPv4CidrRange(new IPNumber_1.IPv4(startOfNextRange), this.cidrPrefix);\n }\n return;\n }\n /**\n * Return the previous IPv6 cidr range, or undefined if no next range\n */\n previousRange() {\n if (this.hasPreviousRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfPreviousRange = this.getFirst().getValue() - (sizeOfCurrentRange);\n return new IPv4CidrRange(new IPNumber_1.IPv4(startOfPreviousRange), this.cidrPrefix);\n }\n return;\n }\n}\nexports.IPv4CidrRange = IPv4CidrRange;\n/**\n * Represents a continuous segment of IPv6 number following the\n * classless inter-domain routing scheme for allocating IP addresses.\n *\n * @see https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\n */\nclass IPv6CidrRange extends AbstractIPRange {\n /**\n * Constructor for creating an instance of an IPv6 range.\n *\n * The arguments taken by the constructor is inspired by the CIDR notation which basically consists of the IP\n * number and the prefix.\n *\n * @param {IPv6} ipv6 the IP number used to construct the range. By convention this is the first IP number in\n * the range, but it could also be any IP number within the range\n * @param {IPv6Prefix} cidrPrefix the prefix which is a representation of the number of bits used to mask the\n * given IPv6 number in other to create the range\n */\n constructor(ipv6, cidrPrefix) {\n super();\n this.ipv6 = ipv6;\n this.cidrPrefix = cidrPrefix;\n this.bitValue = 128n;\n }\n /**\n * Convenience method for constructing an instance of an IPV6Range from an IP range represented in CIDR notation\n *\n * @param {string} rangeInCidrNotation the range of the IPv6 number in CIDR notation\n * @returns {IPv6CidrRange} the IPV6Range\n */\n static fromCidr(rangeInCidrNotation) {\n let [isValid, message] = Validator_1.Validator.isValidIPv6CidrNotation(rangeInCidrNotation);\n if (!isValid) {\n throw new Error(message.filter(msg => { return msg !== ''; }).toString());\n }\n let cidrComponents = rangeInCidrNotation.split(\"/\");\n let ipString = cidrComponents[0];\n let prefix = BigInt(parseInt(cidrComponents[1]));\n return new IPv6CidrRange(IPNumber_1.IPv6.fromHexadecatet(ipString), Prefix_1.IPv6Prefix.fromNumber(prefix));\n }\n ;\n /**\n * Gets the size of IPv6 numbers contained within the IPv6 range\n *\n * @returns {bigint} the amount of IPv6 numbers in the range\n */\n getSize() {\n return this.cidrPrefix.toRangeSize();\n }\n /**\n * Method that returns the IPv6 range in CIDR (Classless Inter-Domain Routing) notation.\n *\n * See {@link https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation} for more information\n * on the Classless Inter-Domain Routing notation\n *\n * @returns {string} the IPv6 range in CIDR (Classless Inter-Domain Routing) notation\n */\n toCidrString() {\n let first = this.ipv6.toString();\n return `${first.toString()}/${this.cidrPrefix.toString()}`;\n }\n /**\n * Method that returns the IPv6 range in string notation where the first IPv6 number and last IPv6 number are\n * separated by an hyphen. eg. \"2001:db8:0:0:0:0:0:0-2001:db8:0:ffff:ffff:ffff:ffff:ffff\"\n *\n * @returns {string} the range in [first IPv6 number] - [last IPv6 number] format\n */\n toRangeString() {\n return super.toRangeString();\n }\n /**\n * Method that returns the first IPv6 number in the IPv6 range\n *\n * @returns {IPv6} the first IPv6 number in the IPv6 range\n */\n getFirst() {\n return IPNumber_1.IPv6.fromBigInt(this.ipv6.getValue() & (this.cidrPrefix.toMask().getValue()));\n }\n /**\n * Method that returns the last IPv6 number in the IPv6 range\n *\n * @returns {IPv6} the last IPv6 number in the IPv6 range\n */\n getLast() {\n return last(this, this.ipv6);\n }\n newInstance(num, prefix) {\n return new IPv6CidrRange(num, prefix);\n }\n getPrefix() {\n return this.cidrPrefix;\n }\n /**\n * Indicates whether the given IPv6 range is an adjacent range.\n *\n * An adjacent range being one where the end of the given range, when incremented by one marks the start of the\n * other range. Or where the start of the given range, when decreased by one, marks the end of the other range\n *\n * @param {IPv6CidrRange} otherRange the other IPv6 range to compare with\n * @returns {boolean} true if the two IPv6 ranges are consecutive, false otherwise\n */\n isConsecutive(otherRange) {\n return super.isConsecutive(otherRange);\n }\n /**\n * Indicates if the given IPv6 range is a subset.\n *\n * By a subset range, it means all the values of the given range are contained by this IPv6 range\n *\n * @param {IPv6CidrRange} otherRange the other IPv6 range\n * @returns {boolean} true if the other Ipv6 range is a subset. False otherwise.\n */\n contains(otherRange) {\n return super.contains(otherRange);\n }\n /**\n * Indicate if the given range is a container range.\n *\n * By container range, it means all the IP number in this current range can be found within the given range.\n *\n * @param {IPv6CidrRange} otherRange he other IPv6 range\n * @returns {boolean} true if the other Ipv6 range is a container range. False otherwise.\n */\n inside(otherRange) {\n return super.inside(otherRange);\n }\n /**\n * Checks if two IPv6 ranges overlap\n * @param {IPv6CidrRange} otherRange the other IPv6 range\n * @returns {boolean} true if the ranges overlap, false otherwise\n */\n isOverlapping(otherRange) {\n return super.isOverlapping(otherRange);\n }\n /**\n * Method that takes IPv6 number from within an IPv6 range, starting from the first IPv6 number\n *\n * @param {bigint} count the amount of IPv6 number to take from the IPv6 range\n * @returns {Array} an array of IPv6 number, taken from the IPv6 range\n */\n take(count) {\n let iPv6s = [this.getFirst()];\n let iteratingIPv6 = this.getFirst();\n if (count > (this.getSize())) {\n throw new Error(`${count.toString()} is greater than ${this.getSize().toString()}, the size of the range`);\n }\n for (var counter = 0; counter < count - 1n; counter++) {\n iPv6s.push(iteratingIPv6.nextIPNumber());\n iteratingIPv6 = iteratingIPv6.nextIPNumber();\n }\n return iPv6s;\n }\n /**\n * Method that splits an IPv6 cidr range into two halves\n *\n * @returns {Array} An array of two {@link IPv6CidrRange}\n */\n split() {\n let prefixToSplit = this.cidrPrefix.getValue();\n if (prefixToSplit === 128n) {\n throw new Error(\"Cannot split an IP range with a single IP number\");\n }\n let splitCidr = Prefix_1.IPv6Prefix.fromNumber(prefixToSplit + 1n);\n let firstIPOfFirstRange = this.getFirst();\n let firstRange = new IPv6CidrRange(firstIPOfFirstRange, splitCidr);\n let firstIPOfSecondRange = firstRange.getLast().nextIPNumber();\n let secondRange = new IPv6CidrRange(firstIPOfSecondRange, splitCidr);\n return [firstRange, secondRange];\n }\n /**\n * Method that split prefix into ranges of the given prefix,\n * throws an exception if the size of the given prefix is larger than target prefix\n *\n * @param prefix the prefix to use to split\n * @returns {Array} An array of two {@link IPv6CidrRange}\n */\n splitInto(prefix) {\n let splitCount = prefix.getValue() - this.cidrPrefix.getValue();\n if (splitCount < 0) {\n throw new Error(\"Prefix to split into is larger than source prefix\");\n }\n else if (splitCount === 0n) {\n return [new IPv6CidrRange(this.getFirst(), prefix)];\n }\n else if (splitCount === 1n) {\n return this.split();\n }\n else {\n let results = this.split();\n while (splitCount > 1) {\n results = results.flatMap(result => result.split());\n splitCount = splitCount - 1n;\n }\n return results;\n }\n }\n /**\n * Returns true if there is an adjacent IPv6 cidr range of exactly the same size next to this range\n */\n hasNextRange() {\n return super.hasNextRange();\n }\n /**\n * Returns true if there is an adjacent IPv6 cidr range of exactly the same size previous to this range\n */\n hasPreviousRange() {\n return super.hasPreviousRange();\n }\n /**\n * Return the next IPv6 cidr range, or undefined if no next range\n */\n nextRange() {\n if (this.hasNextRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfNextRange = this.getFirst().getValue() + (sizeOfCurrentRange);\n return new IPv6CidrRange(new IPNumber_1.IPv6(startOfNextRange), this.cidrPrefix);\n }\n return;\n }\n /**\n * Return the previous IPv6 cidr range, or undefined if no next range\n */\n previousRange() {\n if (this.hasPreviousRange()) {\n let sizeOfCurrentRange = this.getSize();\n let startOfPreviousRange = this.getFirst().getValue() - sizeOfCurrentRange;\n return new IPv6CidrRange(new IPNumber_1.IPv6(startOfPreviousRange), this.cidrPrefix);\n }\n return;\n }\n}\nexports.IPv6CidrRange = IPv6CidrRange;\n// utility functions shared by both IPv6CidrRange and IPv4CidrRange\nlet last = (range, ip) => {\n let bitValue = Number(range.bitValue.valueOf());\n let maskSize = BigInt(`0b${\"1\".repeat(bitValue)}`);\n let maskAsBigInteger = range.cidrPrefix.toMask().getValue();\n let invertedMask = BinaryUtils_1.leftPadWithZeroBit((maskAsBigInteger ^ (maskSize)).toString(2), bitValue);\n if (isIPv4CidrRange(range)) {\n return IPNumber_1.IPv4.fromNumber((ip.getValue()) | (BinaryUtils_1.parseBinaryStringToBigInt(invertedMask)));\n }\n else {\n return IPNumber_1.IPv6.fromBigInt((ip.getValue()) | (BinaryUtils_1.parseBinaryStringToBigInt(invertedMask)));\n }\n};\nfunction isIPv4CidrRange(ip) {\n return ip.bitValue.valueOf() === 32n;\n}\nexports.isIPv4CidrRange = isIPv4CidrRange;\n//# sourceMappingURL=IPRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pool = void 0;\nconst IPRange_1 = require(\"./IPRange\");\nconst Prefix_1 = require(\"./Prefix\");\n/**\n * Represents a collection of IP {@link RangedSet}'s\n */\nclass Pool {\n /**\n * Constructor for an IP pool.\n *\n * Creates a Pool of IP ranges from supplied {@link RangedSet}'s\n *\n * @param ranges the array of IP ranges that would make up the pool.\n */\n constructor(ranges) {\n this.backingSet = new SortedSet();\n ranges.forEach(range => {\n this.backingSet.add(range);\n });\n }\n /**\n * Convenient method for creating an instance from arrays of {@link IPv4} or {@link IPv6}\n * @param ipNumbers the arrays of {@link IPv4} or {@link IPv6} that will make up the pool.\n */\n static fromIP(ipNumbers) {\n let ranges = ipNumbers.map((ip) => {\n return IPRange_1.RangedSet.fromSingleIP(ip);\n });\n return new Pool(ranges);\n }\n /**\n * Convenient method for creating an instance from arrays of {@link RangedSet}.\n *\n * @param ipRanges the arrays of {@link RangedSet}'s that will make up the pool.\n */\n // TODO: TSE: This makes it possible to create an instance containing both Range set of IPv4 and IPv6\n static fromRangeSet(ipRanges) {\n return new Pool(ipRanges);\n }\n /**\n * Convenient method for creating an instance from arrays of {@link IPv4CidrRange} or {@link IPv6CidrRange}.\n *\n * @param cidrRanges the arrays of {@link IPv4CidrRange} or {@link IPv6CidrRange} that will make up the pool.\n */\n static fromCidrRanges(cidrRanges) {\n let cidr = cidrRanges;\n let rangeSet = cidr.map((range) => {\n return range.toRangeSet();\n });\n return new Pool(rangeSet);\n }\n /**\n * Returns an array of {@link RangedSet}'s that is contained within the pool\n */\n getRanges() {\n return this.backingSet.asArray();\n }\n /**\n * Returns an new {@link Pool} with all the IP ranges aggregated\n */\n aggregate() {\n let sortedRanges = this.backingSet.asArray();\n let mergedRanges = sortedRanges.reduce((accumulator, currentRange, currentIndex, array) => {\n if (accumulator.length == 0) {\n accumulator.push(currentRange);\n return accumulator;\n }\n else {\n let previous = accumulator.pop();\n let previousCidrRange = previous.toCidrRange();\n let currentCidrRange = currentRange.toCidrRange();\n if (previousCidrRange.isCidrMergeable(currentCidrRange)) {\n let merged = previousCidrRange.merge(currentCidrRange);\n accumulator.push(merged.toRangeSet());\n return accumulator;\n }\n else {\n if (!previous.contains(currentRange)) {\n accumulator.push(previous);\n accumulator.push(currentRange);\n }\n else {\n accumulator.push(previous);\n }\n return accumulator;\n }\n }\n }, []);\n let aggregatedPool = Pool.fromRangeSet(mergedRanges);\n if (aggregatedPool.getRanges().length !== this.getRanges().length) {\n return aggregatedPool.aggregate();\n }\n else {\n return aggregatedPool;\n }\n }\n /**\n * Gets a single range of size of the given prefix from pool.\n * Only returns a range if there is a single range in the pool of same size or greater than given prefix.\n *\n * throws exception if the requested range cannot be got from the pool.\n *\n * @param prefix prefix range to retrieve\n * TODO TSE\n */\n getCidrRange(prefix) {\n if (prefix.toRangeSize() > (this.getSize())) {\n throw new Error(`Not enough IP number in the pool for requested prefix: ${prefix}`);\n }\n let selectedCidrRange;\n let error;\n loop: for (let range of this.getRanges()) {\n for (let offset = 0n; offset + (prefix.toRangeSize()) <= (range.getSize()); offset = offset + 1n)\n try {\n let selectedRange = range.takeSubRange(offset, prefix.toRangeSize());\n selectedCidrRange = selectedRange.toCidrRange();\n let remaining = range.difference(selectedRange);\n this.removeExact(range);\n this.add(remaining);\n break loop;\n }\n catch (e) {\n if (e instanceof RangeError) {\n continue loop;\n }\n error = e;\n }\n }\n if (selectedCidrRange) {\n return selectedCidrRange;\n }\n else {\n throw (error === undefined ? new Error(`No range big enough in the pool for requested prefix: ${prefix}`) : error);\n }\n }\n /**\n * Gets a single or multiple ranges that fulfils the given prefix from the pool.\n *\n * throws exception if the requested range cannot be got from the pool.\n *\n * @param reqprefix prefix range to retrieve\n */\n getCidrRanges(reqprefix) {\n if (reqprefix.toRangeSize() > (this.getSize())) {\n throw new Error(\"Prefix greater than pool\");\n }\n let go = (reqprefix, prefix, accummulated) => {\n try {\n let singleCidrRange = this.getCidrRange(prefix);\n accummulated.push(singleCidrRange);\n let currentSize = accummulated.reduce((previous, current) => {\n return previous + (current.getSize());\n }, 0n);\n if (reqprefix.toRangeSize() === (currentSize)) {\n return accummulated;\n }\n else {\n return go(reqprefix, prefix, accummulated);\n }\n }\n catch (e) {\n let lowerPrefix = Prefix_1.isIPv4Prefix(prefix) ?\n Prefix_1.IPv4Prefix.fromNumber(prefix.getValue() + 1n) : Prefix_1.IPv6Prefix.fromNumber(prefix.getValue() + 1n);\n return go(reqprefix, lowerPrefix, accummulated);\n }\n };\n return go(reqprefix, reqprefix, []);\n }\n /**\n * Returns the size of IP numbers in the pool\n */\n getSize() {\n return this\n .aggregate()\n .getRanges()\n .reduce((previous, current) => {\n return previous + current.getSize();\n }, 0n);\n }\n /**\n * Empties the pool and fill it with given ranges\n *\n * @param ipRanges the range to fill the pool with after emptying\n */\n resetWith(ipRanges) {\n this.backingSet.clear();\n this.backingSet = this.backingSet.add(ipRanges);\n }\n /**\n * Removes the given range from the pool. It only removes if the exact range exist in the pool.\n * It is a Noop and returns false, if the given range does not exist in the pool. Returns true otherwise\n *\n * @param rangeToRemove range to remove from ppol\n */\n removeExact(rangeToRemove) {\n let updatedSet = this.backingSet.removeExact(rangeToRemove);\n let isUpdated = !this.backingSet.isEquals(updatedSet);\n this.backingSet = updatedSet;\n return isUpdated;\n }\n /**\n * Removes the given range from the pool. If the given range overlaps, then it removes the overlapping portion.\n * It is a Noop and returns false, if the given range does not exist in the pool. Returns true otherwise\n *\n * @param rangeToRemove range to remove from ppol\n */\n removeOverlapping(rangeToRemove) {\n let updatedSet = this.backingSet.removeOverlapping(rangeToRemove);\n let isUpdated = !this.backingSet.isEquals(updatedSet);\n this.backingSet = updatedSet;\n return isUpdated;\n }\n /**\n * Adds the given range to the pool.\n *\n * @param range to add to pool.\n */\n add(range) {\n this.backingSet = this.backingSet.add(range);\n }\n /**\n * Removes all ranges from pool\n */\n clear() {\n this.backingSet.clear();\n }\n}\nexports.Pool = Pool;\nclass SortedSet {\n constructor(array) {\n if (array) {\n this.backingArray = this.sortArray(array);\n }\n else {\n this.backingArray = new Array();\n }\n }\n sortArray(array) {\n array.sort((a, b) => {\n if (a.isLessThan(b)) {\n return -1;\n }\n if (a.isGreaterThan(b)) {\n return 1;\n }\n return 0;\n });\n return array;\n }\n asArray() {\n return this.backingArray;\n }\n isEquals(other) {\n if (this.backingArray.length !== other.asArray().length) {\n return false;\n }\n return this.backingArray.every((value, index) => {\n return value.getSize() === (other.asArray()[index].getSize());\n });\n }\n add(item) {\n let array = this.backingArray;\n if (\"push\" in item) {\n array = array.concat(item);\n }\n else {\n array.push(item);\n }\n return new SortedSet(this.sortArray(array));\n }\n removeExact(items) {\n let filtered = this.backingArray\n .filter(currentItem => {\n if (\"push\" in items) {\n return items.find(item => item.isEquals(currentItem)) !== undefined;\n }\n else {\n return !items.isEquals(currentItem);\n }\n });\n return new SortedSet(this.sortArray(filtered));\n }\n removeOverlapping(items) {\n let filtered = this.backingArray\n .flatMap(backingItem => {\n if (\"push\" in items) {\n return items.flatMap(item => {\n if (backingItem.contains(item)) {\n return backingItem.difference(item);\n }\n else if (backingItem.inside(item)) {\n return new Array();\n }\n else if (backingItem.isOverlapping(item)) {\n return [backingItem.subtract(item)];\n }\n else {\n return [item];\n }\n });\n }\n else {\n try {\n return backingItem.difference(items);\n }\n catch (e) {\n return backingItem;\n }\n }\n });\n return new SortedSet(this.sortArray(filtered));\n }\n clear() {\n this.backingArray = [];\n }\n}\n//# sourceMappingURL=IPPool.js.map",null,null,"\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Exposes all the library's modules making them available from the \"ip-num\" module.\n * Making it possible to get access to all any of the modules by doing require(\"ip-num\")\n *\n * @example\n * let ipNum = require(\"ip-num\")\n * ipNum.IPv4CidrRange // gets access to IPv4CidrRange\n * ipNum.Asn // gets access to Asn\n */\n__exportStar(require(\"./BinaryUtils\"), exports);\n__exportStar(require(\"./Hexadecatet\"), exports);\n__exportStar(require(\"./HexadecimalUtils\"), exports);\n__exportStar(require(\"./IPNumber\"), exports);\n__exportStar(require(\"./IPNumType\"), exports);\n__exportStar(require(\"./IPPool\"), exports);\n__exportStar(require(\"./IPRange\"), exports);\n__exportStar(require(\"./IPv6Utils\"), exports);\n__exportStar(require(\"./Octet\"), exports);\n__exportStar(require(\"./Prefix\"), exports);\n__exportStar(require(\"./Validator\"), exports);\n//# sourceMappingURL=index.js.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["sleep","time","inMs","Promise","resolve","setTimeout","GolemError","Error","constructor","message","previous","super","this","GolemUserError","GolemAbortError","GolemConfigError","GolemInternalError","GolemPlatformError","GolemTimeoutError","GolemModuleError","code","isBrowser","window","document","isNode","process","versions","node","isWebWorker","self","name","checkAndThrowUnsupportedInBrowserError","feature","nullLogger","nullFunc","child","debug","info","warn","error","s","m","h","d","w","y","plural","ms","msAbs","n","isPlural","Math","round","val","options","type","length","str","String","match","exec","parseFloat","toLowerCase","parse","isFinite","long","abs","fmtLong","fmtShort","JSON","stringify","common","env","createDebug","namespace","prevTime","namespacesCache","enabledCache","enableOverride","args","enabled","curr","Number","Date","diff","prev","coerce","unshift","index","replace","format","formatter","formatters","call","splice","formatArgs","log","apply","useColors","color","selectColor","extend","destroy","Object","defineProperty","enumerable","configurable","get","namespaces","set","v","init","delimiter","newDebug","toNamespace","regexp","toString","substring","default","stack","disable","names","map","skips","join","enable","i","save","split","len","push","RegExp","slice","test","humanize","require$$0","console","keys","forEach","key","hash","charCodeAt","colors","load","exports","module","c","lastC","storage","setItem","removeItem","r","getItem","DEBUG","__nwjs","navigator","userAgent","documentElement","style","WebkitAppearance","firebug","exception","table","parseInt","localStorage","localstorage","warned","j","defaultLogger","opts","disableAutoPrefix","namespaceWithBase","disablePrefix","startsWith","getNamespace","logger","debugLogger","level","msg","ctx","childNamespace","getYagnaApiUrl","YAGNA_API_URL","getYagnaAppKey","_a","YAGNA_APPKEY","getYagnaSubnet","YAGNA_SUBNET","getRepoUrl","GOLEM_REGISTRY_URL","getPaymentNetwork","PAYMENT_NETWORK","isDevMode","GOLEM_DEV_MODE","BaseHttpRequest_1","value","BaseHttpRequest","config","ApiError_1","ApiError","request","response","url","status","statusText","body","_CancelablePromise_isResolved","_CancelablePromise_isRejected","_CancelablePromise_isCancelled","_CancelablePromise_cancelHandlers","_CancelablePromise_promise","_CancelablePromise_resolve","_CancelablePromise_reject","__classPrivateFieldSet","receiver","state","kind","f","TypeError","has","__classPrivateFieldGet","CancelablePromise_1","CancelablePromise","CancelError","isCancelled","CancelablePromise$c","executor","reject","onCancel","cancelHandler","reason","WeakMap","Symbol","toStringTag","then","onFulfilled","onRejected","catch","onFinally","finally","cancel","getResponseBody","getResponseHeader","sendRequest","getRequestBody","getFormData","getQueryString","base64","isBlob","isStringWithValue","isString","isDefined","require$$1","stream","arrayBuffer","isFormData","FormData","btoa","err","Buffer","from","params","qs","Array","isArray","entries","k","encodeURIComponent","append","formData","filter","_","async","resolver","getHeaders","token","username","password","additionalHeaders","all","TOKEN","USERNAME","PASSWORD","HEADERS","headers","Accept","reduce","credentials","undefined","mediaType","Headers","includes","controller","AbortController","method","signal","WITH_CREDENTIALS","CREDENTIALS","abort","fetch","responseHeader","content","contentType","some","json","text","catchErrorCodes","result","errors","ok","errorStatus","errorStatusText","errorBody","e","encoder","ENCODE_PATH","encodeURI","path","VERSION","group","hasOwnProperty","BASE","query","getUrl","responseBody","FetchHttpRequest_1","FetchHttpRequest","request_1","FetchHttpRequest$c","ProviderService_1","ProviderService","httpRequest","getOffers","subscribeOffer","requestBody","unsubscribeOffer","subscriptionId","collectDemands","timeout","maxEvents","queryReplyOffers","queryId","getProposalDemand","proposalId","counterProposalOffer","rejectProposalDemand","listAgreements","appSessionId","afterDate","beforeDate","getAgreement","agreementId","collectAgreementEvents","afterTimestamp","approveAgreement","rejectAgreement","terminateAgreement","getTerminateAgreementReason","RequestorService_1","RequestorService","beginScan","collectScanResults","peerId","endScan","getDemands","subscribeDemand","unsubscribeDemand","collectOffers","queryReplyDemands","getProposalOffer","counterProposalDemand","rejectProposalOffer","createAgreement","cancelAgreement","confirmAgreement","waitForApproval","Client_1","Client","require$$2","HttpRequest","provider","requestor","OpenAPI","require$$3","OpenAPI_1","require$$4","require$$5","require$$6","require$$7","CancelablePromise$a","FetchHttpRequest$a","getActivityAgreement","activityId","collectActivityEvents","getActivityState","setActivityState","getActivityUsage","RequestorControlService_1","RequestorControlService","createActivity","callEncrypted","getExecBatchResults","batchId","commandIndex","destroyActivity","RequestorStateService_1","RequestorStateService","getRunningCommand","requestorControl","requestorState","require$$8","CancelablePromise$8","FetchHttpRequest$8","issueDebitNote","getDebitNotes","maxItems","getDebitNote","debitNoteId","getPaymentsForDebitNote","sendDebitNote","cancelDebitNote","getDebitNoteEvents","issueInvoice","getInvoices","getInvoice","invoiceId","getPaymentsForInvoice","sendInvoice","cancelInvoice","getInvoiceEvents","getProviderAccounts","getPayments","network","driver","getPayment","paymentId","paymentsStatus","acceptDebitNote","rejectDebitNote","acceptInvoice","rejectInvoice","createAllocation","getAllocations","getAllocation","allocationId","amendAllocation","releaseAllocation","getRequestorAccounts","getDemandDecorations","allocationIds","CancelablePromise$6","FetchHttpRequest$6","DefaultService_1","DefaultService","connectTcp","networkId","ip","port","getNetworks","createNetwork","getNetwork","removeNetwork","getAddresses","addAddress","getNodes","addNode","removeNode","nodeId","getConnections","CancelablePromise$4","FetchHttpRequest$4","getServiceMessages","servicesId","bindServices","unbindServices","CancelablePromise$2","FetchHttpRequest$2","getIdentity","getVersion","__createBinding","create","o","k2","desc","getOwnPropertyDescriptor","__esModule","writable","__setModuleDefault","__importStar","mod","prototype","dist","VersionApi","IdentityApi","GsbApi","NetApi","PaymentApi","ActivityApi","MarketApi","getRandomValues","byteToHex","rnds8","Uint8Array","rng","crypto","bind","native","randomUUID","v4","buf","offset","rnds","random","arr","unsafeStringify","lrucache","max","Map","delete","size","firstKey","next","looseOption","freeze","loose","emptyOpts","parseOptions_1","constants","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","MAX_SAFE_INTEGER","RELEASE_TYPES","SEMVER_SPEC_VERSION","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","debug_1","NODE_DEBUG","re","safeRe","src","t","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","COERCE","COERCEFULL","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","numeric","compareIdentifiers","a","b","anum","bnum","identifiers","rcompareIdentifiers","parseOptions","semver","SemVer","version","includePrerelease","trim","LOOSE","FULL","raw","major","minor","patch","prerelease","id","num","build","compare","other","compareMain","comparePre","compareBuild","inc","release","identifier","identifierBase","base","isNaN","compare_1","eq","neq","gt","gte","lt","lte","cmp_1","op","SPACE_CHARACTERS","Range","range","Comparator","formatted","parseRange","first","isNullSet","isAny","comps","memoKey","cached","cache","hr","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","TILDETRIM","CARETTRIM","rangeList","comp","parseComparator","replaceGTE0","COMPARATORLOOSE","rangeMap","comparators","values","intersects","thisComparators","isSatisfiable","rangeComparators","every","thisComparator","rangeComparator","er","testSet","ANY","operator","COMPARATOR","cmp","comparator","remainingComparators","testComparator","pop","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","TILDELOOSE","TILDE","M","p","pr","ret","replaceCaret","CARETLOOSE","CARET","z","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fp","fpr","fb","to","tM","tm","tp","tpr","allowed","satisfies_1","parse_1","throwErrors","coerce_1","rtl","coerceRtlRegex","COERCERTLFULL","COERCERTL","lastIndex","extendStatics","setPrototypeOf","__proto__","__extends","__","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","rejected","done","__generator","label","sent","trys","ops","g","Iterator","verb","iterator","__values","__read","ar","__spreadArray","pack","arguments","l","concat","__await","__asyncGenerator","asyncIterator","q","AsyncIterator","resume","fulfill","settle","shift","__asyncValues","isFunction","createErrorClass","createImpl","ctorFunc","instance","SuppressedError","UnsubscriptionError","_super","arrRemove","item","indexOf","Subscription","initialTeardown","closed","_parentage","_finalizers","empty","unsubscribe","e_1","e_2","_b","_parentage_1","_parentage_1_1","remove","e_1_1","return","initialFinalizer","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","e_2_1","add","teardown","_hasParent","_addParent","parent","_removeParent","EMPTY","EMPTY_SUBSCRIPTION","isSubscription","onUnhandledError","onStoppedNotification","useDeprecatedSynchronousErrorHandling","useDeprecatedNextContext","timeoutProvider","handler","_i","clearTimeout","handle","delegate","reportUnhandledError","noop","errorContext","cb","Subscriber","destination","_this","isStopped","EMPTY_OBSERVER","complete","SafeSubscriber","_next","_error","_complete","_bind","Function","fn","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","context_1","observable","identity","x","Observable","subscribe","_subscribe","lift","source","subscriber","isObserver","_trySubscribe","sink","promiseCtor","getPromiseCtor","Symbol_observable","pipe","fns","operations","input","toPromise","operate","hasLift","liftedSource","createOperatorSubscriber","onNext","onComplete","onError","onFinalize","OperatorSubscriber","shouldUnsubscribe","closed_1","ObjectUnsubscribedError","Subject","currentObservers","observers","hasError","thrownError","subject","AnonymousSubject","_throwIfClosed","_c","_checkFinalizedStatuses","_innerSubscribe","asObservable","last","popScheduler","schedule","isArrayLike","isPromise","isInteropObservable","isAsyncIterable","obj","createInvalidObservableTypeError","isIterable","Symbol_iterator","readableStreamLikeToAsyncGenerator","readableStream","reader","getReader","read","releaseLock","isReadableStreamLike","innerFrom","obs","array","promise","fromAsyncIterable","iterable","iterable_1","iterable_1_1","asyncIterable","asyncIterable_1","asyncIterable_1_1","executeSchedule","parentSubscription","scheduler","work","delay","repeat","scheduleSubscription","observeOn","subscribeOn","scheduleAsyncIterable","scheduled","scheduleObservable","scheduleArray","schedulePromise","scheduleIterable","scheduleReadableStreamLike","of","EmptyError","lastValueFrom","_value","_hasValue","project","mergeMap","resultSelector","concurrent","Infinity","ii","onBeforeNext","expand","innerSubScheduler","buffer","active","isComplete","checkComplete","doInnerSub","innerComplete","innerValue","bufferedValue","mergeInternals","predicate","catchError","selector","handledResult","innerSub","syncUnsub","accumulator","seed","hasSeed","hasState","scanInternals","arrReducer","finalize","callback","merge","defaultValue","popNumber","argsOrArgArray","mergeAll","switchMap","innerSubscriber","innerIndex","outerIndex","takeUntil","notifier","tap","tapObserver","isUnsub","waitFor","check","intervalSeconds","verifyInterval","verify","setInterval","abortSignal","aborted","clearInterval","waitAndCall","waitSeconds","EventReader","pollToSubject","createReader","eventType","eventsFetcher","isFinished","keepReading","currentPoll","lastTimestamp","toISOString","pollValues","events","count","lastEventTimestamp","event","eventDate","https","http","httpsOptions","bom","maxBufferAheadAllocation","reUnsafeHeader","EventSource","eventSourceInitDict","readyState","CONNECTING","hasNewOrigin","req","onConnectionClosed","CLOSED","_emit","Event","reconnectUrl","connectionInProgress","connect","reconnectInterval","lastEventId","discardTrailingNewline","data","eventName","isSecure","protocol","reqHeaders","removeUnsafeHeaders","header","rejectUnauthorized","createConnection","proxy","Host","host","hostname","optName","option","withCredentials","res","statusCode","statusMessage","location","prevOrigin","URL","origin","nextOrigin","nextTick","close","newBuffer","OPEN","on","removeAllListeners","startingPos","startingFieldLength","newBufferSize","bytesUsed","chunk","alloc","copy","charCode","hasBom","pos","lineLength","fieldLength","parseEventStreamLine","setNoDelay","end","listeners","emit","MessageEvent","noValue","field","valueLength","retry","_close","xhr","eventsource","optionalProperties","eventInitDict","inherits","EventEmitter","listener","_listener","addEventListener","dispatchEvent","detail","removeEventListener","removeListener","MIN_SUPPORTED_YAGNA","YagnaApi","debitNoteEvents$","debitNoteEventsPoll","invoiceEvents$","invoiceEventPoll","agreementEvents$","agreementEventsPoll","apiKey","EnvUtils.getYagnaAppKey","basePath","EnvUtils.getYagnaApiUrl","yagnaOptions","commonHeaders","Authorization","marketClient","YaTsClient.MarketApi","market","paymentClient","YaTsClient.PaymentApi","payment","activityApiClient","YaTsClient.ActivityApi","activity","control","observeBatchExecResults","observer","eventSource","netClient","YaTsClient.NetApi","net","gsbClient","YaTsClient.GsbApi","gsb","identityClient","YaTsClient.IdentityApi","versionClient","YaTsClient.VersionApi","assertSupportedVersion","startPollingEvents","disconnect","stopPollingEvents","current","promises","allSettled","normVersion","semverCoerce","userInstalled","minSupported","semverSatisfies","createAbortSignalFromTimeout","timeoutOrSignal","AbortSignal","anyAbortSignal","signals","onAbort","ev","target","cleanup","runOnNextEventLoopIteration","mergeUntilFirstComplete","observable1","observable2","completionSubject","observable1WithCompletion","observable2WithCompletion","otherSources","mergeWith","DemandSpecification","paymentPlatform","Demand","details","MarketErrorCode","GolemMarketError","MarketProposal","model","previousProposalId","prevProposalId","properties","timestamp","isInitial","isDraft","isExpired","isRejected","isValid","validate","OfferProposal","demand","issuer","pricing","usageVector","priceVector","envIdx","findIndex","ele","cpuIdx","envSec","cpuSec","start","getDto","transferProtocol","cpuBrand","cpuCapabilities","cpuCores","cpuThreads","memory","publicNet","runtimeCapabilities","runtimeName","runtimeVersion","getEstimatedCost","rentHours","threadsNo","rentSeconds","issuerId","walletAddress","InvalidProposal","getProviderPaymentPlatforms","prop","providerIds","proposal","providerNames","priceLimits","cpuPerSec","envPerSec","prefix","Events","EE","context","once","addListener","emitter","evt","_events","_eventsCount","clearEvent","eventNames","getOwnPropertySymbols","handlers","ee","listenerCount","a1","a2","a3","a4","a5","off","prefixed","AcquireQueue","queue","abortController","releaseAll","signalOrTimeout","throwIfAborted","_resolve","_reject","withResolvers","abortPromise","race","hasAcquirers","put","DraftOfferProposalPool","acquireQueue","minCount","selectOfferProposal","proposals","validateOfferProposal","available","Set","leased","acquire","tryGettingFromAvailable","removeFromAvailable","availableCount","leasedCount","isReady","clear","readFrom","OfferCounterProposal","AsyncLock","queues","domainReentrant","domain","domains","DEFAULT_TIMEOUT","maxOccupationTime","DEFAULT_MAX_OCCUPATION_TIME","maxExecutionTime","DEFAULT_MAX_EXECUTION_TIME","maxPending","isInteger","DEFAULT_MAX_PENDING","_acquireBatch","deferredResolve","deferredReject","deferred","resolved","timer","occupationTimer","executionTimer","locked","called","_promiseTry","taskFn","skipQueue","fnx","reduceRight","getFn","isBusy","DEFAULTS","ProposalsBatch","batch","lock","minBatchSize","releaseTimeoutMs","addProposal","providerKey","getProviderKey","getProposals","providersProposals","getBestProposal","waitForProposals","timeoutId","intervalId","isTimeoutReached","isBatchSizeReached","sort","p1","p2","p1Price","p2Price","p1Time","valueOf","p2Time","ComparisonOperator","PackageFormat","DemandBodyBuilder","constraints","addProperty","addConstraint","comparisonOperator","Eq","getProduct","mergePrototype","cons","parseConstraint","constraint","parsedConstraint","BaseConfig","isPositiveInt","WorkloadDemandDirectorConfig","packageFormat","GVMKitSquash","engine","runtime","minMemGib","minStorageGib","minCpuThreads","minCpuCores","capabilities","useHttps","assign","expirationSec","imageHash","manifest","imageTag","imageUrl","BasicDemandDirectorConfig","subnetTag","EnvUtils.getYagnaSubnet","BasicDemandDirector","builder","PaymentDemandDirectorConfig","debitNotesAcceptanceTimeoutSec","midAgreementDebitNoteIntervalSec","midAgreementPaymentTimeoutSec","PaymentDemandDirector","allocation","marketApiAdapter","getPaymentRelatedDemandDecorations","WorkloadDemandDirector","now","cap","GtEq","taskPackage","resolveTaskPackageFromCustomUrl","resolveTaskPackageUrl","addManifestDecorations","repoUrl","EnvUtils.getRepoUrl","isDev","EnvUtils.isDevMode","tag","sha3","manifestSig","manifestSigAlgorithm","manifestCert","ScanDirector","addWorkloadDecorations","addGenericDecorations","addPaymentDecorations","workload","_d","_f","_e","_h","_g","_k","_l","_m","_o","maxMemGib","_p","LtEq","_q","_r","_s","maxStorageGib","_t","_u","_v","_w","maxCpuThreads","_x","_y","_z","_0","maxCpuCores","_1","ScannedOffer","providerId","cpuVendor","gpuBrand","memoryGib","storageGib","offerId","offerCreateAt","paymentPlatformAddresses","propRegex","platformAddress","address","fromEntries","MarketModuleImpl","deps","marketApi","fileServer","demandRefreshIntervalSec","collectAndEmitAgreementEvents","buildDemandDetails","demandOptions","orderOptions","basicConfig","workloadOptions","applyLocalGVMIServeSupport","workloadConfig","workloadDirector","paymentConfig","paymentDirector","buildScanSpecification","sourcePath","publishInfo","getPublishInfo","publishFile","fileUrl","fileHash","publishAndRefreshDemand","demandSpecification","currentDemand","subscribeToOfferProposals","publishDemandSpecification","golemMarketError","SubscriptionFailed","unsubscribeFromOfferProposals","unpublishDemand","demandId","interval","collectMarketProposalEvents","emitMarketProposalEvents","collectAllOfferProposals","negotiateProposal","offerProposal","counterDemand","counterProposal","proposeAgreement","agreement","collectDraftOfferProposals","freshDemand","filterProposalsByPricingOptions","filterProposalsByUserFilter","reduceInitialProposalsByProviderKey","minProposalsBatchSize","proposalsBatchReleaseTimeoutMs","signAgreementFromPool","draftProposalPool","agreementOptions","getProposal","draftPoolCounters","total","tryProposing","proposalsBatch","subscription","estimateBudget","order","maxAgreements","pricingModel","maxCpuPerHourPrice","maxStartPrice","maxEnvPerHourPrice","avgGlmPerHour","fetchAgreement","terminatedBy","isPriceValid","scan","scanSpecification","Agreement","getState","offer","isFinalState","BaseDocument","recipientId","payeeAddr","requestorWalletAddress","payerAddr","paymentDueDate","getStatus","globalScope","ONE","MAX_DIGITS","Decimal","precision","rounding","toExpNeg","toExpPos","LN10","external","decimalError","invalidArgument","exponentOutOfRange","mathfloor","floor","mathpow","pow","isDecimal","MAX_E","carry","xd","yd","Ctor","ceil","reverse","checkInt32","min","digitsToString","ws","indexOfLastWord","getZeroString","absoluteValue","comparedTo","xdL","ydL","decimalPlaces","dp","dividedBy","div","divide","dividedToIntegerBy","idiv","equals","exponent","getBase10Exponent","greaterThan","greaterThanOrEqualTo","isint","isNegative","isneg","isPositive","ispos","isZero","lessThan","lessThanOrEqualTo","logarithm","wpr","ln","minus","sub","subtract","modulo","times","naturalExponential","exp","naturalLogarithm","negated","neg","plus","sd","squareRoot","sqrt","toExponential","mul","rL","toDecimalPlaces","todp","rm","toFixed","toInteger","toint","toNumber","toPower","sign","yIsInt","yn","truncate","toPrecision","toSignificantDigits","tosd","toJSON","multiplyInteger","temp","aL","bL","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","denominator","sum","getLn10","zs","c0","numerator","x2","charAt","parseDecimal","search","rd","doRound","xdi","xe","xLTy","isExp","ps","clone","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","RejectionReason","Invoice","providerInfo","activityIds","amount","getPreciseAmount","isSameAs","invoice","DebitNote","totalAmountDue","usageCounterVector","Allocation","totalAmount","spentAmount","remainingAmount","PaymentErrorCode","maxAmount","debitNote","GolemPaymentError","_GolemPaymentError_allocation","_GolemPaymentError_provider","getProvider","InvoiceProcessor","api","collectInvoices","after","limit","statuses","minAmount","providerWallets","paymentPlatforms","filteredInvoices","getTime","fetchSingleInvoice","dryRun","makeDeposit","success","totalAmountAccepted","acceptManyInvoices","invoices","groupByPayerAddress","invoiceDetails","acc","results","groupedByPaymentPlatform","groupedByPayerAddress","payerAddress","PayerDetails","getPaymentPlatform","getMessageFromApiError","isApiError","_jsonParseError","AgreementPaymentProcess","paymentModule","debitNotes","invoiceFilter","debitNoteFilter","invoiceSubscription","observeInvoices","addInvoice","debitNoteSubscription","observeDebitNotes","addDebitNote","cleanupSubscriptions","applyDebitNote","applyInvoice","hasReceivedInvoice","AgreementFinalized","hasProcessedDebitNote","acceptedByFilter","RejectedByRequestorFilter","DebitNoteAcceptanceFailed","rejectionReason","rejectMessage","DebitNoteRejectionFailed","AgreementAlreadyPaid","InvoiceAlreadyReceived","InvoiceAcceptanceFailed","InvoiceRejectionFailed","isStarted","stop","MAINNETS","PaymentModuleImpl","EnvUtils.getPaymentNetwork","yagnaApi","yagna","paymentApi","startEmittingPaymentEvents","receivedInvoices$","receivedDebitNotes$","getPayerDetails","budget","platform","lastKnownAllocationState","_newOpts","acceptedInvoice","rejectedInvoice","acceptedDebitNote","createInvoiceProcessor","createAgreementPaymentProcess","ActivityStateEnum","Activity","currentState","New","previousState","Unknown","usage","getPreviousState","Result","props","stdout","stderr","isBatchFinished","getOutputAsJson","ExecutionConfig","activityExeBatchResultMaxRetries","activityExeBatchResultPollIntervalSeconds","Script","commands","command","before","cmd","getExeScriptRequest","toJson","EMPTY_ERROR_RESULT","Command","commandName","toExeScriptRequest","Deploy","Start","Run","capture","entry_point","atEnd","Transfer","UploadFile","storageProvider","dstPath","UploadData","publishData","DownloadFile","srcPath","receiveFile","DownloadData","chunks","receiveData","combineChunks","core","global","TESTING_WINDOWS","windows","isexe","sync","checkStat","fs","statSync","stat","isSymbolicLink","isFile","pathext","pathExt","PATHEXT","substr","checkPathExt","mode","uid","gid","myUid","getuid","myGid","getgid","u","checkMode","isexe_1","is","ignoreErrors","isWindows","OSTYPE","COLON","getNotFoundError","getPathInfo","opt","colon","pathEnv","cwd","PATH","pathExtExe","which","found","ppRaw","pathPart","pCmd","subStep","ext","which_1","cur","ex","nothrow","pathKey","environment","find","toUpperCase","pathKeyModule","getPathKey","resolveCommandAttempt","parsed","withoutPathExt","hasCustomCwd","shouldSwitchCwd","chdir","disabled","resolveCommand_1","metaCharsRegExp","_escape","arg","argument","doubleEscapeMetaChars","shebangRegex","shebangCommand","string","binary","resolveCommand","escape","readShebang","fd","openSync","readSync","closeSync","isWin","isExecutableRegExp","isCmdShimRegExp","parseNonShell","commandFile","file","shebang","detectShebang","needsShell","forceShell","needsDoubleEscapeMetaChars","normalize","shellCommand","comspec","windowsVerbatimArguments","original","shell","notFoundError","syscall","errno","spawnargs","verifyENOENT","enoent","hookChildProcess","cp","originalEmit","arg1","verifyENOENTSync","spawn","spawned","crossSpawnModule","spawnSync","_parse","_enoent","GftpStorageProvider","publishedUrls","isInitialized","startGftpServer","jsonRpc","gftpServerProcess","setEncoding","generateTempFileName","_polyfillNode_crypto","tmp","_rollup_plugin_ignore_empty_module_placeholder$1","fileName","dirSync","existsSync","unlinkSync","output_file","uploadFile","isBuffer","uploadBytes","urls","kill","jsonrpc","stdin","write","uploadStream","wStream","createWriteStream","encoding","links","files","NullStorageProvider","BitWidth","bitWidth","bitWidthUtil","paddingSize","fromByteWidth","uwidth","fwidth","iwidth","toByteWidth","bit_width_js_1","WIDTH8","WIDTH16","WIDTH32","WIDTH64","fround","bufSize","scalarSize","flexbuffersUtil","toUTF8Array","fromUTF8Array","TextDecoder","decode","TextEncoder","encode","ValueType","valueType","valueTypeUtil","packedType","fixedTypedVectorElementSize","fixedTypedVectorElementType","toTypedVector","isAVector","isFixedTypedVector","isTypedVector","isTypedVectorElement","isIndirectNumber","isInline","value_type_js_1","VECTOR_BOOL","VECTOR_INT","VECTOR_STRING_DEPRECATED","VECTOR_INT2","VECTOR_FLOAT4","BOOL","FLOAT","isNumber","INT","INDIRECT_INT","INDIRECT_FLOAT","STRING","VECTOR","VECTOR_INT3","VECTOR_INT4","typedVectorElementType","stackValue","StackValue","bit_width_util_js_1","value_type_util_js_1","width","elementWidth","writeToBuffer","byteWidth","newOffset","computeOffset","view","setFloat32","setFloat64","pushInt","UINT","pushUInt","NULL","storedWidth","storedPackedType","isOffset","Builder","flexbuffers_util_js_1","stack_value_js_1","dedupStrings","dedupKeys","dedupKeyVectors","stackPointers","finished","stringLookup","keyLookup","keyVectorLookup","indirectIntLookup","indirectUIntLookup","indirectFloatLookup","ArrayBuffer","DataView","align","newValueSize","targetOffset","byteLength","prevSize","prevBuffer","setInt8","setInt16","setInt32","setBigInt64","BigInt","setUint8","setUint16","setUint32","setBigUint64","writeInt","writeUInt","writeBlob","blobOffset","offsetStackValue","BLOB","writeString","utf8","stringOffset","writeKey","KEY","writeStackValue","relativeOffset","integrityCheckOnValueAddition","isVector","integrityCheckOnKeyAddition","startVector","stackPosition","startMap","presorted","endVector","stackPointer","vecLength","vec","createVector","endMap","keyVectorHash","keysStackValue","valuesStackValue","shouldFlip","v1","v2","c1","c2","getUint8","swap","flipIndex","smaller","sorted","quickSort","left","right","pivot","left_new","right_new","selectionSort","pointer","prefixElements","vectorType","typed","fix","vecOffset","MAP","vType","nullStackValue","boolStackValue","intStackValue","uintStackValue","floatStackValue","finishBuffer","isView","getOwnPropertyNames","addKey","finish","addInt","indirect","deduplicate","valueOffset","stackOffset","addUInt","INDIRECT_UINT","addFloat","referenceUtil","keyForIndex","diffKeys","keyIndex","readFloat","readUInt","readInt","validateOffset","dataView","getUint16","getUint32","getBigUint64","keyOffset","keyIndirectOffset","dif","getInt8","getInt16","getInt32","getBigInt64","getFloat32","getFloat64","parentWidth","keysVectorOffset","indirectOffset","_byteWidth","low","high","mid","reference","Reference","toReference","reference_util_js_1","valueForIndexWithKey","_indirect","elementOffset","_length","isNull","isFloat","isInt","isBool","isMap","boolValue","intValue","floatValue","numericValue","stringValue","begin","blobValue","_packedType","_valueType","sizeByteWidth","toObject","builder_js_1","reference_js_1","reference_js_2","object","deduplicateStrings","deduplicateKeys","deduplicateKeyVectors","INPUT_ERROR","WINDOW","root","JS_SHA3_NO_WINDOW","WEB_WORKER","JS_SHA3_NO_NODE_JS","COMMON_JS","JS_SHA3_NO_COMMON_JS","ARRAY_BUFFER","JS_SHA3_NO_ARRAY_BUFFER","HEX_CHARS","CSHAKE_PADDING","SHIFT","RC","BITS","SHAKE_BITS","OUTPUT_TYPES","CSHAKE_BYTEPAD","JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW","formatMessage","cloneArray","newArray","createOutputMethod","bits","padding","outputType","Keccak","update","createShakeOutputMethod","outputBits","createCshakeOutputMethod","methods","createKmacOutputMethod","createOutputMethods","createMethod","algorithms","bytepad","Kmac","methodNames","algorithm","methodName","newMethodName","blocks","reset","finalized","block","blockCount","byteCount","outputBlocks","extraBytes","lastByteIndex","bytes","encodeString","strs","paddingBytes","zeros","hex","Uint32Array","digest","c3","c4","c5","c6","c7","c8","c9","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","browser","fsPromises","fs.promises","WebSocketStorageProvider","services","ready","openHandles","fileInfo","createFileInfo","createSocket","component","respond","fileSize","payload","fileHandle","open","chunkSize","completeReceive","serviceId","deleteService","getWsConstructor","WebSocket","NodeWebSocket","components","service","createService","binaryType","listen","messageEndpoint","send","hashHex","jsSha3.sha3_256","sha3_256","createDefaultStorageProvider","WorkErrorCode","GolemWorkError","_GolemWorkError_agreement","_GolemWorkError_activity","_GolemWorkError_provider","getActivity","Batch","script","run","executableOrCommand","executableArgs","transfer","dst","uploadJson","uploadData","downloadFile","allResults","executionMetadata","execute","result$","getResultsObservable","golemError","ScriptExecutionFailed","endStream","decodedResults","RemoteProcess","activityModule","activityResult$","lastResult","streamError","waitForExit","timeoutInMs","ActivityResultsFetchingFailed","TcpProxy","wsUrl","appKey","heartBeatSec","server","createServer","client","sReady","sBuffer","wsReady","wsBuffer","clearSocketBuffer","clearWebSocketBuffer","flushSocketBuffer","flushWebSocketBuffer","mask","teardownBridge","authorization","notifyOfError","heartBeatInt","socketReady","isAlive","terminate","ping","attachDebugLogsToServer","handleError","handleListen","listening","ExeUnit","networkNode","createScriptExecutor","executionOptions","fetchState","refreshActivity","ActivityStatusQueryFailed","setup","Ready","setupActivity","Initialized","deployActivity","currentDateTime","ActivityDeploymentFailed","getNetworkDeploymentArg","getVolumeDeploymentArg","exeOrCmd","argsOrOptions","runOptions","runOneCommand","runAndStream","maxRetries","downloadData","downloadJson","beginBatch","getWebsocketUri","NetworkSetupMissing","getIp","createTcpProxy","portOnProvider","ScriptInitializationFailed","commandsErrors","errorMessage","volumes","volumeSpec","sizeGib","withTimeout","timeoutMs","milliseconds","RetryOperation","timeouts","forever","_originalTimeouts","_timeouts","_options","_maxRetryTime","maxRetryTime","_fn","_errors","_attempts","_operationTimeout","_operationTimeoutCb","_timeout","_operationStart","_timer","_cachedTimeouts","retry_operation","currentTime","unref","attempt","timeoutOps","try","attempts","mainError","counts","mainErrorCount","operation","retries","factor","minTimeout","maxTimeout","randomize","createTimeout","wrap","retrier","lib","bail","onRetry","RETRYABLE_ERROR_STATUS_CODES","ExeScriptExecutor","batchSize","getError","streamingBatch","pollingBatch","executeScript","isCompleted","pollForResults","getBatchResults","newResults","observeStreamingBatchEvents","resultEvents","parseEventToResult","inclusive","return_code","Boolean","_j","ActivityModuleImpl","activityApi","getExecBatchEvents","updated","staleActivity","lastState","freshActivity","newState","findActivityById","createExeUnit","exe","refreshedActivity","matchingBitCount","intLog2","leftPadWithZeroBit","dottedDecimalNotationToBinaryString","decimalNumberToOctetString","numberToBinaryString","binaryString","parseBinaryStringToBigInt","dottedDecimal","binaryAsString","octet","finalStringLength","cidrPrefixToMaskBinaryString","cidrPrefix","ipType","cidrUpperValue","givenNumber","firstBinaryString","secondBinaryString","longerString","otherString","IPv6Utils","collapseIPv6Number","expandIPv6Number","BinaryUtils_1","Validator_1","extractPrefix","ipv6String","expandWithZero","hexadecimalArray","hexadecimal","Validator","IPV6_PATTERN","invalidIPv6PatternMessage","leftPortion","rightPortion","leftPortionSplit","rightPortionSplit","doublePortion","gapCount","pads","expandDoubleColon","leftString","rightString","contracted","hexidecimal","withoutLeadingZero","hexadectetNotationToBinaryString","colonHexadecimalNotationToBinaryString","hexadecimalStringToHexadecatetString","hexadecimalStringToBinaryString","bigIntToHexadecimalString","IPv6Utils_1","hexadecimalString","binaryStringToHexadecimalString","hexadectetString","hexadecimalAsString","hexavalue","BinaryUtils_2","HexadecimalUtils_1","HexadecimalUtils_2","Validator$1","isWithinRange","ipNumber","lowerBound","upperBound","isValidAsnNumber","asnNumber","THIRTY_TWO_BIT_SIZE","invalidAsnRangeMessage","isValid16BitAsnNumber","SIXTEEN_BIT_SIZE","invalid16BitAsnRangeMessage","isValidIPv4Number","ipv4Number","invalidIPv4NumberMessage","isValidIPv6Number","ipv6Number","ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_SIZE","invalidIPv6NumberMessage","isValidIPv4Octet","octetNumber","withinRange","EIGHT_BIT_SIZE","invalidOctetRangeMessage","isValidIPv6Hexadecatet","hexadecatetNum","invalidHexadecatetMessage","isValidIPv4String","ipv4String","rawOctets","invalidOctetCountMessage","isNumeric","IPV4_PATTERN","invalidIPv4PatternMessage","isValidIPv6String","hexadecimals","invalidHexadecatetCountMessage","isHexadecatet","isValidPrefixValue","prefixValue","ipNumType","invalidPrefixValueMessage","invalidInetNumType","isValidIPv4Mask","ipv4MaskString","ipv4InBinary","IPV4_CONTIGUOUS_MASK_BIT_PATTERN","invalidMaskMessage","isValidIPv6Mask","ipv6MaskString","ipv6InBinary","IPV6_CONTIGUOUS_MASK_BIT_PATTERN","isValidIPv4CidrNotation","ipv4RangeAsCidrString","cidrComponents","invalidIPv4CidrNotationMessage","validIpv4","invalidIpv4Message","validPrefix","invalidPrefixMessage","invalidMessage","isValidIPv4CidrRange","ipv4CidrNotation","isValidCidrRange","isValidIPv6CidrRange","ipv6CidrNotation","isValidIPv6CidrNotation","rangeString","cidrNotationValidator","toBinaryStringConverter","prefixFactory","validationResult","InvalidIPCidrRangeMessage","isValidIPv4RangeString","ipv4RangeString","isValidRange","firstIP","lastIP","isValidIPv6RangeString","ipv6RangeString","validator","firstLastValidator","rangeComponents","invalidRangeNotationMessage","validFirstIP","invalidFirstIPMessage","validLastIP","invalidLastIPMessage","invalidRangeFirstNotGreaterThanLastMessage","ipv6RangeAsCidrString","IPV6_RANGE_PATTERN","invalidIPv6CidrNotationString","isValidBinaryString","invalidBinaryStringErrorMessage","IPV4_RANGE_PATTERN","IPV4_SIZE","IPV6_SIZE","takeOutOfRangeSizeMessage","cannotSplitSingleRangeErrorMessage","invalidIPRangeSizeMessage","invalidIPRangeSizeForCidrMessage","Hexadecatet_1","Hexadecatet","givenValue","hexadecatetValue","fromString","rawValue","fromNumber","getValue","Octet_1","Octet","octetValue","IPNumber","isIPv4","IPv6Mask","IPv4Mask","IPv6","Asn","IPv4","AbstractIPNum","BinaryUtils_3","BinaryUtils_4","toBinaryString","bitSize","hasNext","maximumBitSize","hasPrevious","isEquals","anotherIPNum","isLessThan","isGreaterThan","isLessThanOrEquals","isGreaterThanOrEquals","ipValue","octets","separator","constructFromDecimalDottedString","constructFromBigIntValue","bigIntValue","fromDecimalDottedString","ipString","fromBinaryString","ipBinaryString","getOctets","nextIPNumber","previousIPNumber","toIPv4MappedIPv6","rawOctet","binaryStringToDecimalOctets","ipv4BinaryString","startWithASPrefix","parseFromDotNotation","valueAsBigInt","AS_PREFIX","toASPlain","toASDot","toASDotPlus","is16Bit","valid16BitAsnNumber","is32Bit","word","hexadecatet","expandedIPv6","constructFromHexadecimalDottedString","fromBigInt","fromHexadecatet","paddedBinaryString","fromIPv4","ipv4","fromIPv4DotDecimalString","ip4DotDecimalString","getHexadecatet","binaryStringToHexadecatets","stringHexadecatet","stringOctets","stringHexadecimals","IPNumType","Prefix","isIPv4Prefix","IPv6Prefix","IPv4Prefix","IPNumber_1","bitValue","fromRangeSize","rangeSize","prefixNumber","rangeSizeToPrefix","toMask","onBits","offBits","toDecimalNotation","toRangeSize","toHexadecatetNotation","rangeMaxSize","IPRange","isIPv4CidrRange","IPv6CidrRange","IPv4CidrRange","RangedSet","Prefix_1","currentValue","fromSingleIP","fromCidrRange","cidrRange","getFirst","getLast","fromRangeString","ips","firstIPString","lastIPString","isValidFirstIPv4","isValidSecondIPv4","isValidFirstIPv6","isValidLastIPv6","getSize","toRangeString","inside","otherRange","contains","thisFirst","thisLast","otherFirst","otherLast","isOverlapping","isCidrAble","netmask","toCidrRange","toIPv4CidrRange","toIPv6CidrRange","isConsecutive","union","prepend","takeSubRange","RangeError","valueOfFirstIp","firstIp","valueOfLastIp","lastIp","difference","reminders","take","computed","returnCount","candidateRange","AbstractIPRange","hasNextRange","sizeOfCurrentRange","hasPreviousRange","toRangeSet","isCidrMergeable","getPrefix","isMergeable","newInstance","takeStream","fromCidr","rangeIncidrNotation","errorMessages","messages","toCidrString","ipv4s","iteratingIPv4","errMessage","counter","prefixToSplit","splitCidr","firstIPOfFirstRange","firstRange","firstIPOfSecondRange","splitInto","splitCount","flatMap","nextRange","startOfNextRange","previousRange","startOfPreviousRange","ipv6","rangeInCidrNotation","iPv6s","iteratingIPv6","maskSize","maskAsBigInteger","invertedMask","IPPool","Pool","IPRange_1","ranges","backingSet","SortedSet","fromIP","ipNumbers","fromRangeSet","ipRanges","fromCidrRanges","cidrRanges","rangeSet","getRanges","asArray","aggregate","mergedRanges","currentRange","currentIndex","previousCidrRange","currentCidrRange","merged","aggregatedPool","getCidrRange","selectedCidrRange","loop","selectedRange","remaining","removeExact","getCidrRanges","reqprefix","go","accummulated","singleCidrRange","currentSize","lowerPrefix","resetWith","rangeToRemove","updatedSet","isUpdated","removeOverlapping","backingArray","sortArray","items","filtered","currentItem","backingItem","NetworkErrorCode","NetworkState","__exportStar","require$$9","require$$10","GolemNetworkError","_GolemNetworkError_network","Network","gateway","nodes","Active","ipRange","ipIterator","getFirstAvailableIpAddress","getNetworkInfo","isRemoved","NetworkRemoved","hasNode","AddressAlreadyAssigned","NodeRemovalFailed","markAsRemoved","Removed","NoAddressesAvailable","isIpInNetwork","isNodeIdUnique","isNodeIpUnique","NetworkNode","yagnaBaseUri","nodeIp","href","NetworkModuleImpl","networkApi","ipDecimalDottedString","maskBinaryNotation","maskPrefix","requestorId","createNetworkNode","ownerIp","NetworkCreationFailed","getFreeIpInNetwork","removeNetworkNode","targetIp","AddressOutOfRange","ResourceRental","paymentProcess","marketModule","resourceRentalOptions","currentExeUnit","startStopAndFinalize","fetchAgreementState","stopAndFinalize","finalizePromise","hasActivity","getExeUnit","destroyExeUnit","exeUnitPromise","exeUnit","ResourceRentalPool","lowPriority","highPriority","borrowed","asyncLock","rentalsBeingSigned","proposalPool","rentalModule","networkModule","minPoolSize","poolSize","maxPoolSize","createNewResourceRental","resourceRental","createResourceRental","ResourceRentalCreationFailed","canCreateMoreResourceRentals","takeValidResourceRental","enqueueAcquire","rental","raceNewRentalWithAcquireQueue","ac","any","isDraining","passResourceRentalToWaitingAcquireOrBackToPool","getAvailableSize","ResourceRentalTerminationFailed","drainPromise","startDrain","allResourceRentals","drainAndClear","getBorrowedSize","timeoutOrAbortSignal","tryCreatingMissingResourceRentals","fill","withRental","RentalModuleImpl","createResourceRentalPool","draftPool","pool","PaymentApiAdapter","invoiceRepo","debitNoteRepo","getById","AllocationCreationFailed","deposit","AllocationReleaseFailed","MarketApiAdapter","agreementRepo","proposalRepo","demandRepo","spec","idOrError","buildDemandRequestBody","longPoll","marketProposal","isOfferCounterProposal","receivedProposal","bodyClone","structuredClone","maybeNewId","dto","rejectProposal","ProposalRejectionFailed","decorations","waitingForApprovalTimeoutSec","AgreementApprovalFailed","agreementProposalRequest","validTo","confirmed","getAgreementState","eventtype","terminator","InternalError","cleanupIterator","onabort","ScanFailed","InvoiceRepository","CouldNotGetInvoice","CouldNotGetAgreement","DebitNoteRepository","CouldNotGetDebitNote","ActivityApiAdapter","activityRepo","activityOrError","ActivityCreationFailed","ActivityDestroyingFailed","getStateOfActivity","CacheService","getAll","flushAll","ActivityRepository","stateCache","yagnaStateResponse","AgreementRepository","ProposalRepository","marketService","identityService","getByDemandAndId","CouldNotGetProposal","DemandRepository","StorageServerAdapter","published","lstatSync","isDirectory","entry","calculateFileHash","isServing","isFilePublished","localPath","fileStream","createReadStream","jsSha3","sha3_224","NetworkApiAdapter","NetworkRemovalFailed","NodeAddingFailed","GettingIdentityFailed","getFactory","defaultFactory","override","GolemNetwork","hasConnection","cleanupTasks","registeredPlugins","dataTransferProtocol","createStorageProvider","demandCache","proposalCache","demandRepository","proposalRepository","agreementRepository","connectPlugins","startDisconnect","task","disconnectPromise","getAllocationFromOrder","EXPIRATION_BUFFER_MINUTES","oneOf","validateSettings","cleanupAbortSignals","proposalSubscription","offerProposalFilter","offerProposalSelector","draftProposal$","manyOf","resourceRentalPool","isConnected","destroyNetwork","use","pluginCallback","pluginOptions","initializer","plugin","settings","largestVolumeSizeGib"],"mappings":"AAKA,MAAMA,EAAQ,CAACC,EAAcC,GAAO,IAClC,IAAIC,SAASC,GAAYC,WAAWD,EAASH,GAAQC,EAAO,EAAI,QCH5D,MAAgBI,UAAmBC,MACvC,WAAAC,CACEC,EAIgBC,GAEhBC,MAAMF,GAFUG,KAAQF,SAARA,GAUd,MAAOG,UAAuBP,GAM9B,MAAOQ,UAAwBD,GAM/B,MAAOE,UAAyBF,GAMhC,MAAOG,UAA2BV,GAQlC,MAAOW,UAA2BX,GAUlC,MAAOY,UAA0BZ,GAOjC,MAAgBa,UAAyBb,EAC7C,WAAAE,CACEC,EACOW,EACPV,GAEAC,MAAMF,EAASC,GAHRE,KAAIQ,KAAJA,GC5DJ,MAAMC,EAA8B,oBAAXC,aAAqD,IAApBA,OAAOC,SAE3DC,EAA4B,oBAAZC,SAA+C,MAApBA,QAAQC,UAA6C,MAAzBD,QAAQC,SAASC,KAIxFC,EACK,iBAATC,MAAqBA,KAAKrB,aAAyC,+BAA1BqB,KAAKrB,YAAYsB,KAI7D,SAAUC,EAAuCC,GACrD,GAAIX,EAAW,MAAM,IAAIL,EAAmB,WAAWgB,mCACzD,UChBgBC,IACd,MAAMC,EAAW,OAIjB,MAAO,CACLC,MAAO,IAAMF,IACbG,MAAOF,EACPG,KAAMH,EACNI,KAAMJ,EACNK,MAAOL,EAEX,krFCVA,IAAIM,EAAI,IACJC,EAAQ,GAAJD,EACJE,EAAQ,GAAJD,EACJE,EAAQ,GAAJD,EACJE,EAAQ,EAAJD,EACJE,EAAQ,OAAJF,EAqJR,SAASG,EAAOC,EAAIC,EAAOC,EAAGnB,GAC5B,IAAIoB,EAAWF,GAAa,IAAJC,EACxB,OAAOE,KAAKC,MAAML,EAAKE,GAAK,IAAMnB,GAAQoB,EAAW,IAAM,GAC7D,QAxIAH,EAAiB,SAAUM,EAAKC,GAC9BA,EAAUA,GAAW,CAAE,EACvB,IAAIC,SAAcF,EAClB,GAAa,WAATE,GAAqBF,EAAIG,OAAS,EACpC,OAkBJ,SAAeC,GAEb,IADAA,EAAMC,OAAOD,IACLD,OAAS,IACf,OAEF,IAAIG,EAAQ,mIAAmIC,KAC7IH,GAEF,IAAKE,EACH,OAEF,IAAIV,EAAIY,WAAWF,EAAM,IAEzB,QADYA,EAAM,IAAM,MAAMG,eAE5B,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAOb,EAAIJ,EACb,IAAK,QACL,IAAK,OACL,IAAK,IACH,OAAOI,EAAIL,EACb,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOK,EAAIN,EACb,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAOM,EAAIP,EACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOO,EAAIR,EACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOQ,EAAIT,EACb,IAAK,eACL,IAAK,cACL,IAAK,QACL,IAAK,OACL,IAAK,KACH,OAAOS,EACT,QACE,OAEN,CAzEWc,CAAMV,GACR,GAAa,WAATE,GAAqBS,SAASX,GACvC,OAAOC,EAAQW,KA0GnB,SAAiBlB,GACf,IAAIC,EAAQG,KAAKe,IAAInB,GACrB,GAAIC,GAASL,EACX,OAAOG,EAAOC,EAAIC,EAAOL,EAAG,OAE9B,GAAIK,GAASN,EACX,OAAOI,EAAOC,EAAIC,EAAON,EAAG,QAE9B,GAAIM,GAASP,EACX,OAAOK,EAAOC,EAAIC,EAAOP,EAAG,UAE9B,GAAIO,GAASR,EACX,OAAOM,EAAOC,EAAIC,EAAOR,EAAG,UAE9B,OAAOO,EAAK,KACd,CAzH0BoB,CAAQd,GAiFlC,SAAkBN,GAChB,IAAIC,EAAQG,KAAKe,IAAInB,GACrB,GAAIC,GAASL,EACX,OAAOQ,KAAKC,MAAML,EAAKJ,GAAK,IAE9B,GAAIK,GAASN,EACX,OAAOS,KAAKC,MAAML,EAAKL,GAAK,IAE9B,GAAIM,GAASP,EACX,OAAOU,KAAKC,MAAML,EAAKN,GAAK,IAE9B,GAAIO,GAASR,EACX,OAAOW,KAAKC,MAAML,EAAKP,GAAK,IAE9B,OAAOO,EAAK,IACd,CAhGyCqB,CAASf,GAEhD,MAAM,IAAI9C,MACR,wDACE8D,KAAKC,UAAUjB,GAEpB,EC4OD,IAAAkB,EA3QA,SAAeC,GAqDd,SAASC,EAAYC,GACpB,IAAIC,EAEAC,EACAC,EAFAC,EAAiB,KAIrB,SAAS1C,KAAS2C,GAEjB,IAAK3C,EAAM4C,QACV,OAGD,MAAMnD,EAAOO,EAGP6C,EAAOC,OAAO,IAAIC,MAClBpC,EAAKkC,GAAQN,GAAYM,GAC/BpD,EAAKuD,KAAOrC,EACZlB,EAAKwD,KAAOV,EACZ9C,EAAKoD,KAAOA,EACZN,EAAWM,EAEXF,EAAK,GAAKN,EAAYa,OAAOP,EAAK,IAEX,iBAAZA,EAAK,IAEfA,EAAKQ,QAAQ,MAId,IAAIC,EAAQ,EACZT,EAAK,GAAKA,EAAK,GAAGU,QAAQ,iBAAiB,CAAC9B,EAAO+B,KAElD,GAAc,OAAV/B,EACH,MAAO,IAER6B,IACA,MAAMG,EAAYlB,EAAYmB,WAAWF,GACzC,GAAyB,mBAAdC,EAA0B,CACpC,MAAMtC,EAAM0B,EAAKS,GACjB7B,EAAQgC,EAAUE,KAAKhE,EAAMwB,GAG7B0B,EAAKe,OAAON,EAAO,GACnBA,GACL,CACI,OAAO7B,CAAK,IAIbc,EAAYsB,WAAWF,KAAKhE,EAAMkD,IAEpBlD,EAAKmE,KAAOvB,EAAYuB,KAChCC,MAAMpE,EAAMkD,EACrB,CAgCE,OA9BA3C,EAAMsC,UAAYA,EAClBtC,EAAM8D,UAAYzB,EAAYyB,YAC9B9D,EAAM+D,MAAQ1B,EAAY2B,YAAY1B,GACtCtC,EAAMiE,OAASA,EACfjE,EAAMkE,QAAU7B,EAAY6B,QAE5BC,OAAOC,eAAepE,EAAO,UAAW,CACvCqE,YAAY,EACZC,cAAc,EACdC,IAAK,IACmB,OAAnB7B,EACIA,GAEJF,IAAoBH,EAAYmC,aACnChC,EAAkBH,EAAYmC,WAC9B/B,EAAeJ,EAAYO,QAAQN,IAG7BG,GAERgC,IAAKC,IACJhC,EAAiBgC,CAAC,IAKY,mBAArBrC,EAAYsC,MACtBtC,EAAYsC,KAAK3E,GAGXA,CACT,CAEC,SAASiE,EAAO3B,EAAWsC,GAC1B,MAAMC,EAAWxC,EAAY7D,KAAK8D,gBAAkC,IAAdsC,EAA4B,IAAMA,GAAatC,GAErG,OADAuC,EAASjB,IAAMpF,KAAKoF,IACbiB,CACT,CAwFC,SAASC,EAAYC,GACpB,OAAOA,EAAOC,WACZC,UAAU,EAAGF,EAAOC,WAAW5D,OAAS,GACxCiC,QAAQ,UAAW,IACvB,CA0BC,OAvQAhB,EAAYrC,MAAQqC,EACpBA,EAAY6C,QAAU7C,EACtBA,EAAYa,OAoPZ,SAAgBjC,GACf,GAAIA,aAAe9C,MAClB,OAAO8C,EAAIkE,OAASlE,EAAI5C,QAEzB,OAAO4C,CACT,EAxPCoB,EAAY+C,QAwLZ,WACC,MAAMZ,EAAa,IACfnC,EAAYgD,MAAMC,IAAIR,MACtBzC,EAAYkD,MAAMD,IAAIR,GAAaQ,KAAIhD,GAAa,IAAMA,KAC5DkD,KAAK,KAEP,OADAnD,EAAYoD,OAAO,IACZjB,CACT,EA9LCnC,EAAYoD,OAsJZ,SAAgBjB,GAOf,IAAIkB,EANJrD,EAAYsD,KAAKnB,GACjBnC,EAAYmC,WAAaA,EAEzBnC,EAAYgD,MAAQ,GACpBhD,EAAYkD,MAAQ,GAGpB,MAAMK,GAA+B,iBAAfpB,EAA0BA,EAAa,IAAIoB,MAAM,UACjEC,EAAMD,EAAMxE,OAElB,IAAKsE,EAAI,EAAGA,EAAIG,EAAKH,IACfE,EAAMF,KAOW,OAFtBlB,EAAaoB,EAAMF,GAAGrC,QAAQ,MAAO,QAEtB,GACdhB,EAAYkD,MAAMO,KAAK,IAAIC,OAAO,IAAMvB,EAAWwB,MAAM,GAAK,MAE9D3D,EAAYgD,MAAMS,KAAK,IAAIC,OAAO,IAAMvB,EAAa,MAGzD,EA9KCnC,EAAYO,QAsMZ,SAAiBlD,GAChB,GAA8B,MAA1BA,EAAKA,EAAK0B,OAAS,GACtB,OAAO,EAGR,IAAIsE,EACAG,EAEJ,IAAKH,EAAI,EAAGG,EAAMxD,EAAYkD,MAAMnE,OAAQsE,EAAIG,EAAKH,IACpD,GAAIrD,EAAYkD,MAAMG,GAAGO,KAAKvG,GAC7B,OAAO,EAIT,IAAKgG,EAAI,EAAGG,EAAMxD,EAAYgD,MAAMjE,OAAQsE,EAAIG,EAAKH,IACpD,GAAIrD,EAAYgD,MAAMK,GAAGO,KAAKvG,GAC7B,OAAO,EAIT,OAAO,CACT,EA1NC2C,EAAY6D,SAAWC,IACvB9D,EAAY6B,QA0PZ,WACCkC,QAAQlG,KAAK,wIACf,EA1PCiE,OAAOkC,KAAKjE,GAAKkE,SAAQC,IACxBlE,EAAYkE,GAAOnE,EAAImE,EAAI,IAO5BlE,EAAYgD,MAAQ,GACpBhD,EAAYkD,MAAQ,GAOpBlD,EAAYmB,WAAa,CAAE,EAkB3BnB,EAAY2B,YAVZ,SAAqB1B,GACpB,IAAIkE,EAAO,EAEX,IAAK,IAAId,EAAI,EAAGA,EAAIpD,EAAUlB,OAAQsE,IACrCc,GAASA,GAAQ,GAAKA,EAAQlE,EAAUmE,WAAWf,GACnDc,GAAQ,EAGT,OAAOnE,EAAYqE,OAAO3F,KAAKe,IAAI0E,GAAQnE,EAAYqE,OAAOtF,OAChE,EA2NCiB,EAAYoD,OAAOpD,EAAYsE,QAExBtE,CACR,iBCzQAuE,EAAAjD,WA6IA,SAAoBhB,GAQnB,GAPAA,EAAK,IAAMnE,KAAKsF,UAAY,KAAO,IAClCtF,KAAK8D,WACJ9D,KAAKsF,UAAY,MAAQ,KAC1BnB,EAAK,IACJnE,KAAKsF,UAAY,MAAQ,KAC1B,IAAM+C,EAAOD,QAAQV,SAAS1H,KAAKwE,OAE/BxE,KAAKsF,UACT,OAGD,MAAMgD,EAAI,UAAYtI,KAAKuF,MAC3BpB,EAAKe,OAAO,EAAG,EAAGoD,EAAG,kBAKrB,IAAI1D,EAAQ,EACR2D,EAAQ,EACZpE,EAAK,GAAGU,QAAQ,eAAe9B,IAChB,OAAVA,IAGJ6B,IACc,OAAV7B,IAGHwF,EAAQ3D,GACX,IAGCT,EAAKe,OAAOqD,EAAO,EAAGD,EACvB,EA7KAF,EAAAjB,KA+LA,SAAcnB,GACb,IACKA,EACHoC,EAAQI,QAAQC,QAAQ,QAASzC,GAEjCoC,EAAQI,QAAQE,WAAW,QAE5B,CAAC,MAAO/G,GAGV,CACA,EAzMAyG,EAAAD,KAiNA,WACC,IAAIQ,EACJ,IACCA,EAAIP,EAAQI,QAAQI,QAAQ,QAC5B,CAAC,MAAOjH,GAGV,EAGMgH,QAAwB,IAAZ9H,GAA2B,QAASA,IACpD8H,EAAI9H,EAAQ+C,IAAIiF,OAGjB,OAAOF,CACR,EA/NAP,EAAA9C,UAyGA,WAIC,GAAsB,oBAAX5E,QAA0BA,OAAOG,UAAoC,aAAxBH,OAAOG,QAAQ8B,MAAuBjC,OAAOG,QAAQiI,QAC5G,OAAO,EAIR,GAAyB,oBAAdC,WAA6BA,UAAUC,WAAaD,UAAUC,UAAU9F,cAAcH,MAAM,yBACtG,OAAO,EAGR,IAAIlB,EAIJ,MAA4B,oBAAblB,UAA4BA,SAASsI,iBAAmBtI,SAASsI,gBAAgBC,OAASvI,SAASsI,gBAAgBC,MAAMC,kBAEpH,oBAAXzI,QAA0BA,OAAOkH,UAAYlH,OAAOkH,QAAQwB,SAAY1I,OAAOkH,QAAQyB,WAAa3I,OAAOkH,QAAQ0B,QAGrG,oBAAdP,WAA6BA,UAAUC,YAAcnH,EAAIkH,UAAUC,UAAU9F,cAAcH,MAAM,oBAAsBwG,SAAS1H,EAAE,GAAI,KAAO,IAE/H,oBAAdkH,WAA6BA,UAAUC,WAAaD,UAAUC,UAAU9F,cAAcH,MAAM,qBACtG,EAjIAqF,EAAAI,QA2OA,WACC,IAGC,OAAOgB,YACP,CAAC,MAAO7H,GAGV,CACA,CApPkB8H,GAClBrB,EAAA1C,QAAkB,MACjB,IAAIgE,GAAS,EAEb,MAAO,KACDA,IACJA,GAAS,EACT9B,QAAQlG,KAAK,yIAChB,CAEC,EATiB,GAelB0G,EAAiBF,OAAA,CAChB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAwFDE,EAAchD,IAAAwC,QAAQpG,OAASoG,QAAQxC,KAAQ,MAAQ,GAkEvDiD,EAAiBD,QAAAT,EAAoBS,GAErC,MAAMpD,WAACA,GAAcqD,EAAOD,QAM5BpD,EAAW2E,EAAI,SAAUzD,GACxB,IACC,OAAOzC,KAAKC,UAAUwC,EACtB,CAAC,MAAOvE,GACR,MAAO,+BAAiCA,EAAM9B,OAChD,oCCpPgB,SAAA+J,EACd9F,EACA+F,EAA6B,CAC3BC,mBAAmB,IAGrB,MAAMC,EAnBR,SAAsBjG,EAAmBkG,GACvC,OAAIA,GAGKlG,EAAUmG,WAAW,aAFrBnG,EAEgD,YAAYA,GAEvE,CAa4BoG,CAAapG,EAAW+F,EAAKC,mBACjDK,EAASC,EAAYL,GAE3B,SAAS3E,EAAIiF,EAAeC,EAAaC,GACnCA,EACFJ,EAAO,IAAIE,MAAUC,OAAUC,GAE/BJ,EAAO,IAAIE,MAAUC,KAwBzB,MAAO,CACL/I,MAAQiJ,GAA2BZ,EAAc,GAAGG,KAAqBS,IAAkBX,GAC3FpI,KAhBF,SAAc6I,EAAaC,GACzBnF,EAAI,OAAQkF,EAAKC,IAgBjB5I,MAPF,SAAe2I,EAAaC,GAC1BnF,EAAI,QAASkF,EAAKC,IAOlB7I,KAbF,SAAc4I,EAAaC,GACzBnF,EAAI,OAAQkF,EAAKC,IAajB/I,MAxBF,SAAe8I,EAAaC,GAC1BnF,EAAI,QAASkF,EAAKC,IAyBtB,UCnEgBE,IACd,OAAQ7J,EAAgB,OAAPC,cAAA,IAAAA,aAAA,EAAAA,QAAS+C,IAAI8G,cAAgB,KAAO,uBACvD,UAEgBC,UACd,OAAO/J,GAAuC,QAA7BgK,EAAA,OAAA/J,cAAA,IAAAA,aAAA,EAAAA,QAAS+C,IAAIiH,oBAAgB,IAAAD,EAAAA,EAAM,EACtD,UAEgBE,UACd,OAAOlK,GAAuC,QAA7BgK,EAAA,OAAA/J,cAAA,IAAAA,aAAA,EAAAA,QAAS+C,IAAImH,oBAAgB,IAAAH,EAAAA,EAAY,QAC5D,UAEgBI,UACd,OAAOpK,GAC6B,QAA/BgK,SAAA/J,cAAO,IAAPA,aAAO,EAAPA,QAAS+C,IAAIqH,0BAAkB,IAAAL,EAAAA,EAChC,gCACN,UAEgBM,WACd,OAAOtK,WAAUgK,EAAA/J,QAAQ+C,IAAIuH,+BAAgC,SAC/D,UAEgBC,KACd,QAAOxK,GAAyC,UAAzB,OAAPC,cAAA,IAAAA,aAAA,EAAAA,QAAS+C,IAAIyH,eAC/B,wKCzBA1F,OAAOC,eAAe0F,GAAS,aAAc,CAAEC,OAAO,IAC/BD,GAAAE,qBAAG,EAM1BF,GAAAE,gBALA,MACI,WAAA5L,CAAY6L,GACRzL,KAAKyL,OAASA,CACtB,2yqBCLA9F,OAAOC,eAAe8F,GAAS,aAAc,CAAEH,OAAO,IACtCG,GAAAC,cAAG,SACnB,cAAuBhM,MACnB,WAAAC,CAAYgM,EAASC,EAAUhM,GAC3BE,MAAMF,GACNG,KAAKkB,KAAO,WACZlB,KAAK8L,IAAMD,EAASC,IACpB9L,KAAK+L,OAASF,EAASE,OACvB/L,KAAKgM,WAAaH,EAASG,WAC3BhM,KAAKiM,KAAOJ,EAASI,KACrBjM,KAAK4L,QAAUA,CACvB,GAEAF,GAAAC,SAAmBA,OCFfO,GAA+BC,GAA+BC,GAAgCC,GAAmCC,GAA4BC,GAA4BC,SAXzLC,GAA0BzM,GAAQA,EAAKyM,wBAA2B,SAAUC,EAAUC,EAAOpB,EAAOqB,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAE5H,KAAKyH,EAAUnB,GAASsB,EAAIA,EAAEtB,MAAQA,EAAQoB,EAAM1G,IAAIyG,EAAUnB,GAASA,CACxG,EACIyB,GAA0BhN,GAAQA,EAAKgN,wBAA2B,SAAUN,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAE5H,KAAKyH,GAAYG,EAAIA,EAAEtB,MAAQoB,EAAM5G,IAAI2G,EACxF,EAEA/G,OAAOC,eAAeqH,GAAS,aAAc,CAAE1B,OAAO,IACtD0B,GAAAC,kBAA4BD,GAAAE,iBAAsB,SAKlD,cAA0BxN,MACtB,WAAAC,CAAYC,GACRE,MAAMF,GACNG,KAAKkB,KAAO,aACpB,CACI,eAAIkM,GACA,OAAO,CACf,GAEAH,GAAAE,YAAsBA,GACtB,IAAAE,GAAA,MACI,WAAAzN,CAAY0N,GACRpB,GAA8BjG,IAAIjG,UAAM,GACxCmM,GAA8BlG,IAAIjG,UAAM,GACxCoM,GAA+BnG,IAAIjG,UAAM,GACzCqM,GAAkCpG,IAAIjG,UAAM,GAC5CsM,GAA2BrG,IAAIjG,UAAM,GACrCuM,GAA2BtG,IAAIjG,UAAM,GACrCwM,GAA0BvG,IAAIjG,UAAM,GACpCyM,GAAuBzM,KAAMkM,IAA+B,EAAO,KACnEO,GAAuBzM,KAAMmM,IAA+B,EAAO,KACnEM,GAAuBzM,KAAMoM,IAAgC,EAAO,KACpEK,GAAuBzM,KAAMqM,GAAmC,GAAI,KACpEI,GAAuBzM,KAAMsM,GAA4B,IAAI/M,SAAQ,CAACC,EAAS+N,KAC3Ed,GAAuBzM,KAAMuM,GAA4B/M,EAAS,KAClEiN,GAAuBzM,KAAMwM,GAA2Be,EAAQ,KAChE,MAgBMC,EAAYC,IACVT,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAGzMY,GAAuBhN,KAAMqM,GAAmC,KAAK/E,KAAKmG,EAAc,EAW5F,OATA9H,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMkM,GAA+B,OAE3EvG,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMmM,GAA+B,OAE3ExG,OAAOC,eAAe4H,EAAU,cAAe,CAC3CzH,IAAK,IAAMiH,GAAuBhN,KAAMoM,GAAgC,OAErEkB,GA/BY/B,IACXyB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMkM,IAA+B,EAAM,KAC9Dc,GAAuBhN,KAAMuM,GAA4B,MACzDS,GAAuBhN,KAAMuM,GAA4B,KAAKtH,KAAKjF,KAAMuL,GAAM,IAErEmC,IACVV,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMmM,IAA+B,EAAM,KAC9Da,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM0N,GAAO,GAiBlDF,EAAS,IAC9C,IACZ,CACI,KAAMtB,GAAgC,IAAIyB,QAAWxB,GAAgC,IAAIwB,QAAWvB,GAAiC,IAAIuB,QAAWtB,GAAoC,IAAIsB,QAAWrB,GAA6B,IAAIqB,QAAWpB,GAA6B,IAAIoB,QAAWnB,GAA4B,IAAImB,QAAWC,OAAOC,gBAC7U,MAAO,qBACf,CACI,IAAAC,CAAKC,EAAaC,GACd,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAKwB,KAAKC,EAAaC,EAC/F,CACI,MAAMA,GACF,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAK2B,MAAMD,EACnF,CACI,QAAQE,GACJ,OAAOlB,GAAuBhN,KAAMsM,GAA4B,KAAK6B,QAAQD,EACrF,CACI,MAAAE,GACI,KAAIpB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAAzM,CAIA,GADAK,GAAuBzM,KAAMoM,IAAgC,EAAM,KAC/DY,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OACrE,IACI,IAAK,MAAM6K,KAAiBT,GAAuBhN,KAAMqM,GAAmC,KACxFoB,GAEpB,CACY,MAAO9L,GAEH,YADAiG,QAAQlG,KAAK,8BAA+BC,EAE5D,CAEQqL,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OAAS,EAC1EoK,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM,IAAImN,GAAY,mBAfpG,CAgBA,CACI,eAAIC,GACA,OAAOJ,GAAuBhN,KAAMoM,GAAgC,IAC5E,GAEAa,GAAAC,kBAA4BA,eClH5BvH,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAwD,QAAkBxD,kBAA0BA,EAA0BiG,gBAAAjG,EAAAkG,kBAA4BlG,EAAsBmG,YAAAnG,EAAAoG,eAAyBpG,aAAqBA,EAAkB5I,QAAA4I,EAAAqG,YAAsBrG,EAAyBsG,eAAAtG,EAAAuG,OAAiBvG,aAAqBA,EAAiBwG,OAAAxG,EAAAyG,kBAA4BzG,EAAmB0G,SAAA1G,EAAA2G,eAAoB,EAKjW,MAAMrD,EAAa/D,GACbsF,EAAsB+B,GAI5B5G,EAAA2G,UAHmBxD,GACRA,QAMXnD,EAAA0G,SAHkBvD,GACU,iBAAVA,EAMlBnD,EAAAyG,kBAH2BtD,IAChB,EAAInD,EAAQ0G,UAAUvD,IAAoB,KAAVA,EAa3CnD,EAAAwG,OAVgBrD,GACa,iBAAVA,GACW,iBAAfA,EAAM5I,MACW,mBAAjB4I,EAAM0D,QACgB,mBAAtB1D,EAAM2D,aACgB,mBAAtB3D,EAAM3L,aACqB,iBAA3B2L,EAAM3L,YAAYsB,MACzB,gBAAgBuG,KAAK8D,EAAM3L,YAAYsB,OACvC,gBAAgBuG,KAAK8D,EAAMqC,OAAOC,cAM1CzF,EAAA+G,WAHoB5D,GACTA,aAAiB6D,SAY5BhH,EAAAuG,OATgB9L,IACZ,IACI,OAAOwM,KAAKxM,EACpB,CACI,MAAOyM,GAEH,OAAOC,GAAOC,KAAK3M,GAAK2D,SAAS,SACzC,GAiCA4B,EAAAsG,eA9BwBe,IACpB,MAAMC,EAAK,GAIL7O,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ2G,WAAWxD,KACnBoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,IACVrF,EAAQkH,EAAK7B,EAAE,IAGG,iBAAVqF,EACZ5F,OAAOkK,QAAQtE,GAAOzD,SAAQ,EAAEgI,EAAG5J,MAC/BrF,EAAQ,GAAGkH,KAAO+H,KAAM5J,EAAE,IAZ3B,EAAC6B,EAAKwD,KACjBmE,EAAGpI,KAAK,GAAGyI,mBAAmBhI,MAAQgI,mBAAmBjN,OAAOyI,MAAU,EAelEyE,CAAOjI,EAAKwD,GAE5B,EAKI,OAHA5F,OAAOkK,QAAQJ,GAAQ3H,SAAQ,EAAEC,EAAKwD,MAClC1K,EAAQkH,EAAKwD,EAAM,IAEnBmE,EAAG9M,OAAS,EACL,IAAI8M,EAAG1I,KAAK,OAEhB,EAAE,EA4CboB,EAAAqG,YAzBqB/L,IACjB,GAAIA,EAAQuN,SAAU,CAClB,MAAMA,EAAW,IAAIb,SACfvO,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ0G,UAAUvD,KAAU,EAAInD,EAAQwG,QAAQrD,GACpD0E,EAASD,OAAOjI,EAAKwD,GAGrB0E,EAASD,OAAOjI,EAAKtE,KAAKC,UAAU6H,GACpD,EAYQ,OAVA5F,OAAOkK,QAAQnN,EAAQuN,UAClBC,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9CzD,SAAQ,EAAEC,EAAKwD,MACZoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,GAAKrF,EAAQkH,EAAK7B,KAGhCrF,EAAQkH,EAAKwD,EAC7B,IAEe0E,CACf,CACoB,EASpB7H,EAAA5I,QANgB4Q,MAAO1N,EAAS2N,IACJ,mBAAbA,EACAA,EAAS3N,GAEb2N,EA2CXjI,EAAAkI,WAxCmBF,MAAO3E,EAAQ/I,KAC9B,MAAO6N,EAAOC,EAAUC,EAAUC,SAA2BnR,QAAQoR,IAAI,EACrE,EAAIvI,EAAQ5I,SAASkD,EAAS+I,EAAOmF,QACrC,EAAIxI,EAAQ5I,SAASkD,EAAS+I,EAAOoF,WACrC,EAAIzI,EAAQ5I,SAASkD,EAAS+I,EAAOqF,WACrC,EAAI1I,EAAQ5I,SAASkD,EAAS+I,EAAOsF,WAEnCC,EAAUrL,OAAOkK,QAAQ,CAC3BoB,OAAQ,sBACLP,KACAhO,EAAQsO,UAEVd,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9C2F,QAAO,CAACF,GAAUjJ,EAAKwD,MAAY,IACjCyF,EACHjJ,CAACA,GAAMjF,OAAOyI,MACd,CAAA,GAIJ,IAHI,EAAInD,EAAQyG,mBAAmB0B,KAC/BS,EAAuB,cAAI,UAAUT,MAErC,EAAInI,EAAQyG,mBAAmB2B,KAAa,EAAIpI,EAAQyG,mBAAmB4B,GAAW,CACtF,MAAMU,GAAc,EAAI/I,EAAQuG,QAAQ,GAAG6B,KAAYC,KACvDO,EAAuB,cAAI,SAASG,GAC5C,CAeI,YAdqBC,IAAjB1O,EAAQuJ,OACJvJ,EAAQ2O,UACRL,EAAQ,gBAAkBtO,EAAQ2O,WAE7B,EAAIjJ,EAAQwG,QAAQlM,EAAQuJ,MACjC+E,EAAQ,gBAAkBtO,EAAQuJ,KAAKtJ,MAAQ,4BAE1C,EAAIyF,EAAQ0G,UAAUpM,EAAQuJ,MACnC+E,EAAQ,gBAAkB,cAEpB,EAAI5I,EAAQ+G,YAAYzM,EAAQuJ,QACtC+E,EAAQ,gBAAkB,qBAG3B,IAAIM,QAAQN,EAAQ,EAiB/B5I,EAAAoG,eAdwB9L,IACpB,QAAqB0O,IAAjB1O,EAAQuJ,KACR,OAAIvJ,EAAQ2O,WAAWE,SAAS,SACrB9N,KAAKC,UAAUhB,EAAQuJ,OAEzB,EAAI7D,EAAQ0G,UAAUpM,EAAQuJ,QAAS,EAAI7D,EAAQwG,QAAQlM,EAAQuJ,QAAS,EAAI7D,EAAQ+G,YAAYzM,EAAQuJ,MAC1GvJ,EAAQuJ,KAGRxI,KAAKC,UAAUhB,EAAQuJ,KAGtB,EAiBpB7D,EAAAmG,YAdoB6B,MAAO3E,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,KACtE,MAAMgE,EAAa,IAAIC,gBACjB7F,EAAU,CACZoF,UACA/E,KAAMA,GAAQgE,EACdyB,OAAQhP,EAAQgP,OAChBC,OAAQH,EAAWG,QAMvB,OAJIlG,EAAOmG,mBACPhG,EAAQuF,YAAc1F,EAAOoG,aAEjCrE,GAAS,IAAMgE,EAAWM,gBACbC,MAAMjG,EAAKF,EAAQ,EAYpCxD,EAAAkG,kBAT0B,CAACzC,EAAUmG,KACjC,GAAIA,EAAgB,CAChB,MAAMC,EAAUpG,EAASmF,QAAQjL,IAAIiM,GACrC,IAAI,EAAI5J,EAAQ0G,UAAUmD,GACtB,OAAOA,CAEnB,CACoB,EAwBpB7J,EAAAiG,gBArBwB+B,MAAOvE,IAC3B,GAAwB,MAApBA,EAASE,OACT,IACI,MAAMmG,EAAcrG,EAASmF,QAAQjL,IAAI,gBACzC,GAAImM,EAAa,CAGb,MAFkB,CAAC,mBAAoB,4BACdC,MAAKxP,GAAQuP,EAAYhP,cAAc+G,WAAWtH,WAE1DkJ,EAASuG,aAGTvG,EAASwG,MAE1C,CACA,CACQ,MAAO1Q,GACHiG,QAAQjG,MAAMA,EAC1B,CAEoB,EAgCpByG,EAAAkK,gBA7BwB,CAAC5P,EAAS6P,KAC9B,MAUM5Q,EAVS,CACX,IAAK,cACL,IAAK,eACL,IAAK,YACL,IAAK,YACL,IAAK,wBACL,IAAK,cACL,IAAK,yBACFe,EAAQ8P,QAEMD,EAAOxG,QAC5B,GAAIpK,EACA,MAAM,IAAI+J,EAAWC,SAASjJ,EAAS6P,EAAQ5Q,GAEnD,IAAK4Q,EAAOE,GAAI,CACZ,MAAMC,EAAcH,EAAOxG,QAAU,UAC/B4G,EAAkBJ,EAAOvG,YAAc,UACvC4G,EAAY,MACd,IACI,OAAOnP,KAAKC,UAAU6O,EAAOtG,KAAM,KAAM,EACzD,CACY,MAAO4G,GACH,MAChB,CACS,EAPiB,GAQlB,MAAM,IAAInH,EAAWC,SAASjJ,EAAS6P,EAAQ,0BAA0BG,mBAA6BC,YAA0BC,IACxI,GAqCAxK,EAAAwD,QA3BgB,CAACH,EAAQ/I,IACd,IAAIuK,EAAoBC,mBAAkBkD,MAAO5Q,EAAS+N,EAAQC,KACrE,IACI,MAAM1B,EAhMH,EAACL,EAAQ/I,KACpB,MAAMoQ,EAAUrH,EAAOsH,aAAeC,UAChCC,EAAOvQ,EAAQoJ,IAChBjH,QAAQ,gBAAiB4G,EAAOyH,SAChCrO,QAAQ,YAAY,CAAC4B,EAAW0M,IAC7BzQ,EAAQuQ,MAAMG,eAAeD,GACtBL,EAAQhQ,OAAOJ,EAAQuQ,KAAKE,KAEhC1M,IAELqF,EAAM,GAAGL,EAAO4H,OAAOJ,IAC7B,OAAIvQ,EAAQ4Q,MACD,GAAGxH,KAAM,EAAI1D,EAAQsG,gBAAgBhM,EAAQ4Q,SAEjDxH,CAAG,EAkLUyH,CAAO9H,EAAQ/I,GACrBuN,GAAW,EAAI7H,EAAQqG,aAAa/L,GACpCuJ,GAAO,EAAI7D,EAAQoG,gBAAgB9L,GACnCsO,QAAgB,EAAI5I,EAAQkI,YAAY7E,EAAQ/I,GACtD,IAAK8K,EAASJ,YAAa,CACvB,MAAMvB,QAAiB,EAAIzD,EAAQmG,aAAa9C,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,GACzFgG,QAAqB,EAAIpL,EAAQiG,iBAAiBxC,GAClDmG,GAAiB,EAAI5J,EAAQkG,mBAAmBzC,EAAUnJ,EAAQsP,gBAClEO,EAAS,CACXzG,MACA2G,GAAI5G,EAAS4G,GACb1G,OAAQF,EAASE,OACjBC,WAAYH,EAASG,WACrBC,KAAM+F,GAAkBwB,IAE5B,EAAIpL,EAAQkK,iBAAiB5P,EAAS6P,GACtC/S,EAAQ+S,EAAOtG,KAC/B,CACA,CACQ,MAAOtK,GACH4L,EAAO5L,EACnB,UCjSAgE,OAAOC,eAAe6N,GAAS,aAAc,CAAElI,OAAO,IAC9BkI,GAAAC,sBAAG,EAC3B,MAAMpI,GAAoB3D,GACpBgM,GAAY3E,GAClB,IAAA4E,GAAA,cAA+BtI,GAAkBE,gBAC7C,WAAA5L,CAAY6L,GACR1L,MAAM0L,EACd,CAOI,OAAAG,CAAQlJ,GACJ,OAAO,EAAIiR,GAAU/H,SAAS5L,KAAKyL,OAAQ/I,EACnD,GAEA+Q,GAAAC,iBAA2BA,aClB3B/N,OAAOC,eAAeiO,GAAS,aAAc,CAAEtI,OAAO,IAC/BsI,GAAAC,qBAAG,EA+c1BD,GAAAC,gBA9cA,MACI,WAAAlU,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAMI,SAAAC,GACI,OAAOhU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,UACL0G,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAYI,cAAAyB,CAAeC,GACX,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,UACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAWI,gBAAA2B,CAAiBC,GACb,OAAOpU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,SACR5F,IAAK,2BACLmH,KAAM,CACFmB,eAAkBA,GAEtB5B,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,0BAGrB,CA4BI,cAAA6B,CAAeD,EAAgBE,EAAU,EAAGC,EAAY,IACpD,OAAOvU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,kCACLmH,KAAM,CACFmB,eAAkBA,GAEtBd,MAAO,CACHgB,QAAWA,EACXC,UAAaA,GAEjB/B,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,CAiBI,gBAAAgC,CAAiBJ,EAAgBK,EAASP,GACtC,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,mDACLmH,KAAM,CACFmB,eAAkBA,EAClBK,QAAWA,GAEfxI,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,gDAGrB,CAQI,iBAAAkC,CAAkBN,EAAgBO,GAC9B,OAAO3U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,kDACLmH,KAAM,CACFmB,eAAkBA,EAClBO,WAAcA,GAElBnC,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,uBAGrB,CAYI,oBAAAoC,CAAqBR,EAAgBO,EAAYT,GAC7C,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,kDACLmH,KAAM,CACFmB,eAAkBA,EAClBO,WAAcA,GAElB1I,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,8CACL,IAAK,uBAGrB,CAWI,oBAAAqC,CAAqBT,EAAgBO,EAAYT,GAC7C,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,yDACLmH,KAAM,CACFmB,eAAkBA,EAClBO,WAAcA,GAElB1I,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,+BAGrB,CAcI,cAAAsC,CAAeC,EAAcpI,EAAOqI,EAAWC,GAC3C,OAAOjV,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,cACLwH,MAAO,CACHyB,aAAgBA,EAChBpI,MAASA,EACTqI,UAAaA,EACbC,WAAcA,GAElBzC,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAOI,YAAA0C,CAAaC,GACT,OAAOnV,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,4BACLmH,KAAM,CACFkC,YAAeA,GAEnB3C,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,CAiCI,sBAAA4C,CAAuBd,EAAU,EAAGe,EAAgBd,EAAY,GAAIQ,GAChE,OAAO/U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mBACLwH,MAAO,CACHgB,QAAWA,EACXe,eAAkBA,EAClBd,UAAaA,EACbQ,aAAgBA,GAEpBvC,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,CAgBI,gBAAA8C,CAAiBH,EAAaJ,EAAcT,EAAU,GAClD,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,oCACLmH,KAAM,CACFkC,YAAeA,GAEnB7B,MAAO,CACHyB,aAAgBA,EAChBT,QAAWA,GAEf9B,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,0DACL,IAAK,uhCAcrB,CAYI,eAAA+C,CAAgBJ,EAAajB,GACzB,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,mCACLmH,KAAM,CACFkC,YAAeA,GAEnBlJ,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,whCAcrB,CAgBI,kBAAAgD,CAAmBL,EAAajB,GAC5B,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,sCACLmH,KAAM,CACFkC,YAAeA,GAEnBlJ,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,6EACL,IAAK,ssBAUrB,CASI,2BAAAiD,CAA4BN,GACxB,OAAOnV,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,6CACLmH,KAAM,CACFkC,YAAeA,GAEnB3C,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,gDAGrB,aC9cA7M,OAAOC,eAAe8P,GAAS,aAAc,CAAEnK,OAAO,IAC9BmK,GAAAC,sBAAG,EA6jB3BD,GAAAC,iBA5jBA,MACI,WAAA/V,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CASI,SAAA6B,CAAU1B,GACN,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,QACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAYI,kBAAAqD,CAAmBzB,EAAgBE,EAAU,EAAGC,EAAY,GAAIuB,GAC5D,OAAO9V,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,gCACLmH,KAAM,CACFmB,eAAkBA,GAEtBd,MAAO,CACHgB,QAAWA,EACXC,UAAaA,EACbuB,OAAUA,GAEdtD,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,CAMI,OAAAuD,CAAQ3B,GACJ,OAAOpU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,SACR5F,IAAK,yBACLmH,KAAM,CACFmB,eAAkBA,GAEtB5B,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,CAMI,UAAAwD,GACI,OAAOhW,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,WACL0G,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAYI,eAAAyD,CAAgB/B,GACZ,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,WACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAWI,iBAAA0D,CAAkB9B,GACd,OAAOpU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,SACR5F,IAAK,4BACLmH,KAAM,CACFmB,eAAkBA,GAEtB5B,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,0BAGrB,CAyBI,aAAA2D,CAAc/B,EAAgBE,EAAU,EAAGC,EAAY,IACnD,OAAOvU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mCACLmH,KAAM,CACFmB,eAAkBA,GAEtBd,MAAO,CACHgB,QAAWA,EACXC,UAAaA,GAEjB/B,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,CAiBI,iBAAA4D,CAAkBhC,EAAgBK,EAASP,GACvC,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,oDACLmH,KAAM,CACFmB,eAAkBA,EAClBK,QAAWA,GAEfxI,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,gDAGrB,CAQI,gBAAA6D,CAAiBjC,EAAgBO,GAC7B,OAAO3U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mDACLmH,KAAM,CACFmB,eAAkBA,EAClBO,WAAcA,GAElBnC,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,uBAGrB,CAYI,qBAAA8D,CAAsBlC,EAAgBO,EAAYT,GAC9C,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,mDACLmH,KAAM,CACFmB,eAAkBA,EAClBO,WAAcA,GAElB1I,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,8CACL,IAAK,uBAGrB,CAWI,mBAAA+D,CAAoBnC,EAAgBO,EAAYT,GAC5C,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,0DACLmH,KAAM,CACFmB,eAAkBA,EAClBO,WAAcA,GAElB1I,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,+BAGrB,CAcI,cAAAsC,CAAeC,EAAcpI,EAAOqI,EAAWC,GAC3C,OAAOjV,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,cACLwH,MAAO,CACHyB,aAAgBA,EAChBpI,MAASA,EACTqI,UAAaA,EACbC,WAAcA,GAElBzC,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAkBI,eAAAgE,CAAgBtC,GACZ,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,cACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,oDACL,IAAK,kCAGrB,CAOI,YAAA0C,CAAaC,GACT,OAAOnV,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,4BACLmH,KAAM,CACFkC,YAAeA,GAEnB3C,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,CAcI,eAAAiE,CAAgBtB,EAAajB,GACzB,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,mCACLmH,KAAM,CACFkC,YAAeA,GAEnBlJ,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,qDAGrB,CAYI,gBAAAkE,CAAiBvB,EAAaJ,GAC1B,OAAO/U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,oCACLmH,KAAM,CACFkC,YAAeA,GAEnB7B,MAAO,CACHyB,aAAgBA,GAEpBvC,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,uCAGrB,CAWI,eAAAmE,CAAgBxB,EAAab,EAAU,GACnC,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,iCACLmH,KAAM,CACFkC,YAAeA,GAEnB7B,MAAO,CACHgB,QAAWA,GAEf9B,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,0DACL,IAAK,oDACL,IAAK,ksCAerB,CAiCI,sBAAA4C,CAAuBd,EAAU,EAAGe,EAAgBd,EAAY,GAAIQ,GAChE,OAAO/U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mBACLwH,MAAO,CACHgB,QAAWA,EACXe,eAAkBA,EAClBd,UAAaA,EACbQ,aAAgBA,GAEpBvC,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,CAgBI,kBAAAgD,CAAmBL,EAAajB,GAC5B,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,sCACLmH,KAAM,CACFkC,YAAeA,GAEnBlJ,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,6EACL,IAAK,kuBAUrB,CASI,2BAAAiD,CAA4BN,GACxB,OAAOnV,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,6CACLmH,KAAM,CACFkC,YAAeA,GAEnB3C,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,gDAGrB,GC5jBA7M,OAAOC,eAAegR,GAAS,aAAc,CAAErL,OAAO,IACxCqL,GAAAC,YAAG,EACjB,MAAMpD,GAAqB9L,GACrBkM,GAAoB7E,GACpB0G,GAAqBoB,GAkB3BF,GAAAC,OAjBA,MACI,WAAAjX,CAAY6L,EAAQsL,EAActD,GAAmBC,kBACjD1T,KAAK4L,QAAU,IAAImL,EAAY,CAC3B1D,KAAM5H,GAAQ4H,MAAQ,iBACtBH,QAASzH,GAAQyH,SAAW,QAC5BtB,iBAAkBnG,GAAQmG,mBAAoB,EAC9CC,YAAapG,GAAQoG,aAAe,UACpCjB,MAAOnF,GAAQmF,MACfC,SAAUpF,GAAQoF,SAClBC,SAAUrF,GAAQqF,SAClBC,QAAStF,GAAQsF,QACjBgC,YAAatH,GAAQsH,cAEzB/S,KAAKgX,SAAW,IAAInD,GAAkBC,gBAAgB9T,KAAK4L,SAC3D5L,KAAKiX,UAAY,IAAIvB,GAAmBC,iBAAiB3V,KAAK4L,QACtE,aCpBAjG,OAAOC,eAAesR,GAAS,aAAc,CAAE3L,OAAO,IACvC2L,GAAAA,aAAG,EAClBA,GAAAA,QAAkB,CACd7D,KAAM,iBACNH,QAAS,QACTtB,kBAAkB,EAClBC,YAAa,UACbjB,WAAOQ,EACPP,cAAUO,EACVN,cAAUM,EACVL,aAASK,EACT2B,iBAAa3B,eCXjBzL,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAA2BsL,iBAAAtL,EAAAuN,iBAA2BvN,kBAA0BA,EAAkB8O,QAAA9O,EAAA+E,YAAsB/E,oBAA4BA,EAA0BoD,gBAAApD,EAAAuD,SAAmBvD,EAAiByO,YAAA,EAKlN,IAAID,EAAWjP,GACfhC,OAAOC,eAAewC,EAAS,SAAU,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO6Q,EAASC,MAAS,IACzG,IAAInL,EAAasD,GACjBrJ,OAAOC,eAAewC,EAAS,WAAY,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2F,EAAWC,QAAW,IAC/G,IAAIL,EAAoBwL,GACxBnR,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOuF,EAAkBE,eAAkB,IACpI,IAAIyB,EAAsBkK,GAC1BxR,OAAOC,eAAewC,EAAS,oBAAqB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBC,iBAAoB,IAC1IvH,OAAOC,eAAewC,EAAS,cAAe,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBE,WAAc,IAC9H,IAAIiK,EAAYC,GAChB1R,OAAOC,eAAewC,EAAS,UAAW,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOqR,EAAUF,OAAU,IAC5G,IAAIrD,EAAoByD,GACxB3R,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO8N,EAAkBC,eAAkB,IACpI,IAAI4B,EAAqB6B,GACzB5R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2P,EAAmBC,gBAAmB,IACvI,IAAIlC,EAAqB+D,GACzB7R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0N,EAAmBC,gBAAiB,qCCtBrI/N,OAAOC,eAAe0F,GAAS,aAAc,CAAEC,OAAO,IAC/BD,GAAAE,qBAAG,EAM1BF,GAAAE,gBALA,MACI,WAAA5L,CAAY6L,GACRzL,KAAKyL,OAASA,CACtB,mBCLA9F,OAAOC,eAAe8F,GAAS,aAAc,CAAEH,OAAO,IACtCG,GAAAC,cAAG,SACnB,cAAuBhM,MACnB,WAAAC,CAAYgM,EAASC,EAAUhM,GAC3BE,MAAMF,GACNG,KAAKkB,KAAO,WACZlB,KAAK8L,IAAMD,EAASC,IACpB9L,KAAK+L,OAASF,EAASE,OACvB/L,KAAKgM,WAAaH,EAASG,WAC3BhM,KAAKiM,KAAOJ,EAASI,KACrBjM,KAAK4L,QAAUA,CACvB,GAEAF,GAAAC,SAAmBA,OCFfO,GAA+BC,GAA+BC,GAAgCC,GAAmCC,GAA4BC,GAA4BC,SAXzLC,GAA0BzM,GAAQA,EAAKyM,wBAA2B,SAAUC,EAAUC,EAAOpB,EAAOqB,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAE5H,KAAKyH,EAAUnB,GAASsB,EAAIA,EAAEtB,MAAQA,EAAQoB,EAAM1G,IAAIyG,EAAUnB,GAASA,CACxG,EACIyB,GAA0BhN,GAAQA,EAAKgN,wBAA2B,SAAUN,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAE5H,KAAKyH,GAAYG,EAAIA,EAAEtB,MAAQoB,EAAM5G,IAAI2G,EACxF,EAEA/G,OAAOC,eAAeqH,GAAS,aAAc,CAAE1B,OAAO,IACtD0B,GAAAC,kBAA4BD,GAAAE,iBAAsB,SAKlD,cAA0BxN,MACtB,WAAAC,CAAYC,GACRE,MAAMF,GACNG,KAAKkB,KAAO,aACpB,CACI,eAAIkM,GACA,OAAO,CACf,GAEAH,GAAAE,YAAsBA,GACtB,IAAAsK,GAAA,MACI,WAAA7X,CAAY0N,GACRpB,GAA8BjG,IAAIjG,UAAM,GACxCmM,GAA8BlG,IAAIjG,UAAM,GACxCoM,GAA+BnG,IAAIjG,UAAM,GACzCqM,GAAkCpG,IAAIjG,UAAM,GAC5CsM,GAA2BrG,IAAIjG,UAAM,GACrCuM,GAA2BtG,IAAIjG,UAAM,GACrCwM,GAA0BvG,IAAIjG,UAAM,GACpCyM,GAAuBzM,KAAMkM,IAA+B,EAAO,KACnEO,GAAuBzM,KAAMmM,IAA+B,EAAO,KACnEM,GAAuBzM,KAAMoM,IAAgC,EAAO,KACpEK,GAAuBzM,KAAMqM,GAAmC,GAAI,KACpEI,GAAuBzM,KAAMsM,GAA4B,IAAI/M,SAAQ,CAACC,EAAS+N,KAC3Ed,GAAuBzM,KAAMuM,GAA4B/M,EAAS,KAClEiN,GAAuBzM,KAAMwM,GAA2Be,EAAQ,KAChE,MAgBMC,EAAYC,IACVT,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAGzMY,GAAuBhN,KAAMqM,GAAmC,KAAK/E,KAAKmG,EAAc,EAW5F,OATA9H,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMkM,GAA+B,OAE3EvG,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMmM,GAA+B,OAE3ExG,OAAOC,eAAe4H,EAAU,cAAe,CAC3CzH,IAAK,IAAMiH,GAAuBhN,KAAMoM,GAAgC,OAErEkB,GA/BY/B,IACXyB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMkM,IAA+B,EAAM,KAC9Dc,GAAuBhN,KAAMuM,GAA4B,MACzDS,GAAuBhN,KAAMuM,GAA4B,KAAKtH,KAAKjF,KAAMuL,GAAM,IAErEmC,IACVV,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMmM,IAA+B,EAAM,KAC9Da,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM0N,GAAO,GAiBlDF,EAAS,IAC9C,IACZ,CACI,KAAMtB,GAAgC,IAAIyB,QAAWxB,GAAgC,IAAIwB,QAAWvB,GAAiC,IAAIuB,QAAWtB,GAAoC,IAAIsB,QAAWrB,GAA6B,IAAIqB,QAAWpB,GAA6B,IAAIoB,QAAWnB,GAA4B,IAAImB,QAAWC,OAAOC,gBAC7U,MAAO,qBACf,CACI,IAAAC,CAAKC,EAAaC,GACd,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAKwB,KAAKC,EAAaC,EAC/F,CACI,MAAMA,GACF,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAK2B,MAAMD,EACnF,CACI,QAAQE,GACJ,OAAOlB,GAAuBhN,KAAMsM,GAA4B,KAAK6B,QAAQD,EACrF,CACI,MAAAE,GACI,KAAIpB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAAzM,CAIA,GADAK,GAAuBzM,KAAMoM,IAAgC,EAAM,KAC/DY,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OACrE,IACI,IAAK,MAAM6K,KAAiBT,GAAuBhN,KAAMqM,GAAmC,KACxFoB,GAEpB,CACY,MAAO9L,GAEH,YADAiG,QAAQlG,KAAK,8BAA+BC,EAE5D,CAEQqL,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OAAS,EAC1EoK,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM,IAAImN,GAAY,mBAfpG,CAgBA,CACI,eAAIC,GACA,OAAOJ,GAAuBhN,KAAMoM,GAAgC,IAC5E,GAEAa,GAAAC,kBAA4BA,eClH5BvH,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAwD,QAAkBxD,kBAA0BA,EAA0BiG,gBAAAjG,EAAAkG,kBAA4BlG,EAAsBmG,YAAAnG,EAAAoG,eAAyBpG,aAAqBA,EAAkB5I,QAAA4I,EAAAqG,YAAsBrG,EAAyBsG,eAAAtG,EAAAuG,OAAiBvG,aAAqBA,EAAiBwG,OAAAxG,EAAAyG,kBAA4BzG,EAAmB0G,SAAA1G,EAAA2G,eAAoB,EAKjW,MAAMrD,EAAa/D,GACbsF,EAAsB+B,GAI5B5G,EAAA2G,UAHmBxD,GACRA,QAMXnD,EAAA0G,SAHkBvD,GACU,iBAAVA,EAMlBnD,EAAAyG,kBAH2BtD,IAChB,EAAInD,EAAQ0G,UAAUvD,IAAoB,KAAVA,EAa3CnD,EAAAwG,OAVgBrD,GACa,iBAAVA,GACW,iBAAfA,EAAM5I,MACW,mBAAjB4I,EAAM0D,QACgB,mBAAtB1D,EAAM2D,aACgB,mBAAtB3D,EAAM3L,aACqB,iBAA3B2L,EAAM3L,YAAYsB,MACzB,gBAAgBuG,KAAK8D,EAAM3L,YAAYsB,OACvC,gBAAgBuG,KAAK8D,EAAMqC,OAAOC,cAM1CzF,EAAA+G,WAHoB5D,GACTA,aAAiB6D,SAY5BhH,EAAAuG,OATgB9L,IACZ,IACI,OAAOwM,KAAKxM,EACpB,CACI,MAAOyM,GAEH,OAAOC,GAAOC,KAAK3M,GAAK2D,SAAS,SACzC,GAiCA4B,EAAAsG,eA9BwBe,IACpB,MAAMC,EAAK,GAIL7O,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ2G,WAAWxD,KACnBoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,IACVrF,EAAQkH,EAAK7B,EAAE,IAGG,iBAAVqF,EACZ5F,OAAOkK,QAAQtE,GAAOzD,SAAQ,EAAEgI,EAAG5J,MAC/BrF,EAAQ,GAAGkH,KAAO+H,KAAM5J,EAAE,IAZ3B,EAAC6B,EAAKwD,KACjBmE,EAAGpI,KAAK,GAAGyI,mBAAmBhI,MAAQgI,mBAAmBjN,OAAOyI,MAAU,EAelEyE,CAAOjI,EAAKwD,GAE5B,EAKI,OAHA5F,OAAOkK,QAAQJ,GAAQ3H,SAAQ,EAAEC,EAAKwD,MAClC1K,EAAQkH,EAAKwD,EAAM,IAEnBmE,EAAG9M,OAAS,EACL,IAAI8M,EAAG1I,KAAK,OAEhB,EAAE,EA4CboB,EAAAqG,YAzBqB/L,IACjB,GAAIA,EAAQuN,SAAU,CAClB,MAAMA,EAAW,IAAIb,SACfvO,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ0G,UAAUvD,KAAU,EAAInD,EAAQwG,QAAQrD,GACpD0E,EAASD,OAAOjI,EAAKwD,GAGrB0E,EAASD,OAAOjI,EAAKtE,KAAKC,UAAU6H,GACpD,EAYQ,OAVA5F,OAAOkK,QAAQnN,EAAQuN,UAClBC,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9CzD,SAAQ,EAAEC,EAAKwD,MACZoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,GAAKrF,EAAQkH,EAAK7B,KAGhCrF,EAAQkH,EAAKwD,EAC7B,IAEe0E,CACf,CACoB,EASpB7H,EAAA5I,QANgB4Q,MAAO1N,EAAS2N,IACJ,mBAAbA,EACAA,EAAS3N,GAEb2N,EA2CXjI,EAAAkI,WAxCmBF,MAAO3E,EAAQ/I,KAC9B,MAAO6N,EAAOC,EAAUC,EAAUC,SAA2BnR,QAAQoR,IAAI,EACrE,EAAIvI,EAAQ5I,SAASkD,EAAS+I,EAAOmF,QACrC,EAAIxI,EAAQ5I,SAASkD,EAAS+I,EAAOoF,WACrC,EAAIzI,EAAQ5I,SAASkD,EAAS+I,EAAOqF,WACrC,EAAI1I,EAAQ5I,SAASkD,EAAS+I,EAAOsF,WAEnCC,EAAUrL,OAAOkK,QAAQ,CAC3BoB,OAAQ,sBACLP,KACAhO,EAAQsO,UAEVd,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9C2F,QAAO,CAACF,GAAUjJ,EAAKwD,MAAY,IACjCyF,EACHjJ,CAACA,GAAMjF,OAAOyI,MACd,CAAA,GAIJ,IAHI,EAAInD,EAAQyG,mBAAmB0B,KAC/BS,EAAuB,cAAI,UAAUT,MAErC,EAAInI,EAAQyG,mBAAmB2B,KAAa,EAAIpI,EAAQyG,mBAAmB4B,GAAW,CACtF,MAAMU,GAAc,EAAI/I,EAAQuG,QAAQ,GAAG6B,KAAYC,KACvDO,EAAuB,cAAI,SAASG,GAC5C,CAeI,YAdqBC,IAAjB1O,EAAQuJ,OACJvJ,EAAQ2O,UACRL,EAAQ,gBAAkBtO,EAAQ2O,WAE7B,EAAIjJ,EAAQwG,QAAQlM,EAAQuJ,MACjC+E,EAAQ,gBAAkBtO,EAAQuJ,KAAKtJ,MAAQ,4BAE1C,EAAIyF,EAAQ0G,UAAUpM,EAAQuJ,MACnC+E,EAAQ,gBAAkB,cAEpB,EAAI5I,EAAQ+G,YAAYzM,EAAQuJ,QACtC+E,EAAQ,gBAAkB,qBAG3B,IAAIM,QAAQN,EAAQ,EAiB/B5I,EAAAoG,eAdwB9L,IACpB,QAAqB0O,IAAjB1O,EAAQuJ,KACR,OAAIvJ,EAAQ2O,WAAWE,SAAS,SACrB9N,KAAKC,UAAUhB,EAAQuJ,OAEzB,EAAI7D,EAAQ0G,UAAUpM,EAAQuJ,QAAS,EAAI7D,EAAQwG,QAAQlM,EAAQuJ,QAAS,EAAI7D,EAAQ+G,YAAYzM,EAAQuJ,MAC1GvJ,EAAQuJ,KAGRxI,KAAKC,UAAUhB,EAAQuJ,KAGtB,EAiBpB7D,EAAAmG,YAdoB6B,MAAO3E,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,KACtE,MAAMgE,EAAa,IAAIC,gBACjB7F,EAAU,CACZoF,UACA/E,KAAMA,GAAQgE,EACdyB,OAAQhP,EAAQgP,OAChBC,OAAQH,EAAWG,QAMvB,OAJIlG,EAAOmG,mBACPhG,EAAQuF,YAAc1F,EAAOoG,aAEjCrE,GAAS,IAAMgE,EAAWM,gBACbC,MAAMjG,EAAKF,EAAQ,EAYpCxD,EAAAkG,kBAT0B,CAACzC,EAAUmG,KACjC,GAAIA,EAAgB,CAChB,MAAMC,EAAUpG,EAASmF,QAAQjL,IAAIiM,GACrC,IAAI,EAAI5J,EAAQ0G,UAAUmD,GACtB,OAAOA,CAEnB,CACoB,EAwBpB7J,EAAAiG,gBArBwB+B,MAAOvE,IAC3B,GAAwB,MAApBA,EAASE,OACT,IACI,MAAMmG,EAAcrG,EAASmF,QAAQjL,IAAI,gBACzC,GAAImM,EAAa,CAGb,MAFkB,CAAC,mBAAoB,4BACdC,MAAKxP,GAAQuP,EAAYhP,cAAc+G,WAAWtH,WAE1DkJ,EAASuG,aAGTvG,EAASwG,MAE1C,CACA,CACQ,MAAO1Q,GACHiG,QAAQjG,MAAMA,EAC1B,CAEoB,EAgCpByG,EAAAkK,gBA7BwB,CAAC5P,EAAS6P,KAC9B,MAUM5Q,EAVS,CACX,IAAK,cACL,IAAK,eACL,IAAK,YACL,IAAK,YACL,IAAK,wBACL,IAAK,cACL,IAAK,yBACFe,EAAQ8P,QAEMD,EAAOxG,QAC5B,GAAIpK,EACA,MAAM,IAAI+J,EAAWC,SAASjJ,EAAS6P,EAAQ5Q,GAEnD,IAAK4Q,EAAOE,GAAI,CACZ,MAAMC,EAAcH,EAAOxG,QAAU,UAC/B4G,EAAkBJ,EAAOvG,YAAc,UACvC4G,EAAY,MACd,IACI,OAAOnP,KAAKC,UAAU6O,EAAOtG,KAAM,KAAM,EACzD,CACY,MAAO4G,GACH,MAChB,CACS,EAPiB,GAQlB,MAAM,IAAInH,EAAWC,SAASjJ,EAAS6P,EAAQ,0BAA0BG,mBAA6BC,YAA0BC,IACxI,GAqCAxK,EAAAwD,QA3BgB,CAACH,EAAQ/I,IACd,IAAIuK,EAAoBC,mBAAkBkD,MAAO5Q,EAAS+N,EAAQC,KACrE,IACI,MAAM1B,EAhMH,EAACL,EAAQ/I,KACpB,MAAMoQ,EAAUrH,EAAOsH,aAAeC,UAChCC,EAAOvQ,EAAQoJ,IAChBjH,QAAQ,gBAAiB4G,EAAOyH,SAChCrO,QAAQ,YAAY,CAAC4B,EAAW0M,IAC7BzQ,EAAQuQ,MAAMG,eAAeD,GACtBL,EAAQhQ,OAAOJ,EAAQuQ,KAAKE,KAEhC1M,IAELqF,EAAM,GAAGL,EAAO4H,OAAOJ,IAC7B,OAAIvQ,EAAQ4Q,MACD,GAAGxH,KAAM,EAAI1D,EAAQsG,gBAAgBhM,EAAQ4Q,SAEjDxH,CAAG,EAkLUyH,CAAO9H,EAAQ/I,GACrBuN,GAAW,EAAI7H,EAAQqG,aAAa/L,GACpCuJ,GAAO,EAAI7D,EAAQoG,gBAAgB9L,GACnCsO,QAAgB,EAAI5I,EAAQkI,YAAY7E,EAAQ/I,GACtD,IAAK8K,EAASJ,YAAa,CACvB,MAAMvB,QAAiB,EAAIzD,EAAQmG,aAAa9C,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,GACzFgG,QAAqB,EAAIpL,EAAQiG,iBAAiBxC,GAClDmG,GAAiB,EAAI5J,EAAQkG,mBAAmBzC,EAAUnJ,EAAQsP,gBAClEO,EAAS,CACXzG,MACA2G,GAAI5G,EAAS4G,GACb1G,OAAQF,EAASE,OACjBC,WAAYH,EAASG,WACrBC,KAAM+F,GAAkBwB,IAE5B,EAAIpL,EAAQkK,iBAAiB5P,EAAS6P,GACtC/S,EAAQ+S,EAAOtG,KAC/B,CACA,CACQ,MAAOtK,GACH4L,EAAO5L,EACnB,UCjSAgE,OAAOC,eAAe6N,GAAS,aAAc,CAAElI,OAAO,IAC9BkI,GAAAC,sBAAG,EAC3B,MAAMpI,GAAoB3D,GACpBgM,GAAY3E,GAClB,IAAA0I,GAAA,cAA+BpM,GAAkBE,gBAC7C,WAAA5L,CAAY6L,GACR1L,MAAM0L,EACd,CAOI,OAAAG,CAAQlJ,GACJ,OAAO,EAAIiR,GAAU/H,SAAS5L,KAAKyL,OAAQ/I,EACnD,GAEA+Q,GAAAC,iBAA2BA,aClB3B/N,OAAOC,eAAeiO,GAAS,aAAc,CAAEtI,OAAO,IAC/BsI,GAAAC,qBAAG,EAoH1BD,GAAAC,gBAnHA,MACI,WAAAlU,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CASI,oBAAA4D,CAAqBC,GACjB,OAAO5X,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mCACLmH,KAAM,CACF2E,WAAcA,GAElBpF,OAAQ,CACJ,IAAK,oBACL,IAAK,mBACL,IAAK,8CACL,IAAK,wBAGrB,CAYI,qBAAAqF,CAAsB9C,EAAcM,EAAgBf,EAAU,EAAGC,EAAY,IACzE,OAAOvU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,UACLwH,MAAO,CACHyB,aAAgBA,EAChBM,eAAkBA,EAClBf,QAAWA,EACXC,UAAaA,GAEjB/B,OAAQ,CACJ,IAAK,mBACL,IAAK,wBAGrB,CAOI,gBAAAsF,CAAiBF,GACb,OAAO5X,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,+BACLmH,KAAM,CACF2E,WAAcA,GAElBpF,OAAQ,CACJ,IAAK,8CACL,IAAK,wBAGrB,CAQI,gBAAAuF,CAAiBH,EAAY1D,GACzB,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,+BACLmH,KAAM,CACF2E,WAAcA,GAElB3L,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,8CACL,IAAK,wBAGrB,CAOI,gBAAAwF,CAAiBJ,GACb,OAAO5X,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,+BACLmH,KAAM,CACF2E,WAAcA,GAElBpF,OAAQ,CACJ,IAAK,8CACL,IAAK,wBAGrB,aCnHA7M,OAAOC,eAAeqS,GAAS,aAAc,CAAE1M,OAAO,IACvB0M,GAAAC,6BAAG,EAmJlCD,GAAAC,wBAlJA,MACI,WAAAtY,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAUI,cAAAoE,CAAejE,EAAaI,EAAU,GAClC,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,YACLwH,MAAO,CACHgB,QAAWA,GAEfrI,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,mBACL,IAAK,8CACL,IAAK,wBAGrB,CASI,IAAAxP,CAAK4U,EAAY1D,GACb,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,8BACLmH,KAAM,CACF2E,WAAcA,GAElB3L,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,mBACL,IAAK,8CACL,IAAK,wBAGrB,CAQI,aAAA4F,CAAcR,EAAY1D,GACtB,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,mCACLmH,KAAM,CACF2E,WAAcA,GAElB3L,KAAMiI,EACN7C,UAAW,2BACXmB,OAAQ,CACJ,IAAK,8CACL,IAAK,wBAGrB,CAuBI,mBAAA6F,CAAoBT,EAAYU,EAASC,EAAcjE,EAAU,GAC7D,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,wCACLmH,KAAM,CACF2E,WAAcA,EACdU,QAAWA,GAEfhF,MAAO,CACHiF,aAAgBA,EAChBjE,QAAWA,GAEf9B,OAAQ,CACJ,IAAK,oBACL,IAAK,mBACL,IAAK,8CACL,IAAK,wBAGrB,CAUI,eAAAgG,CAAgBZ,EAAYtD,EAAU,GAClC,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,SACR5F,IAAK,yBACLmH,KAAM,CACF2E,WAAcA,GAElBtE,MAAO,CACHgB,QAAWA,GAEf9B,OAAQ,CACJ,IAAK,mBACL,IAAK,8CACL,IAAK,wBAGrB,aClJA7M,OAAOC,eAAe6S,GAAS,aAAc,CAAElN,OAAO,IACzBkN,GAAAC,2BAAG,EAuFhCD,GAAAC,sBAtFA,MACI,WAAA9Y,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CASI,oBAAA4D,CAAqBC,GACjB,OAAO5X,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mCACLmH,KAAM,CACF2E,WAAcA,GAElBpF,OAAQ,CACJ,IAAK,oBACL,IAAK,mBACL,IAAK,8CACL,IAAK,wBAGrB,CAOI,gBAAAsF,CAAiBF,GACb,OAAO5X,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,+BACLmH,KAAM,CACF2E,WAAcA,GAElBpF,OAAQ,CACJ,IAAK,8CACL,IAAK,wBAGrB,CAOI,gBAAAwF,CAAiBJ,GACb,OAAO5X,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,+BACLmH,KAAM,CACF2E,WAAcA,GAElBpF,OAAQ,CACJ,IAAK,8CACL,IAAK,wBAGrB,CAQI,iBAAAmG,CAAkBf,GACd,OAAO5X,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,iCACLmH,KAAM,CACF2E,WAAcA,GAElBpF,OAAQ,CACJ,IAAK,8CACL,IAAK,wBAGrB,GCtFA7M,OAAOC,eAAegR,GAAS,aAAc,CAAErL,OAAO,IACxCqL,GAAAC,YAAG,EACjB,MAAMpD,GAAqB9L,GACrBkM,GAAoB7E,GACpBiJ,GAA4BnB,GAC5B2B,GAA0BtB,GAmBhCP,GAAAC,OAlBA,MACI,WAAAjX,CAAY6L,EAAQsL,EAActD,GAAmBC,kBACjD1T,KAAK4L,QAAU,IAAImL,EAAY,CAC3B1D,KAAM5H,GAAQ4H,MAAQ,mBACtBH,QAASzH,GAAQyH,SAAW,QAC5BtB,iBAAkBnG,GAAQmG,mBAAoB,EAC9CC,YAAapG,GAAQoG,aAAe,UACpCjB,MAAOnF,GAAQmF,MACfC,SAAUpF,GAAQoF,SAClBC,SAAUrF,GAAQqF,SAClBC,QAAStF,GAAQsF,QACjBgC,YAAatH,GAAQsH,cAEzB/S,KAAKgX,SAAW,IAAInD,GAAkBC,gBAAgB9T,KAAK4L,SAC3D5L,KAAK4Y,iBAAmB,IAAIX,GAA0BC,wBAAwBlY,KAAK4L,SACnF5L,KAAK6Y,eAAiB,IAAIJ,GAAwBC,sBAAsB1Y,KAAK4L,QACrF,aCtBAjG,OAAOC,eAAesR,GAAS,aAAc,CAAE3L,OAAO,IACvC2L,GAAAA,aAAG,EAClBA,GAAAA,QAAkB,CACd7D,KAAM,mBACNH,QAAS,QACTtB,kBAAkB,EAClBC,YAAa,UACbjB,WAAOQ,EACPP,cAAUO,EACVN,cAAUM,EACVL,aAASK,EACT2B,iBAAa3B,eCXjBzL,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAA2BsL,iBAAAtL,EAAAsQ,sBAAgCtQ,EAAkC8P,wBAAA9P,EAAA0L,gBAA0B1L,EAAkB8O,QAAA9O,EAAA+E,YAAsB/E,oBAA4BA,EAA0BoD,gBAAApD,EAAAuD,SAAmBvD,EAAiByO,YAAA,EAKzP,IAAID,EAAWjP,GACfhC,OAAOC,eAAewC,EAAS,SAAU,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO6Q,EAASC,MAAS,IACzG,IAAInL,EAAasD,GACjBrJ,OAAOC,eAAewC,EAAS,WAAY,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2F,EAAWC,QAAW,IAC/G,IAAIL,EAAoBwL,GACxBnR,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOuF,EAAkBE,eAAkB,IACpI,IAAIyB,EAAsBkK,GAC1BxR,OAAOC,eAAewC,EAAS,oBAAqB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBC,iBAAoB,IAC1IvH,OAAOC,eAAewC,EAAS,cAAe,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBE,WAAc,IAC9H,IAAIiK,EAAYC,GAChB1R,OAAOC,eAAewC,EAAS,UAAW,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOqR,EAAUF,OAAU,IAC5G,IAAIrD,EAAoByD,GACxB3R,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO8N,EAAkBC,eAAkB,IACpI,IAAImE,EAA4BV,GAChC5R,OAAOC,eAAewC,EAAS,0BAA2B,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkS,EAA0BC,uBAA0B,IAC5J,IAAIO,EAA0BjB,GAC9B7R,OAAOC,eAAewC,EAAS,wBAAyB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0S,EAAwBC,qBAAwB,IACtJ,IAAIjF,EAAqBqF,GACzBnT,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0N,EAAmBC,gBAAiB,qCCxBrI/N,OAAOC,eAAe0F,GAAS,aAAc,CAAEC,OAAO,IAC/BD,GAAAE,qBAAG,EAM1BF,GAAAE,gBALA,MACI,WAAA5L,CAAY6L,GACRzL,KAAKyL,OAASA,CACtB,mBCLA9F,OAAOC,eAAe8F,GAAS,aAAc,CAAEH,OAAO,IACtCG,GAAAC,cAAG,SACnB,cAAuBhM,MACnB,WAAAC,CAAYgM,EAASC,EAAUhM,GAC3BE,MAAMF,GACNG,KAAKkB,KAAO,WACZlB,KAAK8L,IAAMD,EAASC,IACpB9L,KAAK+L,OAASF,EAASE,OACvB/L,KAAKgM,WAAaH,EAASG,WAC3BhM,KAAKiM,KAAOJ,EAASI,KACrBjM,KAAK4L,QAAUA,CACvB,GAEAF,GAAAC,SAAmBA,OCFfO,GAA+BC,GAA+BC,GAAgCC,GAAmCC,GAA4BC,GAA4BC,SAXzLC,GAA0BzM,GAAQA,EAAKyM,wBAA2B,SAAUC,EAAUC,EAAOpB,EAAOqB,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAE5H,KAAKyH,EAAUnB,GAASsB,EAAIA,EAAEtB,MAAQA,EAAQoB,EAAM1G,IAAIyG,EAAUnB,GAASA,CACxG,EACIyB,GAA0BhN,GAAQA,EAAKgN,wBAA2B,SAAUN,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAE5H,KAAKyH,GAAYG,EAAIA,EAAEtB,MAAQoB,EAAM5G,IAAI2G,EACxF,EAEA/G,OAAOC,eAAeqH,GAAS,aAAc,CAAE1B,OAAO,IACtD0B,GAAAC,kBAA4BD,GAAAE,iBAAsB,SAKlD,cAA0BxN,MACtB,WAAAC,CAAYC,GACRE,MAAMF,GACNG,KAAKkB,KAAO,aACpB,CACI,eAAIkM,GACA,OAAO,CACf,GAEAH,GAAAE,YAAsBA,GACtB,IAAA4L,GAAA,MACI,WAAAnZ,CAAY0N,GACRpB,GAA8BjG,IAAIjG,UAAM,GACxCmM,GAA8BlG,IAAIjG,UAAM,GACxCoM,GAA+BnG,IAAIjG,UAAM,GACzCqM,GAAkCpG,IAAIjG,UAAM,GAC5CsM,GAA2BrG,IAAIjG,UAAM,GACrCuM,GAA2BtG,IAAIjG,UAAM,GACrCwM,GAA0BvG,IAAIjG,UAAM,GACpCyM,GAAuBzM,KAAMkM,IAA+B,EAAO,KACnEO,GAAuBzM,KAAMmM,IAA+B,EAAO,KACnEM,GAAuBzM,KAAMoM,IAAgC,EAAO,KACpEK,GAAuBzM,KAAMqM,GAAmC,GAAI,KACpEI,GAAuBzM,KAAMsM,GAA4B,IAAI/M,SAAQ,CAACC,EAAS+N,KAC3Ed,GAAuBzM,KAAMuM,GAA4B/M,EAAS,KAClEiN,GAAuBzM,KAAMwM,GAA2Be,EAAQ,KAChE,MAgBMC,EAAYC,IACVT,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAGzMY,GAAuBhN,KAAMqM,GAAmC,KAAK/E,KAAKmG,EAAc,EAW5F,OATA9H,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMkM,GAA+B,OAE3EvG,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMmM,GAA+B,OAE3ExG,OAAOC,eAAe4H,EAAU,cAAe,CAC3CzH,IAAK,IAAMiH,GAAuBhN,KAAMoM,GAAgC,OAErEkB,GA/BY/B,IACXyB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMkM,IAA+B,EAAM,KAC9Dc,GAAuBhN,KAAMuM,GAA4B,MACzDS,GAAuBhN,KAAMuM,GAA4B,KAAKtH,KAAKjF,KAAMuL,GAAM,IAErEmC,IACVV,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMmM,IAA+B,EAAM,KAC9Da,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM0N,GAAO,GAiBlDF,EAAS,IAC9C,IACZ,CACI,KAAMtB,GAAgC,IAAIyB,QAAWxB,GAAgC,IAAIwB,QAAWvB,GAAiC,IAAIuB,QAAWtB,GAAoC,IAAIsB,QAAWrB,GAA6B,IAAIqB,QAAWpB,GAA6B,IAAIoB,QAAWnB,GAA4B,IAAImB,QAAWC,OAAOC,gBAC7U,MAAO,qBACf,CACI,IAAAC,CAAKC,EAAaC,GACd,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAKwB,KAAKC,EAAaC,EAC/F,CACI,MAAMA,GACF,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAK2B,MAAMD,EACnF,CACI,QAAQE,GACJ,OAAOlB,GAAuBhN,KAAMsM,GAA4B,KAAK6B,QAAQD,EACrF,CACI,MAAAE,GACI,KAAIpB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAAzM,CAIA,GADAK,GAAuBzM,KAAMoM,IAAgC,EAAM,KAC/DY,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OACrE,IACI,IAAK,MAAM6K,KAAiBT,GAAuBhN,KAAMqM,GAAmC,KACxFoB,GAEpB,CACY,MAAO9L,GAEH,YADAiG,QAAQlG,KAAK,8BAA+BC,EAE5D,CAEQqL,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OAAS,EAC1EoK,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM,IAAImN,GAAY,mBAfpG,CAgBA,CACI,eAAIC,GACA,OAAOJ,GAAuBhN,KAAMoM,GAAgC,IAC5E,GAEAa,GAAAC,kBAA4BA,eClH5BvH,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAwD,QAAkBxD,kBAA0BA,EAA0BiG,gBAAAjG,EAAAkG,kBAA4BlG,EAAsBmG,YAAAnG,EAAAoG,eAAyBpG,aAAqBA,EAAkB5I,QAAA4I,EAAAqG,YAAsBrG,EAAyBsG,eAAAtG,EAAAuG,OAAiBvG,aAAqBA,EAAiBwG,OAAAxG,EAAAyG,kBAA4BzG,EAAmB0G,SAAA1G,EAAA2G,eAAoB,EAKjW,MAAMrD,EAAa/D,GACbsF,EAAsB+B,GAI5B5G,EAAA2G,UAHmBxD,GACRA,QAMXnD,EAAA0G,SAHkBvD,GACU,iBAAVA,EAMlBnD,EAAAyG,kBAH2BtD,IAChB,EAAInD,EAAQ0G,UAAUvD,IAAoB,KAAVA,EAa3CnD,EAAAwG,OAVgBrD,GACa,iBAAVA,GACW,iBAAfA,EAAM5I,MACW,mBAAjB4I,EAAM0D,QACgB,mBAAtB1D,EAAM2D,aACgB,mBAAtB3D,EAAM3L,aACqB,iBAA3B2L,EAAM3L,YAAYsB,MACzB,gBAAgBuG,KAAK8D,EAAM3L,YAAYsB,OACvC,gBAAgBuG,KAAK8D,EAAMqC,OAAOC,cAM1CzF,EAAA+G,WAHoB5D,GACTA,aAAiB6D,SAY5BhH,EAAAuG,OATgB9L,IACZ,IACI,OAAOwM,KAAKxM,EACpB,CACI,MAAOyM,GAEH,OAAOC,GAAOC,KAAK3M,GAAK2D,SAAS,SACzC,GAiCA4B,EAAAsG,eA9BwBe,IACpB,MAAMC,EAAK,GAIL7O,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ2G,WAAWxD,KACnBoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,IACVrF,EAAQkH,EAAK7B,EAAE,IAGG,iBAAVqF,EACZ5F,OAAOkK,QAAQtE,GAAOzD,SAAQ,EAAEgI,EAAG5J,MAC/BrF,EAAQ,GAAGkH,KAAO+H,KAAM5J,EAAE,IAZ3B,EAAC6B,EAAKwD,KACjBmE,EAAGpI,KAAK,GAAGyI,mBAAmBhI,MAAQgI,mBAAmBjN,OAAOyI,MAAU,EAelEyE,CAAOjI,EAAKwD,GAE5B,EAKI,OAHA5F,OAAOkK,QAAQJ,GAAQ3H,SAAQ,EAAEC,EAAKwD,MAClC1K,EAAQkH,EAAKwD,EAAM,IAEnBmE,EAAG9M,OAAS,EACL,IAAI8M,EAAG1I,KAAK,OAEhB,EAAE,EA4CboB,EAAAqG,YAzBqB/L,IACjB,GAAIA,EAAQuN,SAAU,CAClB,MAAMA,EAAW,IAAIb,SACfvO,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ0G,UAAUvD,KAAU,EAAInD,EAAQwG,QAAQrD,GACpD0E,EAASD,OAAOjI,EAAKwD,GAGrB0E,EAASD,OAAOjI,EAAKtE,KAAKC,UAAU6H,GACpD,EAYQ,OAVA5F,OAAOkK,QAAQnN,EAAQuN,UAClBC,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9CzD,SAAQ,EAAEC,EAAKwD,MACZoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,GAAKrF,EAAQkH,EAAK7B,KAGhCrF,EAAQkH,EAAKwD,EAC7B,IAEe0E,CACf,CACoB,EASpB7H,EAAA5I,QANgB4Q,MAAO1N,EAAS2N,IACJ,mBAAbA,EACAA,EAAS3N,GAEb2N,EA2CXjI,EAAAkI,WAxCmBF,MAAO3E,EAAQ/I,KAC9B,MAAO6N,EAAOC,EAAUC,EAAUC,SAA2BnR,QAAQoR,IAAI,EACrE,EAAIvI,EAAQ5I,SAASkD,EAAS+I,EAAOmF,QACrC,EAAIxI,EAAQ5I,SAASkD,EAAS+I,EAAOoF,WACrC,EAAIzI,EAAQ5I,SAASkD,EAAS+I,EAAOqF,WACrC,EAAI1I,EAAQ5I,SAASkD,EAAS+I,EAAOsF,WAEnCC,EAAUrL,OAAOkK,QAAQ,CAC3BoB,OAAQ,sBACLP,KACAhO,EAAQsO,UAEVd,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9C2F,QAAO,CAACF,GAAUjJ,EAAKwD,MAAY,IACjCyF,EACHjJ,CAACA,GAAMjF,OAAOyI,MACd,CAAA,GAIJ,IAHI,EAAInD,EAAQyG,mBAAmB0B,KAC/BS,EAAuB,cAAI,UAAUT,MAErC,EAAInI,EAAQyG,mBAAmB2B,KAAa,EAAIpI,EAAQyG,mBAAmB4B,GAAW,CACtF,MAAMU,GAAc,EAAI/I,EAAQuG,QAAQ,GAAG6B,KAAYC,KACvDO,EAAuB,cAAI,SAASG,GAC5C,CAeI,YAdqBC,IAAjB1O,EAAQuJ,OACJvJ,EAAQ2O,UACRL,EAAQ,gBAAkBtO,EAAQ2O,WAE7B,EAAIjJ,EAAQwG,QAAQlM,EAAQuJ,MACjC+E,EAAQ,gBAAkBtO,EAAQuJ,KAAKtJ,MAAQ,4BAE1C,EAAIyF,EAAQ0G,UAAUpM,EAAQuJ,MACnC+E,EAAQ,gBAAkB,cAEpB,EAAI5I,EAAQ+G,YAAYzM,EAAQuJ,QACtC+E,EAAQ,gBAAkB,qBAG3B,IAAIM,QAAQN,EAAQ,EAiB/B5I,EAAAoG,eAdwB9L,IACpB,QAAqB0O,IAAjB1O,EAAQuJ,KACR,OAAIvJ,EAAQ2O,WAAWE,SAAS,SACrB9N,KAAKC,UAAUhB,EAAQuJ,OAEzB,EAAI7D,EAAQ0G,UAAUpM,EAAQuJ,QAAS,EAAI7D,EAAQwG,QAAQlM,EAAQuJ,QAAS,EAAI7D,EAAQ+G,YAAYzM,EAAQuJ,MAC1GvJ,EAAQuJ,KAGRxI,KAAKC,UAAUhB,EAAQuJ,KAGtB,EAiBpB7D,EAAAmG,YAdoB6B,MAAO3E,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,KACtE,MAAMgE,EAAa,IAAIC,gBACjB7F,EAAU,CACZoF,UACA/E,KAAMA,GAAQgE,EACdyB,OAAQhP,EAAQgP,OAChBC,OAAQH,EAAWG,QAMvB,OAJIlG,EAAOmG,mBACPhG,EAAQuF,YAAc1F,EAAOoG,aAEjCrE,GAAS,IAAMgE,EAAWM,gBACbC,MAAMjG,EAAKF,EAAQ,EAYpCxD,EAAAkG,kBAT0B,CAACzC,EAAUmG,KACjC,GAAIA,EAAgB,CAChB,MAAMC,EAAUpG,EAASmF,QAAQjL,IAAIiM,GACrC,IAAI,EAAI5J,EAAQ0G,UAAUmD,GACtB,OAAOA,CAEnB,CACoB,EAwBpB7J,EAAAiG,gBArBwB+B,MAAOvE,IAC3B,GAAwB,MAApBA,EAASE,OACT,IACI,MAAMmG,EAAcrG,EAASmF,QAAQjL,IAAI,gBACzC,GAAImM,EAAa,CAGb,MAFkB,CAAC,mBAAoB,4BACdC,MAAKxP,GAAQuP,EAAYhP,cAAc+G,WAAWtH,WAE1DkJ,EAASuG,aAGTvG,EAASwG,MAE1C,CACA,CACQ,MAAO1Q,GACHiG,QAAQjG,MAAMA,EAC1B,CAEoB,EAgCpByG,EAAAkK,gBA7BwB,CAAC5P,EAAS6P,KAC9B,MAUM5Q,EAVS,CACX,IAAK,cACL,IAAK,eACL,IAAK,YACL,IAAK,YACL,IAAK,wBACL,IAAK,cACL,IAAK,yBACFe,EAAQ8P,QAEMD,EAAOxG,QAC5B,GAAIpK,EACA,MAAM,IAAI+J,EAAWC,SAASjJ,EAAS6P,EAAQ5Q,GAEnD,IAAK4Q,EAAOE,GAAI,CACZ,MAAMC,EAAcH,EAAOxG,QAAU,UAC/B4G,EAAkBJ,EAAOvG,YAAc,UACvC4G,EAAY,MACd,IACI,OAAOnP,KAAKC,UAAU6O,EAAOtG,KAAM,KAAM,EACzD,CACY,MAAO4G,GACH,MAChB,CACS,EAPiB,GAQlB,MAAM,IAAInH,EAAWC,SAASjJ,EAAS6P,EAAQ,0BAA0BG,mBAA6BC,YAA0BC,IACxI,GAqCAxK,EAAAwD,QA3BgB,CAACH,EAAQ/I,IACd,IAAIuK,EAAoBC,mBAAkBkD,MAAO5Q,EAAS+N,EAAQC,KACrE,IACI,MAAM1B,EAhMH,EAACL,EAAQ/I,KACpB,MAAMoQ,EAAUrH,EAAOsH,aAAeC,UAChCC,EAAOvQ,EAAQoJ,IAChBjH,QAAQ,gBAAiB4G,EAAOyH,SAChCrO,QAAQ,YAAY,CAAC4B,EAAW0M,IAC7BzQ,EAAQuQ,MAAMG,eAAeD,GACtBL,EAAQhQ,OAAOJ,EAAQuQ,KAAKE,KAEhC1M,IAELqF,EAAM,GAAGL,EAAO4H,OAAOJ,IAC7B,OAAIvQ,EAAQ4Q,MACD,GAAGxH,KAAM,EAAI1D,EAAQsG,gBAAgBhM,EAAQ4Q,SAEjDxH,CAAG,EAkLUyH,CAAO9H,EAAQ/I,GACrBuN,GAAW,EAAI7H,EAAQqG,aAAa/L,GACpCuJ,GAAO,EAAI7D,EAAQoG,gBAAgB9L,GACnCsO,QAAgB,EAAI5I,EAAQkI,YAAY7E,EAAQ/I,GACtD,IAAK8K,EAASJ,YAAa,CACvB,MAAMvB,QAAiB,EAAIzD,EAAQmG,aAAa9C,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,GACzFgG,QAAqB,EAAIpL,EAAQiG,iBAAiBxC,GAClDmG,GAAiB,EAAI5J,EAAQkG,mBAAmBzC,EAAUnJ,EAAQsP,gBAClEO,EAAS,CACXzG,MACA2G,GAAI5G,EAAS4G,GACb1G,OAAQF,EAASE,OACjBC,WAAYH,EAASG,WACrBC,KAAM+F,GAAkBwB,IAE5B,EAAIpL,EAAQkK,iBAAiB5P,EAAS6P,GACtC/S,EAAQ+S,EAAOtG,KAC/B,CACA,CACQ,MAAOtK,GACH4L,EAAO5L,EACnB,UCjSAgE,OAAOC,eAAe6N,GAAS,aAAc,CAAElI,OAAO,IAC9BkI,GAAAC,sBAAG,EAC3B,MAAMpI,GAAoB3D,GACpBgM,GAAY3E,GAClB,IAAAgK,GAAA,cAA+B1N,GAAkBE,gBAC7C,WAAA5L,CAAY6L,GACR1L,MAAM0L,EACd,CAOI,OAAAG,CAAQlJ,GACJ,OAAO,EAAIiR,GAAU/H,SAAS5L,KAAKyL,OAAQ/I,EACnD,GAEA+Q,GAAAC,iBAA2BA,aClB3B/N,OAAOC,eAAeiO,GAAS,aAAc,CAAEtI,OAAO,IAC/BsI,GAAAC,qBAAG,EA0c1BD,GAAAC,gBAzcA,MACI,WAAAlU,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAOI,cAAAkF,CAAe/E,GACX,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,cACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,wBAGrB,CASI,aAAA0G,CAAc7D,EAAgB8D,EAAW,IACrC,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,cACLwH,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhB3G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,YAAA4G,CAAaC,GACT,OAAOrZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,4BACLmH,KAAM,CACFoG,YAAeA,GAEnB7G,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAaI,uBAAA8G,CAAwBD,EAAahE,EAAgB8D,EAAW,IAC5D,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,qCACLmH,KAAM,CACFoG,YAAeA,GAEnB/F,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhB3G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAWI,aAAA+G,CAAcF,EAAa/E,EAAU,GACjC,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,iCACLmH,KAAM,CACFoG,YAAeA,GAEnB/F,MAAO,CACHgB,QAAWA,GAEf9B,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,sBACL,IAAK,uBAGrB,CAaI,eAAAgH,CAAgBH,EAAa/E,EAAU,GACnC,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,mCACLmH,KAAM,CACFoG,YAAeA,GAEnB/F,MAAO,CACHgB,QAAWA,GAEf9B,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,sDACL,IAAK,sBACL,IAAK,uBAGrB,CAgBI,kBAAAiH,CAAmBnF,EAAU,EAAGe,EAAgBd,EAAY,GAAIQ,GAC5D,OAAO/U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mBACLwH,MAAO,CACHgB,QAAWA,EACXe,eAAkBA,EAClBd,UAAaA,EACbQ,aAAgBA,GAEpBvC,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,YAAAkH,CAAaxF,GACT,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,YACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,wBAGrB,CASI,WAAAmH,CAAYtE,EAAgB8D,EAAW,IACnC,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,YACLwH,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhB3G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,UAAAoH,CAAWC,GACP,OAAO7Z,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,wBACLmH,KAAM,CACF4G,UAAaA,GAEjBrH,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAaI,qBAAAsH,CAAsBD,EAAWxE,EAAgB8D,EAAW,IACxD,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,iCACLmH,KAAM,CACF4G,UAAaA,GAEjBvG,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhB3G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAWI,WAAAuH,CAAYF,EAAWvF,EAAU,GAC7B,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,6BACLmH,KAAM,CACF4G,UAAaA,GAEjBvG,MAAO,CACHgB,QAAWA,GAEf9B,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,sBACL,IAAK,uBAGrB,CAWI,aAAAwH,CAAcH,EAAWvF,EAAU,GAC/B,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,+BACLmH,KAAM,CACF4G,UAAaA,GAEjBvG,MAAO,CACHgB,QAAWA,GAEf9B,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,mDACL,IAAK,sBACL,IAAK,uBAGrB,CAgBI,gBAAAyH,CAAiB3F,EAAU,EAAGe,EAAgBd,EAAY,GAAIQ,GAC1D,OAAO/U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,iBACLwH,MAAO,CACHgB,QAAWA,EACXe,eAAkBA,EAClBd,UAAaA,EACbQ,aAAgBA,GAEpBvC,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAMI,mBAAA0H,GACI,OAAOla,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,oBACL0G,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAgBI,WAAA2H,CAAY7F,EAAU,EAAGe,EAAgBd,EAAY,GAAIQ,EAAcqF,EAASC,GAC5E,OAAOra,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,YACLwH,MAAO,CACHgB,QAAWA,EACXe,eAAkBA,EAClBd,UAAaA,EACbQ,aAAgBA,EAChBqF,QAAWA,EACXC,OAAUA,GAEd7H,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,UAAA8H,CAAWC,GACP,OAAOva,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,wBACLmH,KAAM,CACFsH,UAAaA,GAEjB/H,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAUI,cAAAgI,CAAeJ,EAASC,GACpB,OAAOra,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mBACLwH,MAAO,CACH8G,QAAWA,EACXC,OAAUA,GAEd7H,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,aCzcA7M,OAAOC,eAAe8P,GAAS,aAAc,CAAEnK,OAAO,IAC9BmK,GAAAC,sBAAG,EA4lB3BD,GAAAC,iBA3lBA,MACI,WAAA/V,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CASI,aAAAmF,CAAc7D,EAAgB8D,EAAW,IACrC,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,cACLwH,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhB3G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,YAAA4G,CAAaC,GACT,OAAOrZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,4BACLmH,KAAM,CACFoG,YAAeA,GAEnB7G,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAaI,uBAAA8G,CAAwBD,EAAahE,EAAgB8D,EAAW,IAC5D,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,qCACLmH,KAAM,CACFoG,YAAeA,GAEnB/F,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhB3G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAgBI,kBAAAiH,CAAmBnF,EAAU,EAAGe,EAAgBd,EAAY,GAAIQ,GAC5D,OAAO/U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mBACLwH,MAAO,CACHgB,QAAWA,EACXe,eAAkBA,EAClBd,UAAaA,EACbQ,aAAgBA,GAEpBvC,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,YAAAkH,CAAaxF,GACT,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,YACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,wBAGrB,CASI,WAAAmH,CAAYtE,EAAgB8D,EAAW,IACnC,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,YACLwH,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhB3G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,UAAAoH,CAAWC,GACP,OAAO7Z,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,wBACLmH,KAAM,CACF4G,UAAaA,GAEjBrH,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAaI,qBAAAsH,CAAsBD,EAAWxE,EAAgB8D,EAAW,IACxD,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,iCACLmH,KAAM,CACF4G,UAAaA,GAEjBvG,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhB3G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAgBI,gBAAAyH,CAAiB3F,EAAU,EAAGe,EAAgBd,EAAY,GAAIQ,GAC1D,OAAO/U,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,iBACLwH,MAAO,CACHgB,QAAWA,EACXe,eAAkBA,EAClBd,UAAaA,EACbQ,aAAgBA,GAEpBvC,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAgBI,eAAAiI,CAAgBpB,EAAanF,EAAaI,EAAU,GAChD,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,mCACLmH,KAAM,CACFoG,YAAeA,GAEnB/F,MAAO,CACHgB,QAAWA,GAEfrI,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,8CACL,IAAK,sBACL,IAAK,uBAGrB,CAkBI,eAAAkI,CAAgBrB,EAAanF,EAAaI,EAAU,GAChD,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,mCACLmH,KAAM,CACFoG,YAAeA,GAEnB/F,MAAO,CACHgB,QAAWA,GAEfrI,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,8CACL,IAAK,sBACL,IAAK,uBAGrB,CAgBI,aAAAmI,CAAcd,EAAW3F,EAAaI,EAAU,GAC5C,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,+BACLmH,KAAM,CACF4G,UAAaA,GAEjBvG,MAAO,CACHgB,QAAWA,GAEfrI,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,8CACL,IAAK,sBACL,IAAK,uBAGrB,CAkBI,aAAAoI,CAAcf,EAAW3F,EAAaI,EAAU,GAC5C,OAAOtU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,+BACLmH,KAAM,CACF4G,UAAaA,GAEjBvG,MAAO,CACHgB,QAAWA,GAEfrI,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,8CACL,IAAK,sBACL,IAAK,uBAGrB,CAWI,gBAAAqI,CAAiB3G,EAAamB,EAAgB8D,EAAW,IACrD,OAAOnZ,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,eACLwH,MAAO,CACH+B,eAAkBA,EAClB8D,SAAYA,GAEhBlN,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,wBAGrB,CAMI,cAAAsI,GACI,OAAO9a,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,eACL0G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,aAAAuI,CAAcC,GACV,OAAOhb,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,8BACLmH,KAAM,CACF+H,aAAgBA,GAEpBxI,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAQI,eAAAyI,CAAgBD,EAAc9G,GAC1B,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,8BACLmH,KAAM,CACF+H,aAAgBA,GAEpB/O,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAaI,iBAAA0I,CAAkBF,GACd,OAAOhb,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,SACR5F,IAAK,8BACLmH,KAAM,CACF+H,aAAgBA,GAEpBxI,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,cACL,IAAK,wBAGrB,CAgBI,WAAA2H,CAAY7F,EAAU,EAAGe,EAAgBd,EAAY,GAAIQ,EAAcqF,EAASC,GAC5E,OAAOra,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,YACLwH,MAAO,CACHgB,QAAWA,EACXe,eAAkBA,EAClBd,UAAaA,EACbQ,aAAgBA,EAChBqF,QAAWA,EACXC,OAAUA,GAEd7H,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CAOI,UAAA8H,CAAWC,GACP,OAAOva,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,wBACLmH,KAAM,CACFsH,UAAaA,GAEjB/H,OAAQ,CACJ,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAUI,cAAAgI,CAAeJ,EAASC,GACpB,OAAOra,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mBACLwH,MAAO,CACH8G,QAAWA,EACXC,OAAUA,GAEd7H,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,8CACL,IAAK,wBAGrB,CAMI,oBAAA2I,GACI,OAAOnb,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,qBACL0G,OAAQ,CACJ,IAAK,yDACL,IAAK,wBAGrB,CASI,oBAAA4I,CAAqBC,GACjB,OAAOrb,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,qBACLwH,MAAO,CACH+H,cAAiBA,GAErB7I,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,wBAGrB,GC3lBA7M,OAAOC,eAAegR,GAAS,aAAc,CAAErL,OAAO,IACxCqL,GAAAC,YAAG,EACjB,MAAMpD,GAAqB9L,GACrBkM,GAAoB7E,GACpB0G,GAAqBoB,GAkB3BF,GAAAC,OAjBA,MACI,WAAAjX,CAAY6L,EAAQsL,EAActD,GAAmBC,kBACjD1T,KAAK4L,QAAU,IAAImL,EAAY,CAC3B1D,KAAM5H,GAAQ4H,MAAQ,kBACtBH,QAASzH,GAAQyH,SAAW,QAC5BtB,iBAAkBnG,GAAQmG,mBAAoB,EAC9CC,YAAapG,GAAQoG,aAAe,UACpCjB,MAAOnF,GAAQmF,MACfC,SAAUpF,GAAQoF,SAClBC,SAAUrF,GAAQqF,SAClBC,QAAStF,GAAQsF,QACjBgC,YAAatH,GAAQsH,cAEzB/S,KAAKgX,SAAW,IAAInD,GAAkBC,gBAAgB9T,KAAK4L,SAC3D5L,KAAKiX,UAAY,IAAIvB,GAAmBC,iBAAiB3V,KAAK4L,QACtE,aCpBAjG,OAAOC,eAAesR,GAAS,aAAc,CAAE3L,OAAO,IACvC2L,GAAAA,aAAG,EAClBA,GAAAA,QAAkB,CACd7D,KAAM,kBACNH,QAAS,QACTtB,kBAAkB,EAClBC,YAAa,UACbjB,WAAOQ,EACPP,cAAUO,EACVN,cAAUM,EACVL,aAASK,EACT2B,iBAAa3B,eCXjBzL,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAA2BsL,iBAAAtL,EAAAuN,iBAA2BvN,kBAA0BA,EAAkB8O,QAAA9O,EAAA+E,YAAsB/E,oBAA4BA,EAA0BoD,gBAAApD,EAAAuD,SAAmBvD,EAAiByO,YAAA,EAKlN,IAAID,EAAWjP,GACfhC,OAAOC,eAAewC,EAAS,SAAU,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO6Q,EAASC,MAAS,IACzG,IAAInL,EAAasD,GACjBrJ,OAAOC,eAAewC,EAAS,WAAY,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2F,EAAWC,QAAW,IAC/G,IAAIL,EAAoBwL,GACxBnR,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOuF,EAAkBE,eAAkB,IACpI,IAAIyB,EAAsBkK,GAC1BxR,OAAOC,eAAewC,EAAS,oBAAqB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBC,iBAAoB,IAC1IvH,OAAOC,eAAewC,EAAS,cAAe,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBE,WAAc,IAC9H,IAAIiK,EAAYC,GAChB1R,OAAOC,eAAewC,EAAS,UAAW,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOqR,EAAUF,OAAU,IAC5G,IAAIrD,EAAoByD,GACxB3R,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO8N,EAAkBC,eAAkB,IACpI,IAAI4B,EAAqB6B,GACzB5R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2P,EAAmBC,gBAAmB,IACvI,IAAIlC,EAAqB+D,GACzB7R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0N,EAAmBC,gBAAiB,qCCtBrI/N,OAAOC,eAAe0F,GAAS,aAAc,CAAEC,OAAO,IAC/BD,GAAAE,qBAAG,EAM1BF,GAAAE,gBALA,MACI,WAAA5L,CAAY6L,GACRzL,KAAKyL,OAASA,CACtB,mBCLA9F,OAAOC,eAAe8F,GAAS,aAAc,CAAEH,OAAO,IACtCG,GAAAC,cAAG,SACnB,cAAuBhM,MACnB,WAAAC,CAAYgM,EAASC,EAAUhM,GAC3BE,MAAMF,GACNG,KAAKkB,KAAO,WACZlB,KAAK8L,IAAMD,EAASC,IACpB9L,KAAK+L,OAASF,EAASE,OACvB/L,KAAKgM,WAAaH,EAASG,WAC3BhM,KAAKiM,KAAOJ,EAASI,KACrBjM,KAAK4L,QAAUA,CACvB,GAEAF,GAAAC,SAAmBA,OCFfO,GAA+BC,GAA+BC,GAAgCC,GAAmCC,GAA4BC,GAA4BC,SAXzLC,GAA0BzM,GAAQA,EAAKyM,wBAA2B,SAAUC,EAAUC,EAAOpB,EAAOqB,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAE5H,KAAKyH,EAAUnB,GAASsB,EAAIA,EAAEtB,MAAQA,EAAQoB,EAAM1G,IAAIyG,EAAUnB,GAASA,CACxG,EACIyB,GAA0BhN,GAAQA,EAAKgN,wBAA2B,SAAUN,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAE5H,KAAKyH,GAAYG,EAAIA,EAAEtB,MAAQoB,EAAM5G,IAAI2G,EACxF,EAEA/G,OAAOC,eAAeqH,GAAS,aAAc,CAAE1B,OAAO,IACtD0B,GAAAC,kBAA4BD,GAAAE,iBAAsB,SAKlD,cAA0BxN,MACtB,WAAAC,CAAYC,GACRE,MAAMF,GACNG,KAAKkB,KAAO,aACpB,CACI,eAAIkM,GACA,OAAO,CACf,GAEAH,GAAAE,YAAsBA,GACtB,IAAAmO,GAAA,MACI,WAAA1b,CAAY0N,GACRpB,GAA8BjG,IAAIjG,UAAM,GACxCmM,GAA8BlG,IAAIjG,UAAM,GACxCoM,GAA+BnG,IAAIjG,UAAM,GACzCqM,GAAkCpG,IAAIjG,UAAM,GAC5CsM,GAA2BrG,IAAIjG,UAAM,GACrCuM,GAA2BtG,IAAIjG,UAAM,GACrCwM,GAA0BvG,IAAIjG,UAAM,GACpCyM,GAAuBzM,KAAMkM,IAA+B,EAAO,KACnEO,GAAuBzM,KAAMmM,IAA+B,EAAO,KACnEM,GAAuBzM,KAAMoM,IAAgC,EAAO,KACpEK,GAAuBzM,KAAMqM,GAAmC,GAAI,KACpEI,GAAuBzM,KAAMsM,GAA4B,IAAI/M,SAAQ,CAACC,EAAS+N,KAC3Ed,GAAuBzM,KAAMuM,GAA4B/M,EAAS,KAClEiN,GAAuBzM,KAAMwM,GAA2Be,EAAQ,KAChE,MAgBMC,EAAYC,IACVT,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAGzMY,GAAuBhN,KAAMqM,GAAmC,KAAK/E,KAAKmG,EAAc,EAW5F,OATA9H,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMkM,GAA+B,OAE3EvG,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMmM,GAA+B,OAE3ExG,OAAOC,eAAe4H,EAAU,cAAe,CAC3CzH,IAAK,IAAMiH,GAAuBhN,KAAMoM,GAAgC,OAErEkB,GA/BY/B,IACXyB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMkM,IAA+B,EAAM,KAC9Dc,GAAuBhN,KAAMuM,GAA4B,MACzDS,GAAuBhN,KAAMuM,GAA4B,KAAKtH,KAAKjF,KAAMuL,GAAM,IAErEmC,IACVV,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMmM,IAA+B,EAAM,KAC9Da,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM0N,GAAO,GAiBlDF,EAAS,IAC9C,IACZ,CACI,KAAMtB,GAAgC,IAAIyB,QAAWxB,GAAgC,IAAIwB,QAAWvB,GAAiC,IAAIuB,QAAWtB,GAAoC,IAAIsB,QAAWrB,GAA6B,IAAIqB,QAAWpB,GAA6B,IAAIoB,QAAWnB,GAA4B,IAAImB,QAAWC,OAAOC,gBAC7U,MAAO,qBACf,CACI,IAAAC,CAAKC,EAAaC,GACd,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAKwB,KAAKC,EAAaC,EAC/F,CACI,MAAMA,GACF,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAK2B,MAAMD,EACnF,CACI,QAAQE,GACJ,OAAOlB,GAAuBhN,KAAMsM,GAA4B,KAAK6B,QAAQD,EACrF,CACI,MAAAE,GACI,KAAIpB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAAzM,CAIA,GADAK,GAAuBzM,KAAMoM,IAAgC,EAAM,KAC/DY,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OACrE,IACI,IAAK,MAAM6K,KAAiBT,GAAuBhN,KAAMqM,GAAmC,KACxFoB,GAEpB,CACY,MAAO9L,GAEH,YADAiG,QAAQlG,KAAK,8BAA+BC,EAE5D,CAEQqL,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OAAS,EAC1EoK,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM,IAAImN,GAAY,mBAfpG,CAgBA,CACI,eAAIC,GACA,OAAOJ,GAAuBhN,KAAMoM,GAAgC,IAC5E,GAEAa,GAAAC,kBAA4BA,eClH5BvH,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAwD,QAAkBxD,kBAA0BA,EAA0BiG,gBAAAjG,EAAAkG,kBAA4BlG,EAAsBmG,YAAAnG,EAAAoG,eAAyBpG,aAAqBA,EAAkB5I,QAAA4I,EAAAqG,YAAsBrG,EAAyBsG,eAAAtG,EAAAuG,OAAiBvG,aAAqBA,EAAiBwG,OAAAxG,EAAAyG,kBAA4BzG,EAAmB0G,SAAA1G,EAAA2G,eAAoB,EAKjW,MAAMrD,EAAa/D,GACbsF,EAAsB+B,GAI5B5G,EAAA2G,UAHmBxD,GACRA,QAMXnD,EAAA0G,SAHkBvD,GACU,iBAAVA,EAMlBnD,EAAAyG,kBAH2BtD,IAChB,EAAInD,EAAQ0G,UAAUvD,IAAoB,KAAVA,EAa3CnD,EAAAwG,OAVgBrD,GACa,iBAAVA,GACW,iBAAfA,EAAM5I,MACW,mBAAjB4I,EAAM0D,QACgB,mBAAtB1D,EAAM2D,aACgB,mBAAtB3D,EAAM3L,aACqB,iBAA3B2L,EAAM3L,YAAYsB,MACzB,gBAAgBuG,KAAK8D,EAAM3L,YAAYsB,OACvC,gBAAgBuG,KAAK8D,EAAMqC,OAAOC,cAM1CzF,EAAA+G,WAHoB5D,GACTA,aAAiB6D,SAY5BhH,EAAAuG,OATgB9L,IACZ,IACI,OAAOwM,KAAKxM,EACpB,CACI,MAAOyM,GAEH,OAAOC,GAAOC,KAAK3M,GAAK2D,SAAS,SACzC,GAiCA4B,EAAAsG,eA9BwBe,IACpB,MAAMC,EAAK,GAIL7O,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ2G,WAAWxD,KACnBoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,IACVrF,EAAQkH,EAAK7B,EAAE,IAGG,iBAAVqF,EACZ5F,OAAOkK,QAAQtE,GAAOzD,SAAQ,EAAEgI,EAAG5J,MAC/BrF,EAAQ,GAAGkH,KAAO+H,KAAM5J,EAAE,IAZ3B,EAAC6B,EAAKwD,KACjBmE,EAAGpI,KAAK,GAAGyI,mBAAmBhI,MAAQgI,mBAAmBjN,OAAOyI,MAAU,EAelEyE,CAAOjI,EAAKwD,GAE5B,EAKI,OAHA5F,OAAOkK,QAAQJ,GAAQ3H,SAAQ,EAAEC,EAAKwD,MAClC1K,EAAQkH,EAAKwD,EAAM,IAEnBmE,EAAG9M,OAAS,EACL,IAAI8M,EAAG1I,KAAK,OAEhB,EAAE,EA4CboB,EAAAqG,YAzBqB/L,IACjB,GAAIA,EAAQuN,SAAU,CAClB,MAAMA,EAAW,IAAIb,SACfvO,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ0G,UAAUvD,KAAU,EAAInD,EAAQwG,QAAQrD,GACpD0E,EAASD,OAAOjI,EAAKwD,GAGrB0E,EAASD,OAAOjI,EAAKtE,KAAKC,UAAU6H,GACpD,EAYQ,OAVA5F,OAAOkK,QAAQnN,EAAQuN,UAClBC,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9CzD,SAAQ,EAAEC,EAAKwD,MACZoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,GAAKrF,EAAQkH,EAAK7B,KAGhCrF,EAAQkH,EAAKwD,EAC7B,IAEe0E,CACf,CACoB,EASpB7H,EAAA5I,QANgB4Q,MAAO1N,EAAS2N,IACJ,mBAAbA,EACAA,EAAS3N,GAEb2N,EA2CXjI,EAAAkI,WAxCmBF,MAAO3E,EAAQ/I,KAC9B,MAAO6N,EAAOC,EAAUC,EAAUC,SAA2BnR,QAAQoR,IAAI,EACrE,EAAIvI,EAAQ5I,SAASkD,EAAS+I,EAAOmF,QACrC,EAAIxI,EAAQ5I,SAASkD,EAAS+I,EAAOoF,WACrC,EAAIzI,EAAQ5I,SAASkD,EAAS+I,EAAOqF,WACrC,EAAI1I,EAAQ5I,SAASkD,EAAS+I,EAAOsF,WAEnCC,EAAUrL,OAAOkK,QAAQ,CAC3BoB,OAAQ,sBACLP,KACAhO,EAAQsO,UAEVd,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9C2F,QAAO,CAACF,GAAUjJ,EAAKwD,MAAY,IACjCyF,EACHjJ,CAACA,GAAMjF,OAAOyI,MACd,CAAA,GAIJ,IAHI,EAAInD,EAAQyG,mBAAmB0B,KAC/BS,EAAuB,cAAI,UAAUT,MAErC,EAAInI,EAAQyG,mBAAmB2B,KAAa,EAAIpI,EAAQyG,mBAAmB4B,GAAW,CACtF,MAAMU,GAAc,EAAI/I,EAAQuG,QAAQ,GAAG6B,KAAYC,KACvDO,EAAuB,cAAI,SAASG,GAC5C,CAeI,YAdqBC,IAAjB1O,EAAQuJ,OACJvJ,EAAQ2O,UACRL,EAAQ,gBAAkBtO,EAAQ2O,WAE7B,EAAIjJ,EAAQwG,QAAQlM,EAAQuJ,MACjC+E,EAAQ,gBAAkBtO,EAAQuJ,KAAKtJ,MAAQ,4BAE1C,EAAIyF,EAAQ0G,UAAUpM,EAAQuJ,MACnC+E,EAAQ,gBAAkB,cAEpB,EAAI5I,EAAQ+G,YAAYzM,EAAQuJ,QACtC+E,EAAQ,gBAAkB,qBAG3B,IAAIM,QAAQN,EAAQ,EAiB/B5I,EAAAoG,eAdwB9L,IACpB,QAAqB0O,IAAjB1O,EAAQuJ,KACR,OAAIvJ,EAAQ2O,WAAWE,SAAS,SACrB9N,KAAKC,UAAUhB,EAAQuJ,OAEzB,EAAI7D,EAAQ0G,UAAUpM,EAAQuJ,QAAS,EAAI7D,EAAQwG,QAAQlM,EAAQuJ,QAAS,EAAI7D,EAAQ+G,YAAYzM,EAAQuJ,MAC1GvJ,EAAQuJ,KAGRxI,KAAKC,UAAUhB,EAAQuJ,KAGtB,EAiBpB7D,EAAAmG,YAdoB6B,MAAO3E,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,KACtE,MAAMgE,EAAa,IAAIC,gBACjB7F,EAAU,CACZoF,UACA/E,KAAMA,GAAQgE,EACdyB,OAAQhP,EAAQgP,OAChBC,OAAQH,EAAWG,QAMvB,OAJIlG,EAAOmG,mBACPhG,EAAQuF,YAAc1F,EAAOoG,aAEjCrE,GAAS,IAAMgE,EAAWM,gBACbC,MAAMjG,EAAKF,EAAQ,EAYpCxD,EAAAkG,kBAT0B,CAACzC,EAAUmG,KACjC,GAAIA,EAAgB,CAChB,MAAMC,EAAUpG,EAASmF,QAAQjL,IAAIiM,GACrC,IAAI,EAAI5J,EAAQ0G,UAAUmD,GACtB,OAAOA,CAEnB,CACoB,EAwBpB7J,EAAAiG,gBArBwB+B,MAAOvE,IAC3B,GAAwB,MAApBA,EAASE,OACT,IACI,MAAMmG,EAAcrG,EAASmF,QAAQjL,IAAI,gBACzC,GAAImM,EAAa,CAGb,MAFkB,CAAC,mBAAoB,4BACdC,MAAKxP,GAAQuP,EAAYhP,cAAc+G,WAAWtH,WAE1DkJ,EAASuG,aAGTvG,EAASwG,MAE1C,CACA,CACQ,MAAO1Q,GACHiG,QAAQjG,MAAMA,EAC1B,CAEoB,EAgCpByG,EAAAkK,gBA7BwB,CAAC5P,EAAS6P,KAC9B,MAUM5Q,EAVS,CACX,IAAK,cACL,IAAK,eACL,IAAK,YACL,IAAK,YACL,IAAK,wBACL,IAAK,cACL,IAAK,yBACFe,EAAQ8P,QAEMD,EAAOxG,QAC5B,GAAIpK,EACA,MAAM,IAAI+J,EAAWC,SAASjJ,EAAS6P,EAAQ5Q,GAEnD,IAAK4Q,EAAOE,GAAI,CACZ,MAAMC,EAAcH,EAAOxG,QAAU,UAC/B4G,EAAkBJ,EAAOvG,YAAc,UACvC4G,EAAY,MACd,IACI,OAAOnP,KAAKC,UAAU6O,EAAOtG,KAAM,KAAM,EACzD,CACY,MAAO4G,GACH,MAChB,CACS,EAPiB,GAQlB,MAAM,IAAInH,EAAWC,SAASjJ,EAAS6P,EAAQ,0BAA0BG,mBAA6BC,YAA0BC,IACxI,GAqCAxK,EAAAwD,QA3BgB,CAACH,EAAQ/I,IACd,IAAIuK,EAAoBC,mBAAkBkD,MAAO5Q,EAAS+N,EAAQC,KACrE,IACI,MAAM1B,EAhMH,EAACL,EAAQ/I,KACpB,MAAMoQ,EAAUrH,EAAOsH,aAAeC,UAChCC,EAAOvQ,EAAQoJ,IAChBjH,QAAQ,gBAAiB4G,EAAOyH,SAChCrO,QAAQ,YAAY,CAAC4B,EAAW0M,IAC7BzQ,EAAQuQ,MAAMG,eAAeD,GACtBL,EAAQhQ,OAAOJ,EAAQuQ,KAAKE,KAEhC1M,IAELqF,EAAM,GAAGL,EAAO4H,OAAOJ,IAC7B,OAAIvQ,EAAQ4Q,MACD,GAAGxH,KAAM,EAAI1D,EAAQsG,gBAAgBhM,EAAQ4Q,SAEjDxH,CAAG,EAkLUyH,CAAO9H,EAAQ/I,GACrBuN,GAAW,EAAI7H,EAAQqG,aAAa/L,GACpCuJ,GAAO,EAAI7D,EAAQoG,gBAAgB9L,GACnCsO,QAAgB,EAAI5I,EAAQkI,YAAY7E,EAAQ/I,GACtD,IAAK8K,EAASJ,YAAa,CACvB,MAAMvB,QAAiB,EAAIzD,EAAQmG,aAAa9C,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,GACzFgG,QAAqB,EAAIpL,EAAQiG,iBAAiBxC,GAClDmG,GAAiB,EAAI5J,EAAQkG,mBAAmBzC,EAAUnJ,EAAQsP,gBAClEO,EAAS,CACXzG,MACA2G,GAAI5G,EAAS4G,GACb1G,OAAQF,EAASE,OACjBC,WAAYH,EAASG,WACrBC,KAAM+F,GAAkBwB,IAE5B,EAAIpL,EAAQkK,iBAAiB5P,EAAS6P,GACtC/S,EAAQ+S,EAAOtG,KAC/B,CACA,CACQ,MAAOtK,GACH4L,EAAO5L,EACnB,UCjSAgE,OAAOC,eAAe6N,GAAS,aAAc,CAAElI,OAAO,IAC9BkI,GAAAC,sBAAG,EAC3B,MAAMpI,GAAoB3D,GACpBgM,GAAY3E,GAClB,IAAAuM,GAAA,cAA+BjQ,GAAkBE,gBAC7C,WAAA5L,CAAY6L,GACR1L,MAAM0L,EACd,CAOI,OAAAG,CAAQlJ,GACJ,OAAO,EAAIiR,GAAU/H,SAAS5L,KAAKyL,OAAQ/I,EACnD,GAEA+Q,GAAAC,iBAA2BA,aClB3B/N,OAAOC,eAAe4V,GAAS,aAAc,CAAEjQ,OAAO,IAChCiQ,GAAAC,oBAAG,EA4BzBD,GAAAC,eA3BA,MACI,WAAA7b,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAQI,UAAA2H,CAAWC,EAAWC,EAAIC,GACtB,OAAO7b,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mCACLmH,KAAM,CACF0I,UAAaA,EACbC,GAAMA,EACNC,KAAQA,GAEZrJ,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,aC3BA7M,OAAOC,eAAe8P,GAAS,aAAc,CAAEnK,OAAO,IAC9BmK,GAAAC,sBAAG,EA+M3BD,GAAAC,iBA9MA,MACI,WAAA/V,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAMI,WAAA+H,GACI,OAAO9b,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,OACL0G,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAOI,aAAAuJ,CAAc7H,GACV,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,OACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAOI,UAAAwJ,CAAWL,GACP,OAAO3b,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,mBACLmH,KAAM,CACF0I,UAAaA,GAEjBnJ,OAAQ,CACJ,IAAK,yDACL,IAAK,mBACL,IAAK,gDAGrB,CAOI,aAAAyJ,CAAcN,GACV,OAAO3b,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,SACR5F,IAAK,mBACLmH,KAAM,CACF0I,UAAaA,GAEjBnJ,OAAQ,CACJ,IAAK,yDACL,IAAK,mBACL,IAAK,gDAGrB,CAOI,YAAA0J,CAAaP,GACT,OAAO3b,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,6BACLmH,KAAM,CACF0I,UAAaA,GAEjBnJ,OAAQ,CACJ,IAAK,yDACL,IAAK,mBACL,IAAK,gDAGrB,CAQI,UAAA2J,CAAWR,EAAWzH,GAClB,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,6BACLmH,KAAM,CACF0I,UAAaA,GAEjB1P,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,oBAGrB,CAOI,QAAA4J,CAAST,GACL,OAAO3b,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,yBACLmH,KAAM,CACF0I,UAAaA,GAEjBnJ,OAAQ,CACJ,IAAK,yDACL,IAAK,mBACL,IAAK,gDAGrB,CAQI,OAAA6J,CAAQV,EAAWzH,GACf,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,yBACLmH,KAAM,CACF0I,UAAaA,GAEjB1P,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,yDACL,IAAK,oBAGrB,CAQI,UAAA8J,CAAWX,EAAWY,GAClB,OAAOvc,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,SACR5F,IAAK,kCACLmH,KAAM,CACF0I,UAAaA,EACbY,OAAUA,GAEd/J,OAAQ,CACJ,IAAK,yDACL,IAAK,mBACL,IAAK,gDAGrB,CAOI,cAAAgK,CAAeb,GACX,OAAO3b,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,uBACLmH,KAAM,CACF0I,UAAaA,GAEjBnJ,OAAQ,CACJ,IAAK,yDACL,IAAK,mBACL,IAAK,gDAGrB,GC9MA7M,OAAOC,eAAegR,GAAS,aAAc,CAAErL,OAAO,IACxCqL,GAAAC,YAAG,EACjB,MAAMpD,GAAqB9L,GACrB6T,GAAmBxM,GACnB0G,GAAqBoB,GAkB3BF,GAAAC,OAjBA,MACI,WAAAjX,CAAY6L,EAAQsL,EAActD,GAAmBC,kBACjD1T,KAAK4L,QAAU,IAAImL,EAAY,CAC3B1D,KAAM5H,GAAQ4H,MAAQ,cACtBH,QAASzH,GAAQyH,SAAW,QAC5BtB,iBAAkBnG,GAAQmG,mBAAoB,EAC9CC,YAAapG,GAAQoG,aAAe,UACpCjB,MAAOnF,GAAQmF,MACfC,SAAUpF,GAAQoF,SAClBC,SAAUrF,GAAQqF,SAClBC,QAAStF,GAAQsF,QACjBgC,YAAatH,GAAQsH,cAEzB/S,KAAK0G,QAAU,IAAI8U,GAAiBC,eAAezb,KAAK4L,SACxD5L,KAAKiX,UAAY,IAAIvB,GAAmBC,iBAAiB3V,KAAK4L,QACtE,aCpBAjG,OAAOC,eAAesR,GAAS,aAAc,CAAE3L,OAAO,IACvC2L,GAAAA,aAAG,EAClBA,GAAAA,QAAkB,CACd7D,KAAM,cACNH,QAAS,QACTtB,kBAAkB,EAClBC,YAAa,UACbjB,WAAOQ,EACPP,cAAUO,EACVN,cAAUM,EACVL,aAASK,EACT2B,iBAAa3B,eCXjBzL,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAA2BsL,iBAAAtL,EAAAuN,iBAA2BvN,iBAAyBA,EAAkB8O,QAAA9O,EAAA+E,YAAsB/E,oBAA4BA,EAA0BoD,gBAAApD,EAAAuD,SAAmBvD,EAAiByO,YAAA,EAKjN,IAAID,EAAWjP,GACfhC,OAAOC,eAAewC,EAAS,SAAU,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO6Q,EAASC,MAAS,IACzG,IAAInL,EAAasD,GACjBrJ,OAAOC,eAAewC,EAAS,WAAY,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2F,EAAWC,QAAW,IAC/G,IAAIL,EAAoBwL,GACxBnR,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOuF,EAAkBE,eAAkB,IACpI,IAAIyB,EAAsBkK,GAC1BxR,OAAOC,eAAewC,EAAS,oBAAqB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBC,iBAAoB,IAC1IvH,OAAOC,eAAewC,EAAS,cAAe,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBE,WAAc,IAC9H,IAAIiK,EAAYC,GAChB1R,OAAOC,eAAewC,EAAS,UAAW,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOqR,EAAUF,OAAU,IAC5G,IAAIsE,EAAmBlE,GACvB3R,OAAOC,eAAewC,EAAS,iBAAkB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOyV,EAAiBC,cAAiB,IACjI,IAAI/F,EAAqB6B,GACzB5R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2P,EAAmBC,gBAAmB,IACvI,IAAIlC,EAAqB+D,GACzB7R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0N,EAAmBC,gBAAiB,qCCtBrI/N,OAAOC,eAAe0F,GAAS,aAAc,CAAEC,OAAO,IAC/BD,GAAAE,qBAAG,EAM1BF,GAAAE,gBALA,MACI,WAAA5L,CAAY6L,GACRzL,KAAKyL,OAASA,CACtB,mBCLA9F,OAAOC,eAAe8F,GAAS,aAAc,CAAEH,OAAO,IACtCG,GAAAC,cAAG,SACnB,cAAuBhM,MACnB,WAAAC,CAAYgM,EAASC,EAAUhM,GAC3BE,MAAMF,GACNG,KAAKkB,KAAO,WACZlB,KAAK8L,IAAMD,EAASC,IACpB9L,KAAK+L,OAASF,EAASE,OACvB/L,KAAKgM,WAAaH,EAASG,WAC3BhM,KAAKiM,KAAOJ,EAASI,KACrBjM,KAAK4L,QAAUA,CACvB,GAEAF,GAAAC,SAAmBA,OCFfO,GAA+BC,GAA+BC,GAAgCC,GAAmCC,GAA4BC,GAA4BC,SAXzLC,GAA0BzM,GAAQA,EAAKyM,wBAA2B,SAAUC,EAAUC,EAAOpB,EAAOqB,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAE5H,KAAKyH,EAAUnB,GAASsB,EAAIA,EAAEtB,MAAQA,EAAQoB,EAAM1G,IAAIyG,EAAUnB,GAASA,CACxG,EACIyB,GAA0BhN,GAAQA,EAAKgN,wBAA2B,SAAUN,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAE5H,KAAKyH,GAAYG,EAAIA,EAAEtB,MAAQoB,EAAM5G,IAAI2G,EACxF,EAEA/G,OAAOC,eAAeqH,GAAS,aAAc,CAAE1B,OAAO,IACtD0B,GAAAC,kBAA4BD,GAAAE,iBAAsB,SAKlD,cAA0BxN,MACtB,WAAAC,CAAYC,GACRE,MAAMF,GACNG,KAAKkB,KAAO,aACpB,CACI,eAAIkM,GACA,OAAO,CACf,GAEAH,GAAAE,YAAsBA,GACtB,IAAAsP,GAAA,MACI,WAAA7c,CAAY0N,GACRpB,GAA8BjG,IAAIjG,UAAM,GACxCmM,GAA8BlG,IAAIjG,UAAM,GACxCoM,GAA+BnG,IAAIjG,UAAM,GACzCqM,GAAkCpG,IAAIjG,UAAM,GAC5CsM,GAA2BrG,IAAIjG,UAAM,GACrCuM,GAA2BtG,IAAIjG,UAAM,GACrCwM,GAA0BvG,IAAIjG,UAAM,GACpCyM,GAAuBzM,KAAMkM,IAA+B,EAAO,KACnEO,GAAuBzM,KAAMmM,IAA+B,EAAO,KACnEM,GAAuBzM,KAAMoM,IAAgC,EAAO,KACpEK,GAAuBzM,KAAMqM,GAAmC,GAAI,KACpEI,GAAuBzM,KAAMsM,GAA4B,IAAI/M,SAAQ,CAACC,EAAS+N,KAC3Ed,GAAuBzM,KAAMuM,GAA4B/M,EAAS,KAClEiN,GAAuBzM,KAAMwM,GAA2Be,EAAQ,KAChE,MAgBMC,EAAYC,IACVT,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAGzMY,GAAuBhN,KAAMqM,GAAmC,KAAK/E,KAAKmG,EAAc,EAW5F,OATA9H,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMkM,GAA+B,OAE3EvG,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMmM,GAA+B,OAE3ExG,OAAOC,eAAe4H,EAAU,cAAe,CAC3CzH,IAAK,IAAMiH,GAAuBhN,KAAMoM,GAAgC,OAErEkB,GA/BY/B,IACXyB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMkM,IAA+B,EAAM,KAC9Dc,GAAuBhN,KAAMuM,GAA4B,MACzDS,GAAuBhN,KAAMuM,GAA4B,KAAKtH,KAAKjF,KAAMuL,GAAM,IAErEmC,IACVV,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMmM,IAA+B,EAAM,KAC9Da,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM0N,GAAO,GAiBlDF,EAAS,IAC9C,IACZ,CACI,KAAMtB,GAAgC,IAAIyB,QAAWxB,GAAgC,IAAIwB,QAAWvB,GAAiC,IAAIuB,QAAWtB,GAAoC,IAAIsB,QAAWrB,GAA6B,IAAIqB,QAAWpB,GAA6B,IAAIoB,QAAWnB,GAA4B,IAAImB,QAAWC,OAAOC,gBAC7U,MAAO,qBACf,CACI,IAAAC,CAAKC,EAAaC,GACd,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAKwB,KAAKC,EAAaC,EAC/F,CACI,MAAMA,GACF,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAK2B,MAAMD,EACnF,CACI,QAAQE,GACJ,OAAOlB,GAAuBhN,KAAMsM,GAA4B,KAAK6B,QAAQD,EACrF,CACI,MAAAE,GACI,KAAIpB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAAzM,CAIA,GADAK,GAAuBzM,KAAMoM,IAAgC,EAAM,KAC/DY,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OACrE,IACI,IAAK,MAAM6K,KAAiBT,GAAuBhN,KAAMqM,GAAmC,KACxFoB,GAEpB,CACY,MAAO9L,GAEH,YADAiG,QAAQlG,KAAK,8BAA+BC,EAE5D,CAEQqL,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OAAS,EAC1EoK,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM,IAAImN,GAAY,mBAfpG,CAgBA,CACI,eAAIC,GACA,OAAOJ,GAAuBhN,KAAMoM,GAAgC,IAC5E,GAEAa,GAAAC,kBAA4BA,eClH5BvH,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAwD,QAAkBxD,kBAA0BA,EAA0BiG,gBAAAjG,EAAAkG,kBAA4BlG,EAAsBmG,YAAAnG,EAAAoG,eAAyBpG,aAAqBA,EAAkB5I,QAAA4I,EAAAqG,YAAsBrG,EAAyBsG,eAAAtG,EAAAuG,OAAiBvG,aAAqBA,EAAiBwG,OAAAxG,EAAAyG,kBAA4BzG,EAAmB0G,SAAA1G,EAAA2G,eAAoB,EAKjW,MAAMrD,EAAa/D,GACbsF,EAAsB+B,GAI5B5G,EAAA2G,UAHmBxD,GACRA,QAMXnD,EAAA0G,SAHkBvD,GACU,iBAAVA,EAMlBnD,EAAAyG,kBAH2BtD,IAChB,EAAInD,EAAQ0G,UAAUvD,IAAoB,KAAVA,EAa3CnD,EAAAwG,OAVgBrD,GACa,iBAAVA,GACW,iBAAfA,EAAM5I,MACW,mBAAjB4I,EAAM0D,QACgB,mBAAtB1D,EAAM2D,aACgB,mBAAtB3D,EAAM3L,aACqB,iBAA3B2L,EAAM3L,YAAYsB,MACzB,gBAAgBuG,KAAK8D,EAAM3L,YAAYsB,OACvC,gBAAgBuG,KAAK8D,EAAMqC,OAAOC,cAM1CzF,EAAA+G,WAHoB5D,GACTA,aAAiB6D,SAY5BhH,EAAAuG,OATgB9L,IACZ,IACI,OAAOwM,KAAKxM,EACpB,CACI,MAAOyM,GAEH,OAAOC,GAAOC,KAAK3M,GAAK2D,SAAS,SACzC,GAiCA4B,EAAAsG,eA9BwBe,IACpB,MAAMC,EAAK,GAIL7O,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ2G,WAAWxD,KACnBoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,IACVrF,EAAQkH,EAAK7B,EAAE,IAGG,iBAAVqF,EACZ5F,OAAOkK,QAAQtE,GAAOzD,SAAQ,EAAEgI,EAAG5J,MAC/BrF,EAAQ,GAAGkH,KAAO+H,KAAM5J,EAAE,IAZ3B,EAAC6B,EAAKwD,KACjBmE,EAAGpI,KAAK,GAAGyI,mBAAmBhI,MAAQgI,mBAAmBjN,OAAOyI,MAAU,EAelEyE,CAAOjI,EAAKwD,GAE5B,EAKI,OAHA5F,OAAOkK,QAAQJ,GAAQ3H,SAAQ,EAAEC,EAAKwD,MAClC1K,EAAQkH,EAAKwD,EAAM,IAEnBmE,EAAG9M,OAAS,EACL,IAAI8M,EAAG1I,KAAK,OAEhB,EAAE,EA4CboB,EAAAqG,YAzBqB/L,IACjB,GAAIA,EAAQuN,SAAU,CAClB,MAAMA,EAAW,IAAIb,SACfvO,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ0G,UAAUvD,KAAU,EAAInD,EAAQwG,QAAQrD,GACpD0E,EAASD,OAAOjI,EAAKwD,GAGrB0E,EAASD,OAAOjI,EAAKtE,KAAKC,UAAU6H,GACpD,EAYQ,OAVA5F,OAAOkK,QAAQnN,EAAQuN,UAClBC,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9CzD,SAAQ,EAAEC,EAAKwD,MACZoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,GAAKrF,EAAQkH,EAAK7B,KAGhCrF,EAAQkH,EAAKwD,EAC7B,IAEe0E,CACf,CACoB,EASpB7H,EAAA5I,QANgB4Q,MAAO1N,EAAS2N,IACJ,mBAAbA,EACAA,EAAS3N,GAEb2N,EA2CXjI,EAAAkI,WAxCmBF,MAAO3E,EAAQ/I,KAC9B,MAAO6N,EAAOC,EAAUC,EAAUC,SAA2BnR,QAAQoR,IAAI,EACrE,EAAIvI,EAAQ5I,SAASkD,EAAS+I,EAAOmF,QACrC,EAAIxI,EAAQ5I,SAASkD,EAAS+I,EAAOoF,WACrC,EAAIzI,EAAQ5I,SAASkD,EAAS+I,EAAOqF,WACrC,EAAI1I,EAAQ5I,SAASkD,EAAS+I,EAAOsF,WAEnCC,EAAUrL,OAAOkK,QAAQ,CAC3BoB,OAAQ,sBACLP,KACAhO,EAAQsO,UAEVd,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9C2F,QAAO,CAACF,GAAUjJ,EAAKwD,MAAY,IACjCyF,EACHjJ,CAACA,GAAMjF,OAAOyI,MACd,CAAA,GAIJ,IAHI,EAAInD,EAAQyG,mBAAmB0B,KAC/BS,EAAuB,cAAI,UAAUT,MAErC,EAAInI,EAAQyG,mBAAmB2B,KAAa,EAAIpI,EAAQyG,mBAAmB4B,GAAW,CACtF,MAAMU,GAAc,EAAI/I,EAAQuG,QAAQ,GAAG6B,KAAYC,KACvDO,EAAuB,cAAI,SAASG,GAC5C,CAeI,YAdqBC,IAAjB1O,EAAQuJ,OACJvJ,EAAQ2O,UACRL,EAAQ,gBAAkBtO,EAAQ2O,WAE7B,EAAIjJ,EAAQwG,QAAQlM,EAAQuJ,MACjC+E,EAAQ,gBAAkBtO,EAAQuJ,KAAKtJ,MAAQ,4BAE1C,EAAIyF,EAAQ0G,UAAUpM,EAAQuJ,MACnC+E,EAAQ,gBAAkB,cAEpB,EAAI5I,EAAQ+G,YAAYzM,EAAQuJ,QACtC+E,EAAQ,gBAAkB,qBAG3B,IAAIM,QAAQN,EAAQ,EAiB/B5I,EAAAoG,eAdwB9L,IACpB,QAAqB0O,IAAjB1O,EAAQuJ,KACR,OAAIvJ,EAAQ2O,WAAWE,SAAS,SACrB9N,KAAKC,UAAUhB,EAAQuJ,OAEzB,EAAI7D,EAAQ0G,UAAUpM,EAAQuJ,QAAS,EAAI7D,EAAQwG,QAAQlM,EAAQuJ,QAAS,EAAI7D,EAAQ+G,YAAYzM,EAAQuJ,MAC1GvJ,EAAQuJ,KAGRxI,KAAKC,UAAUhB,EAAQuJ,KAGtB,EAiBpB7D,EAAAmG,YAdoB6B,MAAO3E,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,KACtE,MAAMgE,EAAa,IAAIC,gBACjB7F,EAAU,CACZoF,UACA/E,KAAMA,GAAQgE,EACdyB,OAAQhP,EAAQgP,OAChBC,OAAQH,EAAWG,QAMvB,OAJIlG,EAAOmG,mBACPhG,EAAQuF,YAAc1F,EAAOoG,aAEjCrE,GAAS,IAAMgE,EAAWM,gBACbC,MAAMjG,EAAKF,EAAQ,EAYpCxD,EAAAkG,kBAT0B,CAACzC,EAAUmG,KACjC,GAAIA,EAAgB,CAChB,MAAMC,EAAUpG,EAASmF,QAAQjL,IAAIiM,GACrC,IAAI,EAAI5J,EAAQ0G,UAAUmD,GACtB,OAAOA,CAEnB,CACoB,EAwBpB7J,EAAAiG,gBArBwB+B,MAAOvE,IAC3B,GAAwB,MAApBA,EAASE,OACT,IACI,MAAMmG,EAAcrG,EAASmF,QAAQjL,IAAI,gBACzC,GAAImM,EAAa,CAGb,MAFkB,CAAC,mBAAoB,4BACdC,MAAKxP,GAAQuP,EAAYhP,cAAc+G,WAAWtH,WAE1DkJ,EAASuG,aAGTvG,EAASwG,MAE1C,CACA,CACQ,MAAO1Q,GACHiG,QAAQjG,MAAMA,EAC1B,CAEoB,EAgCpByG,EAAAkK,gBA7BwB,CAAC5P,EAAS6P,KAC9B,MAUM5Q,EAVS,CACX,IAAK,cACL,IAAK,eACL,IAAK,YACL,IAAK,YACL,IAAK,wBACL,IAAK,cACL,IAAK,yBACFe,EAAQ8P,QAEMD,EAAOxG,QAC5B,GAAIpK,EACA,MAAM,IAAI+J,EAAWC,SAASjJ,EAAS6P,EAAQ5Q,GAEnD,IAAK4Q,EAAOE,GAAI,CACZ,MAAMC,EAAcH,EAAOxG,QAAU,UAC/B4G,EAAkBJ,EAAOvG,YAAc,UACvC4G,EAAY,MACd,IACI,OAAOnP,KAAKC,UAAU6O,EAAOtG,KAAM,KAAM,EACzD,CACY,MAAO4G,GACH,MAChB,CACS,EAPiB,GAQlB,MAAM,IAAInH,EAAWC,SAASjJ,EAAS6P,EAAQ,0BAA0BG,mBAA6BC,YAA0BC,IACxI,GAqCAxK,EAAAwD,QA3BgB,CAACH,EAAQ/I,IACd,IAAIuK,EAAoBC,mBAAkBkD,MAAO5Q,EAAS+N,EAAQC,KACrE,IACI,MAAM1B,EAhMH,EAACL,EAAQ/I,KACpB,MAAMoQ,EAAUrH,EAAOsH,aAAeC,UAChCC,EAAOvQ,EAAQoJ,IAChBjH,QAAQ,gBAAiB4G,EAAOyH,SAChCrO,QAAQ,YAAY,CAAC4B,EAAW0M,IAC7BzQ,EAAQuQ,MAAMG,eAAeD,GACtBL,EAAQhQ,OAAOJ,EAAQuQ,KAAKE,KAEhC1M,IAELqF,EAAM,GAAGL,EAAO4H,OAAOJ,IAC7B,OAAIvQ,EAAQ4Q,MACD,GAAGxH,KAAM,EAAI1D,EAAQsG,gBAAgBhM,EAAQ4Q,SAEjDxH,CAAG,EAkLUyH,CAAO9H,EAAQ/I,GACrBuN,GAAW,EAAI7H,EAAQqG,aAAa/L,GACpCuJ,GAAO,EAAI7D,EAAQoG,gBAAgB9L,GACnCsO,QAAgB,EAAI5I,EAAQkI,YAAY7E,EAAQ/I,GACtD,IAAK8K,EAASJ,YAAa,CACvB,MAAMvB,QAAiB,EAAIzD,EAAQmG,aAAa9C,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,GACzFgG,QAAqB,EAAIpL,EAAQiG,iBAAiBxC,GAClDmG,GAAiB,EAAI5J,EAAQkG,mBAAmBzC,EAAUnJ,EAAQsP,gBAClEO,EAAS,CACXzG,MACA2G,GAAI5G,EAAS4G,GACb1G,OAAQF,EAASE,OACjBC,WAAYH,EAASG,WACrBC,KAAM+F,GAAkBwB,IAE5B,EAAIpL,EAAQkK,iBAAiB5P,EAAS6P,GACtC/S,EAAQ+S,EAAOtG,KAC/B,CACA,CACQ,MAAOtK,GACH4L,EAAO5L,EACnB,UCjSAgE,OAAOC,eAAe6N,GAAS,aAAc,CAAElI,OAAO,IAC9BkI,GAAAC,sBAAG,EAC3B,MAAMpI,GAAoB3D,GACpBgM,GAAY3E,GAClB,IAAA0N,GAAA,cAA+BpR,GAAkBE,gBAC7C,WAAA5L,CAAY6L,GACR1L,MAAM0L,EACd,CAOI,OAAAG,CAAQlJ,GACJ,OAAO,EAAIiR,GAAU/H,SAAS5L,KAAKyL,OAAQ/I,EACnD,GAEA+Q,GAAAC,iBAA2BA,aClB3B/N,OAAOC,eAAe4V,GAAS,aAAc,CAAEjQ,OAAO,IAChCiQ,GAAAC,oBAAG,EA0BzBD,GAAAC,eAzBA,MACI,WAAA7b,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAQI,kBAAA4I,CAAmBC,GACf,OAAO5c,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,yBACLmH,KAAM,CACF2J,WAAcA,GAElBpK,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,aCzBA7M,OAAOC,eAAe8P,GAAS,aAAc,CAAEnK,OAAO,IAC9BmK,GAAAC,sBAAG,EA4C3BD,GAAAC,iBA3CA,MACI,WAAA/V,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAOI,YAAA8I,CAAa3I,GACT,OAAOlU,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,OACR5F,IAAK,YACLG,KAAMiI,EACN7C,UAAW,mBACXmB,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,CAQI,cAAAsK,CAAeF,GACX,OAAO5c,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,SACR5F,IAAK,yBACLmH,KAAM,CACF2J,WAAcA,GAElBpK,OAAQ,CACJ,IAAK,yDACL,IAAK,gDAGrB,GC3CA7M,OAAOC,eAAegR,GAAS,aAAc,CAAErL,OAAO,IACxCqL,GAAAC,YAAG,EACjB,MAAMpD,GAAqB9L,GACrB6T,GAAmBxM,GACnB0G,GAAqBoB,GAkB3BF,GAAAC,OAjBA,MACI,WAAAjX,CAAY6L,EAAQsL,EAActD,GAAmBC,kBACjD1T,KAAK4L,QAAU,IAAImL,EAAY,CAC3B1D,KAAM5H,GAAQ4H,MAAQ,cACtBH,QAASzH,GAAQyH,SAAW,QAC5BtB,iBAAkBnG,GAAQmG,mBAAoB,EAC9CC,YAAapG,GAAQoG,aAAe,UACpCjB,MAAOnF,GAAQmF,MACfC,SAAUpF,GAAQoF,SAClBC,SAAUrF,GAAQqF,SAClBC,QAAStF,GAAQsF,QACjBgC,YAAatH,GAAQsH,cAEzB/S,KAAK0G,QAAU,IAAI8U,GAAiBC,eAAezb,KAAK4L,SACxD5L,KAAKiX,UAAY,IAAIvB,GAAmBC,iBAAiB3V,KAAK4L,QACtE,aCpBAjG,OAAOC,eAAesR,GAAS,aAAc,CAAE3L,OAAO,IACvC2L,GAAAA,aAAG,EAClBA,GAAAA,QAAkB,CACd7D,KAAM,cACNH,QAAS,QACTtB,kBAAkB,EAClBC,YAAa,UACbjB,WAAOQ,EACPP,cAAUO,EACVN,cAAUM,EACVL,aAASK,EACT2B,iBAAa3B,eCXjBzL,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAA2BsL,iBAAAtL,EAAAuN,iBAA2BvN,iBAAyBA,EAAkB8O,QAAA9O,EAAA+E,YAAsB/E,oBAA4BA,EAA0BoD,gBAAApD,EAAAuD,SAAmBvD,EAAiByO,YAAA,EAKjN,IAAID,EAAWjP,GACfhC,OAAOC,eAAewC,EAAS,SAAU,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO6Q,EAASC,MAAS,IACzG,IAAInL,EAAasD,GACjBrJ,OAAOC,eAAewC,EAAS,WAAY,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2F,EAAWC,QAAW,IAC/G,IAAIL,EAAoBwL,GACxBnR,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOuF,EAAkBE,eAAkB,IACpI,IAAIyB,EAAsBkK,GAC1BxR,OAAOC,eAAewC,EAAS,oBAAqB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBC,iBAAoB,IAC1IvH,OAAOC,eAAewC,EAAS,cAAe,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBE,WAAc,IAC9H,IAAIiK,EAAYC,GAChB1R,OAAOC,eAAewC,EAAS,UAAW,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOqR,EAAUF,OAAU,IAC5G,IAAIsE,EAAmBlE,GACvB3R,OAAOC,eAAewC,EAAS,iBAAkB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOyV,EAAiBC,cAAiB,IACjI,IAAI/F,EAAqB6B,GACzB5R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2P,EAAmBC,gBAAmB,IACvI,IAAIlC,EAAqB+D,GACzB7R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0N,EAAmBC,gBAAiB,qCCtBrI/N,OAAOC,eAAe0F,GAAS,aAAc,CAAEC,OAAO,IAC/BD,GAAAE,qBAAG,EAM1BF,GAAAE,gBALA,MACI,WAAA5L,CAAY6L,GACRzL,KAAKyL,OAASA,CACtB,mBCLA9F,OAAOC,eAAe8F,GAAS,aAAc,CAAEH,OAAO,IACtCG,GAAAC,cAAG,SACnB,cAAuBhM,MACnB,WAAAC,CAAYgM,EAASC,EAAUhM,GAC3BE,MAAMF,GACNG,KAAKkB,KAAO,WACZlB,KAAK8L,IAAMD,EAASC,IACpB9L,KAAK+L,OAASF,EAASE,OACvB/L,KAAKgM,WAAaH,EAASG,WAC3BhM,KAAKiM,KAAOJ,EAASI,KACrBjM,KAAK4L,QAAUA,CACvB,GAEAF,GAAAC,SAAmBA,OCFfO,GAA+BC,GAA+BC,GAAgCC,GAAmCC,GAA4BC,GAA4BC,SAXzLC,GAA0BzM,GAAQA,EAAKyM,wBAA2B,SAAUC,EAAUC,EAAOpB,EAAOqB,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAE5H,KAAKyH,EAAUnB,GAASsB,EAAIA,EAAEtB,MAAQA,EAAQoB,EAAM1G,IAAIyG,EAAUnB,GAASA,CACxG,EACIyB,GAA0BhN,GAAQA,EAAKgN,wBAA2B,SAAUN,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAE5H,KAAKyH,GAAYG,EAAIA,EAAEtB,MAAQoB,EAAM5G,IAAI2G,EACxF,EAEA/G,OAAOC,eAAeqH,GAAS,aAAc,CAAE1B,OAAO,IACtD0B,GAAAC,kBAA4BD,GAAAE,iBAAsB,SAKlD,cAA0BxN,MACtB,WAAAC,CAAYC,GACRE,MAAMF,GACNG,KAAKkB,KAAO,aACpB,CACI,eAAIkM,GACA,OAAO,CACf,GAEAH,GAAAE,YAAsBA,GACtB,IAAA4P,GAAA,MACI,WAAAnd,CAAY0N,GACRpB,GAA8BjG,IAAIjG,UAAM,GACxCmM,GAA8BlG,IAAIjG,UAAM,GACxCoM,GAA+BnG,IAAIjG,UAAM,GACzCqM,GAAkCpG,IAAIjG,UAAM,GAC5CsM,GAA2BrG,IAAIjG,UAAM,GACrCuM,GAA2BtG,IAAIjG,UAAM,GACrCwM,GAA0BvG,IAAIjG,UAAM,GACpCyM,GAAuBzM,KAAMkM,IAA+B,EAAO,KACnEO,GAAuBzM,KAAMmM,IAA+B,EAAO,KACnEM,GAAuBzM,KAAMoM,IAAgC,EAAO,KACpEK,GAAuBzM,KAAMqM,GAAmC,GAAI,KACpEI,GAAuBzM,KAAMsM,GAA4B,IAAI/M,SAAQ,CAACC,EAAS+N,KAC3Ed,GAAuBzM,KAAMuM,GAA4B/M,EAAS,KAClEiN,GAAuBzM,KAAMwM,GAA2Be,EAAQ,KAChE,MAgBMC,EAAYC,IACVT,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAGzMY,GAAuBhN,KAAMqM,GAAmC,KAAK/E,KAAKmG,EAAc,EAW5F,OATA9H,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMkM,GAA+B,OAE3EvG,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMmM,GAA+B,OAE3ExG,OAAOC,eAAe4H,EAAU,cAAe,CAC3CzH,IAAK,IAAMiH,GAAuBhN,KAAMoM,GAAgC,OAErEkB,GA/BY/B,IACXyB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMkM,IAA+B,EAAM,KAC9Dc,GAAuBhN,KAAMuM,GAA4B,MACzDS,GAAuBhN,KAAMuM,GAA4B,KAAKtH,KAAKjF,KAAMuL,GAAM,IAErEmC,IACVV,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMmM,IAA+B,EAAM,KAC9Da,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM0N,GAAO,GAiBlDF,EAAS,IAC9C,IACZ,CACI,KAAMtB,GAAgC,IAAIyB,QAAWxB,GAAgC,IAAIwB,QAAWvB,GAAiC,IAAIuB,QAAWtB,GAAoC,IAAIsB,QAAWrB,GAA6B,IAAIqB,QAAWpB,GAA6B,IAAIoB,QAAWnB,GAA4B,IAAImB,QAAWC,OAAOC,gBAC7U,MAAO,qBACf,CACI,IAAAC,CAAKC,EAAaC,GACd,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAKwB,KAAKC,EAAaC,EAC/F,CACI,MAAMA,GACF,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAK2B,MAAMD,EACnF,CACI,QAAQE,GACJ,OAAOlB,GAAuBhN,KAAMsM,GAA4B,KAAK6B,QAAQD,EACrF,CACI,MAAAE,GACI,KAAIpB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAAzM,CAIA,GADAK,GAAuBzM,KAAMoM,IAAgC,EAAM,KAC/DY,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OACrE,IACI,IAAK,MAAM6K,KAAiBT,GAAuBhN,KAAMqM,GAAmC,KACxFoB,GAEpB,CACY,MAAO9L,GAEH,YADAiG,QAAQlG,KAAK,8BAA+BC,EAE5D,CAEQqL,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OAAS,EAC1EoK,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM,IAAImN,GAAY,mBAfpG,CAgBA,CACI,eAAIC,GACA,OAAOJ,GAAuBhN,KAAMoM,GAAgC,IAC5E,GAEAa,GAAAC,kBAA4BA,eClH5BvH,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAwD,QAAkBxD,kBAA0BA,EAA0BiG,gBAAAjG,EAAAkG,kBAA4BlG,EAAsBmG,YAAAnG,EAAAoG,eAAyBpG,aAAqBA,EAAkB5I,QAAA4I,EAAAqG,YAAsBrG,EAAyBsG,eAAAtG,EAAAuG,OAAiBvG,aAAqBA,EAAiBwG,OAAAxG,EAAAyG,kBAA4BzG,EAAmB0G,SAAA1G,EAAA2G,eAAoB,EAKjW,MAAMrD,EAAa/D,GACbsF,EAAsB+B,GAI5B5G,EAAA2G,UAHmBxD,GACRA,QAMXnD,EAAA0G,SAHkBvD,GACU,iBAAVA,EAMlBnD,EAAAyG,kBAH2BtD,IAChB,EAAInD,EAAQ0G,UAAUvD,IAAoB,KAAVA,EAa3CnD,EAAAwG,OAVgBrD,GACa,iBAAVA,GACW,iBAAfA,EAAM5I,MACW,mBAAjB4I,EAAM0D,QACgB,mBAAtB1D,EAAM2D,aACgB,mBAAtB3D,EAAM3L,aACqB,iBAA3B2L,EAAM3L,YAAYsB,MACzB,gBAAgBuG,KAAK8D,EAAM3L,YAAYsB,OACvC,gBAAgBuG,KAAK8D,EAAMqC,OAAOC,cAM1CzF,EAAA+G,WAHoB5D,GACTA,aAAiB6D,SAY5BhH,EAAAuG,OATgB9L,IACZ,IACI,OAAOwM,KAAKxM,EACpB,CACI,MAAOyM,GAEH,OAAOC,GAAOC,KAAK3M,GAAK2D,SAAS,SACzC,GAiCA4B,EAAAsG,eA9BwBe,IACpB,MAAMC,EAAK,GAIL7O,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ2G,WAAWxD,KACnBoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,IACVrF,EAAQkH,EAAK7B,EAAE,IAGG,iBAAVqF,EACZ5F,OAAOkK,QAAQtE,GAAOzD,SAAQ,EAAEgI,EAAG5J,MAC/BrF,EAAQ,GAAGkH,KAAO+H,KAAM5J,EAAE,IAZ3B,EAAC6B,EAAKwD,KACjBmE,EAAGpI,KAAK,GAAGyI,mBAAmBhI,MAAQgI,mBAAmBjN,OAAOyI,MAAU,EAelEyE,CAAOjI,EAAKwD,GAE5B,EAKI,OAHA5F,OAAOkK,QAAQJ,GAAQ3H,SAAQ,EAAEC,EAAKwD,MAClC1K,EAAQkH,EAAKwD,EAAM,IAEnBmE,EAAG9M,OAAS,EACL,IAAI8M,EAAG1I,KAAK,OAEhB,EAAE,EA4CboB,EAAAqG,YAzBqB/L,IACjB,GAAIA,EAAQuN,SAAU,CAClB,MAAMA,EAAW,IAAIb,SACfvO,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ0G,UAAUvD,KAAU,EAAInD,EAAQwG,QAAQrD,GACpD0E,EAASD,OAAOjI,EAAKwD,GAGrB0E,EAASD,OAAOjI,EAAKtE,KAAKC,UAAU6H,GACpD,EAYQ,OAVA5F,OAAOkK,QAAQnN,EAAQuN,UAClBC,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9CzD,SAAQ,EAAEC,EAAKwD,MACZoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,GAAKrF,EAAQkH,EAAK7B,KAGhCrF,EAAQkH,EAAKwD,EAC7B,IAEe0E,CACf,CACoB,EASpB7H,EAAA5I,QANgB4Q,MAAO1N,EAAS2N,IACJ,mBAAbA,EACAA,EAAS3N,GAEb2N,EA2CXjI,EAAAkI,WAxCmBF,MAAO3E,EAAQ/I,KAC9B,MAAO6N,EAAOC,EAAUC,EAAUC,SAA2BnR,QAAQoR,IAAI,EACrE,EAAIvI,EAAQ5I,SAASkD,EAAS+I,EAAOmF,QACrC,EAAIxI,EAAQ5I,SAASkD,EAAS+I,EAAOoF,WACrC,EAAIzI,EAAQ5I,SAASkD,EAAS+I,EAAOqF,WACrC,EAAI1I,EAAQ5I,SAASkD,EAAS+I,EAAOsF,WAEnCC,EAAUrL,OAAOkK,QAAQ,CAC3BoB,OAAQ,sBACLP,KACAhO,EAAQsO,UAEVd,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9C2F,QAAO,CAACF,GAAUjJ,EAAKwD,MAAY,IACjCyF,EACHjJ,CAACA,GAAMjF,OAAOyI,MACd,CAAA,GAIJ,IAHI,EAAInD,EAAQyG,mBAAmB0B,KAC/BS,EAAuB,cAAI,UAAUT,MAErC,EAAInI,EAAQyG,mBAAmB2B,KAAa,EAAIpI,EAAQyG,mBAAmB4B,GAAW,CACtF,MAAMU,GAAc,EAAI/I,EAAQuG,QAAQ,GAAG6B,KAAYC,KACvDO,EAAuB,cAAI,SAASG,GAC5C,CAeI,YAdqBC,IAAjB1O,EAAQuJ,OACJvJ,EAAQ2O,UACRL,EAAQ,gBAAkBtO,EAAQ2O,WAE7B,EAAIjJ,EAAQwG,QAAQlM,EAAQuJ,MACjC+E,EAAQ,gBAAkBtO,EAAQuJ,KAAKtJ,MAAQ,4BAE1C,EAAIyF,EAAQ0G,UAAUpM,EAAQuJ,MACnC+E,EAAQ,gBAAkB,cAEpB,EAAI5I,EAAQ+G,YAAYzM,EAAQuJ,QACtC+E,EAAQ,gBAAkB,qBAG3B,IAAIM,QAAQN,EAAQ,EAiB/B5I,EAAAoG,eAdwB9L,IACpB,QAAqB0O,IAAjB1O,EAAQuJ,KACR,OAAIvJ,EAAQ2O,WAAWE,SAAS,SACrB9N,KAAKC,UAAUhB,EAAQuJ,OAEzB,EAAI7D,EAAQ0G,UAAUpM,EAAQuJ,QAAS,EAAI7D,EAAQwG,QAAQlM,EAAQuJ,QAAS,EAAI7D,EAAQ+G,YAAYzM,EAAQuJ,MAC1GvJ,EAAQuJ,KAGRxI,KAAKC,UAAUhB,EAAQuJ,KAGtB,EAiBpB7D,EAAAmG,YAdoB6B,MAAO3E,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,KACtE,MAAMgE,EAAa,IAAIC,gBACjB7F,EAAU,CACZoF,UACA/E,KAAMA,GAAQgE,EACdyB,OAAQhP,EAAQgP,OAChBC,OAAQH,EAAWG,QAMvB,OAJIlG,EAAOmG,mBACPhG,EAAQuF,YAAc1F,EAAOoG,aAEjCrE,GAAS,IAAMgE,EAAWM,gBACbC,MAAMjG,EAAKF,EAAQ,EAYpCxD,EAAAkG,kBAT0B,CAACzC,EAAUmG,KACjC,GAAIA,EAAgB,CAChB,MAAMC,EAAUpG,EAASmF,QAAQjL,IAAIiM,GACrC,IAAI,EAAI5J,EAAQ0G,UAAUmD,GACtB,OAAOA,CAEnB,CACoB,EAwBpB7J,EAAAiG,gBArBwB+B,MAAOvE,IAC3B,GAAwB,MAApBA,EAASE,OACT,IACI,MAAMmG,EAAcrG,EAASmF,QAAQjL,IAAI,gBACzC,GAAImM,EAAa,CAGb,MAFkB,CAAC,mBAAoB,4BACdC,MAAKxP,GAAQuP,EAAYhP,cAAc+G,WAAWtH,WAE1DkJ,EAASuG,aAGTvG,EAASwG,MAE1C,CACA,CACQ,MAAO1Q,GACHiG,QAAQjG,MAAMA,EAC1B,CAEoB,EAgCpByG,EAAAkK,gBA7BwB,CAAC5P,EAAS6P,KAC9B,MAUM5Q,EAVS,CACX,IAAK,cACL,IAAK,eACL,IAAK,YACL,IAAK,YACL,IAAK,wBACL,IAAK,cACL,IAAK,yBACFe,EAAQ8P,QAEMD,EAAOxG,QAC5B,GAAIpK,EACA,MAAM,IAAI+J,EAAWC,SAASjJ,EAAS6P,EAAQ5Q,GAEnD,IAAK4Q,EAAOE,GAAI,CACZ,MAAMC,EAAcH,EAAOxG,QAAU,UAC/B4G,EAAkBJ,EAAOvG,YAAc,UACvC4G,EAAY,MACd,IACI,OAAOnP,KAAKC,UAAU6O,EAAOtG,KAAM,KAAM,EACzD,CACY,MAAO4G,GACH,MAChB,CACS,EAPiB,GAQlB,MAAM,IAAInH,EAAWC,SAASjJ,EAAS6P,EAAQ,0BAA0BG,mBAA6BC,YAA0BC,IACxI,GAqCAxK,EAAAwD,QA3BgB,CAACH,EAAQ/I,IACd,IAAIuK,EAAoBC,mBAAkBkD,MAAO5Q,EAAS+N,EAAQC,KACrE,IACI,MAAM1B,EAhMH,EAACL,EAAQ/I,KACpB,MAAMoQ,EAAUrH,EAAOsH,aAAeC,UAChCC,EAAOvQ,EAAQoJ,IAChBjH,QAAQ,gBAAiB4G,EAAOyH,SAChCrO,QAAQ,YAAY,CAAC4B,EAAW0M,IAC7BzQ,EAAQuQ,MAAMG,eAAeD,GACtBL,EAAQhQ,OAAOJ,EAAQuQ,KAAKE,KAEhC1M,IAELqF,EAAM,GAAGL,EAAO4H,OAAOJ,IAC7B,OAAIvQ,EAAQ4Q,MACD,GAAGxH,KAAM,EAAI1D,EAAQsG,gBAAgBhM,EAAQ4Q,SAEjDxH,CAAG,EAkLUyH,CAAO9H,EAAQ/I,GACrBuN,GAAW,EAAI7H,EAAQqG,aAAa/L,GACpCuJ,GAAO,EAAI7D,EAAQoG,gBAAgB9L,GACnCsO,QAAgB,EAAI5I,EAAQkI,YAAY7E,EAAQ/I,GACtD,IAAK8K,EAASJ,YAAa,CACvB,MAAMvB,QAAiB,EAAIzD,EAAQmG,aAAa9C,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,GACzFgG,QAAqB,EAAIpL,EAAQiG,iBAAiBxC,GAClDmG,GAAiB,EAAI5J,EAAQkG,mBAAmBzC,EAAUnJ,EAAQsP,gBAClEO,EAAS,CACXzG,MACA2G,GAAI5G,EAAS4G,GACb1G,OAAQF,EAASE,OACjBC,WAAYH,EAASG,WACrBC,KAAM+F,GAAkBwB,IAE5B,EAAIpL,EAAQkK,iBAAiB5P,EAAS6P,GACtC/S,EAAQ+S,EAAOtG,KAC/B,CACA,CACQ,MAAOtK,GACH4L,EAAO5L,EACnB,UCjSAgE,OAAOC,eAAe6N,GAAS,aAAc,CAAElI,OAAO,IAC9BkI,GAAAC,sBAAG,EAC3B,MAAMpI,GAAoB3D,GACpBgM,GAAY3E,GAClB,IAAAgO,GAAA,cAA+B1R,GAAkBE,gBAC7C,WAAA5L,CAAY6L,GACR1L,MAAM0L,EACd,CAOI,OAAAG,CAAQlJ,GACJ,OAAO,EAAIiR,GAAU/H,SAAS5L,KAAKyL,OAAQ/I,EACnD,GAEA+Q,GAAAC,iBAA2BA,aClB3B/N,OAAOC,eAAe4V,GAAS,aAAc,CAAEjQ,OAAO,IAChCiQ,GAAAC,oBAAG,EAqBzBD,GAAAC,eApBA,MACI,WAAA7b,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAMI,WAAAkJ,GACI,OAAOjd,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,MACL0G,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,GCpBA7M,OAAOC,eAAegR,GAAS,aAAc,CAAErL,OAAO,IACxCqL,GAAAC,YAAG,EACjB,MAAMpD,GAAqB9L,GACrB6T,GAAmBxM,GAiBzB4H,GAAAC,OAhBA,MACI,WAAAjX,CAAY6L,EAAQsL,EAActD,GAAmBC,kBACjD1T,KAAK4L,QAAU,IAAImL,EAAY,CAC3B1D,KAAM5H,GAAQ4H,MAAQ,GACtBH,QAASzH,GAAQyH,SAAW,QAC5BtB,iBAAkBnG,GAAQmG,mBAAoB,EAC9CC,YAAapG,GAAQoG,aAAe,UACpCjB,MAAOnF,GAAQmF,MACfC,SAAUpF,GAAQoF,SAClBC,SAAUrF,GAAQqF,SAClBC,QAAStF,GAAQsF,QACjBgC,YAAatH,GAAQsH,cAEzB/S,KAAK0G,QAAU,IAAI8U,GAAiBC,eAAezb,KAAK4L,QAChE,aClBAjG,OAAOC,eAAesR,GAAS,aAAc,CAAE3L,OAAO,IACvC2L,GAAAA,aAAG,EAClBA,GAAAA,QAAkB,CACd7D,KAAM,GACNH,QAAS,QACTtB,kBAAkB,EAClBC,YAAa,UACbjB,WAAOQ,EACPP,cAAUO,EACVN,cAAUM,EACVL,aAASK,EACT2B,iBAAa3B,eCXjBzL,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAA2BsL,iBAAAtL,EAAAqT,eAAyBrT,UAAkBA,EAAsB+E,YAAA/E,EAAA8E,kBAA4B9E,kBAA0BA,EAAmBuD,SAAAvD,EAAAyO,YAAiB,EAKtL,IAAID,EAAWjP,GACfhC,OAAOC,eAAewC,EAAS,SAAU,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO6Q,EAASC,MAAS,IACzG,IAAInL,EAAasD,GACjBrJ,OAAOC,eAAewC,EAAS,WAAY,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2F,EAAWC,QAAW,IAC/G,IAAIL,EAAoBwL,GACxBnR,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOuF,EAAkBE,eAAkB,IACpI,IAAIyB,EAAsBkK,GAC1BxR,OAAOC,eAAewC,EAAS,oBAAqB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBC,iBAAoB,IAC1IvH,OAAOC,eAAewC,EAAS,cAAe,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBE,WAAc,IAC9H,IAAIiK,EAAYC,GAChB1R,OAAOC,eAAewC,EAAS,UAAW,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOqR,EAAUF,OAAU,IAC5G,IAAIsE,EAAmBlE,GACvB3R,OAAOC,eAAewC,EAAS,iBAAkB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOyV,EAAiBC,cAAiB,IACjI,IAAIhI,EAAqB8D,GACzB5R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0N,EAAmBC,gBAAiB,qCCpBrI/N,OAAOC,eAAe0F,GAAS,aAAc,CAAEC,OAAO,IAC/BD,GAAAE,qBAAG,EAM1BF,GAAAE,gBALA,MACI,WAAA5L,CAAY6L,GACRzL,KAAKyL,OAASA,CACtB,mBCLA9F,OAAOC,eAAe8F,GAAS,aAAc,CAAEH,OAAO,IACtCG,GAAAC,cAAG,EACnB,MAAMA,WAAiBhM,MACnB,WAAAC,CAAYgM,EAASC,EAAUhM,GAC3BE,MAAMF,GACNG,KAAKkB,KAAO,WACZlB,KAAK8L,IAAMD,EAASC,IACpB9L,KAAK+L,OAASF,EAASE,OACvB/L,KAAKgM,WAAaH,EAASG,WAC3BhM,KAAKiM,KAAOJ,EAASI,KACrBjM,KAAK4L,QAAUA,CACvB,EAEAF,GAAAC,SAAmBA,OCFfO,GAA+BC,GAA+BC,GAAgCC,GAAmCC,GAA4BC,GAA4BC,SAXzLC,GAA0BzM,GAAQA,EAAKyM,wBAA2B,SAAUC,EAAUC,EAAOpB,EAAOqB,EAAMC,GAC1G,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAE5H,KAAKyH,EAAUnB,GAASsB,EAAIA,EAAEtB,MAAQA,EAAQoB,EAAM1G,IAAIyG,EAAUnB,GAASA,CACxG,EACIyB,GAA0BhN,GAAQA,EAAKgN,wBAA2B,SAAUN,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAE5H,KAAKyH,GAAYG,EAAIA,EAAEtB,MAAQoB,EAAM5G,IAAI2G,EACxF,EAEA/G,OAAOC,eAAeqH,GAAS,aAAc,CAAE1B,OAAO,IACtD0B,GAAAC,kBAA4BD,GAAAE,iBAAsB,EAKlD,MAAMA,WAAoBxN,MACtB,WAAAC,CAAYC,GACRE,MAAMF,GACNG,KAAKkB,KAAO,aACpB,CACI,eAAIkM,GACA,OAAO,CACf,EAEAH,GAAAE,YAAsBA,GACtB,MAAMD,GACF,WAAAtN,CAAY0N,GACRpB,GAA8BjG,IAAIjG,UAAM,GACxCmM,GAA8BlG,IAAIjG,UAAM,GACxCoM,GAA+BnG,IAAIjG,UAAM,GACzCqM,GAAkCpG,IAAIjG,UAAM,GAC5CsM,GAA2BrG,IAAIjG,UAAM,GACrCuM,GAA2BtG,IAAIjG,UAAM,GACrCwM,GAA0BvG,IAAIjG,UAAM,GACpCyM,GAAuBzM,KAAMkM,IAA+B,EAAO,KACnEO,GAAuBzM,KAAMmM,IAA+B,EAAO,KACnEM,GAAuBzM,KAAMoM,IAAgC,EAAO,KACpEK,GAAuBzM,KAAMqM,GAAmC,GAAI,KACpEI,GAAuBzM,KAAMsM,GAA4B,IAAI/M,SAAQ,CAACC,EAAS+N,KAC3Ed,GAAuBzM,KAAMuM,GAA4B/M,EAAS,KAClEiN,GAAuBzM,KAAMwM,GAA2Be,EAAQ,KAChE,MAgBMC,EAAYC,IACVT,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAGzMY,GAAuBhN,KAAMqM,GAAmC,KAAK/E,KAAKmG,EAAc,EAW5F,OATA9H,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMkM,GAA+B,OAE3EvG,OAAOC,eAAe4H,EAAU,aAAc,CAC1CzH,IAAK,IAAMiH,GAAuBhN,KAAMmM,GAA+B,OAE3ExG,OAAOC,eAAe4H,EAAU,cAAe,CAC3CzH,IAAK,IAAMiH,GAAuBhN,KAAMoM,GAAgC,OAErEkB,GA/BY/B,IACXyB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMkM,IAA+B,EAAM,KAC9Dc,GAAuBhN,KAAMuM,GAA4B,MACzDS,GAAuBhN,KAAMuM,GAA4B,KAAKtH,KAAKjF,KAAMuL,GAAM,IAErEmC,IACVV,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,OAGzMK,GAAuBzM,KAAMmM,IAA+B,EAAM,KAC9Da,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM0N,GAAO,GAiBlDF,EAAS,IAC9C,IACZ,CACI,KAAMtB,GAAgC,IAAIyB,QAAWxB,GAAgC,IAAIwB,QAAWvB,GAAiC,IAAIuB,QAAWtB,GAAoC,IAAIsB,QAAWrB,GAA6B,IAAIqB,QAAWpB,GAA6B,IAAIoB,QAAWnB,GAA4B,IAAImB,QAAWC,OAAOC,gBAC7U,MAAO,qBACf,CACI,IAAAC,CAAKC,EAAaC,GACd,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAKwB,KAAKC,EAAaC,EAC/F,CACI,MAAMA,GACF,OAAOhB,GAAuBhN,KAAMsM,GAA4B,KAAK2B,MAAMD,EACnF,CACI,QAAQE,GACJ,OAAOlB,GAAuBhN,KAAMsM,GAA4B,KAAK6B,QAAQD,EACrF,CACI,MAAAE,GACI,KAAIpB,GAAuBhN,KAAMkM,GAA+B,MAAQc,GAAuBhN,KAAMmM,GAA+B,MAAQa,GAAuBhN,KAAMoM,GAAgC,MAAzM,CAIA,GADAK,GAAuBzM,KAAMoM,IAAgC,EAAM,KAC/DY,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OACrE,IACI,IAAK,MAAM6K,KAAiBT,GAAuBhN,KAAMqM,GAAmC,KACxFoB,GAEpB,CACY,MAAO9L,GAEH,YADAiG,QAAQlG,KAAK,8BAA+BC,EAE5D,CAEQqL,GAAuBhN,KAAMqM,GAAmC,KAAKzJ,OAAS,EAC1EoK,GAAuBhN,KAAMwM,GAA2B,MACxDQ,GAAuBhN,KAAMwM,GAA2B,KAAKvH,KAAKjF,KAAM,IAAImN,GAAY,mBAfpG,CAgBA,CACI,eAAIC,GACA,OAAOJ,GAAuBhN,KAAMoM,GAAgC,IAC5E,EAEAa,GAAAC,kBAA4BA,eClH5BvH,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAwD,QAAkBxD,kBAA0BA,EAA0BiG,gBAAAjG,EAAAkG,kBAA4BlG,EAAsBmG,YAAAnG,EAAAoG,eAAyBpG,aAAqBA,EAAkB5I,QAAA4I,EAAAqG,YAAsBrG,EAAyBsG,eAAAtG,EAAAuG,OAAiBvG,aAAqBA,EAAiBwG,OAAAxG,EAAAyG,kBAA4BzG,EAAmB0G,SAAA1G,EAAA2G,eAAoB,EAKjW,MAAMrD,EAAa/D,GACbsF,EAAsB+B,GAI5B5G,EAAA2G,UAHmBxD,GACRA,QAMXnD,EAAA0G,SAHkBvD,GACU,iBAAVA,EAMlBnD,EAAAyG,kBAH2BtD,IAChB,EAAInD,EAAQ0G,UAAUvD,IAAoB,KAAVA,EAa3CnD,EAAAwG,OAVgBrD,GACa,iBAAVA,GACW,iBAAfA,EAAM5I,MACW,mBAAjB4I,EAAM0D,QACgB,mBAAtB1D,EAAM2D,aACgB,mBAAtB3D,EAAM3L,aACqB,iBAA3B2L,EAAM3L,YAAYsB,MACzB,gBAAgBuG,KAAK8D,EAAM3L,YAAYsB,OACvC,gBAAgBuG,KAAK8D,EAAMqC,OAAOC,cAM1CzF,EAAA+G,WAHoB5D,GACTA,aAAiB6D,SAY5BhH,EAAAuG,OATgB9L,IACZ,IACI,OAAOwM,KAAKxM,EACpB,CACI,MAAOyM,GAEH,OAAOC,GAAOC,KAAK3M,GAAK2D,SAAS,SACzC,GAiCA4B,EAAAsG,eA9BwBe,IACpB,MAAMC,EAAK,GAIL7O,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ2G,WAAWxD,KACnBoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,IACVrF,EAAQkH,EAAK7B,EAAE,IAGG,iBAAVqF,EACZ5F,OAAOkK,QAAQtE,GAAOzD,SAAQ,EAAEgI,EAAG5J,MAC/BrF,EAAQ,GAAGkH,KAAO+H,KAAM5J,EAAE,IAZ3B,EAAC6B,EAAKwD,KACjBmE,EAAGpI,KAAK,GAAGyI,mBAAmBhI,MAAQgI,mBAAmBjN,OAAOyI,MAAU,EAelEyE,CAAOjI,EAAKwD,GAE5B,EAKI,OAHA5F,OAAOkK,QAAQJ,GAAQ3H,SAAQ,EAAEC,EAAKwD,MAClC1K,EAAQkH,EAAKwD,EAAM,IAEnBmE,EAAG9M,OAAS,EACL,IAAI8M,EAAG1I,KAAK,OAEhB,EAAE,EA4CboB,EAAAqG,YAzBqB/L,IACjB,GAAIA,EAAQuN,SAAU,CAClB,MAAMA,EAAW,IAAIb,SACfvO,EAAU,CAACkH,EAAKwD,MACd,EAAInD,EAAQ0G,UAAUvD,KAAU,EAAInD,EAAQwG,QAAQrD,GACpD0E,EAASD,OAAOjI,EAAKwD,GAGrB0E,EAASD,OAAOjI,EAAKtE,KAAKC,UAAU6H,GACpD,EAYQ,OAVA5F,OAAOkK,QAAQnN,EAAQuN,UAClBC,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9CzD,SAAQ,EAAEC,EAAKwD,MACZoE,MAAMC,QAAQrE,GACdA,EAAMzD,SAAQ5B,GAAKrF,EAAQkH,EAAK7B,KAGhCrF,EAAQkH,EAAKwD,EAC7B,IAEe0E,CACf,CACoB,EASpB7H,EAAA5I,QANgB4Q,MAAO1N,EAAS2N,IACJ,mBAAbA,EACAA,EAAS3N,GAEb2N,EA2CXjI,EAAAkI,WAxCmBF,MAAO3E,EAAQ/I,KAC9B,MAAO6N,EAAOC,EAAUC,EAAUC,SAA2BnR,QAAQoR,IAAI,EACrE,EAAIvI,EAAQ5I,SAASkD,EAAS+I,EAAOmF,QACrC,EAAIxI,EAAQ5I,SAASkD,EAAS+I,EAAOoF,WACrC,EAAIzI,EAAQ5I,SAASkD,EAAS+I,EAAOqF,WACrC,EAAI1I,EAAQ5I,SAASkD,EAAS+I,EAAOsF,WAEnCC,EAAUrL,OAAOkK,QAAQ,CAC3BoB,OAAQ,sBACLP,KACAhO,EAAQsO,UAEVd,QAAO,EAAEC,EAAG5E,MAAW,EAAInD,EAAQ2G,WAAWxD,KAC9C2F,QAAO,CAACF,GAAUjJ,EAAKwD,MAAY,IACjCyF,EACHjJ,CAACA,GAAMjF,OAAOyI,MACd,CAAA,GAIJ,IAHI,EAAInD,EAAQyG,mBAAmB0B,KAC/BS,EAAuB,cAAI,UAAUT,MAErC,EAAInI,EAAQyG,mBAAmB2B,KAAa,EAAIpI,EAAQyG,mBAAmB4B,GAAW,CACtF,MAAMU,GAAc,EAAI/I,EAAQuG,QAAQ,GAAG6B,KAAYC,KACvDO,EAAuB,cAAI,SAASG,GAC5C,CAeI,YAdqBC,IAAjB1O,EAAQuJ,OACJvJ,EAAQ2O,UACRL,EAAQ,gBAAkBtO,EAAQ2O,WAE7B,EAAIjJ,EAAQwG,QAAQlM,EAAQuJ,MACjC+E,EAAQ,gBAAkBtO,EAAQuJ,KAAKtJ,MAAQ,4BAE1C,EAAIyF,EAAQ0G,UAAUpM,EAAQuJ,MACnC+E,EAAQ,gBAAkB,cAEpB,EAAI5I,EAAQ+G,YAAYzM,EAAQuJ,QACtC+E,EAAQ,gBAAkB,qBAG3B,IAAIM,QAAQN,EAAQ,EAiB/B5I,EAAAoG,eAdwB9L,IACpB,QAAqB0O,IAAjB1O,EAAQuJ,KACR,OAAIvJ,EAAQ2O,WAAWE,SAAS,SACrB9N,KAAKC,UAAUhB,EAAQuJ,OAEzB,EAAI7D,EAAQ0G,UAAUpM,EAAQuJ,QAAS,EAAI7D,EAAQwG,QAAQlM,EAAQuJ,QAAS,EAAI7D,EAAQ+G,YAAYzM,EAAQuJ,MAC1GvJ,EAAQuJ,KAGRxI,KAAKC,UAAUhB,EAAQuJ,KAGtB,EAiBpB7D,EAAAmG,YAdoB6B,MAAO3E,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,KACtE,MAAMgE,EAAa,IAAIC,gBACjB7F,EAAU,CACZoF,UACA/E,KAAMA,GAAQgE,EACdyB,OAAQhP,EAAQgP,OAChBC,OAAQH,EAAWG,QAMvB,OAJIlG,EAAOmG,mBACPhG,EAAQuF,YAAc1F,EAAOoG,aAEjCrE,GAAS,IAAMgE,EAAWM,gBACbC,MAAMjG,EAAKF,EAAQ,EAYpCxD,EAAAkG,kBAT0B,CAACzC,EAAUmG,KACjC,GAAIA,EAAgB,CAChB,MAAMC,EAAUpG,EAASmF,QAAQjL,IAAIiM,GACrC,IAAI,EAAI5J,EAAQ0G,UAAUmD,GACtB,OAAOA,CAEnB,CACoB,EAwBpB7J,EAAAiG,gBArBwB+B,MAAOvE,IAC3B,GAAwB,MAApBA,EAASE,OACT,IACI,MAAMmG,EAAcrG,EAASmF,QAAQjL,IAAI,gBACzC,GAAImM,EAAa,CAGb,MAFkB,CAAC,mBAAoB,4BACdC,MAAKxP,GAAQuP,EAAYhP,cAAc+G,WAAWtH,WAE1DkJ,EAASuG,aAGTvG,EAASwG,MAE1C,CACA,CACQ,MAAO1Q,GACHiG,QAAQjG,MAAMA,EAC1B,CAEoB,EAgCpByG,EAAAkK,gBA7BwB,CAAC5P,EAAS6P,KAC9B,MAUM5Q,EAVS,CACX,IAAK,cACL,IAAK,eACL,IAAK,YACL,IAAK,YACL,IAAK,wBACL,IAAK,cACL,IAAK,yBACFe,EAAQ8P,QAEMD,EAAOxG,QAC5B,GAAIpK,EACA,MAAM,IAAI+J,EAAWC,SAASjJ,EAAS6P,EAAQ5Q,GAEnD,IAAK4Q,EAAOE,GAAI,CACZ,MAAMC,EAAcH,EAAOxG,QAAU,UAC/B4G,EAAkBJ,EAAOvG,YAAc,UACvC4G,EAAY,MACd,IACI,OAAOnP,KAAKC,UAAU6O,EAAOtG,KAAM,KAAM,EACzD,CACY,MAAO4G,GACH,MAChB,CACS,EAPiB,GAQlB,MAAM,IAAInH,EAAWC,SAASjJ,EAAS6P,EAAQ,0BAA0BG,mBAA6BC,YAA0BC,IACxI,GAqCAxK,EAAAwD,QA3BgB,CAACH,EAAQ/I,IACd,IAAIuK,EAAoBC,mBAAkBkD,MAAO5Q,EAAS+N,EAAQC,KACrE,IACI,MAAM1B,EAhMH,EAACL,EAAQ/I,KACpB,MAAMoQ,EAAUrH,EAAOsH,aAAeC,UAChCC,EAAOvQ,EAAQoJ,IAChBjH,QAAQ,gBAAiB4G,EAAOyH,SAChCrO,QAAQ,YAAY,CAAC4B,EAAW0M,IAC7BzQ,EAAQuQ,MAAMG,eAAeD,GACtBL,EAAQhQ,OAAOJ,EAAQuQ,KAAKE,KAEhC1M,IAELqF,EAAM,GAAGL,EAAO4H,OAAOJ,IAC7B,OAAIvQ,EAAQ4Q,MACD,GAAGxH,KAAM,EAAI1D,EAAQsG,gBAAgBhM,EAAQ4Q,SAEjDxH,CAAG,EAkLUyH,CAAO9H,EAAQ/I,GACrBuN,GAAW,EAAI7H,EAAQqG,aAAa/L,GACpCuJ,GAAO,EAAI7D,EAAQoG,gBAAgB9L,GACnCsO,QAAgB,EAAI5I,EAAQkI,YAAY7E,EAAQ/I,GACtD,IAAK8K,EAASJ,YAAa,CACvB,MAAMvB,QAAiB,EAAIzD,EAAQmG,aAAa9C,EAAQ/I,EAASoJ,EAAKG,EAAMgE,EAAUe,EAASxD,GACzFgG,QAAqB,EAAIpL,EAAQiG,iBAAiBxC,GAClDmG,GAAiB,EAAI5J,EAAQkG,mBAAmBzC,EAAUnJ,EAAQsP,gBAClEO,EAAS,CACXzG,MACA2G,GAAI5G,EAAS4G,GACb1G,OAAQF,EAASE,OACjBC,WAAYH,EAASG,WACrBC,KAAM+F,GAAkBwB,IAE5B,EAAIpL,EAAQkK,iBAAiB5P,EAAS6P,GACtC/S,EAAQ+S,EAAOtG,KAC/B,CACA,CACQ,MAAOtK,GACH4L,EAAO5L,EACnB,UCjSAgE,OAAOC,eAAe6N,GAAS,aAAc,CAAElI,OAAO,IAC9BkI,GAAAC,sBAAG,EAC3B,MAAMpI,GAAoB3D,GACpBgM,GAAY3E,GAClB,MAAM0E,WAAyBpI,GAAkBE,gBAC7C,WAAA5L,CAAY6L,GACR1L,MAAM0L,EACd,CAOI,OAAAG,CAAQlJ,GACJ,OAAO,EAAIiR,GAAU/H,SAAS5L,KAAKyL,OAAQ/I,EACnD,EAEA+Q,GAAAC,iBAA2BA,aClB3B/N,OAAOC,eAAe4V,GAAS,aAAc,CAAEjQ,OAAO,IAChCiQ,GAAAC,oBAAG,EAqBzBD,GAAAC,eApBA,MACI,WAAA7b,CAAYmU,GACR/T,KAAK+T,YAAcA,CAC3B,CAMI,UAAAmJ,GACI,OAAOld,KAAK+T,YAAYnI,QAAQ,CAC5B8F,OAAQ,MACR5F,IAAK,eACL0G,OAAQ,CACJ,IAAK,oBACL,IAAK,2DAGrB,GCpBA7M,OAAOC,eAAegR,GAAS,aAAc,CAAErL,OAAO,IACxCqL,GAAAC,YAAG,EACjB,MAAMpD,GAAqB9L,GACrB6T,GAAmBxM,GAiBzB4H,GAAAC,OAhBA,MACI,WAAAjX,CAAY6L,EAAQsL,EAActD,GAAmBC,kBACjD1T,KAAK4L,QAAU,IAAImL,EAAY,CAC3B1D,KAAM5H,GAAQ4H,MAAQ,GACtBH,QAASzH,GAAQyH,SAAW,QAC5BtB,iBAAkBnG,GAAQmG,mBAAoB,EAC9CC,YAAapG,GAAQoG,aAAe,UACpCjB,MAAOnF,GAAQmF,MACfC,SAAUpF,GAAQoF,SAClBC,SAAUrF,GAAQqF,SAClBC,QAAStF,GAAQsF,QACjBgC,YAAatH,GAAQsH,cAEzB/S,KAAK0G,QAAU,IAAI8U,GAAiBC,eAAezb,KAAK4L,QAChE,aClBAjG,OAAOC,eAAesR,GAAS,aAAc,CAAE3L,OAAO,IACvC2L,GAAAA,aAAG,EAClBA,GAAAA,QAAkB,CACd7D,KAAM,GACNH,QAAS,QACTtB,kBAAkB,EAClBC,YAAa,UACbjB,WAAOQ,EACPP,cAAUO,EACVN,cAAUM,EACVL,aAASK,EACT2B,iBAAa3B,eCXjBzL,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAA2BsL,iBAAAtL,EAAAqT,eAAyBrT,UAAkBA,EAAsB+E,YAAA/E,EAAA8E,kBAA4B9E,kBAA0BA,EAAmBuD,SAAAvD,EAAAyO,YAAiB,EAKtL,IAAID,EAAWjP,GACfhC,OAAOC,eAAewC,EAAS,SAAU,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO6Q,EAASC,MAAS,IACzG,IAAInL,EAAasD,GACjBrJ,OAAOC,eAAewC,EAAS,WAAY,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO2F,EAAWC,QAAW,IAC/G,IAAIL,EAAoBwL,GACxBnR,OAAOC,eAAewC,EAAS,kBAAmB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOuF,EAAkBE,eAAkB,IACpI,IAAIyB,EAAsBkK,GAC1BxR,OAAOC,eAAewC,EAAS,oBAAqB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBC,iBAAoB,IAC1IvH,OAAOC,eAAewC,EAAS,cAAe,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOkH,EAAoBE,WAAc,IAC9H,IAAIiK,EAAYC,GAChB1R,OAAOC,eAAewC,EAAS,UAAW,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOqR,EAAUF,OAAU,IAC5G,IAAIsE,EAAmBlE,GACvB3R,OAAOC,eAAewC,EAAS,iBAAkB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAOyV,EAAiBC,cAAiB,IACjI,IAAIhI,EAAqB8D,GACzB5R,OAAOC,eAAewC,EAAS,mBAAoB,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0N,EAAmBC,gBAAiB,SCpBrI,IAAIyJ,GAAmBnd,GAAQA,EAAKmd,kBAAqBxX,OAAOyX,OAAM,SAAaC,EAAGxb,EAAGiO,EAAGwN,QAC7ElM,IAAPkM,IAAkBA,EAAKxN,GAC3B,IAAIyN,EAAO5X,OAAO6X,yBAAyB3b,EAAGiO,GACzCyN,KAAS,QAASA,GAAQ1b,EAAE4b,WAAaF,EAAKG,UAAYH,EAAKzX,gBAClEyX,EAAO,CAAE1X,YAAY,EAAME,IAAK,WAAa,OAAOlE,EAAEiO,MAExDnK,OAAOC,eAAeyX,EAAGC,EAAIC,EAChC,EAAA,SAAcF,EAAGxb,EAAGiO,EAAGwN,QACTlM,IAAPkM,IAAkBA,EAAKxN,GAC3BuN,EAAEC,GAAMzb,EAAEiO,EACb,GACG6N,GAAsB3d,GAAQA,EAAK2d,qBAAwBhY,OAAOyX,OAAM,SAAaC,EAAGnX,GACxFP,OAAOC,eAAeyX,EAAG,UAAW,CAAExX,YAAY,EAAM0F,MAAOrF,GAClE,EAAI,SAASmX,EAAGnX,GACbmX,EAAW,QAAInX,CACnB,GACI0X,GAAgB5d,GAAQA,EAAK4d,cAAiB,SAAUC,GACxD,GAAIA,GAAOA,EAAIJ,WAAY,OAAOI,EAClC,IAAItL,EAAS,CAAE,EACf,GAAW,MAAPsL,EAAa,IAAK,IAAI/N,KAAK+N,EAAe,YAAN/N,GAAmBnK,OAAOmY,UAAU1K,eAAenO,KAAK4Y,EAAK/N,IAAIqN,GAAgB5K,EAAQsL,EAAK/N,GAEtI,OADA6N,GAAmBpL,EAAQsL,GACpBtL,CACX,EACA5M,OAAOC,eAAemY,GAAS,aAAc,CAAExS,OAAO,IACtD,IAAAyS,GAAAD,GAAAC,WAAqBC,GAAAF,GAAAE,YAAsBC,GAAAH,GAAAG,OAAiBC,GAAcJ,GAAAI,OAAGC,GAAkBL,GAAAK,WAAGC,GAAmBN,GAAAM,YAAGC,GAAiBP,GAAAO,eAAG,EAC5IA,GAAAP,GAAAO,UAAoBV,GAAajW,IACjC0W,GAAAN,GAAAM,YAAsBT,GAAa5O,IACnCoP,GAAAL,GAAAK,WAAqBR,GAAa9G,IAClCqH,GAAAJ,GAAAI,OAAiBP,GAAazG,IAC9B+G,GAAAH,GAAAG,OAAiBN,GAAavG,IAC9B4G,GAAAF,GAAAE,YAAsBL,GAAatG,IACnC0G,GAAAD,GAAAC,WAAqBJ,GAAarG,ICzBlC,IADA,ICFIgH,GDEAC,GAAY,GACPtX,GAAI,EAAGA,GAAI,MAAOA,GACzBsX,GAAUlX,MAAMJ,GAAI,KAAOV,SAAS,IAAIgB,MAAM,ICHhD,IAAIiX,GAAQ,IAAIC,WAAW,IACZ,SAASC,KAEtB,IAAKJ,MAEHA,GAAoC,oBAAXK,QAA0BA,OAAOL,iBAAmBK,OAAOL,gBAAgBM,KAAKD,SAEvG,MAAM,IAAIjf,MAAM,4GAGpB,OAAO4e,GAAgBE,GACzB,CChBA,IACeK,GAAA,CACbC,WAFiC,oBAAXH,QAA0BA,OAAOG,YAAcH,OAAOG,WAAWF,KAAKD,SCG9F,SAASI,GAAGtc,EAASuc,EAAKC,GACxB,GAAIJ,GAAOC,aAAeE,IAAQvc,EAChC,OAAOoc,GAAOC,aAGhB,IAAII,GADJzc,EAAUA,GAAW,CAAE,GACJ0c,SAAW1c,EAAQic,KAAOA,MAc7C,OAXAQ,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IHFtB,SAAyBE,EAAKH,EAAS,GAM5C,OAAQV,GAAUa,EAAIH,EAAS,IAAMV,GAAUa,EAAIH,EAAS,IAAMV,GAAUa,EAAIH,EAAS,IAAMV,GAAUa,EAAIH,EAAS,IAAM,IAAMV,GAAUa,EAAIH,EAAS,IAAMV,GAAUa,EAAIH,EAAS,IAAM,IAAMV,GAAUa,EAAIH,EAAS,IAAMV,GAAUa,EAAIH,EAAS,IAAM,IAAMV,GAAUa,EAAIH,EAAS,IAAMV,GAAUa,EAAIH,EAAS,IAAM,IAAMV,GAAUa,EAAIH,EAAS,KAAOV,GAAUa,EAAIH,EAAS,KAAOV,GAAUa,EAAIH,EAAS,KAAOV,GAAUa,EAAIH,EAAS,KAAOV,GAAUa,EAAIH,EAAS,KAAOV,GAAUa,EAAIH,EAAS,MAAMhc,aACvf,CGKSoc,CAAgBH,EACzB,CCgBA,IAAAI,GAvCA,MACE,WAAA3f,GACEI,KAAKwf,IAAM,IACXxf,KAAK8G,IAAM,IAAI2Y,GACnB,CAEE,GAAA1Z,CAAKgC,GACH,MAAMwD,EAAQvL,KAAK8G,IAAIf,IAAIgC,GAC3B,YAAcqJ,IAAV7F,OACF,GAGAvL,KAAK8G,IAAI4Y,OAAO3X,GAChB/H,KAAK8G,IAAIb,IAAI8B,EAAKwD,GACXA,EAEb,CAEE,OAAQxD,GACN,OAAO/H,KAAK8G,IAAI4Y,OAAO3X,EAC3B,CAEE,GAAA9B,CAAK8B,EAAKwD,GAGR,IAFgBvL,KAAK0f,OAAO3X,SAEFqJ,IAAV7F,EAAqB,CAEnC,GAAIvL,KAAK8G,IAAI6Y,MAAQ3f,KAAKwf,IAAK,CAC7B,MAAMI,EAAW5f,KAAK8G,IAAIe,OAAOgY,OAAOtU,MACxCvL,KAAK0f,OAAOE,EACpB,CAEM5f,KAAK8G,IAAIb,IAAI8B,EAAKwD,EACxB,CAEI,OAAOvL,IACX,GCnCA,MAAM8f,GAAcna,OAAOoa,OAAO,CAAEC,OAAO,IACrCC,GAAYta,OAAOoa,OAAO,CAAG,GAYnC,IAAAG,GAXqBxd,GACdA,EAIkB,iBAAZA,EACFod,GAGFpd,EAPEud,mBCoBX,IAAAE,GAAiB,CACjBC,WAtBmB,IAuBjBC,0BAlBgC,GAmBhCC,sBAf4BF,IAgB9BG,iBAxByBjc,OAAOic,kBACL,iBAwBzBC,cAfoB,CACpB,QACA,WACA,QACA,WACA,QACA,WACA,cASAC,oBA7B0B,QA8B1BC,wBAAyB,EACzBC,WAAY,GCzBd,IAAAC,GAPqB,iBAAZ/f,GACPA,EAAQ+C,KACR/C,EAAQ+C,IAAIid,YACZ,cAAcpZ,KAAK5G,EAAQ+C,IAAIid,YAC7B,IAAI1c,IAASyD,QAAQjG,MAAM,YAAawC,GACxC,sBCNJ,MAAMkc,0BACJA,EAAyBC,sBACzBA,EAAqBF,WACrBA,GACEzY,GACEnG,EAAQwN,GAIR8R,GAHN1Y,EAAUC,EAAiBD,QAAA,CAAA,GAGH0Y,GAAA,GAClBC,EAAS3Y,EAAiB2Y,OAAA,GAC1BC,EAAM5Y,EAAc4Y,IAAA,GACpBC,EAAI7Y,EAAY6Y,EAAA,CAAA,EACtB,IAAIC,EAAI,EAER,MAAMC,EAAmB,eAQnBC,EAAwB,CAC5B,CAAC,MAAO,GACR,CAAC,MAAOhB,GACR,CAACe,EAAkBb,IAYfe,EAAc,CAACngB,EAAMqK,EAAO+V,KAChC,MAAMC,EAVc,CAAChW,IACrB,IAAK,MAAOgF,EAAOiP,KAAQ4B,EACzB7V,EAAQA,EACLnE,MAAM,GAAGmJ,MAAUvJ,KAAK,GAAGuJ,OAAWiP,MACtCpY,MAAM,GAAGmJ,MAAUvJ,KAAK,GAAGuJ,OAAWiP,MAE3C,OAAOjU,GAIMiW,CAAcjW,GACrB3G,EAAQsc,IACd1f,EAAMN,EAAM0D,EAAO2G,GACnB0V,EAAE/f,GAAQ0D,EACVoc,EAAIpc,GAAS2G,EACbuV,EAAGlc,GAAS,IAAI2C,OAAOgE,EAAO+V,EAAW,SAAMlQ,GAC/C2P,EAAOnc,GAAS,IAAI2C,OAAOga,EAAMD,EAAW,SAAMlQ,EAAS,EAS7DiQ,EAAY,oBAAqB,eACjCA,EAAY,yBAA0B,QAMtCA,EAAY,uBAAwB,gBAAgBF,MAKpDE,EAAY,cAAe,IAAIL,EAAIC,EAAEQ,0BACdT,EAAIC,EAAEQ,0BACNT,EAAIC,EAAEQ,uBAE7BJ,EAAY,mBAAoB,IAAIL,EAAIC,EAAES,+BACdV,EAAIC,EAAES,+BACNV,EAAIC,EAAES,4BAKlCL,EAAY,uBAAwB,MAAML,EAAIC,EAAEQ,sBAC5CT,EAAIC,EAAEU,0BAEVN,EAAY,4BAA6B,MAAML,EAAIC,EAAES,2BACjDV,EAAIC,EAAEU,0BAMVN,EAAY,aAAc,QAAQL,EAAIC,EAAEW,8BAC/BZ,EAAIC,EAAEW,6BAEfP,EAAY,kBAAmB,SAASL,EAAIC,EAAEY,mCACrCb,EAAIC,EAAEY,kCAKfR,EAAY,kBAAmB,GAAGF,MAMlCE,EAAY,QAAS,UAAUL,EAAIC,EAAEa,yBAC5Bd,EAAIC,EAAEa,wBAWfT,EAAY,YAAa,KAAKL,EAAIC,EAAEc,eACjCf,EAAIC,EAAEe,eACPhB,EAAIC,EAAEgB,WAERZ,EAAY,OAAQ,IAAIL,EAAIC,EAAEiB,eAK9Bb,EAAY,aAAc,WAAWL,EAAIC,EAAEkB,oBACxCnB,EAAIC,EAAEmB,oBACPpB,EAAIC,EAAEgB,WAERZ,EAAY,QAAS,IAAIL,EAAIC,EAAEoB,gBAE/BhB,EAAY,OAAQ,gBAKpBA,EAAY,wBAAyB,GAAGL,EAAIC,EAAES,mCAC9CL,EAAY,mBAAoB,GAAGL,EAAIC,EAAEQ,8BAEzCJ,EAAY,cAAe,YAAYL,EAAIC,EAAEqB,4BAChBtB,EAAIC,EAAEqB,4BACNtB,EAAIC,EAAEqB,wBACVtB,EAAIC,EAAEe,gBACVhB,EAAIC,EAAEgB,eAG3BZ,EAAY,mBAAoB,YAAYL,EAAIC,EAAEsB,iCAChBvB,EAAIC,EAAEsB,iCACNvB,EAAIC,EAAEsB,6BACVvB,EAAIC,EAAEmB,qBACVpB,EAAIC,EAAEgB,eAGhCZ,EAAY,SAAU,IAAIL,EAAIC,EAAEuB,YAAYxB,EAAIC,EAAEwB,iBAClDpB,EAAY,cAAe,IAAIL,EAAIC,EAAEuB,YAAYxB,EAAIC,EAAEyB,sBAIvDrB,EAAY,cAAe,oBACDhB,mBACIA,qBACAA,SAC9BgB,EAAY,SAAU,GAAGL,EAAIC,EAAE0B,4BAC/BtB,EAAY,aAAcL,EAAIC,EAAE0B,aAClB,MAAM3B,EAAIC,EAAEe,gBACZ,MAAMhB,EAAIC,EAAEgB,wBAE1BZ,EAAY,YAAaL,EAAIC,EAAE2B,SAAS,GACxCvB,EAAY,gBAAiBL,EAAIC,EAAE4B,aAAa,GAIhDxB,EAAY,YAAa,WAEzBA,EAAY,YAAa,SAASL,EAAIC,EAAE6B,kBAAkB,GAC1D1a,EAA2B2a,iBAAA,MAE3B1B,EAAY,QAAS,IAAIL,EAAIC,EAAE6B,aAAa9B,EAAIC,EAAEwB,iBAClDpB,EAAY,aAAc,IAAIL,EAAIC,EAAE6B,aAAa9B,EAAIC,EAAEyB,sBAIvDrB,EAAY,YAAa,WAEzBA,EAAY,YAAa,SAASL,EAAIC,EAAE+B,kBAAkB,GAC1D5a,EAA2B6a,iBAAA,MAE3B5B,EAAY,QAAS,IAAIL,EAAIC,EAAE+B,aAAahC,EAAIC,EAAEwB,iBAClDpB,EAAY,aAAc,IAAIL,EAAIC,EAAE+B,aAAahC,EAAIC,EAAEyB,sBAGvDrB,EAAY,kBAAmB,IAAIL,EAAIC,EAAEuB,aAAaxB,EAAIC,EAAEoB,oBAC5DhB,EAAY,aAAc,IAAIL,EAAIC,EAAEuB,aAAaxB,EAAIC,EAAEiB,mBAIvDb,EAAY,iBAAkB,SAASL,EAAIC,EAAEuB,aACrCxB,EAAIC,EAAEoB,eAAerB,EAAIC,EAAEwB,iBAAiB,GACpDra,EAAgC8a,sBAAA,SAMhC7B,EAAY,cAAe,SAASL,EAAIC,EAAEwB,0BAEnBzB,EAAIC,EAAEwB,sBAG7BpB,EAAY,mBAAoB,SAASL,EAAIC,EAAEyB,+BAEnB1B,EAAIC,EAAEyB,2BAIlCrB,EAAY,OAAQ,mBAEpBA,EAAY,OAAQ,6BACpBA,EAAY,UAAW,iECxNvB,MAAM8B,GAAU,WACVC,GAAqB,CAACC,EAAGC,KAC7B,MAAMC,EAAOJ,GAAQ1b,KAAK4b,GACpBG,EAAOL,GAAQ1b,KAAK6b,GAO1B,OALIC,GAAQC,IACVH,GAAKA,EACLC,GAAKA,GAGAD,IAAMC,EAAI,EACZC,IAASC,GAAS,EAClBA,IAASD,EAAQ,EAClBF,EAAIC,GAAK,EACT,GAKN,IAAAG,GAAiB,CACjBL,mBAAEA,GACAM,oBAJ0B,CAACL,EAAGC,IAAMF,GAAmBE,EAAGD,ICjB5D,MAAM7hB,GAAQmG,IACRyY,WAAEA,GAAUG,iBAAEA,IAAqBvR,IACjC+R,OAAQD,GAAIG,EAAAA,IAAMnK,GAEpB6M,GAAexM,IACfiM,mBAAEA,IAAuB/L,GAwS/B,IAAAuM,GAvSA,MAAMC,EACJ,WAAAjkB,CAAakkB,EAASphB,GAGpB,GAFAA,EAAUihB,GAAajhB,GAEnBohB,aAAmBD,EAAQ,CAC7B,GAAIC,EAAQ9D,UAAYtd,EAAQsd,OAC5B8D,EAAQC,sBAAwBrhB,EAAQqhB,kBAC1C,OAAOD,EAEPA,EAAUA,EAAQA,OAE1B,MAAW,GAAuB,iBAAZA,EAChB,MAAM,IAAIhX,UAAU,uDAAuDgX,OAG7E,GAAIA,EAAQlhB,OAASwd,GACnB,MAAM,IAAItT,UACR,0BAA0BsT,iBAI9B5e,GAAM,SAAUsiB,EAASphB,GACzB1C,KAAK0C,QAAUA,EACf1C,KAAKggB,QAAUtd,EAAQsd,MAGvBhgB,KAAK+jB,oBAAsBrhB,EAAQqhB,kBAEnC,MAAMliB,EAAIiiB,EAAQE,OAAOjhB,MAAML,EAAQsd,MAAQc,GAAGG,GAAEgD,OAASnD,GAAGG,GAAEiD,OAElE,IAAKriB,EACH,MAAM,IAAIiL,UAAU,oBAAoBgX,KAU1C,GAPA9jB,KAAKmkB,IAAML,EAGX9jB,KAAKokB,OAASviB,EAAE,GAChB7B,KAAKqkB,OAASxiB,EAAE,GAChB7B,KAAKskB,OAASziB,EAAE,GAEZ7B,KAAKokB,MAAQ7D,IAAoBvgB,KAAKokB,MAAQ,EAChD,MAAM,IAAItX,UAAU,yBAGtB,GAAI9M,KAAKqkB,MAAQ9D,IAAoBvgB,KAAKqkB,MAAQ,EAChD,MAAM,IAAIvX,UAAU,yBAGtB,GAAI9M,KAAKskB,MAAQ/D,IAAoBvgB,KAAKskB,MAAQ,EAChD,MAAM,IAAIxX,UAAU,yBAIjBjL,EAAE,GAGL7B,KAAKukB,WAAa1iB,EAAE,GAAGuF,MAAM,KAAKN,KAAK0d,IACrC,GAAI,WAAW/c,KAAK+c,GAAK,CACvB,MAAMC,GAAOD,EACb,GAAIC,GAAO,GAAKA,EAAMlE,GACpB,OAAOkE,CAEnB,CACQ,OAAOD,KATTxkB,KAAKukB,WAAa,GAapBvkB,KAAK0kB,MAAQ7iB,EAAE,GAAKA,EAAE,GAAGuF,MAAM,KAAO,GACtCpH,KAAK8E,QACT,CAEE,MAAAA,GAKE,OAJA9E,KAAK8jB,QAAU,GAAG9jB,KAAKokB,SAASpkB,KAAKqkB,SAASrkB,KAAKskB,QAC/CtkB,KAAKukB,WAAW3hB,SAClB5C,KAAK8jB,SAAW,IAAI9jB,KAAKukB,WAAWvd,KAAK,QAEpChH,KAAK8jB,OAChB,CAEE,QAAAtd,GACE,OAAOxG,KAAK8jB,OAChB,CAEE,OAAAa,CAASC,GAEP,GADApjB,GAAM,iBAAkBxB,KAAK8jB,QAAS9jB,KAAK0C,QAASkiB,KAC9CA,aAAiBf,GAAS,CAC9B,GAAqB,iBAAVe,GAAsBA,IAAU5kB,KAAK8jB,QAC9C,OAAO,EAETc,EAAQ,IAAIf,EAAOe,EAAO5kB,KAAK0C,QACrC,CAEI,OAAIkiB,EAAMd,UAAY9jB,KAAK8jB,QAClB,EAGF9jB,KAAK6kB,YAAYD,IAAU5kB,KAAK8kB,WAAWF,EACtD,CAEE,WAAAC,CAAaD,GAKX,OAJMA,aAAiBf,IACrBe,EAAQ,IAAIf,EAAOe,EAAO5kB,KAAK0C,UAI/B0gB,GAAmBpjB,KAAKokB,MAAOQ,EAAMR,QACrChB,GAAmBpjB,KAAKqkB,MAAOO,EAAMP,QACrCjB,GAAmBpjB,KAAKskB,MAAOM,EAAMN,MAE3C,CAEE,UAAAQ,CAAYF,GAMV,GALMA,aAAiBf,IACrBe,EAAQ,IAAIf,EAAOe,EAAO5kB,KAAK0C,UAI7B1C,KAAKukB,WAAW3hB,SAAWgiB,EAAML,WAAW3hB,OAC9C,OAAQ,EACH,IAAK5C,KAAKukB,WAAW3hB,QAAUgiB,EAAML,WAAW3hB,OACrD,OAAO,EACF,IAAK5C,KAAKukB,WAAW3hB,SAAWgiB,EAAML,WAAW3hB,OACtD,OAAO,EAGT,IAAIsE,EAAI,EACR,EAAG,CACD,MAAMmc,EAAIrjB,KAAKukB,WAAWrd,GACpBoc,EAAIsB,EAAML,WAAWrd,GAE3B,GADA1F,GAAM,qBAAsB0F,EAAGmc,EAAGC,QACxBlS,IAANiS,QAAyBjS,IAANkS,EACrB,OAAO,EACF,QAAUlS,IAANkS,EACT,OAAO,EACF,QAAUlS,IAANiS,EACT,OAAQ,EACH,GAAIA,IAAMC,EAGf,OAAOF,GAAmBC,EAAGC,EAEhC,SAAUpc,EACf,CAEE,YAAA6d,CAAcH,GACNA,aAAiBf,IACrBe,EAAQ,IAAIf,EAAOe,EAAO5kB,KAAK0C,UAGjC,IAAIwE,EAAI,EACR,EAAG,CACD,MAAMmc,EAAIrjB,KAAK0kB,MAAMxd,GACfoc,EAAIsB,EAAMF,MAAMxd,GAEtB,GADA1F,GAAM,gBAAiB0F,EAAGmc,EAAGC,QACnBlS,IAANiS,QAAyBjS,IAANkS,EACrB,OAAO,EACF,QAAUlS,IAANkS,EACT,OAAO,EACF,QAAUlS,IAANiS,EACT,OAAQ,EACH,GAAIA,IAAMC,EAGf,OAAOF,GAAmBC,EAAGC,EAEhC,SAAUpc,EACf,CAIE,GAAA8d,CAAKC,EAASC,EAAYC,GACxB,OAAQF,GACN,IAAK,WACHjlB,KAAKukB,WAAW3hB,OAAS,EACzB5C,KAAKskB,MAAQ,EACbtkB,KAAKqkB,MAAQ,EACbrkB,KAAKokB,QACLpkB,KAAKglB,IAAI,MAAOE,EAAYC,GAC5B,MACF,IAAK,WACHnlB,KAAKukB,WAAW3hB,OAAS,EACzB5C,KAAKskB,MAAQ,EACbtkB,KAAKqkB,QACLrkB,KAAKglB,IAAI,MAAOE,EAAYC,GAC5B,MACF,IAAK,WAIHnlB,KAAKukB,WAAW3hB,OAAS,EACzB5C,KAAKglB,IAAI,QAASE,EAAYC,GAC9BnlB,KAAKglB,IAAI,MAAOE,EAAYC,GAC5B,MAGF,IAAK,aAC4B,IAA3BnlB,KAAKukB,WAAW3hB,QAClB5C,KAAKglB,IAAI,QAASE,EAAYC,GAEhCnlB,KAAKglB,IAAI,MAAOE,EAAYC,GAC5B,MAEF,IAAK,QAMc,IAAfnlB,KAAKqkB,OACU,IAAfrkB,KAAKskB,OACsB,IAA3BtkB,KAAKukB,WAAW3hB,QAEhB5C,KAAKokB,QAEPpkB,KAAKqkB,MAAQ,EACbrkB,KAAKskB,MAAQ,EACbtkB,KAAKukB,WAAa,GAClB,MACF,IAAK,QAKgB,IAAfvkB,KAAKskB,OAA0C,IAA3BtkB,KAAKukB,WAAW3hB,QACtC5C,KAAKqkB,QAEPrkB,KAAKskB,MAAQ,EACbtkB,KAAKukB,WAAa,GAClB,MACF,IAAK,QAK4B,IAA3BvkB,KAAKukB,WAAW3hB,QAClB5C,KAAKskB,QAEPtkB,KAAKukB,WAAa,GAClB,MAGF,IAAK,MAAO,CACV,MAAMa,EAAO9gB,OAAO6gB,GAAkB,EAAI,EAE1C,IAAKD,IAAiC,IAAnBC,EACjB,MAAM,IAAIxlB,MAAM,mDAGlB,GAA+B,IAA3BK,KAAKukB,WAAW3hB,OAClB5C,KAAKukB,WAAa,CAACa,OACd,CACL,IAAIle,EAAIlH,KAAKukB,WAAW3hB,OACxB,OAASsE,GAAK,GACsB,iBAAvBlH,KAAKukB,WAAWrd,KACzBlH,KAAKukB,WAAWrd,KAChBA,GAAK,GAGT,IAAW,IAAPA,EAAU,CAEZ,GAAIge,IAAellB,KAAKukB,WAAWvd,KAAK,OAA2B,IAAnBme,EAC9C,MAAM,IAAIxlB,MAAM,yDAElBK,KAAKukB,WAAWjd,KAAK8d,EACjC,CACA,CACQ,GAAIF,EAAY,CAGd,IAAIX,EAAa,CAACW,EAAYE,IACP,IAAnBD,IACFZ,EAAa,CAACW,IAE2C,IAAvD9B,GAAmBpjB,KAAKukB,WAAW,GAAIW,GACrCG,MAAMrlB,KAAKukB,WAAW,MACxBvkB,KAAKukB,WAAaA,GAGpBvkB,KAAKukB,WAAaA,CAE9B,CACQ,KACR,CACM,QACE,MAAM,IAAI5kB,MAAM,+BAA+BslB,KAMnD,OAJAjlB,KAAKmkB,IAAMnkB,KAAK8E,SACZ9E,KAAK0kB,MAAM9hB,SACb5C,KAAKmkB,KAAO,IAAInkB,KAAK0kB,MAAM1d,KAAK,QAE3BhH,IACX,GC1SA,MAAM6jB,GAASlc,GAIf,IAAA2d,GAHgB,CAACjC,EAAGC,EAAGtD,IACrB,IAAI6D,GAAOR,EAAGrD,GAAO2E,QAAQ,IAAId,GAAOP,EAAGtD,ICF7C,MAAM2E,GAAUhd,GCAhB,MAAMgd,GAAUhd,GCAhB,MAAMgd,GAAUhd,GCAhB,MAAMgd,GAAUhd,GCAhB,MAAMgd,GAAUhd,GCAhB,MAAMgd,GAAUhd,GCAhB,MAAM4d,GNCK,CAAClC,EAAGC,EAAGtD,IAAmC,IAAzB2E,GAAQtB,EAAGC,EAAGtD,GMApCwF,GLAM,CAACnC,EAAGC,EAAGtD,IAAmC,IAAzB2E,GAAQtB,EAAGC,EAAGtD,GKCrCyF,GJDK,CAACpC,EAAGC,EAAGtD,IAAU2E,GAAQtB,EAAGC,EAAGtD,GAAS,EIE7C0F,GHFM,CAACrC,EAAGC,EAAGtD,IAAU2E,GAAQtB,EAAGC,EAAGtD,IAAU,EGG/C2F,GFHK,CAACtC,EAAGC,EAAGtD,IAAU2E,GAAQtB,EAAGC,EAAGtD,GAAS,EEI7C4F,GDJM,CAACvC,EAAGC,EAAGtD,IAAU2E,GAAQtB,EAAGC,EAAGtD,IAAU,ECkDrD,gBAAA6F,GA5CY,CAACxC,EAAGyC,EAAIxC,EAAGtD,KACrB,OAAQ8F,GACN,IAAK,MAOH,MANiB,iBAANzC,IACTA,EAAIA,EAAES,SAES,iBAANR,IACTA,EAAIA,EAAEQ,SAEDT,IAAMC,EAEf,IAAK,MAOH,MANiB,iBAAND,IACTA,EAAIA,EAAES,SAES,iBAANR,IACTA,EAAIA,EAAEQ,SAEDT,IAAMC,EAEf,IAAK,GACL,IAAK,IACL,IAAK,KACH,OAAOiC,GAAGlC,EAAGC,EAAGtD,GAElB,IAAK,KACH,OAAOwF,GAAInC,EAAGC,EAAGtD,GAEnB,IAAK,IACH,OAAOyF,GAAGpC,EAAGC,EAAGtD,GAElB,IAAK,KACH,OAAO0F,GAAIrC,EAAGC,EAAGtD,GAEnB,IAAK,IACH,OAAO2F,GAAGtC,EAAGC,EAAGtD,GAElB,IAAK,KACH,OAAO4F,GAAIvC,EAAGC,EAAGtD,GAEnB,QACE,MAAM,IAAIlT,UAAU,qBAAqBgZ,KAC/C,qCCjDA,MAAMC,EAAmB,OAGzB,MAAMC,EACJ,WAAApmB,CAAaqmB,EAAOvjB,GAGlB,GAFAA,EAAUihB,EAAajhB,GAEnBujB,aAAiBD,EACnB,OACEC,EAAMjG,UAAYtd,EAAQsd,OAC1BiG,EAAMlC,sBAAwBrhB,EAAQqhB,kBAE/BkC,EAEA,IAAID,EAAMC,EAAM9B,IAAKzhB,GAIhC,GAAIujB,aAAiBC,EAKnB,OAHAlmB,KAAKmkB,IAAM8B,EAAM1a,MACjBvL,KAAKiG,IAAM,CAAC,CAACggB,IACbjmB,KAAKmmB,eAAY/U,EACVpR,KAsBT,GAnBAA,KAAK0C,QAAUA,EACf1C,KAAKggB,QAAUtd,EAAQsd,MACvBhgB,KAAK+jB,oBAAsBrhB,EAAQqhB,kBAKnC/jB,KAAKmkB,IAAM8B,EAAMjC,OAAOnf,QAAQkhB,EAAkB,KAGlD/lB,KAAKiG,IAAMjG,KAAKmkB,IACb/c,MAAM,MAENN,KAAI6B,GAAK3I,KAAKomB,WAAWzd,EAAEqb,UAI3B9T,QAAO5H,GAAKA,EAAE1F,UAEZ5C,KAAKiG,IAAIrD,OACZ,MAAM,IAAIkK,UAAU,yBAAyB9M,KAAKmkB,OAIpD,GAAInkB,KAAKiG,IAAIrD,OAAS,EAAG,CAEvB,MAAMyjB,EAAQrmB,KAAKiG,IAAI,GAEvB,GADAjG,KAAKiG,IAAMjG,KAAKiG,IAAIiK,QAAO5H,IAAMge,EAAUhe,EAAE,MACrB,IAApBtI,KAAKiG,IAAIrD,OACX5C,KAAKiG,IAAM,CAACogB,QACP,GAAIrmB,KAAKiG,IAAIrD,OAAS,EAE3B,IAAK,MAAM0F,KAAKtI,KAAKiG,IACnB,GAAiB,IAAbqC,EAAE1F,QAAgB2jB,EAAMje,EAAE,IAAK,CACjCtI,KAAKiG,IAAM,CAACqC,GACZ,KACZ,CAGA,CAEItI,KAAKmmB,eAAY/U,CACrB,CAEE,SAAI6U,GACF,QAAuB7U,IAAnBpR,KAAKmmB,UAAyB,CAChCnmB,KAAKmmB,UAAY,GACjB,IAAK,IAAIjf,EAAI,EAAGA,EAAIlH,KAAKiG,IAAIrD,OAAQsE,IAAK,CACpCA,EAAI,IACNlH,KAAKmmB,WAAa,MAEpB,MAAMK,EAAQxmB,KAAKiG,IAAIiB,GACvB,IAAK,IAAI4I,EAAI,EAAGA,EAAI0W,EAAM5jB,OAAQkN,IAC5BA,EAAI,IACN9P,KAAKmmB,WAAa,KAEpBnmB,KAAKmmB,WAAaK,EAAM1W,GAAGtJ,WAAWwd,MAEhD,CACA,CACI,OAAOhkB,KAAKmmB,SAChB,CAEE,MAAArhB,GACE,OAAO9E,KAAKimB,KAChB,CAEE,QAAAzf,GACE,OAAOxG,KAAKimB,KAChB,CAEE,UAAAG,CAAYH,GAGV,MAGMQ,IAFHzmB,KAAK0C,QAAQqhB,mBAAqBrD,IAClC1gB,KAAK0C,QAAQsd,OAASW,IACE,IAAMsF,EAC3BS,EAASC,EAAM5gB,IAAI0gB,GACzB,GAAIC,EACF,OAAOA,EAGT,MAAM1G,EAAQhgB,KAAK0C,QAAQsd,MAErB4G,EAAK5G,EAAQc,EAAGG,EAAE4F,kBAAoB/F,EAAGG,EAAE6F,aACjDb,EAAQA,EAAMphB,QAAQ+hB,EAAIG,EAAc/mB,KAAK0C,QAAQqhB,oBACrDviB,EAAM,iBAAkBykB,GAGxBA,EAAQA,EAAMphB,QAAQic,EAAGG,EAAE+F,gBAAiB9D,GAC5C1hB,EAAM,kBAAmBykB,GAGzBA,EAAQA,EAAMphB,QAAQic,EAAGG,EAAEgG,WAAYlE,GACvCvhB,EAAM,aAAcykB,GAGpBA,EAAQA,EAAMphB,QAAQic,EAAGG,EAAEiG,WAAYjE,GACvCzhB,EAAM,aAAcykB,GAKpB,IAAIkB,EAAYlB,EACb7e,MAAM,KACNN,KAAIsgB,GAAQC,EAAgBD,EAAMpnB,KAAK0C,WACvCsE,KAAK,KACLI,MAAM,OAENN,KAAIsgB,GAAQE,EAAYF,EAAMpnB,KAAK0C,WAElCsd,IAEFmH,EAAYA,EAAUjX,QAAOkX,IAC3B5lB,EAAM,uBAAwB4lB,EAAMpnB,KAAK0C,WAChC0kB,EAAKrkB,MAAM+d,EAAGG,EAAEsG,sBAG7B/lB,EAAM,aAAc2lB,GAKpB,MAAMK,EAAW,IAAI/H,IACfgI,EAAcN,EAAUrgB,KAAIsgB,GAAQ,IAAIlB,EAAWkB,EAAMpnB,KAAK0C,WACpE,IAAK,MAAM0kB,KAAQK,EAAa,CAC9B,GAAInB,EAAUc,GACZ,MAAO,CAACA,GAEVI,EAASvhB,IAAImhB,EAAK7b,MAAO6b,EAC/B,CACQI,EAAS7H,KAAO,GAAK6H,EAASza,IAAI,KACpCya,EAAS9H,OAAO,IAGlB,MAAMnN,EAAS,IAAIiV,EAASE,UAE5B,OADAf,EAAM1gB,IAAIwgB,EAASlU,GACZA,CACX,CAEE,UAAAoV,CAAY1B,EAAOvjB,GACjB,KAAMujB,aAAiBD,GACrB,MAAM,IAAIlZ,UAAU,uBAGtB,OAAO9M,KAAKiG,IAAIkM,MAAMyV,GAElBC,EAAcD,EAAiBllB,IAC/BujB,EAAMhgB,IAAIkM,MAAM2V,GAEZD,EAAcC,EAAkBplB,IAChCklB,EAAgBG,OAAOC,GACdF,EAAiBC,OAAOE,GACtBD,EAAeL,WAAWM,EAAiBvlB,UAOlE,CAGE,IAAA+E,CAAMqc,GACJ,IAAKA,EACH,OAAO,EAGT,GAAuB,iBAAZA,EACT,IACEA,EAAU,IAAID,EAAOC,EAAS9jB,KAAK0C,QACpC,CAAC,MAAOwlB,GACP,OAAO,CACf,CAGI,IAAK,IAAIhhB,EAAI,EAAGA,EAAIlH,KAAKiG,IAAIrD,OAAQsE,IACnC,GAAIihB,EAAQnoB,KAAKiG,IAAIiB,GAAI4c,EAAS9jB,KAAK0C,SACrC,OAAO,EAGX,OAAO,CACX,EAGAujB,GAAiBD,EAEjB,MACMW,EAAQ,IADFhf,GAGNgc,EAAe3U,GACfkX,kCC1NN,MAAMkC,EAAMxa,OAAO,cAEnB,MAAMsY,EACJ,cAAWkC,GACT,OAAOA,CACX,CAEE,WAAAxoB,CAAawnB,EAAM1kB,GAGjB,GAFAA,EAAUihB,EAAajhB,GAEnB0kB,aAAgBlB,EAAY,CAC9B,GAAIkB,EAAKpH,UAAYtd,EAAQsd,MAC3B,OAAOoH,EAEPA,EAAOA,EAAK7b,KAEpB,CAEI6b,EAAOA,EAAKpD,OAAO5c,MAAM,OAAOJ,KAAK,KACrCxF,EAAM,aAAc4lB,EAAM1kB,GAC1B1C,KAAK0C,QAAUA,EACf1C,KAAKggB,QAAUtd,EAAQsd,MACvBhgB,KAAKmD,MAAMikB,GAEPpnB,KAAK4jB,SAAWwE,EAClBpoB,KAAKuL,MAAQ,GAEbvL,KAAKuL,MAAQvL,KAAKqoB,SAAWroB,KAAK4jB,OAAOE,QAG3CtiB,EAAM,OAAQxB,KAClB,CAEE,KAAAmD,CAAOikB,GACL,MAAMze,EAAI3I,KAAK0C,QAAQsd,MAAQc,EAAGG,EAAEsG,iBAAmBzG,EAAGG,EAAEqH,YACtDzmB,EAAIulB,EAAKrkB,MAAM4F,GAErB,IAAK9G,EACH,MAAM,IAAIiL,UAAU,uBAAuBsa,KAG7CpnB,KAAKqoB,cAAoBjX,IAATvP,EAAE,GAAmBA,EAAE,GAAK,GACtB,MAAlB7B,KAAKqoB,WACProB,KAAKqoB,SAAW,IAIbxmB,EAAE,GAGL7B,KAAK4jB,OAAS,IAAIC,EAAOhiB,EAAE,GAAI7B,KAAK0C,QAAQsd,OAF5ChgB,KAAK4jB,OAASwE,CAIpB,CAEE,QAAA5hB,GACE,OAAOxG,KAAKuL,KAChB,CAEE,IAAA9D,CAAMqc,GAGJ,GAFAtiB,EAAM,kBAAmBsiB,EAAS9jB,KAAK0C,QAAQsd,OAE3ChgB,KAAK4jB,SAAWwE,GAAOtE,IAAYsE,EACrC,OAAO,EAGT,GAAuB,iBAAZtE,EACT,IACEA,EAAU,IAAID,EAAOC,EAAS9jB,KAAK0C,QACpC,CAAC,MAAOwlB,GACP,OAAO,CACf,CAGI,OAAOK,EAAIzE,EAAS9jB,KAAKqoB,SAAUroB,KAAK4jB,OAAQ5jB,KAAK0C,QACzD,CAEE,UAAAilB,CAAYP,EAAM1kB,GAChB,KAAM0kB,aAAgBlB,GACpB,MAAM,IAAIpZ,UAAU,4BAGtB,MAAsB,KAAlB9M,KAAKqoB,SACY,KAAfroB,KAAKuL,OAGF,IAAIya,EAAMoB,EAAK7b,MAAO7I,GAAS+E,KAAKzH,KAAKuL,OACrB,KAAlB6b,EAAKiB,SACK,KAAfjB,EAAK7b,OAGF,IAAIya,EAAMhmB,KAAKuL,MAAO7I,GAAS+E,KAAK2f,EAAKxD,WAGlDlhB,EAAUihB,EAAajhB,IAGXqhB,oBACM,aAAf/jB,KAAKuL,OAAuC,aAAf6b,EAAK7b,SAGhC7I,EAAQqhB,oBACV/jB,KAAKuL,MAAMtB,WAAW,WAAamd,EAAK7b,MAAMtB,WAAW,cAKxDjK,KAAKqoB,SAASpe,WAAW,OAAQmd,EAAKiB,SAASpe,WAAW,SAI1DjK,KAAKqoB,SAASpe,WAAW,OAAQmd,EAAKiB,SAASpe,WAAW,QAK3DjK,KAAK4jB,OAAOE,UAAYsD,EAAKxD,OAAOE,UACrC9jB,KAAKqoB,SAAS9W,SAAS,OAAQ6V,EAAKiB,SAAS9W,SAAS,SAIpDgX,EAAIvoB,KAAK4jB,OAAQ,IAAKwD,EAAKxD,OAAQlhB,IACrC1C,KAAKqoB,SAASpe,WAAW,MAAQmd,EAAKiB,SAASpe,WAAW,SAIxDse,EAAIvoB,KAAK4jB,OAAQ,IAAKwD,EAAKxD,OAAQlhB,IACrC1C,KAAKqoB,SAASpe,WAAW,MAAQmd,EAAKiB,SAASpe,WAAW,MAIhE,EAGAue,GAAiBtC,EAEjB,MAAMvC,EAAehc,IACboZ,OAAQD,EAAEG,EAAEA,GAAMjS,GACpBuZ,EAAMzR,GACNtV,EAAQ2V,GACR0M,EAASxM,GACT2O,EAAQ1O,eD8EKR,GACbtV,EAAQ2V,GACR0M,EAASxM,IAEb0J,OAAQD,EAAEG,EACVA,EAACiC,sBACDA,EAAqBH,iBACrBA,EAAgBE,iBAChBA,GACE3L,IACEoJ,wBAAEA,EAAuBC,WAAEA,GAAepJ,GAE1C+O,EAAYhe,GAAiB,aAAZA,EAAEiD,MACnBgb,EAAQje,GAAiB,KAAZA,EAAEiD,MAIfsc,EAAgB,CAACJ,EAAa/kB,KAClC,IAAI6P,GAAS,EACb,MAAMkW,EAAuBhB,EAAYjgB,QACzC,IAAIkhB,EAAiBD,EAAqBE,MAE1C,KAAOpW,GAAUkW,EAAqB7lB,QACpC2P,EAASkW,EAAqBV,OAAOa,GAC5BF,EAAef,WAAWiB,EAAiBlmB,KAGpDgmB,EAAiBD,EAAqBE,MAGxC,OAAOpW,GAMH8U,EAAkB,CAACD,EAAM1kB,KAC7BlB,EAAM,OAAQ4lB,EAAM1kB,GACpB0kB,EAAOyB,EAAczB,EAAM1kB,GAC3BlB,EAAM,QAAS4lB,GACfA,EAAO0B,EAAc1B,EAAM1kB,GAC3BlB,EAAM,SAAU4lB,GAChBA,EAAO2B,EAAe3B,EAAM1kB,GAC5BlB,EAAM,SAAU4lB,GAChBA,EAAO4B,EAAa5B,EAAM1kB,GAC1BlB,EAAM,QAAS4lB,GACRA,GAGH6B,EAAMzE,IAAOA,GAA2B,MAArBA,EAAGthB,eAAgC,MAAPshB,EAS/CsE,EAAgB,CAAC1B,EAAM1kB,IACpB0kB,EACJpD,OACA5c,MAAM,OACNN,KAAKwB,GAAM4gB,EAAa5gB,EAAG5F,KAC3BsE,KAAK,KAGJkiB,EAAe,CAAC9B,EAAM1kB,KAC1B,MAAMiG,EAAIjG,EAAQsd,MAAQc,EAAGG,EAAEkI,YAAcrI,EAAGG,EAAEmI,OAClD,OAAOhC,EAAKviB,QAAQ8D,GAAG,CAACwH,EAAGkZ,EAAGxnB,EAAGynB,EAAGC,KAElC,IAAIC,EAoBJ,OArBAhoB,EAAM,QAAS4lB,EAAMjX,EAAGkZ,EAAGxnB,EAAGynB,EAAGC,GAG7BN,EAAII,GACNG,EAAM,GACGP,EAAIpnB,GACb2nB,EAAM,KAAKH,WAAWA,EAAI,UACjBJ,EAAIK,GAEbE,EAAM,KAAKH,KAAKxnB,QAAQwnB,MAAMxnB,EAAI,QACzB0nB,GACT/nB,EAAM,kBAAmB+nB,GACzBC,EAAM,KAAKH,KAAKxnB,KAAKynB,KAAKC,MACrBF,MAAMxnB,EAAI,SAGf2nB,EAAM,KAAKH,KAAKxnB,KAAKynB,MAChBD,MAAMxnB,EAAI,QAGjBL,EAAM,eAAgBgoB,GACfA,IACR,EAWGX,EAAgB,CAACzB,EAAM1kB,IACpB0kB,EACJpD,OACA5c,MAAM,OACNN,KAAKwB,GAAMmhB,EAAanhB,EAAG5F,KAC3BsE,KAAK,KAGJyiB,EAAe,CAACrC,EAAM1kB,KAC1BlB,EAAM,QAAS4lB,EAAM1kB,GACrB,MAAMiG,EAAIjG,EAAQsd,MAAQc,EAAGG,EAAEyI,YAAc5I,EAAGG,EAAE0I,OAC5CC,EAAIlnB,EAAQqhB,kBAAoB,KAAO,GAC7C,OAAOqD,EAAKviB,QAAQ8D,GAAG,CAACwH,EAAGkZ,EAAGxnB,EAAGynB,EAAGC,KAElC,IAAIC,EA2CJ,OA5CAhoB,EAAM,QAAS4lB,EAAMjX,EAAGkZ,EAAGxnB,EAAGynB,EAAGC,GAG7BN,EAAII,GACNG,EAAM,GACGP,EAAIpnB,GACb2nB,EAAM,KAAKH,QAAQO,OAAOP,EAAI,UACrBJ,EAAIK,GAEXE,EADQ,MAANH,EACI,KAAKA,KAAKxnB,MAAM+nB,MAAMP,MAAMxnB,EAAI,QAEhC,KAAKwnB,KAAKxnB,MAAM+nB,OAAOP,EAAI,UAE1BE,GACT/nB,EAAM,kBAAmB+nB,GAGrBC,EAFM,MAANH,EACQ,MAANxnB,EACI,KAAKwnB,KAAKxnB,KAAKynB,KAAKC,MACrBF,KAAKxnB,MAAMynB,EAAI,MAEd,KAAKD,KAAKxnB,KAAKynB,KAAKC,MACrBF,MAAMxnB,EAAI,QAGX,KAAKwnB,KAAKxnB,KAAKynB,KAAKC,OACpBF,EAAI,YAGZ7nB,EAAM,SAGFgoB,EAFM,MAANH,EACQ,MAANxnB,EACI,KAAKwnB,KAAKxnB,KAAKynB,IAClBM,MAAMP,KAAKxnB,MAAMynB,EAAI,MAElB,KAAKD,KAAKxnB,KAAKynB,IAClBM,MAAMP,MAAMxnB,EAAI,QAGf,KAAKwnB,KAAKxnB,KAAKynB,OACfD,EAAI,WAId7nB,EAAM,eAAgBgoB,GACfA,IACR,EAGGT,EAAiB,CAAC3B,EAAM1kB,KAC5BlB,EAAM,iBAAkB4lB,EAAM1kB,GACvB0kB,EACJhgB,MAAM,OACNN,KAAKwB,GAAMuhB,EAAcvhB,EAAG5F,KAC5BsE,KAAK,MAGJ6iB,EAAgB,CAACzC,EAAM1kB,KAC3B0kB,EAAOA,EAAKpD,OACZ,MAAMrb,EAAIjG,EAAQsd,MAAQc,EAAGG,EAAE6I,aAAehJ,EAAGG,EAAE8I,QACnD,OAAO3C,EAAKviB,QAAQ8D,GAAG,CAAC6gB,EAAKQ,EAAMX,EAAGxnB,EAAGynB,EAAGC,KAC1C/nB,EAAM,SAAU4lB,EAAMoC,EAAKQ,EAAMX,EAAGxnB,EAAGynB,EAAGC,GAC1C,MAAMU,EAAKhB,EAAII,GACTa,EAAKD,GAAMhB,EAAIpnB,GACfsoB,EAAKD,GAAMjB,EAAIK,GACfc,EAAOD,EA+Db,MA7Da,MAATH,GAAgBI,IAClBJ,EAAO,IAKTT,EAAK7mB,EAAQqhB,kBAAoB,KAAO,GAEpCkG,EAGAT,EAFW,MAATQ,GAAyB,MAATA,EAEZ,WAGA,IAECA,GAAQI,GAGbF,IACFroB,EAAI,GAENynB,EAAI,EAES,MAATU,GAGFA,EAAO,KACHE,GACFb,GAAKA,EAAI,EACTxnB,EAAI,EACJynB,EAAI,IAEJznB,GAAKA,EAAI,EACTynB,EAAI,IAEY,OAATU,IAGTA,EAAO,IACHE,EACFb,GAAKA,EAAI,EAETxnB,GAAKA,EAAI,GAIA,MAATmoB,IACFT,EAAK,MAGPC,EAAM,GAAGQ,EAAOX,KAAKxnB,KAAKynB,IAAIC,KACrBW,EACTV,EAAM,KAAKH,QAAQE,OAAQF,EAAI,UACtBc,IACTX,EAAM,KAAKH,KAAKxnB,MAAM0nB,MACjBF,MAAMxnB,EAAI,SAGjBL,EAAM,gBAAiBgoB,GAEhBA,IACR,EAKGR,EAAe,CAAC5B,EAAM1kB,KAC1BlB,EAAM,eAAgB4lB,EAAM1kB,GAErB0kB,EACJpD,OACAnf,QAAQic,EAAGG,EAAEoJ,MAAO,KAGnB/C,EAAc,CAACF,EAAM1kB,KACzBlB,EAAM,cAAe4lB,EAAM1kB,GACpB0kB,EACJpD,OACAnf,QAAQic,EAAGpe,EAAQqhB,kBAAoB9C,EAAEqJ,QAAUrJ,EAAEsJ,MAAO,KAS3DxD,EAAgByD,GAAS,CAACC,EAC9Bjb,EAAMkb,EAAIC,EAAIC,EAAIC,EAAKC,EACvBC,EAAIC,EAAIC,EAAIC,EAAIC,IA2BT,GAzBL3b,EADEyZ,EAAIyB,GACC,GACEzB,EAAI0B,GACN,KAAKD,QAASF,EAAQ,KAAO,KAC3BvB,EAAI2B,GACN,KAAKF,KAAMC,MAAOH,EAAQ,KAAO,KAC/BK,EACF,KAAKrb,IAEL,KAAKA,IAAOgb,EAAQ,KAAO,QAIlCO,EADE9B,EAAI+B,GACD,GACI/B,EAAIgC,GACR,KAAKD,EAAK,UACN/B,EAAIiC,GACR,IAAIF,MAAOC,EAAK,QACZE,EACJ,KAAKH,KAAMC,KAAMC,KAAMC,IACnBX,EACJ,IAAIQ,KAAMC,MAAOC,EAAK,MAEtB,KAAKH,MAGW/G,OAGnBmE,EAAU,CAACliB,EAAK6d,EAASphB,KAC7B,IAAK,IAAIwE,EAAI,EAAGA,EAAIjB,EAAIrD,OAAQsE,IAC9B,IAAKjB,EAAIiB,GAAGO,KAAKqc,GACf,OAAO,EAIX,GAAIA,EAAQS,WAAW3hB,SAAWF,EAAQqhB,kBAAmB,CAM3D,IAAK,IAAI7c,EAAI,EAAGA,EAAIjB,EAAIrD,OAAQsE,IAE9B,GADA1F,EAAMyE,EAAIiB,GAAG0c,QACT3d,EAAIiB,GAAG0c,SAAWsC,EAAWkC,KAI7BniB,EAAIiB,GAAG0c,OAAOW,WAAW3hB,OAAS,EAAG,CACvC,MAAMwoB,EAAUnlB,EAAIiB,GAAG0c,OACvB,GAAIwH,EAAQhH,QAAUN,EAAQM,OAC1BgH,EAAQ/G,QAAUP,EAAQO,OAC1B+G,EAAQ9G,QAAUR,EAAQQ,MAC5B,OAAO,CAEjB,CAII,OAAO,CACX,CAEE,OAAO,aExiBT,MAAM0B,GAAQre,KASd,IAAA0jB,GARkB,CAACvH,EAASmC,EAAOvjB,KACjC,IACEujB,EAAQ,IAAID,GAAMC,EAAOvjB,EAC1B,CAAC,MAAOwlB,GACP,OAAO,CACX,CACE,OAAOjC,EAAMxe,KAAKqc,EAAO,WCP3B,MAAMD,GAASlc,GAef,IAAA2jB,GAdc,CAACxH,EAASphB,EAAS6oB,GAAc,KAC7C,GAAIzH,aAAmBD,GACrB,OAAOC,EAET,IACE,OAAO,IAAID,GAAOC,EAASphB,EAC5B,CAAC,MAAOwlB,GACP,IAAKqD,EACH,OAAO,KAET,MAAMrD,CACV,GCZA,MAAMrE,GAASlc,GACTxE,GAAQ6L,IACN+R,OAAQD,GAAEG,EAAEA,IAAMnK,GAyD1B,IAAA0U,GAvDe,CAAC1H,EAASphB,KACvB,GAAIohB,aAAmBD,GACrB,OAAOC,EAOT,GAJuB,iBAAZA,IACTA,EAAUhhB,OAAOghB,IAGI,iBAAZA,EACT,OAAO,KAKT,IAAI/gB,EAAQ,KACZ,IAHAL,EAAUA,GAAW,CAAA,GAGR+oB,IAEN,CAUL,MAAMC,EAAiBhpB,EAAQqhB,kBAAoBjD,GAAGG,GAAE0K,eAAiB7K,GAAGG,GAAE2K,WAC9E,IAAI/L,EACJ,MAAQA,EAAO6L,EAAe1oB,KAAK8gB,OAC7B/gB,GAASA,EAAM6B,MAAQ7B,EAAM,GAAGH,SAAWkhB,EAAQlhB,SAElDG,GACC8c,EAAKjb,MAAQib,EAAK,GAAGjd,SAAWG,EAAM6B,MAAQ7B,EAAM,GAAGH,SAC3DG,EAAQ8c,GAEV6L,EAAeG,UAAYhM,EAAKjb,MAAQib,EAAK,GAAGjd,OAASid,EAAK,GAAGjd,OAGnE8oB,EAAeG,WAAa,CAChC,MAxBI9oB,EAAQ+gB,EAAQ/gB,MAAML,EAAQqhB,kBAAoBjD,GAAGG,GAAE4B,YAAc/B,GAAGG,GAAE2B,SA0B5E,GAAc,OAAV7f,EACF,OAAO,KAGT,MAAMqhB,EAAQrhB,EAAM,GACdshB,EAAQthB,EAAM,IAAM,IACpBuhB,EAAQvhB,EAAM,IAAM,IACpBwhB,EAAa7hB,EAAQqhB,mBAAqBhhB,EAAM,GAAK,IAAIA,EAAM,KAAO,GACtE2hB,EAAQhiB,EAAQqhB,mBAAqBhhB,EAAM,GAAK,IAAIA,EAAM,KAAO,GAEvE,OAAOI,GAAM,GAAGihB,KAASC,KAASC,IAAQC,IAAaG,IAAShiB,EAAO,WCzCrEopB,GAAgB,SAAS/pB,EAAGuhB,GAI5B,OAHAwI,GAAgBnmB,OAAOomB,gBAClB,CAAEC,UAAW,cAAgBrc,OAAS,SAAU5N,EAAGuhB,GAAKvhB,EAAEiqB,UAAY1I,CAAE,GACzE,SAAUvhB,EAAGuhB,GAAK,IAAK,IAAIgG,KAAKhG,EAAO3d,OAAOmY,UAAU1K,eAAenO,KAAKqe,EAAGgG,KAAIvnB,EAAEunB,GAAKhG,EAAEgG,KACzFwC,GAAc/pB,EAAGuhB,EAC5B,EAEO,SAAS2I,GAAUlqB,EAAGuhB,GACzB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIxW,UAAU,uBAAyBhK,OAAOwgB,GAAK,iCAE7D,SAAS4I,IAAOlsB,KAAKJ,YAAcmC,CAAI,CADvC+pB,GAAc/pB,EAAGuhB,GAEjBvhB,EAAE+b,UAAkB,OAANwF,EAAa3d,OAAOyX,OAAOkG,IAAM4I,EAAGpO,UAAYwF,EAAExF,UAAW,IAAIoO,EACnF,CAqFO,SAASC,GAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAI/sB,WAAU,SAAUC,EAAS+N,GAC/C,SAASif,EAAUjhB,GAAS,IAAMkhB,EAAKF,EAAU1M,KAAKtU,GAAQ,CAAG,MAAOsH,GAAKtF,EAAOsF,GAAO,CAC3F,SAAS6Z,EAASnhB,GAAS,IAAMkhB,EAAKF,EAAiB,MAAEhhB,GAAU,CAAC,MAAOsH,GAAKtF,EAAOsF,GAAO,CAC9F,SAAS4Z,EAAKla,GAJlB,IAAehH,EAIagH,EAAOoa,KAAOntB,EAAQ+S,EAAOhH,QAJ1CA,EAIyDgH,EAAOhH,MAJhDA,aAAiB+gB,EAAI/gB,EAAQ,IAAI+gB,GAAE,SAAU9sB,GAAWA,EAAQ+L,EAAO,KAIhBuC,KAAK0e,EAAWE,EAAY,CAC9GD,GAAMF,EAAYA,EAAUlnB,MAAM+mB,EAASC,GAAc,KAAKxM,OACtE,GACA,CAEO,SAAS+M,GAAYR,EAASngB,GACjC,IAAsGY,EAAG5K,EAAGgf,EAAxG9Q,EAAI,CAAE0c,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAP7L,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,EAAG,EAAI8L,KAAM,GAAIC,IAAK,IAAeC,EAAItnB,OAAOyX,QAA4B,mBAAb8P,SAA0BA,SAAWvnB,QAAQmY,WACtL,OAAOmP,EAAEpN,KAAOsN,EAAK,GAAIF,EAAS,MAAIE,EAAK,GAAIF,EAAU,OAAIE,EAAK,GAAsB,mBAAXvf,SAA0Bqf,EAAErf,OAAOwf,UAAY,WAAa,OAAOptB,IAAO,GAAGitB,EAC1J,SAASE,EAAK9qB,GAAK,OAAO,SAAU6D,GAAK,OACzC,SAAc4f,GACV,GAAIjZ,EAAG,MAAM,IAAIC,UAAU,mCAC3B,KAAOmgB,IAAMA,EAAI,EAAGnH,EAAG,KAAO3V,EAAI,IAAKA,OACnC,GAAItD,EAAI,EAAG5K,IAAMgf,EAAY,EAAR6E,EAAG,GAAS7jB,EAAU,OAAI6jB,EAAG,GAAK7jB,EAAS,SAAOgf,EAAIhf,EAAU,SAAMgf,EAAEhc,KAAKhD,GAAI,GAAKA,EAAE4d,SAAWoB,EAAIA,EAAEhc,KAAKhD,EAAG6jB,EAAG,KAAK6G,KAAM,OAAO1L,EAE3J,OADIhf,EAAI,EAAGgf,IAAG6E,EAAK,CAAS,EAARA,EAAG,GAAQ7E,EAAE1V,QACzBua,EAAG,IACP,KAAK,EAAG,KAAK,EAAG7E,EAAI6E,EAAI,MACxB,KAAK,EAAc,OAAX3V,EAAE0c,QAAgB,CAAEthB,MAAOua,EAAG,GAAI6G,MAAM,GAChD,KAAK,EAAGxc,EAAE0c,QAAS5qB,EAAI6jB,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAK3V,EAAE6c,IAAIrE,MAAOxY,EAAE4c,KAAKpE,MAAO,SACxC,QACI,KAAM1H,EAAI9Q,EAAE4c,MAAM9L,EAAIA,EAAEre,OAAS,GAAKqe,EAAEA,EAAEre,OAAS,KAAkB,IAAVkjB,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAE3V,EAAI,EAAG,QAAW,CAC5G,GAAc,IAAV2V,EAAG,MAAc7E,GAAM6E,EAAG,GAAK7E,EAAE,IAAM6E,EAAG,GAAK7E,EAAE,IAAM,CAAE9Q,EAAE0c,MAAQ/G,EAAG,GAAI,KAAQ,CACtF,GAAc,IAAVA,EAAG,IAAY3V,EAAE0c,MAAQ5L,EAAE,GAAI,CAAE9Q,EAAE0c,MAAQ5L,EAAE,GAAIA,EAAI6E,EAAI,KAAQ,CACrE,GAAI7E,GAAK9Q,EAAE0c,MAAQ5L,EAAE,GAAI,CAAE9Q,EAAE0c,MAAQ5L,EAAE,GAAI9Q,EAAE6c,IAAI1lB,KAAKwe,GAAK,KAAQ,CAC/D7E,EAAE,IAAI9Q,EAAE6c,IAAIrE,MAChBxY,EAAE4c,KAAKpE,MAAO,SAEtB7C,EAAK7Z,EAAKhH,KAAKmnB,EAASjc,EAC3B,CAAC,MAAO0C,GAAKiT,EAAK,CAAC,EAAGjT,GAAI5Q,EAAI,CAAE,CAAW,QAAE4K,EAAIoU,EAAI,CAAI,CAC1D,GAAY,EAAR6E,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAEva,MAAOua,EAAG,GAAKA,EAAG,QAAK,EAAQ6G,MAAM,EAC7E,CAtB+CF,CAAK,CAACpqB,EAAG6D,GAAM,CAAG,CAuBtE,CAkBO,SAASmnB,GAAShQ,GACrB,IAAIzb,EAAsB,mBAAXgM,QAAyBA,OAAOwf,SAAUvrB,EAAID,GAAKyb,EAAEzb,GAAIsF,EAAI,EAC5E,GAAIrF,EAAG,OAAOA,EAAEoD,KAAKoY,GACrB,GAAIA,GAAyB,iBAAbA,EAAEza,OAAqB,MAAO,CAC1Cid,KAAM,WAEF,OADIxC,GAAKnW,GAAKmW,EAAEza,SAAQya,OAAI,GACrB,CAAE9R,MAAO8R,GAAKA,EAAEnW,KAAMylB,MAAOtP,EACvC,GAEL,MAAM,IAAIvQ,UAAUlL,EAAI,0BAA4B,kCACxD,CAEO,SAAS0rB,GAAOjQ,EAAGhb,GACtB,IAAIR,EAAsB,mBAAX+L,QAAyByP,EAAEzP,OAAOwf,UACjD,IAAKvrB,EAAG,OAAOwb,EACf,IAAmB1U,EAAYkK,EAA3B3L,EAAIrF,EAAEoD,KAAKoY,GAAOkQ,EAAK,GAC3B,IACI,WAAc,IAANlrB,GAAgBA,KAAM,MAAQsG,EAAIzB,EAAE2Y,QAAQ8M,MAAMY,EAAGjmB,KAAKqB,EAAE4C,MACvE,CACD,MAAO5J,GAASkR,EAAI,CAAElR,MAAOA,EAAU,CAC/B,QACJ,IACQgH,IAAMA,EAAEgkB,OAAS9qB,EAAIqF,EAAU,SAAIrF,EAAEoD,KAAKiC,EACjD,CACO,QAAE,GAAI2L,EAAG,MAAMA,EAAElR,KAAQ,CACpC,CACD,OAAO4rB,CACX,CAkBO,SAASC,GAAczC,EAAIvb,EAAMie,GACpC,GAAIA,GAA6B,IAArBC,UAAU9qB,OAAc,IAAK,IAA4B2qB,EAAxBrmB,EAAI,EAAGymB,EAAIne,EAAK5M,OAAYsE,EAAIymB,EAAGzmB,KACxEqmB,GAAQrmB,KAAKsI,IACR+d,IAAIA,EAAK5d,MAAMmO,UAAUtW,MAAMvC,KAAKuK,EAAM,EAAGtI,IAClDqmB,EAAGrmB,GAAKsI,EAAKtI,IAGrB,OAAO6jB,EAAG6C,OAAOL,GAAM5d,MAAMmO,UAAUtW,MAAMvC,KAAKuK,GACtD,CAEO,SAASqe,GAAQ3nB,GACpB,OAAOlG,gBAAgB6tB,IAAW7tB,KAAKkG,EAAIA,EAAGlG,MAAQ,IAAI6tB,GAAQ3nB,EACtE,CAEO,SAAS4nB,GAAiB1B,EAASC,EAAYE,GAClD,IAAK3e,OAAOmgB,cAAe,MAAM,IAAIjhB,UAAU,wCAC/C,IAAoD5F,EAAhD+lB,EAAIV,EAAUlnB,MAAM+mB,EAASC,GAAc,IAAQ2B,EAAI,GAC3D,OAAO9mB,EAAIvB,OAAOyX,QAAiC,mBAAlB6Q,cAA+BA,cAAgBtoB,QAAQmY,WAAYqP,EAAK,QAASA,EAAK,SAAUA,EAAK,UACtI,SAAqBtgB,GAAK,OAAO,SAAU3G,GAAK,OAAO3G,QAAQC,QAAQ0G,GAAG4H,KAAKjB,EAAGU,EAAU,CAAG,IAD+DrG,EAAE0G,OAAOmgB,eAAiB,WAAc,OAAO/tB,IAAK,EAAIkH,EAEtN,SAASimB,EAAK9qB,EAAGwK,GAASogB,EAAE5qB,KAAM6E,EAAE7E,GAAK,SAAU6D,GAAK,OAAO,IAAI3G,SAAQ,SAAU8jB,EAAGC,GAAK0K,EAAE1mB,KAAK,CAACjF,EAAG6D,EAAGmd,EAAGC,IAAM,GAAK4K,EAAO7rB,EAAG6D,KAAS,EAAM2G,IAAG3F,EAAE7E,GAAKwK,EAAE3F,EAAE7E,KAAQ,CACxK,SAAS6rB,EAAO7rB,EAAG6D,GAAK,KACVyC,EADqBskB,EAAE5qB,GAAG6D,IACnBqF,iBAAiBsiB,GAAUtuB,QAAQC,QAAQmJ,EAAE4C,MAAMrF,GAAG4H,KAAKqgB,EAAS5gB,GAAU6gB,EAAOJ,EAAE,GAAG,GAAIrlB,EADvE,CAAG,MAAOkK,GAAKub,EAAOJ,EAAE,GAAG,GAAInb,GAC3E,IAAclK,CADoE,CAElF,SAASwlB,EAAQ5iB,GAAS2iB,EAAO,OAAQ3iB,EAAS,CAClD,SAASgC,EAAOhC,GAAS2iB,EAAO,QAAS3iB,EAAS,CAClD,SAAS6iB,EAAOvhB,EAAG3G,GAAS2G,EAAE3G,GAAI8nB,EAAEK,QAASL,EAAEprB,QAAQsrB,EAAOF,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAM,CACtF,CAQO,SAASM,GAAcjR,GAC1B,IAAKzP,OAAOmgB,cAAe,MAAM,IAAIjhB,UAAU,wCAC/C,IAAiC5F,EAA7BrF,EAAIwb,EAAEzP,OAAOmgB,eACjB,OAAOlsB,EAAIA,EAAEoD,KAAKoY,IAAMA,EAAqCgQ,GAAShQ,GAA2BnW,EAAI,CAAE,EAAEimB,EAAK,QAASA,EAAK,SAAUA,EAAK,UAAWjmB,EAAE0G,OAAOmgB,eAAiB,WAAc,OAAO/tB,IAAK,EAAIkH,GAC9M,SAASimB,EAAK9qB,GAAK6E,EAAE7E,GAAKgb,EAAEhb,IAAM,SAAU6D,GAAK,OAAO,IAAI3G,SAAQ,SAAUC,EAAS+N,IACvF,SAAgB/N,EAAS+N,EAAQxL,EAAGmE,GAAK3G,QAAQC,QAAQ0G,GAAG4H,MAAK,SAAS5H,GAAK1G,EAAQ,CAAE+L,MAAOrF,EAAGymB,KAAM5qB,GAAK,GAAIwL,EAAU,EADd6gB,CAAO5uB,EAAS+N,GAA7BrH,EAAImX,EAAEhb,GAAG6D,IAA8BymB,KAAMzmB,EAAEqF,MAAO,GAAM,CAAG,CAEpK,CAyBO,SAASyB,GAAuBN,EAAUC,EAAOC,EAAMC,GAC1D,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAE5H,KAAKyH,GAAYG,EAAIA,EAAEtB,MAAQoB,EAAM5G,IAAI2G,EACxF,CAEO,SAASD,GAAuBC,EAAUC,EAAOpB,EAAOqB,EAAMC,GACjE,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAE5H,KAAKyH,EAAUnB,GAASsB,EAAIA,EAAEtB,MAAQA,EAAQoB,EAAM1G,IAAIyG,EAAUnB,GAASA,CACxG,CChSO,SAASgjB,GAAWhjB,GACvB,MAAwB,mBAAVA,CAClB,CCFO,SAASijB,GAAiBC,GAC7B,IAIIC,EAAWD,GAJF,SAAUE,GACnBhvB,MAAMsF,KAAK0pB,GACXA,EAAShoB,OAAQ,IAAIhH,OAAQgH,KAChC,IAID,OAFA+nB,EAAS5Q,UAAYnY,OAAOyX,OAAOzd,MAAMme,WACzC4Q,EAAS5Q,UAAUle,YAAc8uB,EAC1BA,CACX,CFsTkD,mBAApBE,iBAAiCA,gBG9TxD,IAAIC,GAAsBL,IAAiB,SAAUM,GACxD,OAAO,SAAiCtc,GACpCsc,EAAO9uB,MACPA,KAAKH,QAAU2S,EACTA,EAAO5P,OAAS,4CAA8C4P,EAAO1L,KAAI,SAAUwI,EAAKpI,GAAK,OAAOA,EAAI,EAAI,KAAOoI,EAAI9I,UAAa,IAAEQ,KAAK,QAC3I,GACNhH,KAAKkB,KAAO,sBACZlB,KAAKwS,OAASA,CACjB,CACL,ICVO,SAASuc,GAAU1P,EAAK2P,GAC3B,GAAI3P,EAAK,CACL,IAAIza,EAAQya,EAAI4P,QAAQD,GACxB,GAAKpqB,GAASya,EAAIna,OAAON,EAAO,EACxC,CACA,CCDA,IAAIsqB,GAAgB,WAChB,SAASA,EAAaC,GAClBnvB,KAAKmvB,gBAAkBA,EACvBnvB,KAAKovB,QAAS,EACdpvB,KAAKqvB,WAAa,KAClBrvB,KAAKsvB,YAAc,IAC3B,CA+GyB,IACbC,EAIR,OAnHAL,EAAapR,UAAU0R,YAAc,WACjC,IAAIC,EAAK7kB,EAAI8kB,EAAKC,EACdnd,EACJ,IAAKxS,KAAKovB,OAAQ,CACdpvB,KAAKovB,QAAS,EACd,IAAIC,EAAarvB,KAAKqvB,WACtB,GAAIA,EAEA,GADArvB,KAAKqvB,WAAa,KACd1f,MAAMC,QAAQyf,GACd,IACI,IAAK,IAAIO,EAAevC,GAASgC,GAAaQ,EAAiBD,EAAa/P,QAASgQ,EAAelD,KAAMkD,EAAiBD,EAAa/P,OAAQ,CAC7HgQ,EAAetkB,MACrBukB,OAAO9vB,KAC5C,CACA,CACoB,MAAO+vB,GAASN,EAAM,CAAE9tB,MAAOouB,EAAQ,CAC/B,QACJ,IACQF,IAAmBA,EAAelD,OAAS/hB,EAAKglB,EAAaI,SAASplB,EAAG3F,KAAK2qB,EAC9G,CACgC,QAAE,GAAIH,EAAK,MAAMA,EAAI9tB,KAAM,CAC3D,MAGoB0tB,EAAWS,OAAO9vB,MAG1B,IAAIiwB,EAAmBjwB,KAAKmvB,gBAC5B,GAAIZ,GAAW0B,GACX,IACIA,GACpB,CACgB,MAAOpd,GACHL,EAASK,aAAagc,GAAsBhc,EAAEL,OAAS,CAACK,EAC5E,CAEY,IAAIyc,EAActvB,KAAKsvB,YACvB,GAAIA,EAAa,CACbtvB,KAAKsvB,YAAc,KACnB,IACI,IAAK,IAAIY,EAAgB7C,GAASiC,GAAca,EAAkBD,EAAcrQ,QAASsQ,EAAgBxD,KAAMwD,EAAkBD,EAAcrQ,OAAQ,CACnJ,IAAIuQ,EAAYD,EAAgB5kB,MAChC,IACI8kB,GAAcD,EAC1C,CACwB,MAAO9gB,GACHkD,EAASA,QAAuCA,EAAS,GACrDlD,aAAeuf,GACfrc,EAASgb,GAAcA,GAAc,GAAIF,GAAO9a,IAAU8a,GAAOhe,EAAIkD,SAGrEA,EAAOlL,KAAKgI,EAE5C,CACA,CACA,CACgB,MAAOghB,GAASZ,EAAM,CAAE/tB,MAAO2uB,EAAQ,CAC/B,QACJ,IACQH,IAAoBA,EAAgBxD,OAASgD,EAAKO,EAAcF,SAASL,EAAG1qB,KAAKirB,EAC7G,CAC4B,QAAE,GAAIR,EAAK,MAAMA,EAAI/tB,KAAM,CACvD,CACA,CACY,GAAI6Q,EACA,MAAM,IAAIqc,GAAoBrc,EAE9C,CACK,EACD0c,EAAapR,UAAUyS,IAAM,SAAUC,GACnC,IAAI5lB,EACJ,GAAI4lB,GAAYA,IAAaxwB,KACzB,GAAIA,KAAKovB,OACLiB,GAAcG,OAEb,CACD,GAAIA,aAAoBtB,EAAc,CAClC,GAAIsB,EAASpB,QAAUoB,EAASC,WAAWzwB,MACvC,OAEJwwB,EAASE,WAAW1wB,KACxC,EACiBA,KAAKsvB,YAA0C,QAA3B1kB,EAAK5K,KAAKsvB,mBAAgC,IAAP1kB,EAAgBA,EAAK,IAAItD,KAAKkpB,EACtG,CAEK,EACDtB,EAAapR,UAAU2S,WAAa,SAAUE,GAC1C,IAAItB,EAAarvB,KAAKqvB,WACtB,OAAOA,IAAesB,GAAWhhB,MAAMC,QAAQyf,IAAeA,EAAW9d,SAASof,EACrF,EACDzB,EAAapR,UAAU4S,WAAa,SAAUC,GAC1C,IAAItB,EAAarvB,KAAKqvB,WACtBrvB,KAAKqvB,WAAa1f,MAAMC,QAAQyf,IAAeA,EAAW/nB,KAAKqpB,GAAStB,GAAcA,EAAa,CAACA,EAAYsB,GAAUA,CAC7H,EACDzB,EAAapR,UAAU8S,cAAgB,SAAUD,GAC7C,IAAItB,EAAarvB,KAAKqvB,WAClBA,IAAesB,EACf3wB,KAAKqvB,WAAa,KAEb1f,MAAMC,QAAQyf,IACnBN,GAAUM,EAAYsB,EAE7B,EACDzB,EAAapR,UAAUgS,OAAS,SAAUU,GACtC,IAAIlB,EAActvB,KAAKsvB,YACvBA,GAAeP,GAAUO,EAAakB,GAClCA,aAAoBtB,GACpBsB,EAASI,cAAc5wB,KAE9B,EACDkvB,EAAa2B,QACLtB,EAAQ,IAAIL,GACVE,QAAS,EACRG,GAEJL,CACX,IAEW4B,GAAqB5B,GAAa2B,MACtC,SAASE,GAAexlB,GAC3B,OAAQA,aAAiB2jB,IACpB3jB,GAAS,WAAYA,GAASgjB,GAAWhjB,EAAMukB,SAAWvB,GAAWhjB,EAAMglB,MAAQhC,GAAWhjB,EAAMikB,YAC7G,CACA,SAASa,GAAcD,GACf7B,GAAW6B,GACXA,IAGAA,EAAUZ,aAElB,CC7IO,IAAI/jB,GAAS,CAChBulB,iBAAkB,KAClBC,sBAAuB,KACvB1xB,aAAS6R,EACT8f,uCAAuC,EACvCC,0BAA0B,GCJnBC,GAAkB,CACzB3xB,WAAY,SAAU4xB,EAAS/c,GAE3B,IADA,IAAInQ,EAAO,GACFmtB,EAAK,EAAGA,EAAK5D,UAAU9qB,OAAQ0uB,IACpCntB,EAAKmtB,EAAK,GAAK5D,UAAU4D,GAM7B,OAAO7xB,WAAW4F,WAAM,EAAQmoB,GAAc,CAAC6D,EAAS/c,GAAUgZ,GAAOnpB,IAC5E,EACDotB,aAAc,SAAUC,GACpB,IAAIC,EAAWL,GAAgBK,SAC/B,QAASA,aAA2C,EAASA,EAASF,eAAiBA,cAAcC,EACxG,EACDC,cAAUrgB,GCfP,SAASsgB,GAAqBpiB,GACjC8hB,GAAgB3xB,YAAW,WAMnB,MAAM6P,CAElB,GACA,CCZO,SAASqiB,KAAO,CCEhB,SAASC,GAAaC,GAgBrBA,GAER,CCXA,IAAIC,GAAc,SAAUhD,GAExB,SAASgD,EAAWC,GAChB,IAAIC,EAAQlD,EAAO7pB,KAAKjF,OAASA,KAWjC,OAVAgyB,EAAMC,WAAY,EACdF,GACAC,EAAMD,YAAcA,EAChBhB,GAAegB,IACfA,EAAYxB,IAAIyB,IAIpBA,EAAMD,YAAcG,GAEjBF,CACf,CAwDI,OAtEA/F,GAAU6F,EAAYhD,GAetBgD,EAAW1U,OAAS,SAAUyC,EAAMle,EAAOwwB,GACvC,OAAO,IAAIC,GAAevS,EAAMle,EAAOwwB,EAC1C,EACDL,EAAWhU,UAAU+B,KAAO,SAAUtU,GAC9BvL,KAAKiyB,WAILjyB,KAAKqyB,MAAM9mB,EAElB,EACDumB,EAAWhU,UAAUnc,MAAQ,SAAU2N,GAC/BtP,KAAKiyB,YAILjyB,KAAKiyB,WAAY,EACjBjyB,KAAKsyB,OAAOhjB,GAEnB,EACDwiB,EAAWhU,UAAUqU,SAAW,WACxBnyB,KAAKiyB,YAILjyB,KAAKiyB,WAAY,EACjBjyB,KAAKuyB,YAEZ,EACDT,EAAWhU,UAAU0R,YAAc,WAC1BxvB,KAAKovB,SACNpvB,KAAKiyB,WAAY,EACjBnD,EAAOhR,UAAU0R,YAAYvqB,KAAKjF,MAClCA,KAAK+xB,YAAc,KAE1B,EACDD,EAAWhU,UAAUuU,MAAQ,SAAU9mB,GACnCvL,KAAK+xB,YAAYlS,KAAKtU,EACzB,EACDumB,EAAWhU,UAAUwU,OAAS,SAAUhjB,GACpC,IACItP,KAAK+xB,YAAYpwB,MAAM2N,EACnC,CACgB,QACJtP,KAAKwvB,aACjB,CACK,EACDsC,EAAWhU,UAAUyU,UAAY,WAC7B,IACIvyB,KAAK+xB,YAAYI,UAC7B,CACgB,QACJnyB,KAAKwvB,aACjB,CACK,EACMsC,CACX,CAxEc,CAwEZ5C,IAEEsD,GAAQC,SAAS3U,UAAUe,KAC/B,SAASA,GAAK6T,EAAItG,GACd,OAAOoG,GAAMvtB,KAAKytB,EAAItG,EAC1B,CACA,IAAIuG,GAAoB,WACpB,SAASA,EAAiBC,GACtB5yB,KAAK4yB,gBAAkBA,CAC/B,CAqCI,OApCAD,EAAiB7U,UAAU+B,KAAO,SAAUtU,GACxC,IAAIqnB,EAAkB5yB,KAAK4yB,gBAC3B,GAAIA,EAAgB/S,KAChB,IACI+S,EAAgB/S,KAAKtU,EACrC,CACY,MAAO5J,GACHkxB,GAAqBlxB,EACrC,CAEK,EACDgxB,EAAiB7U,UAAUnc,MAAQ,SAAU2N,GACzC,IAAIsjB,EAAkB5yB,KAAK4yB,gBAC3B,GAAIA,EAAgBjxB,MAChB,IACIixB,EAAgBjxB,MAAM2N,EACtC,CACY,MAAO3N,GACHkxB,GAAqBlxB,EACrC,MAGYkxB,GAAqBvjB,EAE5B,EACDqjB,EAAiB7U,UAAUqU,SAAW,WAClC,IAAIS,EAAkB5yB,KAAK4yB,gBAC3B,GAAIA,EAAgBT,SAChB,IACIS,EAAgBT,UAChC,CACY,MAAOxwB,GACHkxB,GAAqBlxB,EACrC,CAEK,EACMgxB,CACX,IACIP,GAAkB,SAAUtD,GAE5B,SAASsD,EAAeU,EAAgBnxB,EAAOwwB,GAC3C,IACIS,EASIG,EAVJf,EAAQlD,EAAO7pB,KAAKjF,OAASA,KAE7BuuB,GAAWuE,KAAoBA,EAC/BF,EAAkB,CACd/S,KAAOiT,QAAuDA,OAAiB1hB,EAC/EzP,MAAOA,QAAqCA,OAAQyP,EACpD+gB,SAAUA,QAA2CA,OAAW/gB,GAKhE4gB,GAASvmB,GAAO0lB,2BAChB4B,EAAYptB,OAAOyX,OAAO0V,IAChBtD,YAAc,WAAc,OAAOwC,EAAMxC,aAAgB,EACnEoD,EAAkB,CACd/S,KAAMiT,EAAejT,MAAQhB,GAAKiU,EAAejT,KAAMkT,GACvDpxB,MAAOmxB,EAAenxB,OAASkd,GAAKiU,EAAenxB,MAAOoxB,GAC1DZ,SAAUW,EAAeX,UAAYtT,GAAKiU,EAAeX,SAAUY,KAIvEH,EAAkBE,EAI1B,OADAd,EAAMD,YAAc,IAAIY,GAAiBC,GAClCZ,CACf,CACI,OA7BA/F,GAAUmG,EAAgBtD,GA6BnBsD,CACX,CA/BkB,CA+BhBN,IAEF,SAASe,GAAqBlxB,GAKtB+vB,GAAqB/vB,EAE7B,CAQO,IAAIuwB,GAAiB,CACxB9C,QAAQ,EACRvP,KAAM8R,GACNhwB,MAVJ,SAA6B2N,GACzB,MAAMA,CACV,EASI6iB,SAAUR,ICrLHqB,GAAsD,mBAAXplB,QAAyBA,OAAOolB,YAAe,eCA9F,SAASC,GAASC,GACrB,OAAOA,CACX,CCKA,IAAIC,GAAc,WACd,SAASA,EAAWC,GACZA,IACApzB,KAAKqzB,WAAaD,EAE9B,CA4EI,OA3EAD,EAAWrV,UAAUwV,KAAO,SAAUjL,GAClC,IAAI2K,EAAa,IAAIG,EAGrB,OAFAH,EAAWO,OAASvzB,KACpBgzB,EAAW3K,SAAWA,EACf2K,CACV,EACDG,EAAWrV,UAAUsV,UAAY,SAAUN,EAAgBnxB,EAAOwwB,GAC9D,IA8Ec5mB,EA9EVymB,EAAQhyB,KACRwzB,GA6EUjoB,EA7EgBunB,IA8EjBvnB,aAAiBumB,IAJtC,SAAoBvmB,GAChB,OAAOA,GAASgjB,GAAWhjB,EAAMsU,OAAS0O,GAAWhjB,EAAM5J,QAAU4sB,GAAWhjB,EAAM4mB,SAC1F,CAEsDsB,CAAWloB,IAAUwlB,GAAexlB,GA9ElCunB,EAAiB,IAAIV,GAAeU,EAAgBnxB,EAAOwwB,GAY3G,OAXAP,IAAa,WACT,IAAIhnB,EAAKonB,EAAO3J,EAAWzd,EAAGyd,SAAUkL,EAAS3oB,EAAG2oB,OACpDC,EAAWjD,IAAIlI,EAEPA,EAASpjB,KAAKuuB,EAAYD,GAC5BA,EAEMvB,EAAMqB,WAAWG,GAEjBxB,EAAM0B,cAAcF,GAC5C,IACeA,CACV,EACDL,EAAWrV,UAAU4V,cAAgB,SAAUC,GAC3C,IACI,OAAO3zB,KAAKqzB,WAAWM,EACnC,CACQ,MAAOrkB,GACHqkB,EAAKhyB,MAAM2N,EACvB,CACK,EACD6jB,EAAWrV,UAAUhW,QAAU,SAAU+X,EAAM+T,GAC3C,IAAI5B,EAAQhyB,KAEZ,OAAO,IADP4zB,EAAcC,GAAeD,KACN,SAAUp0B,EAAS+N,GACtC,IAAIimB,EAAa,IAAIpB,GAAe,CAChCvS,KAAM,SAAUtU,GACZ,IACIsU,EAAKtU,EAC7B,CACoB,MAAO+D,GACH/B,EAAO+B,GACPkkB,EAAWhE,aACnC,CACiB,EACD7tB,MAAO4L,EACP4kB,SAAU3yB,IAEdwyB,EAAMoB,UAAUI,EAC5B,GACK,EACDL,EAAWrV,UAAUuV,WAAa,SAAUG,GACxC,IAAI5oB,EACJ,OAA8B,QAAtBA,EAAK5K,KAAKuzB,cAA2B,IAAP3oB,OAAgB,EAASA,EAAGwoB,UAAUI,EAC/E,EACDL,EAAWrV,UAAUgW,IAAqB,WACtC,OAAO9zB,IACV,EACDmzB,EAAWrV,UAAUiW,KAAO,WAExB,IADA,IC/DsBC,ED+DlBC,EAAa,GACR3C,EAAK,EAAGA,EAAK5D,UAAU9qB,OAAQ0uB,IACpC2C,EAAW3C,GAAM5D,UAAU4D,GAE/B,OClEe,KADO0C,EDmEDC,GClEjBrxB,OACGqwB,GAEQ,IAAfe,EAAIpxB,OACGoxB,EAAI,GAER,SAAeE,GAClB,OAAOF,EAAI9iB,QAAO,SAAUzM,EAAMiuB,GAAM,OAAOA,EAAGjuB,EAAQ,GAAEyvB,EAC/D,GD0DoCl0B,KACpC,EACDmzB,EAAWrV,UAAUqW,UAAY,SAAUP,GACvC,IAAI5B,EAAQhyB,KAEZ,OAAO,IADP4zB,EAAcC,GAAeD,KACN,SAAUp0B,EAAS+N,GACtC,IAAIhC,EACJymB,EAAMoB,WAAU,SAAUF,GAAK,OAAQ3nB,EAAQ2nB,CAAK,IAAE,SAAU5jB,GAAO,OAAO/B,EAAO+B,MAAS,WAAc,OAAO9P,EAAQ+L,KACvI,GACK,EACD4nB,EAAW/V,OAAS,SAAUgW,GAC1B,OAAO,IAAID,EAAWC,EACzB,EACMD,CACX,IAEA,SAASU,GAAeD,GACpB,IAAIhpB,EACJ,OAAgG,QAAxFA,EAAKgpB,QAAiDA,EAAcnoB,GAAOlM,eAA4B,IAAPqL,EAAgBA,EAAKrL,OACjI,CE1FO,SAAS60B,GAAQjuB,GACpB,OAAO,SAAUotB,GACb,GALD,SAAiBA,GACpB,OAAOhF,GAAWgF,aAAuC,EAASA,EAAOD,KAC7E,CAGYe,CAAQd,GACR,OAAOA,EAAOD,MAAK,SAAUgB,GACzB,IACI,OAAOnuB,EAAKmuB,EAAct0B,KAC9C,CACgB,MAAOsP,GACHtP,KAAK2B,MAAM2N,EAC/B,CACA,IAEQ,MAAM,IAAIxC,UAAU,yCACvB,CACL,CChBO,SAASynB,GAAyBxC,EAAayC,EAAQC,EAAYC,EAASC,GAC/E,OAAO,IAAIC,GAAmB7C,EAAayC,EAAQC,EAAYC,EAASC,EAC5E,CACA,IAAIC,GAAsB,SAAU9F,GAEhC,SAAS8F,EAAmB7C,EAAayC,EAAQC,EAAYC,EAASC,EAAYE,GAC9E,IAAI7C,EAAQlD,EAAO7pB,KAAKjF,KAAM+xB,IAAgB/xB,KAuC9C,OAtCAgyB,EAAM2C,WAAaA,EACnB3C,EAAM6C,kBAAoBA,EAC1B7C,EAAMK,MAAQmC,EACR,SAAUjpB,GACR,IACIipB,EAAOjpB,EAC3B,CACgB,MAAO+D,GACHyiB,EAAYpwB,MAAM2N,EACtC,CACA,EACcwf,EAAOhR,UAAUuU,MACvBL,EAAMM,OAASoC,EACT,SAAUplB,GACR,IACIolB,EAAQplB,EAC5B,CACgB,MAAOA,GACHyiB,EAAYpwB,MAAM2N,EACtC,CACwB,QACJtP,KAAKwvB,aACzB,CACA,EACcV,EAAOhR,UAAUwU,OACvBN,EAAMO,UAAYkC,EACZ,WACE,IACIA,GACpB,CACgB,MAAOnlB,GACHyiB,EAAYpwB,MAAM2N,EACtC,CACwB,QACJtP,KAAKwvB,aACzB,CACA,EACcV,EAAOhR,UAAUyU,UAChBP,CACf,CASI,OAnDA/F,GAAU2I,EAAoB9F,GA2C9B8F,EAAmB9W,UAAU0R,YAAc,WACvC,IAAI5kB,EACJ,IAAK5K,KAAK60B,mBAAqB70B,KAAK60B,oBAAqB,CACrD,IAAIC,EAAW90B,KAAKovB,OACpBN,EAAOhR,UAAU0R,YAAYvqB,KAAKjF,OACjC80B,IAAwC,QAA1BlqB,EAAK5K,KAAK20B,kBAA+B,IAAP/pB,GAAyBA,EAAG3F,KAAKjF,MAC9F,CACK,EACM40B,CACX,CArDsB,CAqDpB9C,ICzDSiD,GAA0BvG,IAAiB,SAAUM,GAC5D,OAAO,WACHA,EAAO9uB,MACPA,KAAKkB,KAAO,0BACZlB,KAAKH,QAAU,qBAClB,CACL,ICDIm1B,GAAW,SAAUlG,GAErB,SAASkG,IACL,IAAIhD,EAAQlD,EAAO7pB,KAAKjF,OAASA,KAOjC,OANAgyB,EAAM5C,QAAS,EACf4C,EAAMiD,iBAAmB,KACzBjD,EAAMkD,UAAY,GAClBlD,EAAMC,WAAY,EAClBD,EAAMmD,UAAW,EACjBnD,EAAMoD,YAAc,KACbpD,CACf,CAkHI,OA5HA/F,GAAU+I,EAASlG,GAWnBkG,EAAQlX,UAAUwV,KAAO,SAAUjL,GAC/B,IAAIgN,EAAU,IAAIC,GAAiBt1B,KAAMA,MAEzC,OADAq1B,EAAQhN,SAAWA,EACZgN,CACV,EACDL,EAAQlX,UAAUyX,eAAiB,WAC/B,GAAIv1B,KAAKovB,OACL,MAAM,IAAI2F,EAEjB,EACDC,EAAQlX,UAAU+B,KAAO,SAAUtU,GAC/B,IAAIymB,EAAQhyB,KACZ4xB,IAAa,WACT,IAAInC,EAAK7kB,EAET,GADAonB,EAAMuD,kBACDvD,EAAMC,UAAW,CACbD,EAAMiD,mBACPjD,EAAMiD,iBAAmBtlB,MAAMH,KAAKwiB,EAAMkD,YAE9C,IACI,IAAK,IAAIvF,EAAKtC,GAAS2E,EAAMiD,kBAAmBO,EAAK7F,EAAG9P,QAAS2V,EAAG7I,KAAM6I,EAAK7F,EAAG9P,OAAQ,CACvE2V,EAAGjqB,MACTsU,KAAKtU,EACtC,CACA,CACgB,MAAOwkB,GAASN,EAAM,CAAE9tB,MAAOouB,EAAQ,CAC/B,QACJ,IACQyF,IAAOA,EAAG7I,OAAS/hB,EAAK+kB,EAAGK,SAASplB,EAAG3F,KAAK0qB,EACxE,CAC4B,QAAE,GAAIF,EAAK,MAAMA,EAAI9tB,KAAM,CACvD,CACA,CACA,GACK,EACDqzB,EAAQlX,UAAUnc,MAAQ,SAAU2N,GAChC,IAAI0iB,EAAQhyB,KACZ4xB,IAAa,WAET,GADAI,EAAMuD,kBACDvD,EAAMC,UAAW,CAClBD,EAAMmD,SAAWnD,EAAMC,WAAY,EACnCD,EAAMoD,YAAc9lB,EAEpB,IADA,IAAI4lB,EAAYlD,EAAMkD,UACfA,EAAUtyB,QACbsyB,EAAU7G,QAAQ1sB,MAAM2N,EAE5C,CACA,GACK,EACD0lB,EAAQlX,UAAUqU,SAAW,WACzB,IAAIH,EAAQhyB,KACZ4xB,IAAa,WAET,GADAI,EAAMuD,kBACDvD,EAAMC,UAAW,CAClBD,EAAMC,WAAY,EAElB,IADA,IAAIiD,EAAYlD,EAAMkD,UACfA,EAAUtyB,QACbsyB,EAAU7G,QAAQ8D,UAEtC,CACA,GACK,EACD6C,EAAQlX,UAAU0R,YAAc,WAC5BxvB,KAAKiyB,UAAYjyB,KAAKovB,QAAS,EAC/BpvB,KAAKk1B,UAAYl1B,KAAKi1B,iBAAmB,IAC5C,EACDtvB,OAAOC,eAAeovB,EAAQlX,UAAW,WAAY,CACjD/X,IAAK,WACD,IAAI6E,EACJ,OAAkC,QAAzBA,EAAK5K,KAAKk1B,iBAA8B,IAAPtqB,OAAgB,EAASA,EAAGhI,QAAU,CACnF,EACDiD,YAAY,EACZC,cAAc,IAElBkvB,EAAQlX,UAAU4V,cAAgB,SAAUF,GAExC,OADAxzB,KAAKu1B,iBACEzG,EAAOhR,UAAU4V,cAAczuB,KAAKjF,KAAMwzB,EACpD,EACDwB,EAAQlX,UAAUuV,WAAa,SAAUG,GAGrC,OAFAxzB,KAAKu1B,iBACLv1B,KAAKy1B,wBAAwBjC,GACtBxzB,KAAK01B,gBAAgBlC,EAC/B,EACDwB,EAAQlX,UAAU4X,gBAAkB,SAAUlC,GAC1C,IAAIxB,EAAQhyB,KACR4K,EAAK5K,KAAMm1B,EAAWvqB,EAAGuqB,SAAUlD,EAAYrnB,EAAGqnB,UAAWiD,EAAYtqB,EAAGsqB,UAChF,OAAIC,GAAYlD,EACLnB,IAEX9wB,KAAKi1B,iBAAmB,KACxBC,EAAU5tB,KAAKksB,GACR,IAAItE,IAAa,WACpB8C,EAAMiD,iBAAmB,KACzBlG,GAAUmG,EAAW1B,EACjC,IACK,EACDwB,EAAQlX,UAAU2X,wBAA0B,SAAUjC,GAClD,IAAI5oB,EAAK5K,KAAMm1B,EAAWvqB,EAAGuqB,SAAUC,EAAcxqB,EAAGwqB,YAAanD,EAAYrnB,EAAGqnB,UAChFkD,EACA3B,EAAW7xB,MAAMyzB,GAEZnD,GACLuB,EAAWrB,UAElB,EACD6C,EAAQlX,UAAU6X,aAAe,WAC7B,IAAI3C,EAAa,IAAIG,GAErB,OADAH,EAAWO,OAASvzB,KACbgzB,CACV,EACDgC,EAAQ5X,OAAS,SAAU2U,EAAawB,GACpC,OAAO,IAAI+B,GAAiBvD,EAAawB,EAC5C,EACMyB,CACX,CA9HW,CA8HT7B,IAEEmC,GAAoB,SAAUxG,GAE9B,SAASwG,EAAiBvD,EAAawB,GACnC,IAAIvB,EAAQlD,EAAO7pB,KAAKjF,OAASA,KAGjC,OAFAgyB,EAAMD,YAAcA,EACpBC,EAAMuB,OAASA,EACRvB,CACf,CAiBI,OAvBA/F,GAAUqJ,EAAkBxG,GAO5BwG,EAAiBxX,UAAU+B,KAAO,SAAUtU,GACxC,IAAIX,EAAI+kB,EACwE,QAA/EA,EAAiC,QAA3B/kB,EAAK5K,KAAK+xB,mBAAgC,IAAPnnB,OAAgB,EAASA,EAAGiV,YAAyB,IAAP8P,GAAyBA,EAAG1qB,KAAK2F,EAAIW,EAChI,EACD+pB,EAAiBxX,UAAUnc,MAAQ,SAAU2N,GACzC,IAAI1E,EAAI+kB,EACyE,QAAhFA,EAAiC,QAA3B/kB,EAAK5K,KAAK+xB,mBAAgC,IAAPnnB,OAAgB,EAASA,EAAGjJ,aAA0B,IAAPguB,GAAyBA,EAAG1qB,KAAK2F,EAAI0E,EACjI,EACDgmB,EAAiBxX,UAAUqU,SAAW,WAClC,IAAIvnB,EAAI+kB,EAC4E,QAAnFA,EAAiC,QAA3B/kB,EAAK5K,KAAK+xB,mBAAgC,IAAPnnB,OAAgB,EAASA,EAAGunB,gBAA6B,IAAPxC,GAAyBA,EAAG1qB,KAAK2F,EAChI,EACD0qB,EAAiBxX,UAAUuV,WAAa,SAAUG,GAC9C,IAAI5oB,EAAI+kB,EACR,OAAmG,QAA3FA,EAA4B,QAAtB/kB,EAAK5K,KAAKuzB,cAA2B,IAAP3oB,OAAgB,EAASA,EAAGwoB,UAAUI,UAAgC,IAAP7D,EAAgBA,EAAKmB,EACnI,EACMwE,CACX,CAzBoB,CAyBlBN,IC7JF,SAASY,GAAKvW,GACV,OAAOA,EAAIA,EAAIzc,OAAS,EAC5B,CAIO,SAASizB,GAAa1xB,GACzB,OCRwBoH,EDQLqqB,GAAKzxB,KCPRoqB,GAAWhjB,EAAMuqB,UDOA3xB,EAAKwkB,WAAQvX,ECR3C,IAAqB7F,CDS5B,CEVO,IAAIwqB,YAAyB7C,GAAK,OAAOA,GAAyB,iBAAbA,EAAEtwB,QAAoC,mBAANswB,CAAmB,ECCxG,SAAS8C,GAAUzqB,GACtB,OAAOgjB,GAAWhjB,aAAqC,EAASA,EAAMuC,KAC1E,CCDO,SAASmoB,GAAoB/B,GAChC,OAAO3F,GAAW2F,EAAMJ,IAC5B,CCHO,SAASoC,GAAgBC,GAC5B,OAAOvoB,OAAOmgB,eAAiBQ,GAAW4H,aAAiC,EAASA,EAAIvoB,OAAOmgB,eACnG,CCHO,SAASqI,GAAiClC,GAC7C,OAAO,IAAIpnB,UAAU,iBAA6B,OAAVonB,GAAmC,iBAAVA,EAAqB,oBAAsB,IAAMA,EAAQ,KAAO,2HACrI,CCIO,IAAI9G,GALe,mBAAXxf,QAA0BA,OAAOwf,SAGrCxf,OAAOwf,SAFH,aCAR,SAASiJ,GAAWnC,GACvB,OAAO3F,GAAW2F,aAAqC,EAASA,EAAMoC,IAC1E,CCFO,SAASC,GAAmCC,GAC/C,OAAO1I,GAAiB9tB,KAAM0tB,WAAW,WACrC,IAAI+I,EAAQ7rB,EAAIW,EAChB,OAAOqhB,GAAY5sB,MAAM,SAAU2vB,GAC/B,OAAQA,EAAG9C,OACP,KAAK,EACD4J,EAASD,EAAeE,YACxB/G,EAAG9C,MAAQ,EACf,KAAK,EACD8C,EAAG5C,KAAKzlB,KAAK,CAAC,EAAK,CAAA,EAAG,KACtBqoB,EAAG9C,MAAQ,EACf,KAAK,EAED,MAAO,CAAC,EAAGgB,GAAQ4I,EAAOE,SAC9B,KAAK,EAED,OADA/rB,EAAK+kB,EAAG7C,OAAQvhB,EAAQX,EAAGW,MAAcX,EAAG+hB,KAErC,CAAC,EAAGkB,QAAQ,IADD,CAAC,EAAG,GAE1B,KAAK,EAAG,MAAO,CAAC,EAAG8B,EAAG7C,QACtB,KAAK,EAAG,MAAO,CAAC,EAAGe,GAAQtiB,IAC3B,KAAK,EAAG,MAAO,CAAC,EAAGokB,EAAG7C,QACtB,KAAK,EAED,OADA6C,EAAG7C,OACI,CAAC,EAAG,GACf,KAAK,EAAG,MAAO,CAAC,EAAG,IACnB,KAAK,EAED,OADA2J,EAAOG,cACA,CAAC,GACZ,KAAK,GAAI,MAAO,CAAC,GAEjC,GACA,GACA,CACO,SAASC,GAAqBV,GACjC,OAAO5H,GAAW4H,aAAiC,EAASA,EAAIO,UACpE,CCzBO,SAASI,GAAU5C,GACtB,GAAIA,aAAiBf,GACjB,OAAOe,EAEX,GAAa,MAATA,EAAe,CACf,GAAI+B,GAAoB/B,GACpB,OAoB0BiC,EApBGjC,EAqB9B,IAAIf,IAAW,SAAUK,GAC5B,IAAIuD,EAAMZ,EAAIrC,MACd,GAAIvF,GAAWwI,EAAI3D,WACf,OAAO2D,EAAI3D,UAAUI,GAEzB,MAAM,IAAI1mB,UAAU,iEAC5B,IAzBQ,GAAIipB,GAAY7B,GACZ,OA0BkB8C,EA1BG9C,EA2BtB,IAAIf,IAAW,SAAUK,GAC5B,IAAK,IAAItsB,EAAI,EAAGA,EAAI8vB,EAAMp0B,SAAW4wB,EAAWpE,OAAQloB,IACpDssB,EAAW3T,KAAKmX,EAAM9vB,IAE1BssB,EAAWrB,UACnB,IA9BQ,GAAI6D,GAAU9B,GACV,OA+BgB+C,EA/BG/C,EAgCpB,IAAIf,IAAW,SAAUK,GAC5ByD,EACKnpB,MAAK,SAAUvC,GACXioB,EAAWpE,SACZoE,EAAW3T,KAAKtU,GAChBioB,EAAWrB,WAE3B,IAAW,SAAU7iB,GAAO,OAAOkkB,EAAW7xB,MAAM2N,EAAO,IAC9CxB,KAAK,KAAM4jB,GACxB,IAvCQ,GAAIwE,GAAgBhC,GAChB,OAAOgD,GAAkBhD,GAE7B,GAAImC,GAAWnC,GACX,OAqCiBiD,EArCGjD,EAsCrB,IAAIf,IAAW,SAAUK,GAC5B,IAAI/D,EAAK7kB,EACT,IACI,IAAK,IAAIwsB,EAAa/J,GAAS8J,GAAWE,EAAeD,EAAWvX,QAASwX,EAAa1K,KAAM0K,EAAeD,EAAWvX,OAAQ,CAC9H,IAAItU,EAAQ8rB,EAAa9rB,MAEzB,GADAioB,EAAW3T,KAAKtU,GACZioB,EAAWpE,OACX,MAEpB,CACA,CACQ,MAAOW,GAASN,EAAM,CAAE9tB,MAAOouB,EAAQ,CAC/B,QACJ,IACQsH,IAAiBA,EAAa1K,OAAS/hB,EAAKwsB,EAAWpH,SAASplB,EAAG3F,KAAKmyB,EAC5F,CACoB,QAAE,GAAI3H,EAAK,MAAMA,EAAI9tB,KAAM,CAC/C,CACQ6xB,EAAWrB,UACnB,IAvDQ,GAAI0E,GAAqB3C,GACrB,OA8DDgD,GAAkBX,GA9DarC,GAE1C,CA2DO,IA3BsBiD,EAZDF,EARED,EATQb,EAFlC,MAAMC,GAAiClC,EAC3C,CAoDO,SAASgD,GAAkBI,GAC9B,OAAO,IAAInE,IAAW,SAAUK,IAOpC,SAAiB8D,EAAe9D,GAC5B,IAAI+D,EAAiBC,EACjB9H,EAAK9kB,EACT,OAAOuhB,GAAUnsB,UAAM,OAAQ,GAAQ,WACnC,IAAIuL,EAAO+kB,EACX,OAAO1D,GAAY5sB,MAAM,SAAU2vB,GAC/B,OAAQA,EAAG9C,OACP,KAAK,EACD8C,EAAG5C,KAAKzlB,KAAK,CAAC,EAAG,EAAG,EAAG,KACvBiwB,EAAkBjJ,GAAcgJ,GAChC3H,EAAG9C,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAG0K,EAAgB1X,QACnC,KAAK,EACD,IAAM2X,EAAoB7H,EAAG7C,QAA2BH,KAAO,MAAO,CAAC,EAAG,GAG1E,GAFAphB,EAAQisB,EAAkBjsB,MAC1BioB,EAAW3T,KAAKtU,GACZioB,EAAWpE,OACX,MAAO,CAAC,GAEZO,EAAG9C,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAG,GACnB,KAAK,EAAG,MAAO,CAAC,EAAG,IACnB,KAAK,EAGD,OAFAyD,EAAQX,EAAG7C,OACX4C,EAAM,CAAE/tB,MAAO2uB,GACR,CAAC,EAAG,IACf,KAAK,EAED,OADAX,EAAG5C,KAAKzlB,KAAK,CAAC,EAAK,CAAA,EAAG,KAChBkwB,IAAsBA,EAAkB7K,OAAS/hB,EAAK2sB,EAAgBvH,QACrE,CAAC,EAAGplB,EAAG3F,KAAKsyB,IAD0E,CAAC,EAAG,GAErG,KAAK,EACD5H,EAAG7C,OACH6C,EAAG9C,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAG,IACnB,KAAK,EACD,GAAI6C,EAAK,MAAMA,EAAI/tB,MACnB,MAAO,CAAC,GACZ,KAAK,GAAI,MAAO,CAAC,GACjB,KAAK,GAED,OADA6xB,EAAWrB,WACJ,CAAC,GAE5B,GACA,GACA,EAlDQtxB,CAAQy2B,EAAe9D,GAAYvlB,OAAM,SAAUqB,GAAO,OAAOkkB,EAAW7xB,MAAM2N,EAAK,GAC/F,GACA,CC7FO,SAASmoB,GAAgBC,EAAoBC,EAAWC,EAAMC,EAAOC,QAC1D,IAAVD,IAAoBA,EAAQ,QACjB,IAAXC,IAAqBA,GAAS,GAClC,IAAIC,EAAuBJ,EAAU7B,UAAS,WAC1C8B,IACIE,EACAJ,EAAmBnH,IAAIvwB,KAAK81B,SAAS,KAAM+B,IAG3C73B,KAAKwvB,aAEZ,GAAEqI,GAEH,GADAH,EAAmBnH,IAAIwH,IAClBD,EACD,OAAOC,CAEf,CCbO,SAASC,GAAUL,EAAWE,GAEjC,YADc,IAAVA,IAAoBA,EAAQ,GACzBzD,IAAQ,SAAUb,EAAQC,GAC7BD,EAAOH,UAAUmB,GAAyBf,GAAY,SAAUjoB,GAAS,OAAOksB,GAAgBjE,EAAYmE,GAAW,WAAc,OAAOnE,EAAW3T,KAAKtU,KAAWssB,EAAO,IAAI,WAAc,OAAOJ,GAAgBjE,EAAYmE,GAAW,WAAc,OAAOnE,EAAWrB,UAAa,GAAE0F,MAAW,SAAUvoB,GAAO,OAAOmoB,GAAgBjE,EAAYmE,GAAW,WAAc,OAAOnE,EAAW7xB,MAAM2N,KAASuoB,EAAO,IACra,GACA,CCPO,SAASI,GAAYN,EAAWE,GAEnC,YADc,IAAVA,IAAoBA,EAAQ,GACzBzD,IAAQ,SAAUb,EAAQC,GAC7BA,EAAWjD,IAAIoH,EAAU7B,UAAS,WAAc,OAAOvC,EAAOH,UAAUI,EAAc,GAAEqE,GAChG,GACA,CCJO,SAASK,GAAsBhE,EAAOyD,GACzC,IAAKzD,EACD,MAAM,IAAIv0B,MAAM,2BAEpB,OAAO,IAAIwzB,IAAW,SAAUK,GAC5BiE,GAAgBjE,EAAYmE,GAAW,WACnC,IAAIvK,EAAW8G,EAAMtmB,OAAOmgB,iBAC5B0J,GAAgBjE,EAAYmE,GAAW,WACnCvK,EAASvN,OAAO/R,MAAK,SAAUyE,GACvBA,EAAOoa,KACP6G,EAAWrB,WAGXqB,EAAW3T,KAAKtN,EAAOhH,MAE/C,GACA,GAAe,GAAG,EAClB,GACA,GACA,CCRO,SAAS4sB,GAAUjE,EAAOyD,GAC7B,GAAa,MAATzD,EAAe,CACf,GAAI+B,GAAoB/B,GACpB,OCbL,SAA4BA,EAAOyD,GACtC,OAAOb,GAAU5C,GAAOH,KAAKkE,GAAYN,GAAYK,GAAUL,GACnE,CDWmBS,CAAmBlE,EAAOyD,GAErC,GAAI5B,GAAY7B,GACZ,OElBL,SAAuBA,EAAOyD,GACjC,OAAO,IAAIxE,IAAW,SAAUK,GAC5B,IAAItsB,EAAI,EACR,OAAOywB,EAAU7B,UAAS,WAClB5uB,IAAMgtB,EAAMtxB,OACZ4wB,EAAWrB,YAGXqB,EAAW3T,KAAKqU,EAAMhtB,MACjBssB,EAAWpE,QACZpvB,KAAK81B,WAGzB,GACA,GACA,CFGmBuC,CAAcnE,EAAOyD,GAEhC,GAAI3B,GAAU9B,GACV,OGnBL,SAAyBA,EAAOyD,GACnC,OAAOb,GAAU5C,GAAOH,KAAKkE,GAAYN,GAAYK,GAAUL,GACnE,CHiBmBW,CAAgBpE,EAAOyD,GAElC,GAAIzB,GAAgBhC,GAChB,OAAOgE,GAAsBhE,EAAOyD,GAExC,GAAItB,GAAWnC,GACX,OIxBL,SAA0BA,EAAOyD,GACpC,OAAO,IAAIxE,IAAW,SAAUK,GAC5B,IAAIpG,EAsBJ,OArBAqK,GAAgBjE,EAAYmE,GAAW,WACnCvK,EAAW8G,EAAMoC,MACjBmB,GAAgBjE,EAAYmE,GAAW,WACnC,IAAI/sB,EACAW,EACAohB,EACJ,IAC2BphB,GAAtBX,EAAKwiB,EAASvN,QAAmBtU,MAAOohB,EAAO/hB,EAAG+hB,IACvE,CACgB,MAAOrd,GAEH,YADAkkB,EAAW7xB,MAAM2N,EAErC,CACoBqd,EACA6G,EAAWrB,WAGXqB,EAAW3T,KAAKtU,EAEpC,GAAe,GAAG,EAClB,IACe,WAAc,OAAOgjB,GAAWnB,aAA2C,EAASA,EAAS4C,SAAW5C,EAAS4C,QAAW,CAC3I,GACA,CJFmBuI,CAAiBrE,EAAOyD,GAEnC,GAAId,GAAqB3C,GACrB,OK7BL,SAAoCA,EAAOyD,GAC9C,OAAOO,GAAsB3B,GAAmCrC,GAAQyD,EAC5E,CL2BmBa,CAA2BtE,EAAOyD,EAErD,CACI,MAAMvB,GAAiClC,EAC3C,CMjCO,SAAS1kB,GAAK0kB,EAAOyD,GACxB,OAAOA,EAAYQ,GAAUjE,EAAOyD,GAAab,GAAU5C,EAC/D,CCFO,SAASuE,KAEZ,IADA,IAAIt0B,EAAO,GACFmtB,EAAK,EAAGA,EAAK5D,UAAU9qB,OAAQ0uB,IACpCntB,EAAKmtB,GAAM5D,UAAU4D,GAGzB,OAAO9hB,GAAKrL,EADI0xB,GAAa1xB,GAEjC,CCRO,IAAIu0B,GAAalK,IAAiB,SAAUM,GAAU,OAAO,WAChEA,EAAO9uB,MACPA,KAAKkB,KAAO,aACZlB,KAAKH,QAAU,yBACnB,KCJO,SAAS84B,GAAcpF,EAAQ9nB,GAElC,OAAO,IAAIlM,SAAQ,SAAUC,EAAS+N,GAClC,IACIqrB,EADAC,GAAY,EAEhBtF,EAAOH,UAAU,CACbvT,KAAM,SAAUtU,GACZqtB,EAASrtB,EACTstB,GAAY,CACf,EACDl3B,MAAO4L,EACP4kB,SAAU,WACF0G,EACAr5B,EAAQo5B,GAMRrrB,EAAO,IAAImrB,GAElB,GAEb,GACA,CCvBO,SAAS5xB,GAAIgyB,EAAS1M,GACzB,OAAOgI,IAAQ,SAAUb,EAAQC,GAC7B,IAAI5uB,EAAQ,EACZ2uB,EAAOH,UAAUmB,GAAyBf,GAAY,SAAUjoB,GAC5DioB,EAAW3T,KAAKiZ,EAAQ7zB,KAAKmnB,EAAS7gB,EAAO3G,KACzD,IACA,GACA,CCJO,SAASm0B,GAASD,EAASE,EAAgBC,GAE9C,YADmB,IAAfA,IAAyBA,EAAaC,KACtC3K,GAAWyK,GACJD,IAAS,SAAU1V,EAAGnc,GAAK,OAAOJ,IAAI,SAAUwc,EAAG6V,GAAM,OAAOH,EAAe3V,EAAGC,EAAGpc,EAAGiyB,EAAM,GAA5DryB,CAA8DgwB,GAAUgC,EAAQzV,EAAGnc,IAAK,GAAI+xB,IAEtG,iBAAnBD,IACZC,EAAaD,GAEV5E,IAAQ,SAAUb,EAAQC,GAAc,OCV5C,SAAwBD,EAAQC,EAAYsF,EAASG,EAAYG,EAAcC,EAAQC,GAC1F,IAAIC,EAAS,GACTC,EAAS,EACT50B,EAAQ,EACR60B,GAAa,EACbC,EAAgB,YACZD,GAAeF,EAAO32B,QAAW42B,GACjChG,EAAWrB,UAElB,EAEGwH,EAAa,SAAUpuB,GAEvBiuB,IACA,IAAII,GAAgB,EACpB9C,GAAUgC,EAAQvtB,EAAO3G,MAAUwuB,UAAUmB,GAAyBf,GAAY,SAAUqG,GAMpFrG,EAAW3T,KAAKga,EAEhC,IAAW,WACCD,GAAgB,CACnB,QAAExoB,GAAW,WACV,GAAIwoB,EACA,IAWI,IAVAJ,IAUOD,EAAO32B,QAAU42B,EAASP,GARzBa,WAAgBP,EAAOlL,QACvBiL,GAIAK,EAAWG,GAMnBJ,GACpB,CACgB,MAAOpqB,GACHkkB,EAAW7xB,MAAM2N,EACrC,CAhBkC,IACNwqB,CAiB5B,IACK,EAKD,OAJAvG,EAAOH,UAAUmB,GAAyBf,GAvC1B,SAAUjoB,GAAS,OAAQiuB,EAASP,EAAaU,EAAWpuB,GAASguB,EAAOjyB,KAAKiE,EAAU,IAuC1C,WAC7DkuB,GAAa,EACbC,GACR,KACW,WAEN,CACL,CD9C0DK,CAAexG,EAAQC,EAAYsF,EAASG,EAAY,IAClH,CEdA,IAAIrpB,GAAUD,MAAMC,QCEb,SAASM,GAAO8pB,EAAW5N,GAC9B,OAAOgI,IAAQ,SAAUb,EAAQC,GAC7B,IAAI5uB,EAAQ,EACZ2uB,EAAOH,UAAUmB,GAAyBf,GAAY,SAAUjoB,GAAS,OAAOyuB,EAAU/0B,KAAKmnB,EAAS7gB,EAAO3G,MAAY4uB,EAAW3T,KAAKtU,EAAO,IAC1J,GACA,CCJO,SAAS0uB,GAAWC,GACvB,OAAO9F,IAAQ,SAAUb,EAAQC,GAC7B,IAEI2G,EAFAC,EAAW,KACXC,GAAY,EAEhBD,EAAW7G,EAAOH,UAAUmB,GAAyBf,OAAYpiB,OAAWA,GAAW,SAAU9B,GAC7F6qB,EAAgBrD,GAAUoD,EAAS5qB,EAAK2qB,GAAWC,EAAXD,CAAqB1G,KACzD6G,GACAA,EAAS5K,cACT4K,EAAW,KACXD,EAAc/G,UAAUI,IAGxB6G,GAAY,CAE5B,KACYA,IACAD,EAAS5K,cACT4K,EAAW,KACXD,EAAc/G,UAAUI,GAEpC,GACA,CCvBO,SAAStiB,GAAOopB,EAAaC,GAChC,OAAOnG,GCFJ,SAAuBkG,EAAaC,EAAMC,GAC7C,OAAO,SAAUjH,EAAQC,GACrB,IAAIiH,EAAWD,EACX7tB,EAAQ4tB,EACR31B,EAAQ,EACZ2uB,EAAOH,UAAUmB,GAAyBf,GAAY,SAAUjoB,GAC5D,IAAIrE,EAAItC,IACR+H,EAAQ8tB,EAEAH,EAAY3tB,EAAOpB,EAAOrE,IAExBuzB,GAAW,EAAOlvB,EAE/B,IACG,WACIkvB,GAAYjH,EAAW3T,KAAKlT,GAC5B6mB,EAAWrB,UACd,IACR,CACL,CDjBmBuI,CAAcJ,EAAaC,EAAM7M,UAAU9qB,QAAU,GACxE,CEFA,IAAI+3B,GAAa,SAAUtb,EAAK9T,GAAS,OAAQ8T,EAAI/X,KAAKiE,GAAQ8T,CAAO,ECDlE,SAASub,GAASC,GACrB,OAAOzG,IAAQ,SAAUb,EAAQC,GAC7B,IACID,EAAOH,UAAUI,EAC7B,CACgB,QACJA,EAAWjD,IAAIsK,EAC3B,CACA,GACA,CCJO,SAASC,KAEZ,IADA,IAAI32B,EAAO,GACFmtB,EAAK,EAAGA,EAAK5D,UAAU9qB,OAAQ0uB,IACpCntB,EAAKmtB,GAAM5D,UAAU4D,GAEzB,IAAIqG,EAAY9B,GAAa1xB,GACzB80B,EnCDD,SAAmB90B,EAAM42B,GAC5B,MAA6B,iBAAfnF,GAAKzxB,GAAqBA,EAAKwkB,MAAQoS,CACzD,CmCDqBC,CAAU72B,EAAM+0B,KAEjC,OADA/0B,EPZG,SAAwBA,GAC3B,OAAuB,IAAhBA,EAAKvB,QAAgBgN,GAAQzL,EAAK,IAAMA,EAAK,GAAKA,CAC7D,COUW82B,CAAe92B,GACfiwB,IAAQ,SAAUb,EAAQC,ICZ9B,SAAkByF,GAErB,YADmB,IAAfA,IAAyBA,EAAaC,KACnCH,GAAS9F,GAAUgG,EAC9B,EDUQiC,CAASjC,EAATiC,CAAqB1rB,GAAKge,GAAc,CAAC+F,GAASjG,GAAOnpB,IAAQwzB,IAAYvE,UAAUI,EAC/F,GACA,CEdO,SAAS2H,GAAUrC,EAASE,GAC/B,OAAO5E,IAAQ,SAAUb,EAAQC,GAC7B,IAAI4H,EAAkB,KAClBx2B,EAAQ,EACR60B,GAAa,EACbC,EAAgB,WAAc,OAAOD,IAAe2B,GAAmB5H,EAAWrB,UAAa,EACnGoB,EAAOH,UAAUmB,GAAyBf,GAAY,SAAUjoB,GAC5D6vB,SAAkEA,EAAgB5L,cAClF,IAAI6L,EAAa,EACbC,EAAa12B,IACjBkyB,GAAUgC,EAAQvtB,EAAO+vB,IAAalI,UAAWgI,EAAkB7G,GAAyBf,GAAY,SAAUqG,GAAc,OAAOrG,EAAW3T,KAAKmZ,EAAiBA,EAAeztB,EAAOsuB,EAAYyB,EAAYD,KAAgBxB,EAAc,IAAE,WAClPuB,EAAkB,KAClB1B,GAChB,IACA,IAAW,WACCD,GAAa,EACbC,GACZ,IACA,GACA,CClBO,SAAS6B,GAAUC,GACtB,OAAOpH,IAAQ,SAAUb,EAAQC,GAC7BsD,GAAU0E,GAAUpI,UAAUmB,GAAyBf,GAAY,WAAc,OAAOA,EAAWrB,UAAa,GAAER,MACjH6B,EAAWpE,QAAUmE,EAAOH,UAAUI,EAC/C,GACA,CCLO,SAASiI,GAAI3I,EAAgBnxB,EAAOwwB,GACvC,IAAIuJ,EAAcnN,GAAWuE,IAAmBnxB,GAASwwB,EAEjD,CAAEtS,KAAMiT,EAAgBnxB,MAAOA,EAAOwwB,SAAUA,GAClDW,EACN,OAAO4I,EACDtH,IAAQ,SAAUb,EAAQC,GACxB,IAAI5oB,EAC6B,QAAhCA,EAAK8wB,EAAYtI,iBAA8B,IAAPxoB,GAAyBA,EAAG3F,KAAKy2B,GAC1E,IAAIC,GAAU,EACdpI,EAAOH,UAAUmB,GAAyBf,GAAY,SAAUjoB,GAC5D,IAAIX,EACwB,QAA3BA,EAAK8wB,EAAY7b,YAAyB,IAAPjV,GAAyBA,EAAG3F,KAAKy2B,EAAanwB,GAClFioB,EAAW3T,KAAKtU,EAChC,IAAe,WACC,IAAIX,EACJ+wB,GAAU,EACsB,QAA/B/wB,EAAK8wB,EAAYvJ,gBAA6B,IAAPvnB,GAAyBA,EAAG3F,KAAKy2B,GACzElI,EAAWrB,UACd,IAAE,SAAU7iB,GACT,IAAI1E,EACJ+wB,GAAU,EACmB,QAA5B/wB,EAAK8wB,EAAY/5B,aAA0B,IAAPiJ,GAAyBA,EAAG3F,KAAKy2B,EAAapsB,GACnFkkB,EAAW7xB,MAAM2N,EACjC,IAAe,WACC,IAAI1E,EAAI+kB,EACJgM,IACmC,QAAlC/wB,EAAK8wB,EAAYlM,mBAAgC,IAAP5kB,GAAyBA,EAAG3F,KAAKy2B,IAEhD,QAA/B/L,EAAK+L,EAAYd,gBAA6B,IAAPjL,GAAyBA,EAAG1qB,KAAKy2B,EACzF,IACS,IAEGzI,EACZ,CC1BgB,SAAA2I,GACdC,EACAhyB,SAEA,MAAMiyB,EAA2C,QAAzBlxB,EAAAf,aAAA,EAAAA,EAAMiyB,uBAAmB,IAAAlxB,EAAAA,EAAA,EAEjD,IAAImxB,EAEJ,MAAMC,EAAS,IAAIz8B,SAAc,CAACC,EAAS+N,KACzCwuB,EAAiBE,aAAY7rB,iBACN,QAAjBxF,EAAAf,aAAI,EAAJA,EAAMqyB,mBAAW,IAAAtxB,OAAA,EAAAA,EAAEuxB,UACrB5uB,EAAO,IAAIrN,EAAgB,2CAA4C2J,EAAKqyB,YAAYxuB,eAGhFmuB,KACRr8B,MAEiB,IAAlBs8B,EAAuB,IAG5B,OAAOE,EAAO7tB,SAAQ,KACpBiuB,cAAcL,EAAe,GAEjC,CAKgB,SAAAM,GAAe3J,EAA0B4J,GACvD,OAAO,IAAI/8B,SAAQ,CAACC,EAAS+N,KAC3B9N,YAAW2Q,UACT,IACE,MAAM3N,QAAYiwB,IAClBlzB,EAAQiD,GACR,MAAO6M,GACP/B,EAAO+B,MAEM,IAAdgtB,EAAoB,GAE3B,OCzBaC,GACX,WAAA38B,CAAoCuK,GAAAnK,KAAMmK,OAANA,EAE7B,mBAAMqyB,CAAiBjQ,EAA8B8I,GAC1D,UAAW,MAAM9pB,KAASghB,EACxB8I,EAAQxV,KAAKtU,GAGf8pB,EAAQlD,WAGH,YAAAsK,CACLC,EACAC,GAEA,IAAIC,GAAa,EACbC,GAAc,EACdC,EAA8C,KAC9CC,GAAgB,IAAIx4B,MAAOy4B,cAE/B,MAAM7yB,EAASnK,KAAKmK,OAEpB,MAAO,CACLuyB,YACAE,aACAK,WAAY7sB,kBACV,KAAOysB,GACL,IACEC,EAAcH,EAAcI,GAC5B,MAAMG,QAAeJ,EACrB3yB,EAAO3I,MAAM,2BAA4B,CACvCk7B,YACAS,MAAOD,EAAOt6B,OACdw6B,mBAAoBL,IAEtB,IAAK,MAAMM,KAASH,QACZG,EACNN,EAAgBM,EAAMC,UAExB,MAAO37B,GACP,GAAqB,iBAAVA,GAAqC,gBAAfA,EAAMT,KAAwB,CAC7DiJ,EAAO3I,MAAM,wBAAyB,CAAEk7B,cACxC,SAEFvyB,EAAOxI,MAAM,mCAAoC,CAAE+6B,YAAW/6B,UAGlEwI,EAAO3I,MAAM,yBAA0B,CAAEk7B,cACzCE,GAAa,CACd,EACDxuB,OAAQgC,iBACNysB,GAAc,EACVC,GACFA,EAAY1uB,eAERwtB,IAAQ,IAAMgB,GAAY,CAAEd,gBAAiB,IACnD3xB,EAAO3I,MAAM,+BAAgC,CAAEk7B,aAChD;02oDCnFHv5B,GAAQwE,GAAexE,MACvB+5B,GAASluB,GACTuuB,GAAQzmB,GACR0mB,GAAOrmB,GAGPsmB,GAAe,CACjB,MAAO,MAAO,aAAc,OAAQ,KAAM,UAC1C,qBAAsB,iBAAkB,aAAc,uBAGpDC,GAAM,CAAC,IAAK,IAAK,KAMjBC,GAA2B,OAE3BC,GAAiB,4BAerB,SAASC,GAAa/xB,EAAKgyB,GACzB,IAAIC,EAAaF,GAAYG,WACzBhtB,EAAU8sB,GAAuBA,EAAoB9sB,QACrDitB,GAAe,EACnBt4B,OAAOC,eAAe5F,KAAM,aAAc,CACxC+F,IAAK,WACH,OAAOg4B,CACb,IAGEp4B,OAAOC,eAAe5F,KAAM,MAAO,CACjC+F,IAAK,WACH,OAAO+F,CACb,IAGE,IAyBIoyB,EAzBAj9B,EAAOjB,KAIX,SAASm+B,EAAoBt+B,GACvBk+B,IAAeF,GAAYO,SAC/BL,EAAaF,GAAYG,WACzBK,EAAM,QAAS,IAAIC,GAAM,QAAS,CAACz+B,QAASA,KAIxC0+B,IACFzyB,EAAMyyB,EACNA,EAAe,KACfN,GAAe,GAEjBx+B,YAAW,WACLs+B,IAAeF,GAAYG,YAAc/8B,EAAKu9B,uBAGlDv9B,EAAKu9B,sBAAuB,EAC5BC,IACD,GAAEx9B,EAAKy9B,mBACZ,CAtBEz9B,EAAKy9B,kBAAoB,IACzBz9B,EAAKu9B,sBAAuB,EAwB5B,IAAIG,EAAc,GACd3tB,GAAWA,EAAQ,mBACrB2tB,EAAc3tB,EAAQ,wBACfA,EAAQ,kBAGjB,IAAI4tB,GAAyB,EACzBC,EAAO,GACPC,EAAY,GAEZP,EAAe,KAEnB,SAASE,IACP,IAAI/7B,EAAUS,GAAM2I,GAChBizB,EAAgC,WAArBr8B,EAAQs8B,SAGvB,GAFAt8B,EAAQsO,QAAU,CAAE,gBAAiB,WAAYC,OAAU,qBACvD0tB,IAAaj8B,EAAQsO,QAAQ,iBAAmB2tB,GAChD3tB,EAAS,CACX,IAAIiuB,EAAahB,EAqYvB,SAA8BjtB,GAC5B,IAAIuQ,EAAO,CAAA,EACX,IAAK,IAAIxZ,KAAOiJ,EACV4sB,GAAen2B,KAAKM,KAIxBwZ,EAAKxZ,GAAOiJ,EAAQjJ,IAGtB,OAAOwZ,CACT,CAhZsC2d,CAAoBluB,GAAWA,EAC/D,IAAK,IAAI9J,KAAK+3B,EAAY,CACxB,IAAIE,EAASF,EAAW/3B,GACpBi4B,IACFz8B,EAAQsO,QAAQ9J,GAAKi4B,EAE/B,CACA,CAaI,GATAz8B,EAAQ08B,qBAAuBtB,IAAwBA,EAAoBsB,oBAEvEtB,QAAgE1sB,IAAzC0sB,EAAoBuB,mBAC7C38B,EAAQ28B,iBAAmBvB,EAAoBuB,kBAKlCvB,GAAuBA,EAAoBwB,MAC5C,CACZ,IAAIA,EAAQn8B,GAAM26B,EAAoBwB,OACtCP,EAA8B,WAAnBO,EAAMN,SAEjBt8B,EAAQs8B,SAAWD,EAAW,SAAW,QACzCr8B,EAAQuQ,KAAOnH,EACfpJ,EAAQsO,QAAQuuB,KAAO78B,EAAQ88B,KAC/B98B,EAAQ+8B,SAAWH,EAAMG,SACzB/8B,EAAQ88B,KAAOF,EAAME,KACrB98B,EAAQmZ,KAAOyjB,EAAMzjB,IAC3B,CAGI,GAAIiiB,GAAuBA,EAAoBP,MAC7C,IAAK,IAAImC,KAAW5B,EAAoBP,MACtC,IAAuC,IAAnCE,GAAaxO,QAAQyQ,GAAzB,CAIA,IAAIC,EAAS7B,EAAoBP,MAAMmC,QACxBtuB,IAAXuuB,IACFj9B,EAAQg9B,GAAWC,EAJ7B,CAUQ7B,QAA+D1sB,IAAxC0sB,EAAoB8B,kBAC7Cl9B,EAAQk9B,gBAAkB9B,EAAoB8B,iBAGhD1B,GAAOa,EAAWxB,GAAQC,IAAM5xB,QAAQlJ,GAAS,SAAUm9B,GAGzD,GAFA5+B,EAAKu9B,sBAAuB,EAEL,MAAnBqB,EAAIC,YAAyC,MAAnBD,EAAIC,YAAyC,MAAnBD,EAAIC,YAAyC,MAAnBD,EAAIC,WAGpF,OAFAzB,EAAM,QAAS,IAAIC,GAAM,QAAS,CAACvyB,OAAQ8zB,EAAIC,WAAYjgC,QAASggC,EAAIE,sBACxE5B,IAKF,GAAuB,MAAnB0B,EAAIC,YAAyC,MAAnBD,EAAIC,YAAyC,MAAnBD,EAAIC,WAAoB,CAC9E,IAAIE,EAAWH,EAAI7uB,QAAQgvB,SAC3B,IAAKA,EAGH,YADA3B,EAAM,QAAS,IAAIC,GAAM,QAAS,CAACvyB,OAAQ8zB,EAAIC,WAAYjgC,QAASggC,EAAIE,iBAG1E,IAAIE,EAAa,IAAIC,IAAIp0B,GAAKq0B,OAC1BC,EAAa,IAAIF,IAAIF,GAAUG,OAKnC,OAJAlC,EAAegC,IAAeG,EACP,MAAnBP,EAAIC,aAAoBvB,EAAezyB,GAC3CA,EAAMk0B,OACNn/B,EAAQw/B,SAAS5B,EAEzB,CAEM,GAAuB,MAAnBoB,EAAIC,WAEN,OADAzB,EAAM,QAAS,IAAIC,GAAM,QAAS,CAACvyB,OAAQ8zB,EAAIC,WAAYjgC,QAASggC,EAAIE,iBACjE9+B,EAAKq/B,QAmBd,IAAIrhB,EACAshB,EAjBJxC,EAAaF,GAAY2C,KACzBX,EAAIY,GAAG,SAAS,WACdZ,EAAIa,mBAAmB,SACvBb,EAAIa,mBAAmB,OACvBvC,GACD,IAED0B,EAAIY,GAAG,OAAO,WACZZ,EAAIa,mBAAmB,SACvBb,EAAIa,mBAAmB,OACvBvC,GACD,IACDE,EAAM,OAAQ,IAAIC,GAAM,SAMxB,IAAIqC,EAAc,EACdC,GAAuB,EACvBC,EAAgB,EAChBC,EAAY,EAEhBjB,EAAIY,GAAG,QAAQ,SAAUM,GAClB9hB,GAOC8hB,EAAMn+B,OAASqc,EAAIrc,OAASk+B,KAC9BD,EAA8B,EAAb5hB,EAAIrc,OAAcm+B,EAAMn+B,QACrB+6B,KAClBkD,EAAgB5hB,EAAIrc,OAASm+B,EAAMn+B,OAAS+6B,IAE9C4C,EAAYhxB,GAAOyxB,MAAMH,GACzB5hB,EAAIgiB,KAAKV,EAAW,EAAG,EAAGO,GAC1B7hB,EAAMshB,GAERQ,EAAME,KAAKhiB,EAAK6hB,GAChBA,GAAaC,EAAMn+B,SApM7B,SAAiBqc,GACf,OAAOye,GAAI3V,OAAM,SAAUmZ,EAAUt8B,GACnC,OAAOqa,EAAIra,KAAWs8B,CACvB,GACH,CAiLcC,CADJliB,EAAM8hB,KAEJ9hB,EAAMA,EAAIzX,MAAMk2B,GAAI96B,SAEtBk+B,EAAY7hB,EAAIrc,QAkBlB,IAHA,IAAIw+B,EAAM,EACNx+B,EAASk+B,EAENM,EAAMx+B,GAAQ,CACfg8B,IAlNC,KAmNC3f,EAAImiB,MACJA,EAEJxC,GAAyB,GAO3B,IAJA,IAEIt2B,EAFA+4B,GAAc,EACdC,EAAcV,EAGT15B,EAAIy5B,EAAaU,EAAa,GAAKn6B,EAAItE,IAAUsE,EA/NxD,MAgOAoB,EAAI2W,EAAI/X,IAEFo6B,EAAc,IAChBA,EAAcp6B,EAAIk6B,GAhOb,KAkOE94B,GACTs2B,GAAyB,EACzByC,EAAan6B,EAAIk6B,GArOhB,KAsOQ94B,IACT+4B,EAAan6B,EAAIk6B,GAIrB,GAAIC,EAAa,EAAG,CAClBV,EAAc/9B,EAASw+B,EACvBR,EAAsBU,EACtB,KACZ,CACYX,EAAc,EACdC,GAAuB,EAGzBW,EAAqBtiB,EAAKmiB,EAAKE,EAAaD,GAE5CD,GAAOC,EAAa,CAC9B,CAEYD,IAAQx+B,GACVqc,OAAM,EACN6hB,EAAY,GACHM,EAAM,IACfniB,EAAMA,EAAIzX,MAAM45B,EAAKN,GACrBA,EAAY7hB,EAAIrc,OAEnB,GACF,IAEDs7B,EAAIuC,GAAG,SAAS,SAAUnxB,GACxBrO,EAAKu9B,sBAAuB,EAC5BL,EAAmB7uB,EAAIzP,QACxB,IAEGq+B,EAAIsD,YAAYtD,EAAIsD,YAAW,GACnCtD,EAAIuD,KACR,CAIE,SAASpD,IACHp9B,EAAKygC,UAAUhU,UAAU,IAAI9qB,OAAS,GACxC3B,EAAK0gC,KAAKt8B,MAAMpE,EAAMysB,UAE5B,CASE,SAAS6T,EAAsBtiB,EAAKmiB,EAAKE,EAAaD,GACpD,GAAmB,IAAfA,EAAkB,CACpB,GAAIxC,EAAKj8B,OAAS,EAAG,CACnB,IAAID,EAAOm8B,GAAa,UACxBT,EAAM17B,EAAM,IAAIi/B,GAAaj/B,EAAM,CACjCk8B,KAAMA,EAAKr3B,MAAM,GAAI,GACrBm3B,YAAaA,EACbwB,OAAQ,IAAID,IAAIp0B,GAAKq0B,UAEvBtB,EAAO,EACf,CACMC,OAAY,CAClB,MAAW,GAAIwC,EAAc,EAAG,CAC1B,IAAIO,EAAUP,EAAc,EACxB7U,EAAO,EACPqV,EAAQ7iB,EAAIzX,MAAM45B,EAAKA,GAAOS,EAAUR,EAAaC,IAAc96B,WASvE46B,GANE3U,EADEoV,EACKR,EA9SH,KA+SKpiB,EAAImiB,EAAME,EAAc,GAC1BA,EAAc,EAEdA,EAAc,EAIvB,IAAIS,EAAcV,EAAa5U,EAC3BlhB,EAAQ0T,EAAIzX,MAAM45B,EAAKA,EAAMW,GAAav7B,WAE9C,GAAc,SAAVs7B,EACFjD,GAAQtzB,EAAQ,UACX,GAAc,UAAVu2B,EACThD,EAAYvzB,OACP,GAAc,OAAVu2B,EACTnD,EAAcpzB,OACT,GAAc,UAAVu2B,EAAmB,CAC5B,IAAIE,EAAQz4B,SAASgC,EAAO,IACvBjH,OAAO+gB,MAAM2c,KAChB/gC,EAAKy9B,kBAAoBsD,EAEnC,CACA,CACA,CAzDEvD,IAQAz+B,KAAKiiC,OAAS,WACRlE,IAAeF,GAAYO,SAC/BL,EAAaF,GAAYO,OACrBF,EAAIpsB,OAAOosB,EAAIpsB,QACfosB,EAAIgE,KAAOhE,EAAIgE,IAAIpwB,OAAOosB,EAAIgE,IAAIpwB,QAC1C,CA6CA,CAEA,IAAAqwB,GAAiBtE,GA4GjB,SAASS,GAAO37B,EAAMy/B,GAEpB,GADAz8B,OAAOC,eAAe5F,KAAM,OAAQ,CAAE0d,UAAU,EAAOnS,MAAO5I,EAAMkD,YAAY,IAC5Eu8B,EACF,IAAK,IAAIv1B,KAAKu1B,EACRA,EAAmBhvB,eAAevG,IACpClH,OAAOC,eAAe5F,KAAM6M,EAAG,CAAE6Q,UAAU,EAAOnS,MAAO62B,EAAmBv1B,GAAIhH,YAAY,GAIpG,CAQA,SAAS+7B,GAAcj/B,EAAM0/B,GAE3B,IAAK,IAAIx1B,KADTlH,OAAOC,eAAe5F,KAAM,OAAQ,CAAE0d,UAAU,EAAOnS,MAAO5I,EAAMkD,YAAY,IAClEw8B,EACRA,EAAcjvB,eAAevG,IAC/BlH,OAAOC,eAAe5F,KAAM6M,EAAG,CAAE6Q,UAAU,EAAOnS,MAAO82B,EAAcx1B,GAAIhH,YAAY,GAG7F,CAtdWwR,GAoVNirB,SAASzE,GAAaX,GAAOqF,cAClC1E,GAAY/f,UAAUle,YAAci+B,GAEpC,CAAC,OAAQ,QAAS,WAAW/1B,SAAQ,SAAU4J,GAC7C/L,OAAOC,eAAei4B,GAAY/f,UAAW,KAAOpM,EAAQ,CAO1D3L,IAAK,WACH,IAAIy8B,EAAWxiC,KAAK0hC,UAAUhwB,GAAQ,GACtC,OAAO8wB,EAAYA,EAASC,UAAYD,EAASC,UAAYD,OAAYpxB,CAC1E,EASDnL,IAAK,SAAcu8B,GACjBxiC,KAAK0gC,mBAAmBhvB,GACxB1R,KAAK0iC,iBAAiBhxB,EAAQ8wB,EACpC,GAEA,IAKA78B,OAAOC,eAAei4B,GAAa,aAAc,CAACh4B,YAAY,EAAM0F,MAAO,IAC3E5F,OAAOC,eAAei4B,GAAa,OAAQ,CAACh4B,YAAY,EAAM0F,MAAO,IACrE5F,OAAOC,eAAei4B,GAAa,SAAU,CAACh4B,YAAY,EAAM0F,MAAO,IAEvEsyB,GAAY/f,UAAUkgB,WAAa,EACnCH,GAAY/f,UAAU0iB,KAAO,EAC7B3C,GAAY/f,UAAUsgB,OAAS,EAQ/BP,GAAY/f,UAAUwiB,MAAQ,WAC5BtgC,KAAKiiC,QACP,EAWApE,GAAY/f,UAAU4kB,iBAAmB,SAA2B//B,EAAM6/B,GAChD,mBAAbA,IAETA,EAASC,UAAYD,EACrBxiC,KAAKygC,GAAG99B,EAAM6/B,GAElB,EASA3E,GAAY/f,UAAU6kB,cAAgB,SAAwBtF,GAC5D,IAAKA,EAAM16B,KACT,MAAM,IAAIhD,MAAM,8BAIlBK,KAAK2hC,KAAKtE,EAAM16B,KAAM06B,EAAMuF,OAC9B,EAWA/E,GAAY/f,UAAU+kB,oBAAsB,SAA8BlgC,EAAM6/B,GACtD,mBAAbA,IACTA,EAASC,eAAYrxB,EACrBpR,KAAK8iC,eAAengC,EAAM6/B,GAE9B,eCvaO,MAAMO,GAAsB,eA8BtBC,GAmCX,WAAApjC,CAAY8C,GAZL1C,KAAAijC,iBAAmB,IAAIjO,GACtBh1B,KAAmBkjC,oBAAgD,KAEpEljC,KAAAmjC,eAAiB,IAAInO,GACpBh1B,KAAgBojC,iBAA8C,KAE/DpjC,KAAAqjC,iBAAmB,IAAIrO,GACtBh1B,KAAmBsjC,oBAAyD,KAMlF,MAAMC,GAAS7gC,aAAO,EAAPA,EAAS6gC,SAAUC,IAClCxjC,KAAKyjC,UAAW/gC,aAAO,EAAPA,EAAS+gC,WAAYC,IAErC,MAAMC,EAA0D,CAC9DJ,OAAQA,EACRE,SAAUzjC,KAAKyjC,UAGjB,IAAKE,EAAaJ,OAChB,MAAM,IAAIpjC,EAAiB,6BAG7B,MAAMyjC,EAAgB,CACpBC,cAAe,UAAUN,KAGrBO,EAAe,IAAIC,GAAqBltB,OAAO,CACnDxD,KAAM,GAAGrT,KAAKyjC,yBACd1yB,QAAS6yB,IAGX5jC,KAAKgkC,OAASF,EAAa7sB,UAE3B,MAAMgtB,EAAgB,IAAIC,GAAsBrtB,OAAO,CACrDxD,KAAM,GAAGrT,KAAKyjC,0BACd1yB,QAAS6yB,IAGX5jC,KAAKmkC,QAAUF,EAAchtB,UAE7B,MAAMmtB,EAAoB,IAAIC,GAAuBxtB,OAAO,CAC1DxD,KAAM,GAAGrT,KAAKyjC,2BACd1yB,QAAS6yB,IAEX5jC,KAAKskC,SAAW,CACdC,QAASH,EAAkBxrB,iBAC3BjM,MAAOy3B,EAAkBvrB,eACzB7V,KAAM,CACJwhC,wBAAyB,CAAC5sB,EAAoBU,IACrC,IAAI6a,IAAYsR,IACrB,MAAMC,EAAc,IAAI7G,GACtB,GAAG79B,KAAKyjC,qCAAqC7rB,UAAmBU,IAChE,CACEtH,QAAS,CACPC,OAAQ,oBACR4yB,cAAe,UAAUN,OAQ/B,OAHAmB,EAAYhC,iBAAiB,WAAYrF,GAAUoH,EAAS5kB,KAAKpc,KAAKN,MAAMk6B,EAAMwB,SAClF6F,EAAYhC,iBAAiB,SAAU/gC,GAAU8iC,EAAS9iC,MAAMA,KAEzD,IAAM+iC,EAAYpE,OAAO,MAMxC,MAAMqE,EAAY,IAAIC,GAAkB/tB,OAAO,CAC7CxD,KAAM,GAAGrT,KAAKyjC,sBACd1yB,QAAS6yB,IAGX5jC,KAAK6kC,IAAMF,EAAU1tB,UAErB,MAAM6tB,EAAY,IAAIC,GAAkBluB,OAAO,CAC7CxD,KAAM,GAAGrT,KAAKyjC,sBACd1yB,QAAS6yB,IAGX5jC,KAAKglC,IAAMF,EAAU7tB,UAErBjX,KAAKmK,QAASzH,aAAO,EAAPA,EAASyH,QAASzH,EAAQyH,OAAO5I,MAAM,SAAWqI,EAAc,SAE9E,MAAMq7B,EAAiB,IAAIC,GAAuBruB,OAAO,CACvDxD,KAAMrT,KAAKyjC,SACX1yB,QAAS6yB,IAEX5jC,KAAKizB,SAAWgS,EAAev+B,QAE/B,MAAMy+B,EAAgB,IAAIC,GAAsBvuB,OAAO,CACrDxD,KAAMrT,KAAKyjC,WAEbzjC,KAAK8jB,QAAUqhB,EAAcz+B,QAE7B1G,KAAK2jC,aAAeA,EAEpB3jC,KAAK+U,aAAeiK,KAEpBhf,KAAKy2B,OAAS,IAAI8F,GAAYv8B,KAAKmK,QAMrC,aAAMs0B,GACJz+B,KAAKmK,OAAO3I,MAAM,uBAElB,MAAMsiB,QAAgB9jB,KAAKqlC,yBAErBpS,QAAiBjzB,KAAKizB,SAAShW,cAMrC,OAJAjd,KAAKslC,qBAELtlC,KAAKmK,OAAO1I,KAAK,qBAAsB,CAAEqiB,UAASmP,SAAUA,EAASA,WAE9DA,EAMT,gBAAMsS,GACJvlC,KAAKmK,OAAO3I,MAAM,kCACZxB,KAAKwlC,oBACXxlC,KAAKmK,OAAO1I,KAAK,2BAGZ,gBAAMyb,GACX,IAEE,aADkBld,KAAK8jB,QAAQ5G,cACpBuoB,QAAQ3hB,QACnB,MAAOxU,GACP,MAAM,IAAIjP,EAAmB,6CAA6CiP,IAAOA,IAI7E,kBAAAg2B,GACNtlC,KAAKmK,OAAO3I,MAAM,yCAA0C,CAAEuT,aAAc/U,KAAK+U,eAKjF/U,KAAKsjC,oBAAsBtjC,KAAKy2B,OAAOgG,aAAa,mBAAoBW,GACtEp9B,KAAKgkC,OAAO5uB,uBAJU,EAI8BgoB,EAHpC,IAGmEp9B,KAAK+U,gBAG1F/U,KAAKkjC,oBAAsBljC,KAAKy2B,OAAOgG,aAAa,mBAAoBW,GAC/Dp9B,KAAKmkC,QAAQ1qB,mBARE,EAQkC2jB,EAPxC,IAOuEp9B,KAAK+U,gBAG9F/U,KAAKojC,iBAAmBpjC,KAAKy2B,OAAOgG,aAAa,iBAAkBW,GACjEp9B,KAAKmkC,QAAQlqB,iBAZS,EAYyBmjB,EAX/B,IAW8Dp9B,KAAK+U,gBAIrF/U,KAAKy2B,OACF+F,cAAcx8B,KAAKsjC,oBAAoBrG,aAAcj9B,KAAKqjC,kBAC1Dv1B,MAAK,IAAM9N,KAAKmK,OAAO3I,MAAM,kDAC7ByM,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,kDAAmD2N,KAEvFtP,KAAKy2B,OACF+F,cAAcx8B,KAAKkjC,oBAAoBjG,aAAcj9B,KAAKijC,kBAC1Dn1B,MAAK,IAAM9N,KAAKmK,OAAO3I,MAAM,mDAC7ByM,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,mDAAoD2N,KAExFtP,KAAKy2B,OACF+F,cAAcx8B,KAAKojC,iBAAiBnG,aAAcj9B,KAAKmjC,gBACvDr1B,MAAK,IAAM9N,KAAKmK,OAAO3I,MAAM,gDAC7ByM,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,gDAAiD2N,KAG/E,uBAAMk2B,GACZxlC,KAAKmK,OAAO3I,MAAM,sCAElB,MAAMkkC,EAA4B,GAC9B1lC,KAAKojC,kBACPsC,EAASp+B,KAAKtH,KAAKojC,iBAAiBh1B,UAGlCpO,KAAKkjC,qBACPwC,EAASp+B,KAAKtH,KAAKkjC,oBAAoB90B,UAGrCpO,KAAKsjC,qBACPoC,EAASp+B,KAAKtH,KAAKsjC,oBAAoBl1B,gBAEnC7O,QAAQomC,WAAWD,GAEzB1lC,KAAKmK,OAAO3I,MAAM,qCAGZ,4BAAM6jC,GACZ,MAAMvhB,QAAgB9jB,KAAKkd,aACrB0oB,EAAcC,GAAa/hB,GAOjC,GALA9jB,KAAKmK,OAAO3I,MAAM,iCAAkC,CAClDskC,cAAeF,aAAA,EAAAA,EAAazhB,IAC5B4hB,aAAchD,MAGX6C,EACH,MAAM,IAAIvlC,EACR,6BAA6ByjB,oEAIjC,IAAKkiB,GAAgBJ,EAAa,KAAK7C,MACrC,MAAM,IAAI1iC,EACR,4BAA4ByjB,qDAA2Dif,2GAK3F,OAAO6C,EAAY9hB,SC7RjB,SAAUmiB,GAA6BC,GAC3C,OAAIA,aAA2BC,YACtBD,EAEsB,iBAApBA,EACFC,YAAY7xB,QAAQ4xB,IAEtB,IAAIz0B,iBAAkBE,MAC/B,CAkBgB,SAAAy0B,MAAkBC,GAChC,MAAM70B,EAAa,IAAIC,gBAEjB60B,EAAWC,IACf,GAAI/0B,EAAWG,OAAOwqB,QAAS,OAC/B,MAAMzuB,EAAU64B,EAAkBC,OAAO94B,OACzC8D,EAAWM,MAAMpE,EAAO,EAG1B,IAAK,MAAMiE,KAAU00B,EAAS,CAC5B,GAAI10B,EAAOwqB,QAAS,CAClB3qB,EAAWM,MAAMH,EAAOjE,QACxB,MAEFiE,EAAO+wB,iBAAiB,QAAS4D,GASnC,MAAO,CAAE30B,OAAQH,EAAWG,OAAQ80B,QANpB,KACd,IAAK,MAAM90B,KAAU00B,EACnB10B,EAAOkxB,oBAAoB,QAASyD,IAK1C,CC9BM,SAAUI,GAA+B7U,GAC7C,OAAO,IAAItyB,SAAQ,CAACC,EAAS+N,KAC3B9N,YAAW,IAAMoyB,IAAK/jB,KAAKtO,GAASyO,MAAMV,IAAQ,GAEtD,CCtBgB,SAAAo5B,GACdC,EACAC,GAEA,MAAMC,EAAoB,IAAI9R,GACxB+R,EAA4BH,EAAY7S,KAC5CwH,GAAUuL,GACVlM,IAAS,IAAMkM,EAAkBjnB,UAE7BmnB,EAA4BH,EAAY9S,KAC5CwH,GAAUuL,GACVlM,IAAS,IAAMkM,EAAkBjnB,UAGnC,OAAOknB,EAA0BhT,KCnB5B,WAEH,IADA,IAAIkT,EAAe,GACV3V,EAAK,EAAGA,EAAK5D,UAAU9qB,OAAQ0uB,IACpC2V,EAAa3V,GAAM5D,UAAU4D,GAEjC,OAAOwJ,GAAMz1B,WAAM,EAAQmoB,GAAc,GAAIF,GAAO2Z,IACxD,CDawCC,CAAUF,GAClD,OE+EaG,GACX,WAAAvnC,CAEkBke,EACAspB,GADApnC,KAAS8d,UAATA,EACA9d,KAAeonC,gBAAfA,SAIPC,GACX,WAAAznC,CACkB4kB,EACA8iB,GADAtnC,KAAEwkB,GAAFA,EACAxkB,KAAOsnC,QAAPA,EAGlB,mBAAIF,GACF,OAAOpnC,KAAKsnC,QAAQF,qBClHZG,IAAZ,SAAYA,GACVA,EAAA,qBAAA,uBACAA,EAAA,oBAAA,sBACAA,EAAA,sBAAA,wBACAA,EAAA,kBAAA,oBACAA,EAAA,mBAAA,qBACAA,EAAA,gBAAA,kBACAA,EAAA,uBAAA,yBACAA,EAAA,wBAAA,0BACAA,EAAA,cAAA,gBACAA,EAAA,gCAAA,kCACAA,EAAA,6BAAA,+BACAA,EAAA,wBAAA,0BACAA,EAAA,oBAAA,sBACAA,EAAA,cAAA,gBACAA,EAAA,WAAA,YACD,CAhBD,CAAYA,KAAAA,GAgBX,CAAA,IAEK,MAAOC,WAAyBjnC,EACpC,WAAAX,CACEC,EACOW,EACAV,GAEPC,MAAMF,EAASW,EAAMV,GAHdE,KAAIQ,KAAJA,EACAR,KAAQF,SAARA,SCPW2nC,GAapB,WAAA7nC,CAAyC8nC,SAAA1nC,KAAK0nC,MAALA,EANzB1nC,KAAkB2nC,mBAAkB,KAOlD3nC,KAAKwkB,GAAKkjB,EAAM/yB,WAChB3U,KAAK2nC,mBAA6C,QAAxB/8B,EAAA88B,EAAME,sBAAkB,IAAAh9B,EAAAA,EAAA,KAClD5K,KAAK6nC,WAAaH,EAAMG,WAG1B,SAAWl7B,GACT,OAAO3M,KAAK0nC,MAAM/6B,MAGpB,aAAWm7B,GACT,OAAO,IAAIvjC,KAAKA,KAAKpB,MAAMnD,KAAK0nC,MAAMI,YAGxC,SAAAC,GACE,MAA4B,YAArB/nC,KAAK0nC,MAAM/6B,MAGpB,OAAAq7B,GACE,MAA4B,UAArBhoC,KAAK0nC,MAAM/6B,MAGpB,SAAAs7B,GACE,MAA4B,YAArBjoC,KAAK0nC,MAAM/6B,MAGpB,UAAAu7B,GACE,MAA4B,aAArBloC,KAAK0nC,MAAM/6B,MAGb,OAAAw7B,GACL,IAEE,OADAnoC,KAAKooC,YACE,EACP,MAAO94B,GACP,OAAO,ICtBP,MAAO+4B,WAAsBZ,GAGjC,WAAA7nC,CACE8nC,EACgBY,GAEhBvoC,MAAM2nC,GAFU1nC,KAAMsoC,OAANA,EAJFtoC,KAAMuoC,OAAG,WAQvBvoC,KAAKooC,WAGP,WAAII,WACF,MAAMC,EAAczoC,KAAK6nC,WAAW,0BAC9Ba,EAAc1oC,KAAK6nC,WAAW,yCAEpC,IAAKY,EACH,MAAM,IAAIroC,EACR,iGAIJ,IAAKsoC,EACH,MAAM,IAAItoC,EACR,4GAIJ,MAAMuoC,EAASF,EAAYG,WAAWC,GAAgB,6BAARA,IACxCC,EAASL,EAAYG,WAAWC,GAAgB,wBAARA,IAExCE,EAAgC,QAAvBn+B,EAAA89B,EAAYC,UAAW,IAAA/9B,EAAAA,EAAA,EAItC,MAAO,CACLo+B,OAJoC,QAAvBrZ,EAAA+Y,EAAYI,UAAW,IAAAnZ,EAAAA,EAAA,EAKpCoZ,SACAE,MALYP,EAAYA,EAAY9lC,OAAS,IASjD,MAAAsmC,GACE,MAAO,CACLC,iBAAkBnpC,KAAK6nC,WAAW,yCAClCuB,SAAUppC,KAAK6nC,WAAW,uBAC1BwB,gBAAiBrpC,KAAK6nC,WAAW,8BACjCyB,SAAUtpC,KAAK6nC,WAAW,uBAC1B0B,WAAYvpC,KAAK6nC,WAAW,yBAC5B2B,OAAQxpC,KAAK6nC,WAAW,qBACxBr/B,QAASxI,KAAK6nC,WAAW,yBACzB4B,UAAWzpC,KAAK6nC,WAAW,4BAC3B6B,oBAAqB1pC,KAAK6nC,WAAW,8BACrC8B,YAAa3pC,KAAK6nC,WAAW,sBAC7B+B,eAAgB5pC,KAAK6nC,WAAW,yBAChCl7B,MAAO3M,KAAK2M,OAShB,gBAAAk9B,CAAiBC,EAAY,SAC3B,MAAMC,EAAwC,QAA5Bn/B,EAAA5K,KAAKkpC,SAASK,kBAAc,IAAA3+B,EAAAA,EAAA,EACxCo/B,EAA0B,GAAZF,EAAiB,GAErC,OAAO9pC,KAAKwoC,QAAQS,MAAQjpC,KAAKwoC,QAAQQ,OAASe,EAAYC,EAAchqC,KAAKwoC,QAAQO,OAASiB,EAGpG,YAAWhzB,GACT,MAAO,CACLwN,GAAIxkB,KAAK0nC,MAAMuC,SACf/oC,KAAMlB,KAAK6nC,WAAW,sBACtBqC,cAAelqC,KAAK6nC,WAAW,8BAA8B7nC,KAAKsoC,OAAOlB,4BASnE,QAAAgB,GACR,MAAMK,EAAczoC,KAAK6nC,WAAW,0BAC9Ba,EAAc1oC,KAAK6nC,WAAW,yCAEpC,IAAKY,GAAsC,IAAvBA,EAAY7lC,OAC9B,MAAM,IAAI4kC,GACR,gIACAD,GAAgB4C,iBAIpB,IAAKzB,GAAsC,IAAvBA,EAAY9lC,OAC9B,MAAM,IAAI4kC,GACR,oGACAD,GAAgB4C,iBAIpB,GAAI1B,EAAY7lC,OAAS8lC,EAAY9lC,OAAS,EAC5C,MAAM,IAAI4kC,GACR,0HACAD,GAAgB4C,iBAIpB,GAAIzB,EAAY9lC,OAAS6lC,EAAY7lC,OACnC,MAAM,IAAI4kC,GACR,6FACAD,GAAgB4C,iBAKd,2BAAAC,GACN,OACEzkC,OAAOkC,KAAK7H,KAAK6nC,YACd33B,QAAQm6B,GAASA,EAAKpgC,WAAW,iCACjCnD,KAAKujC,GAASA,EAAKjjC,MAAM,KAAK,MAAO,mDCjKrB,IAAM,KAAM,qBAeFkjC,GAA2BC,GAC5DD,EAAY/4B,SAASg5B,EAASvzB,SAASwN,yBAGJgmB,GAA6BD,GAChEC,EAAcj5B,SAASg5B,EAASvzB,SAAS9V,gCAGDqF,GAAoBgkC,KAC1DA,EAASvzB,SAAS9V,KAAK6B,MAAMwD,yBArBK+jC,GAA2BC,IAC9DD,EAAY/4B,SAASg5B,EAASvzB,SAASwN,4BAGFgmB,GAA6BD,IAClEC,EAAcj5B,SAASg5B,EAASvzB,SAAS9V,mCAGCqF,GAAoBgkC,IAC9DA,EAASvzB,SAAS9V,KAAK6B,MAAMwD,oBA2BCkkC,GAA8BF,GAE3DA,EAAS/B,QAAQQ,QAAUyB,EAAYC,WACvCH,EAAS/B,QAAQO,QAAU0B,EAAYE,WACvCJ,EAAS/B,QAAQS,OAASwB,EAAYxB,0ECrCnC74B,iBACL,IACE,MAAMvE,QAAiBkG,MAAM,0DAE7B,GAAIlG,EAAS4G,GACX,OAAO5G,EAASuG,OACX,CACL,MAAMnG,QAAaJ,EAASwG,OAE5B,MAAM,IAAIjS,EAAmB,0DAA0D6L,MAEzF,MAAOqD,GACP,MAAM,IAAIlP,EAAmB,kEAAkEkP,IAAOA,GAE1G,iCCrBA,IAAIvC,EAAMpH,OAAOmY,UAAU1K,eACvBw3B,EAAS,IASb,SAASC,IAAS,CA4BlB,SAASC,EAAGpY,EAAIqY,EAASC,GACvBhrC,KAAK0yB,GAAKA,EACV1yB,KAAK+qC,QAAUA,EACf/qC,KAAKgrC,KAAOA,IAAQ,CACtB,CAaA,SAASC,EAAYC,EAAS7N,EAAO3K,EAAIqY,EAASC,GAChD,GAAkB,mBAAPtY,EACT,MAAM,IAAI5lB,UAAU,mCAGtB,IAAI01B,EAAW,IAAIsI,EAAGpY,EAAIqY,GAAWG,EAASF,GAC1CG,EAAMP,EAASA,EAASvN,EAAQA,EAMpC,OAJK6N,EAAQE,QAAQD,GACXD,EAAQE,QAAQD,GAAKzY,GAC1BwY,EAAQE,QAAQD,GAAO,CAACD,EAAQE,QAAQD,GAAM3I,GADhB0I,EAAQE,QAAQD,GAAK7jC,KAAKk7B,IADlC0I,EAAQE,QAAQD,GAAO3I,EAAU0I,EAAQG,gBAI7DH,CACT,CASA,SAASI,EAAWJ,EAASC,GACI,KAAzBD,EAAQG,aAAoBH,EAAQE,QAAU,IAAIP,SAC5CK,EAAQE,QAAQD,EAC9B,CASA,SAAS5I,IACPviC,KAAKorC,QAAU,IAAIP,EACnB7qC,KAAKqrC,aAAe,CACtB,CAzEI1lC,OAAOyX,SACTytB,EAAO/sB,UAAYnY,OAAOyX,OAAO,OAM5B,IAAIytB,GAAS7e,YAAW4e,GAAS,IA2ExCrI,EAAazkB,UAAUytB,WAAa,WAClC,IACIrO,EACAh8B,EAFA2F,EAAQ,GAIZ,GAA0B,IAAtB7G,KAAKqrC,aAAoB,OAAOxkC,EAEpC,IAAK3F,KAASg8B,EAASl9B,KAAKorC,QACtBr+B,EAAI9H,KAAKi4B,EAAQh8B,IAAO2F,EAAMS,KAAKsjC,EAAS1pC,EAAKsG,MAAM,GAAKtG,GAGlE,OAAIyE,OAAO6lC,sBACF3kC,EAAM+mB,OAAOjoB,OAAO6lC,sBAAsBtO,IAG5Cr2B,CACR,EASD07B,EAAazkB,UAAU4jB,UAAY,SAAmBrE,GACpD,IAAI8N,EAAMP,EAASA,EAASvN,EAAQA,EAChCoO,EAAWzrC,KAAKorC,QAAQD,GAE5B,IAAKM,EAAU,MAAO,GACtB,GAAIA,EAAS/Y,GAAI,MAAO,CAAC+Y,EAAS/Y,IAElC,IAAK,IAAIxrB,EAAI,EAAGymB,EAAI8d,EAAS7oC,OAAQ8oC,EAAK,IAAI/7B,MAAMge,GAAIzmB,EAAIymB,EAAGzmB,IAC7DwkC,EAAGxkC,GAAKukC,EAASvkC,GAAGwrB,GAGtB,OAAOgZ,CACR,EASDnJ,EAAazkB,UAAU6tB,cAAgB,SAAuBtO,GAC5D,IAAI8N,EAAMP,EAASA,EAASvN,EAAQA,EAChCqE,EAAY1hC,KAAKorC,QAAQD,GAE7B,OAAKzJ,EACDA,EAAUhP,GAAW,EAClBgP,EAAU9+B,OAFM,CAGxB,EASD2/B,EAAazkB,UAAU6jB,KAAO,SAActE,EAAOuO,EAAIC,EAAIC,EAAIC,EAAIC,GACjE,IAAIb,EAAMP,EAASA,EAASvN,EAAQA,EAEpC,IAAKr9B,KAAKorC,QAAQD,GAAM,OAAO,EAE/B,IAEIhnC,EACA+C,EAHAw6B,EAAY1hC,KAAKorC,QAAQD,GACzB9jC,EAAMqmB,UAAU9qB,OAIpB,GAAI8+B,EAAUhP,GAAI,CAGhB,OAFIgP,EAAUsJ,MAAMhrC,KAAK8iC,eAAezF,EAAOqE,EAAUhP,QAAIthB,GAAW,GAEhE/J,GACN,KAAK,EAAG,OAAOq6B,EAAUhP,GAAGztB,KAAKy8B,EAAUqJ,UAAU,EACrD,KAAK,EAAG,OAAOrJ,EAAUhP,GAAGztB,KAAKy8B,EAAUqJ,QAASa,IAAK,EACzD,KAAK,EAAG,OAAOlK,EAAUhP,GAAGztB,KAAKy8B,EAAUqJ,QAASa,EAAIC,IAAK,EAC7D,KAAK,EAAG,OAAOnK,EAAUhP,GAAGztB,KAAKy8B,EAAUqJ,QAASa,EAAIC,EAAIC,IAAK,EACjE,KAAK,EAAG,OAAOpK,EAAUhP,GAAGztB,KAAKy8B,EAAUqJ,QAASa,EAAIC,EAAIC,EAAIC,IAAK,EACrE,KAAK,EAAG,OAAOrK,EAAUhP,GAAGztB,KAAKy8B,EAAUqJ,QAASa,EAAIC,EAAIC,EAAIC,EAAIC,IAAK,EAG3E,IAAK9kC,EAAI,EAAG/C,EAAO,IAAIwL,MAAMtI,EAAK,GAAIH,EAAIG,EAAKH,IAC7C/C,EAAK+C,EAAI,GAAKwmB,UAAUxmB,GAG1Bw6B,EAAUhP,GAAGrtB,MAAMq8B,EAAUqJ,QAAS5mC,EAC1C,KAAS,CACL,IACIwF,EADA/G,EAAS8+B,EAAU9+B,OAGvB,IAAKsE,EAAI,EAAGA,EAAItE,EAAQsE,IAGtB,OAFIw6B,EAAUx6B,GAAG8jC,MAAMhrC,KAAK8iC,eAAezF,EAAOqE,EAAUx6B,GAAGwrB,QAAIthB,GAAW,GAEtE/J,GACN,KAAK,EAAGq6B,EAAUx6B,GAAGwrB,GAAGztB,KAAKy8B,EAAUx6B,GAAG6jC,SAAU,MACpD,KAAK,EAAGrJ,EAAUx6B,GAAGwrB,GAAGztB,KAAKy8B,EAAUx6B,GAAG6jC,QAASa,GAAK,MACxD,KAAK,EAAGlK,EAAUx6B,GAAGwrB,GAAGztB,KAAKy8B,EAAUx6B,GAAG6jC,QAASa,EAAIC,GAAK,MAC5D,KAAK,EAAGnK,EAAUx6B,GAAGwrB,GAAGztB,KAAKy8B,EAAUx6B,GAAG6jC,QAASa,EAAIC,EAAIC,GAAK,MAChE,QACE,IAAK3nC,EAAM,IAAKwF,EAAI,EAAGxF,EAAO,IAAIwL,MAAMtI,EAAK,GAAIsC,EAAItC,EAAKsC,IACxDxF,EAAKwF,EAAI,GAAK+jB,UAAU/jB,GAG1B+3B,EAAUx6B,GAAGwrB,GAAGrtB,MAAMq8B,EAAUx6B,GAAG6jC,QAAS5mC,GAGtD,CAEE,OAAO,CACR,EAWDo+B,EAAazkB,UAAU2iB,GAAK,SAAYpD,EAAO3K,EAAIqY,GACjD,OAAOE,EAAYjrC,KAAMq9B,EAAO3K,EAAIqY,GAAS,EAC9C,EAWDxI,EAAazkB,UAAUktB,KAAO,SAAc3N,EAAO3K,EAAIqY,GACrD,OAAOE,EAAYjrC,KAAMq9B,EAAO3K,EAAIqY,GAAS,EAC9C,EAYDxI,EAAazkB,UAAUglB,eAAiB,SAAwBzF,EAAO3K,EAAIqY,EAASC,GAClF,IAAIG,EAAMP,EAASA,EAASvN,EAAQA,EAEpC,IAAKr9B,KAAKorC,QAAQD,GAAM,OAAOnrC,KAC/B,IAAK0yB,EAEH,OADA4Y,EAAWtrC,KAAMmrC,GACVnrC,KAGT,IAAI0hC,EAAY1hC,KAAKorC,QAAQD,GAE7B,GAAIzJ,EAAUhP,GAEVgP,EAAUhP,KAAOA,GACfsY,IAAQtJ,EAAUsJ,MAClBD,GAAWrJ,EAAUqJ,UAAYA,GAEnCO,EAAWtrC,KAAMmrC,OAEd,CACL,IAAK,IAAIjkC,EAAI,EAAGg2B,EAAS,GAAIt6B,EAAS8+B,EAAU9+B,OAAQsE,EAAItE,EAAQsE,KAEhEw6B,EAAUx6B,GAAGwrB,KAAOA,GACnBsY,IAAStJ,EAAUx6B,GAAG8jC,MACtBD,GAAWrJ,EAAUx6B,GAAG6jC,UAAYA,IAErC7N,EAAO51B,KAAKo6B,EAAUx6B,IAOtBg2B,EAAOt6B,OAAQ5C,KAAKorC,QAAQD,GAAyB,IAAlBjO,EAAOt6B,OAAes6B,EAAO,GAAKA,EACpEoO,EAAWtrC,KAAMmrC,EAC1B,CAEE,OAAOnrC,IACR,EASDuiC,EAAazkB,UAAU4iB,mBAAqB,SAA4BrD,GACtE,IAAI8N,EAUJ,OARI9N,GACF8N,EAAMP,EAASA,EAASvN,EAAQA,EAC5Br9B,KAAKorC,QAAQD,IAAMG,EAAWtrC,KAAMmrC,KAExCnrC,KAAKorC,QAAU,IAAIP,EACnB7qC,KAAKqrC,aAAe,GAGfrrC,IACR,EAKDuiC,EAAazkB,UAAUmuB,IAAM1J,EAAazkB,UAAUglB,eACpDP,EAAazkB,UAAUmtB,YAAc1I,EAAazkB,UAAU2iB,GAK5D8B,EAAa2J,SAAWtB,EAKxBrI,EAAaA,aAAeA,EAM1Bl6B,UAAiBk6B,kCCvTN4J,GAAb,WAAAvsC,GACUI,KAAKosC,MAAiB,GACtBpsC,KAAAqsC,gBAAkB,IAAI56B,gBAMvB,UAAA66B,GACLtsC,KAAKqsC,gBAAgBv6B,QACrB9R,KAAKosC,MAAQ,GACbpsC,KAAKqsC,gBAAkB,IAAI56B,gBAMtB,SAAM1L,CAAIwmC,GACf,MAAM56B,OAAEA,EAAM80B,QAAEA,GAAYL,GAC1BH,GAA6BsG,GAC7BvsC,KAAKqsC,gBAAgB16B,QAEvBA,EAAO66B,iBACP,MAAMhtC,QAAEA,EAAOy3B,QAAEA,GAxCrB,WACE,IAAIz3B,EACA+N,EACJ,MAAM0pB,EAAU,IAAI13B,SAAW,CAACktC,EAAUC,KACxCltC,EAAUitC,EACVl/B,EAASm/B,CAAO,IAElB,MAAO,CAAEltC,UAAS+N,SAAQ0pB,UAC5B,CAgCiC0V,GAC7B3sC,KAAKosC,MAAM9kC,KAAK9H,GAEhB,MAAMotC,EAAe,IAAIrtC,SAAe,CAAC4Q,EAAG5C,KAC1CoE,EAAO+wB,iBAAiB,SAAS,KAC/B1iC,KAAKosC,MAAQpsC,KAAKosC,MAAMl8B,QAAQvH,GAAMA,IAAMnJ,IAC5C+N,EAAOoE,EAAOjE,OAAO,GACrB,IAEJ,OAAOnO,QAAQstC,KAAK,CAAC5V,EAAS2V,IAAez+B,QAAQs4B,GAMhD,YAAAqG,GACL,OAAO9sC,KAAKosC,MAAMxpC,OAAS,EAOtB,GAAAmqC,CAAI/d,GACT,IAAKhvB,KAAK8sC,eACR,MAAM,IAAI1sC,EAAmB,qCAEfJ,KAAKosC,MAAM/d,OAC3B7uB,CAAQwvB,GAGH,IAAArP,GACL,OAAO3f,KAAKosC,MAAMxpC,cC3BToqC,GAyBX,WAAAptC,CAA2B8C,GAAA1C,KAAO0C,QAAPA,EAxBX1C,KAAAk9B,OAAS,IAAIqF,GAGrBviC,KAAAitC,aAAe,IAAId,GAGVnsC,KAAQktC,SAAW,EAGnBltC,KAAmBmtC,oBAA2BC,GAA+BA,EAAU,GAGvFptC,KAAqBqtC,sBAAyB9C,QAAyCn5B,IAAbm5B,EAKnFvqC,KAAAstC,UAAY,IAAIC,IAKhBvtC,KAAAwtC,OAAS,IAAID,KAGf7qC,aAAO,EAAPA,EAASyqC,uBACXntC,KAAKmtC,oBAAsBzqC,EAAQyqC,sBAEjCzqC,aAAO,EAAPA,EAAS2qC,yBACXrtC,KAAKqtC,sBAAwB3qC,EAAQ2qC,wBAGnC3qC,eAAAA,EAASwqC,WAAYxqC,EAAQwqC,UAAY,IAC3CltC,KAAKktC,SAAWxqC,EAAQwqC,UAG1BltC,KAAKmK,OAASnK,KAAKmK,QAASzH,aAAA,EAAAA,EAASyH,SAAUP,EAAc,iBAMxD,GAAA2mB,CAAIga,GACT,IAAKA,EAASvC,UAEZ,MADAhoC,KAAKmK,OAAOxI,MAAM,8CAA+C,CAAEgT,WAAY41B,EAAS/lB,KAClF,IAAIgjB,GAAiB,8CAA+CD,GAAgB4C,iBAGxFnqC,KAAKitC,aAAaH,eACpB9sC,KAAKitC,aAAaF,IAAIxC,IAIxBvqC,KAAKstC,UAAU/c,IAAIga,GAEnBvqC,KAAKk9B,OAAOyE,KAAK,QAAS,CAAE4I,cAOvB,aAAMkD,CAAQlB,GACnB,MAAM56B,EAASs0B,GAA6BsG,GAE5C56B,EAAO66B,iBAGP,MAAMkB,EAA0Bt9B,UAC9BuB,EAAO66B,iBAEP,MAAMjC,EAAWvqC,KAAKstC,UAAU3tB,KAAO,EAAI3f,KAAKmtC,oBAAoB,IAAIntC,KAAKstC,YAAc,KAC3F,GAAK/C,EAKL,OAAKvqC,KAAKqtC,sBAAsB9C,GAOzBA,GALLvqC,KAAK2tC,oBAAoBpD,GAElB7D,GAA4BgH,GAGtB,EAEXnD,QAAiBmD,IAGvB,OAAInD,GACFvqC,KAAKstC,UAAU5tB,OAAO6qB,GACtBvqC,KAAKwtC,OAAOjd,IAAIga,GAChBvqC,KAAKk9B,OAAOyE,KAAK,WAAY,CAAE4I,aACxBA,GAGFvqC,KAAKitC,aAAalnC,IAAI4L,GASxB,OAAAsT,CAAQslB,GAGb,GAFAvqC,KAAKwtC,OAAO9tB,OAAO6qB,GAEfvqC,KAAKqtC,sBAAsB9C,GAAW,CAGxC,GAFAvqC,KAAKk9B,OAAOyE,KAAK,WAAY,CAAE4I,aAE3BvqC,KAAKitC,aAAaH,eAEpB,YADA9sC,KAAKitC,aAAaF,IAAIxC,GAIxBvqC,KAAKstC,UAAU/c,IAAIga,QAEnBvqC,KAAKk9B,OAAOyE,KAAK,UAAW,CAAE4I,aAI3B,MAAAza,CAAOya,GACRvqC,KAAKwtC,OAAOzgC,IAAIw9B,KAClBvqC,KAAKwtC,OAAO9tB,OAAO6qB,GACnBvqC,KAAKk9B,OAAOyE,KAAK,UAAW,CAAE4I,cAG5BvqC,KAAKstC,UAAUvgC,IAAIw9B,KACrBvqC,KAAKstC,UAAU5tB,OAAO6qB,GACtBvqC,KAAKk9B,OAAOyE,KAAK,UAAW,CAAE4I,cAO3B,KAAApN,GACL,OAAOn9B,KAAK4tC,iBAAmB5tC,KAAK6tC,cAM/B,cAAAD,GACL,OAAO5tC,KAAKstC,UAAU3tB,KAMjB,WAAAkuB,GACL,OAAO7tC,KAAKwtC,OAAO7tB,KAMd,OAAAmuB,GACL,OAAO9tC,KAAKm9B,SAAWn9B,KAAKktC,SAMvB,WAAMa,GACX/tC,KAAKitC,aAAaX,aAClB,IAAK,MAAM/B,KAAYvqC,KAAKstC,UAC1BttC,KAAKstC,UAAU5tB,OAAO6qB,GACtBvqC,KAAKk9B,OAAOyE,KAAK,UAAW,CAAE4I,aAGhC,IAAK,MAAMA,KAAYvqC,KAAKwtC,OAC1BxtC,KAAKwtC,OAAO9tB,OAAO6qB,GACnBvqC,KAAKk9B,OAAOyE,KAAK,UAAW,CAAE4I,aAGhCvqC,KAAKstC,UAAY,IAAIC,IACrBvtC,KAAKwtC,OAAS,IAAID,IAClBvtC,KAAKk9B,OAAOyE,KAAK,WAGT,mBAAAgM,CAAoBpD,GAC5BvqC,KAAKstC,UAAU5tB,OAAO6qB,GACtBvqC,KAAKk9B,OAAOyE,KAAK,UAAW,CAAE4I,aAGzB,QAAAyD,CAASza,GACd,OAAOA,EAAOH,UAAU,CACtBvT,KAAO0qB,GAAavqC,KAAKuwB,IAAIga,GAC7B5oC,MAAQ2N,GAAQtP,KAAKmK,OAAOxI,MAAM,mCAAoC2N,MC/OtE,MAAO2+B,WAA6BxG,GAGxC,WAAA7nC,CAAY8nC,GACV3nC,MAAM2nC,GAHQ1nC,KAAMuoC,OAAG,YAMf,QAAAH,KCRZ,IAAI8F,GAAY,SAAUrkC,GAWzB,GAVAA,EAAOA,GAAQ,CAAE,EAEjB7J,KAAKT,QAAUsK,EAAKtK,SAAWA,QAI/BS,KAAKmuC,OAASxoC,OAAOyX,OAAO,MAG5Bpd,KAAKouC,gBAAkBvkC,EAAKukC,kBAAmB,EAC3CpuC,KAAKouC,gBAAiB,CACzB,QAAuB,IAAZvtC,QAAqD,IAAnBA,EAAQwtC,OACpD,MAAM,IAAI1uC,MACT,2LAIFK,KAAKsuC,QAAU3oC,OAAOyX,OAAO,KAC/B,CAECpd,KAAKsU,QAAUzK,EAAKyK,SAAW45B,GAAUK,gBACzCvuC,KAAKwuC,kBAAoB3kC,EAAK2kC,mBAAqBN,GAAUO,4BAC7DzuC,KAAK0uC,iBAAmB7kC,EAAK6kC,kBAAoBR,GAAUS,2BACvD9kC,EAAK+kC,aAAe1V,KAAa50B,OAAOuqC,UAAUhlC,EAAK+kC,aAAe/kC,EAAK+kC,YAAc,EAC5F5uC,KAAK4uC,WAAa/kC,EAAK+kC,WAEvB5uC,KAAK4uC,WAAaV,GAAUY,mBAE9B,EAEAZ,GAAUK,gBAAkB,EAC5BL,GAAUO,4BAA8B,EACxCP,GAAUS,2BAA6B,EACvCT,GAAUY,oBAAsB,IAUhCZ,GAAUpwB,UAAU2vB,QAAU,SAAU1lC,EAAK2qB,EAAIb,EAAIhoB,GACpD,GAAI8F,MAAMC,QAAQ7H,GACjB,OAAO/H,KAAK+uC,cAAchnC,EAAK2qB,EAAIb,EAAIhoB,GAGxC,GAAoB,mBAAR,EACX,MAAM,IAAIlK,MAAM,uCAIjB,IAAIqvC,EAAkB,KAClBC,EAAiB,KACjBC,EAAW,KAEK,mBAAR,IACXrlC,EAAOgoB,EACPA,EAAK,KAGLqd,EAAW,IAAIlvC,KAAKT,SAAQ,SAASC,EAAS+N,GAC7CyhC,EAAkBxvC,EAClByvC,EAAiB1hC,CACpB,KAGC1D,EAAOA,GAAQ,CAAE,EAEjB,IAAIslC,GAAW,EACXC,EAAQ,KACRC,EAAkB,KAClBC,EAAiB,KACjBruC,EAAOjB,KAEP2sB,EAAO,SAAU4iB,EAAQjgC,EAAKka,GAE7B6lB,IACH9d,aAAa8d,GACbA,EAAkB,MAGfC,IACH/d,aAAa+d,GACbA,EAAiB,MAGdC,IACGtuC,EAAKktC,OAAOpmC,IAAoC,IAA5B9G,EAAKktC,OAAOpmC,GAAKnF,eACnC3B,EAAKktC,OAAOpmC,GAEhB9G,EAAKmtC,wBACDntC,EAAKqtC,QAAQvmC,IAIjBonC,IACCD,EAOA5/B,EACH2/B,EAAe3/B,GAGf0/B,EAAgBxlB,GAVG,mBAAR,GACXqI,EAAGviB,EAAKka,GAYV2lB,GAAW,GAGRI,GAEGtuC,EAAKktC,OAAOpmC,IAAQ9G,EAAKktC,OAAOpmC,GAAKnF,OAAS,GACnD3B,EAAKktC,OAAOpmC,GAAKsmB,OAAjBptB,EAGF,EAEG+B,EAAO,SAAUusC,GACpB,GAAIJ,EACH,OAAOxiB,EAAK4iB,GAGTH,IACH7d,aAAa6d,GACbA,EAAQ,MAGLnuC,EAAKmtC,iBAAmBmB,IAC3BtuC,EAAKqtC,QAAQvmC,GAAOlH,EAAQwtC,QAG7B,IAAIK,EAAmB7kC,EAAK6kC,kBAAoBztC,EAAKytC,iBAUrD,GATIA,IACHY,EAAiB7vC,YAAW,WACrBwB,EAAKktC,OAAOpmC,IACjB4kB,EAAK4iB,EAAQ,IAAI5vC,MAAM,sCAAwCoI,GAEhE,GAAE2mC,IAIc,IAAdhc,EAAG9vB,OAAc,CACpB,IAAI4sC,GAAS,EACb,IACC9c,GAAG,SAAUpjB,EAAKka,GACZgmB,IACJA,GAAS,EACT7iB,EAAK4iB,EAAQjgC,EAAKka,GAExB,GACI,CAAC,MAAOla,GAEHkgC,IACJA,GAAS,EACT7iB,EAAK4iB,EAAQjgC,GAElB,CACA,MAGGrO,EAAKwuC,aAAY,WAChB,OAAO/c,GACP,IACA5kB,MAAK,SAAS0b,GACdmD,EAAK4iB,OAAQn+B,EAAWoY,EACxB,IAAE,SAAS7nB,GACXgrB,EAAK4iB,EAAQ5tC,EACjB,GAEE,EAEGV,EAAKmtC,iBAAqBvtC,EAAQwtC,SACrCrrC,EAAOnC,EAAQwtC,OAAOxvB,KAAK7b,IAG5B,IAAI4rC,EAAa/kC,EAAK+kC,YAAc3tC,EAAK2tC,WAEzC,GAAK3tC,EAAKktC,OAAOpmC,GAIZ,GAAI9G,EAAKmtC,iBAAqBvtC,EAAQwtC,QAAUxtC,EAAQwtC,SAAWptC,EAAKqtC,QAAQvmC,GAGpF/E,GAAK,QAED,GAAI/B,EAAKktC,OAAOpmC,GAAKnF,QAAUgsC,EACnCjiB,GAAK,EAAO,IAAIhtB,MAAM,mCAAqCoI,QAEvD,CACJ,IAAI2nC,EAAS,WACZ1sC,GAAK,EACL,EACG6G,EAAK8lC,UACR1uC,EAAKktC,OAAOpmC,GAAKpD,QAAQ+qC,GAEzBzuC,EAAKktC,OAAOpmC,GAAKT,KAAKooC,GAGvB,IAAIp7B,EAAUzK,EAAKyK,SAAWrT,EAAKqT,QAC/BA,IACH86B,EAAQ3vC,YAAW,WAClB2vC,EAAQ,KACRziB,GAAK,EAAO,IAAIhtB,MAAM,iCAAmCoI,GACzD,GAAEuM,GAEN,MA5BErT,EAAKktC,OAAOpmC,GAAO,GACnB/E,GAAK,GA6BN,IAAIwrC,EAAoB3kC,EAAK2kC,mBAAqBvtC,EAAKutC,kBASvD,OARKA,IACHa,EAAkB5vC,YAAW,WACtBwB,EAAKktC,OAAOpmC,IACjB4kB,GAAK,EAAO,IAAIhtB,MAAM,gDAAkDoI,GAEzE,GAAEymC,IAGDU,QAAJ,CAGD,EAkBAhB,GAAUpwB,UAAUixB,cAAgB,SAAUlnC,EAAM6qB,EAAIb,EAAIhoB,GACvC,mBAAR,IACXA,EAAOgoB,EACPA,EAAK,MAGN,IAAI5wB,EAAOjB,KAOP4vC,EAAM/nC,EAAKgoC,aAAY,SAAUprC,EAAMsD,GAC1C,OAPW,SAAUA,EAAK2qB,GAC1B,OAAO,SAAUb,GAChB5wB,EAAKwsC,QAAQ1lC,EAAK2qB,EAAIb,EAAIhoB,EAC1B,CACD,CAGOimC,CAAM/nC,EAAKtD,EAClB,GAAEiuB,GAEH,GAAoB,mBAAR,EAIX,OAAO,IAAI1yB,KAAKT,SAAQ,SAAUC,EAAS+N,GAEvB,IAAfqiC,EAAIhtC,OACPgtC,GAAI,SAAUtgC,EAAKka,GACdla,EACH/B,EAAO+B,GAGP9P,EAAQgqB,EAEd,IAEIhqB,EAAQowC,IAEZ,IAjBEA,EAAI/d,EAmBN,EAOAqc,GAAUpwB,UAAUiyB,OAAS,SAAUhoC,GACtC,OAAKA,IAIK/H,KAAKmuC,OAAOpmC,GAHdpC,OAAOkC,KAAK7H,KAAKmuC,QAAQvrC,OAAS,CAK3C,EAKAsrC,GAAUpwB,UAAU2xB,YAAc,SAAS/c,GAC1C,IACC,OAAO1yB,KAAKT,QAAQC,QAAQkzB,IAC5B,CAAC,MAAO7f,GACR,OAAO7S,KAAKT,QAAQgO,OAAOsF,EAC7B,CACA,EAEA,SAAiBq7B,IC7SjB,MAAM8B,GACU,IADVA,GAEc,UAOPC,GAOX,WAAArwC,CAAY8C,WALJ1C,KAAAkwC,MAAQ,IAAIzwB,IAEZzf,KAAAmwC,KAAkB,IAAIjC,GAI5BluC,KAAKyL,OAAS,CACZ2kC,aAAmC,QAArBxlC,EAAAlI,aAAO,EAAPA,EAAS0tC,oBAAY,IAAAxlC,EAAAA,EAAIolC,GACvCK,iBAA2C,QAAzB1gB,EAAAjtB,aAAO,EAAPA,EAAS2tC,wBAAgB,IAAA1gB,EAAAA,EAAIqgB,IAQnD,iBAAMM,CAAY/F,GAChB,MAAMgG,EAAcvwC,KAAKwwC,eAAejG,SAClCvqC,KAAKmwC,KAAK1C,QAAQ,mBAAmB,KACzC,IAAIL,EAAYptC,KAAKkwC,MAAMnqC,IAAIwqC,GAC1BnD,IACHA,EAAY,IAAIG,IAChBvtC,KAAKkwC,MAAMjqC,IAAIsqC,EAAanD,IAE9BA,EAAU7c,IAAIga,EAAS,IAOpB,kBAAMkG,GACX,MAAMrD,EAA6B,GAOnC,aALMptC,KAAKmwC,KAAK1C,QAAQ,mBAAmB,KACzCztC,KAAKkwC,MAAMpoC,SAAS4oC,GAAuBtD,EAAU9lC,KAAKtH,KAAK2wC,gBAAgBD,MAC/E1wC,KAAKkwC,MAAMnC,OAAO,IAGbX,EASF,sBAAMwD,GACX,IAAIC,EAAWC,EAEf,MAAMC,EAAmB,IAAIxxC,SAASC,IACpCqxC,EAAYpxC,WAAWD,EAASQ,KAAKyL,OAAO4kC,iBAAiB,IAGzDW,EAAqB,IAAIzxC,SAASC,IACtCsxC,EAAa7U,aAAY,KACnBj8B,KAAKkwC,MAAMvwB,MAAQ3f,KAAKyL,OAAO2kC,cACjC5wC,GAAQ,KAET,IAAM,UAGLD,QAAQstC,KAAK,CAACkE,EAAkBC,IACtCzf,aAAasf,GACbzU,cAAc0U,GAMR,eAAAH,CAAgBvD,GAQtB,MAAO,IAAIA,GAAW6D,MAPgB,CAACC,EAAmBC,KACxD,MAAMC,EAAUF,EAAGrH,mBACbwH,EAAUF,EAAGtH,mBACbyH,EAASJ,EAAGpJ,UAAUyJ,UACtBC,EAASL,EAAGrJ,UAAUyJ,UAC5B,OAAOH,IAAYC,EAAUD,EAAUC,EAAUG,EAASF,CAAM,IAER,GAMpD,cAAAd,CAAejG,GACrB,MAAO,CACLA,EAASvzB,SAASwN,GAClB+lB,EAAS1C,WAAW,uBACpB0C,EAAS1C,WAAW,yBACpB0C,EAAS1C,WAAW,qBACpB0C,EAAS1C,WAAW,0BACpB7gC,KAAK,MC7EX,IAAYyqC,GChCAC,IDgCZ,SAAYD,GACVA,EAAA,GAAA,IACAA,EAAA,GAAA,IACAA,EAAA,GAAA,IACAA,EAAA,KAAA,KACAA,EAAA,KAAA,IACD,CAND,CAAYA,KAAAA,GAMX,CAAA,UAaYE,GAAb,WAAA/xC,GACUI,KAAU6nC,WAA0B,GACpC7nC,KAAW4xC,YAA4B,GAE/C,WAAAC,CAAY9pC,EAAawD,GACvB,MAAMq9B,EAAY5oC,KAAK6nC,WAAWe,WAAWyB,GAASA,EAAKtiC,MAAQA,IAMnE,OALI6gC,GAAa,EACf5oC,KAAK6nC,WAAWe,GAAa,CAAE7gC,MAAKwD,SAEpCvL,KAAK6nC,WAAWvgC,KAAK,CAAES,MAAKwD,UAEvBvL,KAGT,aAAA8xC,CAAc/pC,EAAawD,EAAwBwmC,EAAqBN,GAAmBO,IAEzF,OADAhyC,KAAK4xC,YAAYtqC,KAAK,CAAES,MAAKwD,QAAOwmC,uBAC7B/xC,KAGT,UAAAiyC,GACE,MAAO,CACLpK,WAAY7nC,KAAK6nC,WACjB+J,YAAa5xC,KAAK4xC,YAAY9qC,KAAKwB,GAAM,IAAIA,EAAEP,IAAMO,EAAEypC,mBAAqBzpC,EAAEiD,YAIlF,cAAA2mC,CAAep0B,GAcb,OAbIA,EAAU+pB,YACZ/pB,EAAU+pB,WAAW//B,SAASuiC,IAC5BrqC,KAAK6xC,YAAYxH,EAAKtiC,IAAKsiC,EAAK9+B,MAAM,IAItCuS,EAAU8zB,aACZ9zB,EAAU8zB,YAAY9pC,SAASqqC,IAC7B,MAAMpqC,IAAEA,EAAGwD,MAAEA,EAAKwmC,mBAAEA,GAAuB,IAAK/xC,KAAKoyC,gBAAgBD,IACrEnyC,KAAK8xC,cAAc/pC,EAAKwD,EAAOwmC,EAAmB,IAI/C/xC,KAGD,eAAAoyC,CAAgBC,GACtB,IAAK,MAAMtqC,KAAO0pC,GAAoB,CACpC,MAAMlmC,EAAQkmC,GAAmB1pC,GAC3BuqC,EAAmBD,EAAW7qC,MAAM,GAAI,GAAGJ,MAAMmE,GACvD,GAAgC,IAA5B+mC,EAAiB1vC,OACnB,MAAO,CACLmF,IAAKuqC,EAAiB,GACtB/mC,MAAO+mC,EAAiB,GACxBP,mBAAoBxmC,GAK1B,MAAM,IAAInL,EAAmB,+BAA+BiyC,aE1GnDE,GACD,aAAAC,CAAcjnC,GACtB,OAAOA,EAAQ,GAAKjH,OAAOuqC,UAAUtjC,KDHzC,SAAYmmC,GACVA,EAAA,aAAA,eACD,CAFD,CAAYA,KAAAA,GAEX,CAAA,IAOK,MAAOe,WAAqCF,GAwBhD,WAAA3yC,CAAY8C,SAWV,GAVA3C,QAxBOC,KAAA0yC,cAAwBhB,GAAciB,aACtC3yC,KAAM4yC,OAAW,KACjB5yC,KAAA6yC,QAAU,CACjB3xC,KAAM,KACN4iB,aAAS1S,GAEFpR,KAAS8yC,UAAW,GACpB9yC,KAAa+yC,cAAW,EACxB/yC,KAAagzC,cAAW,EACxBhzC,KAAWizC,YAAW,EACtBjzC,KAAYkzC,aAAa,GAQzBlzC,KAAQmzC,UAAa,EAQ5BxtC,OAAOytC,OAAOpzC,KAAM0C,IAEE,QAAjBkI,EAAAlI,EAAQmwC,eAAS,IAAAjoC,OAAA,EAAAA,EAAA1J,QACpBlB,KAAK6yC,QAAQ3xC,KAAOlB,KAAK4yC,QAG3B5yC,KAAKqzC,cAAgB3wC,EAAQ2wC,gBAExBrzC,KAAKszC,WAActzC,KAAKuzC,UAAavzC,KAAKwzC,UAAaxzC,KAAKyzC,UAC/D,MAAM,IAAItzC,EAAiB,gDAG7B,GAAIH,KAAKyzC,WAAazzC,KAAKszC,UACzB,MAAM,IAAInzC,EAAiB,qFAG7B,IAAKH,KAAKwyC,cAAcxyC,KAAKqzC,eAC3B,MAAM,IAAIlzC,EACR,mEAAmEH,KAAKqzC,iBAI5E,GAAI3wC,EAAQkwC,QAAUlwC,EAAQmwC,QAC5B,MAAM,IAAI1yC,EACR,kHExDF,MAAOuzC,WAAkCnB,GAG7C,WAAA3yC,CAAY8C,GACV3C,QAHcC,KAAA2zC,UAAoBC,KAK9BlxC,aAAO,EAAPA,EAASixC,aACX3zC,KAAK2zC,UAAYjxC,EAAQixC,kBCXlBE,GACX,WAAAj0C,CAAoB6L,EAAoC,IAAIioC,IAAxC1zC,KAAMyL,OAANA,EAEpB,KAAApG,CAAMyuC,GACJA,EACGjC,YAAY,iCAAiC,GAC7CA,YAAY,0BAA2B7xC,KAAKyL,OAAOkoC,WAEtDG,EACGhC,cAAc,0BAA2B,UACzCA,cAAc,0BAA2B9xC,KAAKyL,OAAOkoC,YCLtD,MAAOI,WAAoCxB,GAK/C,WAAA3yC,CAAY8C,GAOV,GANA3C,QALcC,KAAAg0C,+BAAiC,IACjCh0C,KAAAi0C,iCAAmC,IACnCj0C,KAA6Bk0C,8BAAG,MAK1CxxC,GACFiD,OAAOytC,OAAOpzC,KAAM0C,IAGjB1C,KAAKwyC,cAAcxyC,KAAKg0C,gCAC3B,MAAM,IAAI7zC,EAAiB,uEAG7B,IAAKH,KAAKwyC,cAAcxyC,KAAKi0C,kCAC3B,MAAM,IAAI9zC,EAAiB,6DAG7B,IAAKH,KAAKwyC,cAAcxyC,KAAKk0C,+BAC3B,MAAM,IAAI/zC,EAAiB,8ECxBpBg0C,GACX,WAAAv0C,CACUw0C,EACAC,EACA5oC,EAAsC,IAAIsoC,IAF1C/zC,KAAUo0C,WAAVA,EACAp0C,KAAgBq0C,iBAAhBA,EACAr0C,KAAMyL,OAANA,EAGV,WAAMpG,CAAMyuC,GAEVA,EACGjC,YAAY,iDAAkD7xC,KAAKyL,OAAOwoC,kCAC1EpC,YAAY,6CAA8C7xC,KAAKyL,OAAOyoC,+BACtErC,YAAY,gDAAiD7xC,KAAKyL,OAAOuoC,gCAG5E,MAAMpC,YAAEA,EAAW/J,WAAEA,SAAqB7nC,KAAKq0C,iBAAiBC,mCAC9Dt0C,KAAKo0C,WAAW5vB,IAElBsvB,EAAQ5B,eAAe,CAAEN,cAAa/J,sBClB7B0M,GACX,WAAA30C,CAAoB6L,GAAAzL,KAAMyL,OAANA,EAEb,WAAMpG,CAAMyuC,GAoBjB,GAnBAA,EAAQjC,YAAY,4BAA6BttC,KAAKiwC,MAAoC,IAA5Bx0C,KAAKyL,OAAO4nC,eAE1ES,EACGjC,YAAY,mCAAoC7xC,KAAKyL,OAAOinC,eAC5DZ,cAAc,qBAAsB9xC,KAAKyL,OAAOonC,QAAQ3xC,MAEvDlB,KAAKyL,OAAOonC,QAAQ/uB,SACtBgwB,EAAQhC,cAAc,wBAAyB9xC,KAAKyL,OAAOonC,QAAQ/uB,SAGjE9jB,KAAKyL,OAAOynC,aAAatwC,QAC3B5C,KAAKyL,OAAOynC,aAAaprC,SAAS2sC,GAAQX,EAAQhC,cAAc,6BAA8B2C,KAEhGX,EACGhC,cAAc,oBAAqB9xC,KAAKyL,OAAOqnC,UAAWrB,GAAmBiD,MAC7E5C,cAAc,wBAAyB9xC,KAAKyL,OAAOsnC,cAAetB,GAAmBiD,MACrF5C,cAAc,sBAAuB9xC,KAAKyL,OAAOwnC,YAAaxB,GAAmBiD,MACjF5C,cAAc,wBAAyB9xC,KAAKyL,OAAOunC,cAAevB,GAAmBiD,MAEpF10C,KAAKyL,OAAOgoC,SAAU,CACxB,MAAMkB,QAAoB30C,KAAK40C,kCAC/Bd,EAAQjC,YAAY,8BAA+B8C,QAC9C,GAAI30C,KAAKyL,OAAO6nC,WAAatzC,KAAKyL,OAAO+nC,SAAU,CACxD,MAAMmB,QAAoB30C,KAAK60C,wBAC/Bf,EAAQjC,YAAY,8BAA+B8C,GAGrD30C,KAAK80C,uBAAuBhB,GAGtB,qCAAMc,GACZ,IAAK50C,KAAKyL,OAAOgoC,SACf,MAAM,IAAIpzC,EAAmB,0EAE/B,IAAKL,KAAKyL,OAAO6nC,UACf,MAAM,IAAIjzC,EACR,0JAGJ,MAAO,aAAaL,KAAKyL,OAAO6nC,aAAatzC,KAAKyL,OAAOgoC,WAGnD,2BAAMoB,GACZ,MAAME,EAAUC,IAEV7B,EAAWnzC,KAAKyL,OAAO0nC,SAEvB8B,EAAQC,KAEd,IAAIltC,EAAOhI,KAAKyL,OAAO6nC,UACvB,MAAM6B,EAAMn1C,KAAKyL,OAAO+nC,SAElB1nC,EAAM,GAAGipC,mBAAyBE,EAAQ,WAAa,gBAAgBE,EAAM,OAAOA,IAAQ,QAAQntC,MAE1G,IACE,MAAM6D,QAAiBkG,MAAMjG,GAC7B,IAAKD,EAAS4G,GACZ,MAAM,IAAIpS,EAAmB,6BAA6BwL,EAASwG,UAGrE,MAAMwsB,QAAahzB,EAASuG,OAEtBqhC,EAAWN,EAAWtU,EAAKtB,MAAQsB,EAAKrB,KAG9C,OAFAx1B,EAAO62B,EAAKuW,KAEL,aAAaptC,KAAQyrC,IAC5B,MAAO9xC,GACP,GAAIA,aAAiBjC,EAAY,MAAMiC,EACvC,MAAM,IAAItB,EAAmB,0BAA0BsB,MAInD,sBAAAmzC,CAAuBhB,GACxB9zC,KAAKyL,OAAO8nC,WACjBO,EAAQjC,YAAY,yBAA0B7xC,KAAKyL,OAAO8nC,UACtDvzC,KAAKyL,OAAO4pC,aAAavB,EAAQjC,YAAY,6BAA8B7xC,KAAKyL,OAAO4pC,aACvFr1C,KAAKyL,OAAO6pC,sBACdxB,EAAQjC,YAAY,uCAAwC7xC,KAAKyL,OAAO6pC,sBACtEt1C,KAAKyL,OAAO8pC,cAAczB,EAAQjC,YAAY,8BAA+B7xC,KAAKyL,OAAO8pC,sBCpFpFC,GACX,WAAA51C,CAAoB8C,GAAA1C,KAAO0C,QAAPA,EAEb,WAAM2C,CAAMyuC,GACjB9zC,KAAKy1C,uBAAuB3B,GAC5B9zC,KAAK01C,sBAAsB5B,GAC3B9zC,KAAK21C,sBAAsB7B,GAGrB,qBAAA6B,CAAsB7B,GAC5B,IAAK9zC,KAAK0C,QAAQyhC,QAAS,OAC3B,MAAM/pB,EAAUpa,KAAK0C,QAAQyhC,QAAQ/pB,QAC/BC,EAASra,KAAK0C,QAAQyhC,QAAQ9pB,QAAU,QACxC9J,EAAQvQ,KAAK0C,QAAQyhC,QAAQ5zB,OAAS,CAAC,UAAW,WAAWgB,SAAS6I,GAAW,MAAQ,OAC/F05B,EAAQhC,cAAc,8BAA8Bz3B,KAAUD,KAAW7J,YAAiB,KAGpF,sBAAAklC,CAAuB3B,2DAC7B,cAAI9zC,KAAK0C,QAAQkzC,+BAAUhD,oBAAU5yC,KAAK0C,QAAQkzC,+BAAU/C,SAC1D,MAAM,IAAI1yC,EACR,qHAIqB,QAArBq1B,EAAAx1B,KAAK0C,QAAQkzC,gBAAQ,IAAApgB,OAAA,EAAAA,EAAEod,SACzBkB,EAAQhC,cAAc,qBAA6C,QAAvB+D,EAAA71C,KAAK0C,QAAQkzC,gBAAU,IAAAC,OAAA,EAAAA,EAAAjD,SAEnC,QAA9BkD,EAAqB,QAArBC,EAAA/1C,KAAK0C,QAAQkzC,gBAAQ,IAAAG,OAAA,EAAAA,EAAElD,eAAO,IAAAiD,OAAA,EAAAA,EAAE50C,OAClC4yC,EAAQhC,cAAc,qBAAsB9xC,KAAK0C,QAAQkzC,SAAS/C,QAAQ3xC,OAE1C,QAA9B80C,EAAqB,QAArBC,EAAAj2C,KAAK0C,QAAQkzC,gBAAQ,IAAAK,OAAA,EAAAA,EAAEpD,eAAO,IAAAmD,OAAA,EAAAA,EAAElyB,UAClCgwB,EAAQhC,cAAc,wBAAyB9xC,KAAK0C,QAAQkzC,SAAS/C,QAAQ/uB,oBAE3E9jB,KAAK0C,QAAQkzC,+BAAU1C,wBACzBgD,EAAAl2C,KAAK0C,QAAQkzC,yBAAU1C,aAAaprC,SAAS2sC,GAAQX,EAAQhC,cAAc,6BAA8B2C,OAElF,QAArB0B,EAAAn2C,KAAK0C,QAAQkzC,gBAAQ,IAAAO,OAAA,EAAAA,EAAErD,YACzBgB,EAAQhC,cAAc,4BAAqBsE,EAAAp2C,KAAK0C,QAAQkzC,+BAAU9C,UAAWrB,GAAmBiD,OAEzE,QAArB2B,EAAAr2C,KAAK0C,QAAQkzC,gBAAQ,IAAAS,OAAA,EAAAA,EAAEC,YACzBxC,EAAQhC,cAAc,4BAAqByE,EAAAv2C,KAAK0C,QAAQkzC,+BAAUU,UAAW7E,GAAmB+E,OAEzE,QAArBC,EAAAz2C,KAAK0C,QAAQkzC,gBAAQ,IAAAa,OAAA,EAAAA,EAAE1D,gBACzBe,EAAQhC,cAAc,gCAAyB4E,EAAA12C,KAAK0C,QAAQkzC,+BAAU7C,cAAetB,GAAmBiD,OAEjF,QAArBiC,EAAA32C,KAAK0C,QAAQkzC,gBAAQ,IAAAe,OAAA,EAAAA,EAAEC,gBACzB9C,EAAQhC,cAAc,gCAAyB+E,EAAA72C,KAAK0C,QAAQkzC,+BAAUgB,cAAenF,GAAmB+E,OAEjF,QAArBM,EAAA92C,KAAK0C,QAAQkzC,gBAAQ,IAAAkB,OAAA,EAAAA,EAAE9D,gBACzBc,EAAQhC,cAAc,gCAAyBiF,EAAA/2C,KAAK0C,QAAQkzC,+BAAU5C,cAAevB,GAAmBiD,OAEjF,QAArBsC,EAAAh3C,KAAK0C,QAAQkzC,gBAAQ,IAAAoB,OAAA,EAAAA,EAAEC,gBACzBnD,EAAQhC,cAAc,gCAAyBoF,EAAAl3C,KAAK0C,QAAQkzC,+BAAUqB,cAAexF,GAAmB+E,OAEjF,QAArBW,EAAAn3C,KAAK0C,QAAQkzC,gBAAQ,IAAAuB,OAAA,EAAAA,EAAElE,cACzBa,EAAQhC,cAAc,8BAAuBsF,EAAAp3C,KAAK0C,QAAQkzC,+BAAU3C,YAAaxB,GAAmBiD,OAE7E,QAArB2C,EAAAr3C,KAAK0C,QAAQkzC,gBAAQ,IAAAyB,OAAA,EAAAA,EAAEC,cACzBxD,EAAQhC,cAAc,8BAAuByF,EAAAv3C,KAAK0C,QAAQkzC,+BAAU0B,YAAa7F,GAAmB+E,MAIhG,qBAAAd,CAAsB5B,GACxB9zC,KAAK0C,QAAQixC,WACfG,EAAQhC,cAAc,0BAA2B9xC,KAAK0C,QAAQixC,kBCzDvD6D,GACX,WAAA53C,CAA6B8nC,GAAA1nC,KAAK0nC,MAALA,EAE7B,cAAIG,GACF,OAAO7nC,KAAK0nC,MAAMG,WAGpB,eAAI+J,GACF,OAAO5xC,KAAK0nC,MAAMkK,YAGpB,WAAIpJ,WACF,MAAMC,EAAczoC,KAAK6nC,WAAW,0BAC9Ba,EAAc1oC,KAAK6nC,WAAW,yCAEpC,IAAKY,EACH,MAAM,IAAIroC,EACR,iGAIJ,IAAKsoC,EACH,MAAM,IAAItoC,EACR,4GAIJ,MAAMuoC,EAASF,EAAYG,WAAWC,GAAgB,6BAARA,IACxCC,EAASL,EAAYG,WAAWC,GAAgB,wBAARA,IAExCE,EAAgC,QAAvBn+B,EAAA89B,EAAYC,UAAW,IAAA/9B,EAAAA,EAAA,EAItC,MAAO,CACLo+B,OAJoC,QAAvBrZ,EAAA+Y,EAAYI,UAAW,IAAAnZ,EAAAA,EAAA,EAKpCoZ,SACAE,MALYP,EAAYA,EAAY9lC,OAAS,IASjD,YAAIoU,GACF,MAAO,CACLwN,GAAIxkB,KAAK0nC,MAAM+P,WACfv2C,KAAMlB,KAAK6nC,WAAW,uBAAyB,aAInD,oBAAIsB,GACF,OAAOnpC,KAAK6nC,WAAW,yCAGzB,YAAIuB,GACF,OAAOppC,KAAK6nC,WAAW,uBAGzB,aAAI6P,GACF,OAAO13C,KAAK6nC,WAAW,wBAGzB,mBAAIwB,GACF,OAAOrpC,KAAK6nC,WAAW,8BAGzB,YAAIyB,GACF,OAAOtpC,KAAK6nC,WAAW,uBAGzB,cAAI0B,GACF,OAAOvpC,KAAK6nC,WAAW,yBAGzB,YAAI8P,GACF,OAAO33C,KAAK6nC,WAAW,sCAIzB,UAAI2B,GACF,OAAOxpC,KAAK43C,UAGd,aAAIA,GACF,OAAO53C,KAAK6nC,WAAW,qBAIzB,WAAIr/B,GACF,OAAOxI,KAAK63C,WAGd,cAAIA,GACF,OAAO73C,KAAK6nC,WAAW,yBAGzB,aAAI4B,GACF,OAAOzpC,KAAK6nC,WAAW,4BAGzB,uBAAI6B,GACF,OAAO1pC,KAAK6nC,WAAW,8BAGzB,eAAI8B,GACF,OAAO3pC,KAAK6nC,WAAW,sBAGzB,kBAAI+B,GACF,OAAO5pC,KAAK6nC,WAAW,yBAUzB,WAAIiQ,GACF,OAAO93C,KAAK0nC,MAAMoQ,QAMpB,iBAAIC,GACF,OAAO/3C,KAAK0nC,MAAMI,UAcpB,4BAAIkQ,GACF,MAAMC,EAAY,uDAEZC,EAAkBvyC,OAAOkK,QAAQ7P,KAAK0nC,MAAMG,YAC/C/gC,KAAsB,EAAEiB,EAAKowC,MAC5B,MAAMp1C,EAAQgF,EAAIhF,MAAMk1C,GACxB,MAAO,CAACl1C,EAAQA,EAAM,GAAK,GAAIo1C,EAAQ,IAExCjoC,QAAO,EAAEnI,OAAWA,IAEvB,OAAOpC,OAAOyyC,YAAYF,GAQrB,gBAAArO,CAAiBC,EAAY,GAClC,MAAMC,EAAY/pC,KAAKupC,WACjBS,EAA0B,GAAZF,EAAiB,GAErC,OAAO9pC,KAAKwoC,QAAQS,MAAQjpC,KAAKwoC,QAAQQ,OAASe,EAAYC,EAAchqC,KAAKwoC,QAAQO,OAASiB,SC8DzFqO,GAQX,WAAAz4C,CACmB04C,EAWjB51C,GAXiB1C,KAAIs4C,KAAJA,EARZt4C,KAAAk9B,OAAS,IAAIqF,GAEHviC,KAAAmK,OAASP,EAAc,UAmBtC5J,KAAKmK,OAASmuC,EAAKnuC,OACnBnK,KAAKu4C,UAAYD,EAAKC,UACtBv4C,KAAKw4C,WAAaF,EAAKE,WAEvBx4C,KAAK0C,QAAU,CACR+1C,yBAA0B,QAC5B/1C,GAGL1C,KAAK04C,gCAGP,wBAAMC,CACJC,EACAC,EACAzE,GAEA,MAAMN,EAAU,IAAInC,GAGdmH,EAAc,IAAIpF,GAA0B,CAChDC,UAAWiF,EAAcjF,YAGL,IAAIE,GAAoBiF,GAChCzzC,MAAMyuC,GAEpB,MAAMiF,EAAkBH,EAAchD,eAC5B51C,KAAKg5C,2BAA2BJ,EAAchD,UACpDgD,EAAchD,SAEZvC,EAAgB9wC,KAAKC,MAA+B,GAAzBq2C,EAAa/O,UAAiB,IAS3DuJ,EAF4B,KAG9BrzC,KAAKmK,OAAOzI,KACV,iHAIJ,MAAMu3C,EAAiB,IAAIxG,GAA6B,IACnDsG,EACH1F,kBAEI6F,EAAmB,IAAI3E,GAAuB0E,SAC9CC,EAAiB7zC,MAAMyuC,GAE7B,MAAMqF,EAAgB,IAAIpF,GAA4B6E,EAAczU,SAC9DiV,EAAkB,IAAIjF,GAAsBC,EAAYp0C,KAAKs4C,KAAKC,UAAWY,GAGnF,aAFMC,EAAgB/zC,MAAMyuC,GAErB,IAAI3M,GAAoB2M,EAAQ7B,aAAcmC,EAAWhN,iBAGlE,sBAAAiS,CAAuB32C,GACrB,MAAMoxC,EAAU,IAAInC,GAGpB,OAFiB,IAAI6D,GAAa9yC,GACzB2C,MAAMyuC,GACRA,EAAQ7B,aAQT,gCAAM+G,CAA2Bt2C,aACvC,GAAoB,QAAhBkI,EAAAlI,EAAQ+wC,gBAAQ,IAAA7oC,OAAA,EAAAA,EAAEX,WAAW,WAAY,CAC3C,MAAMqvC,EAA+B,QAAlB3pB,EAAAjtB,EAAQ+wC,gBAAU,IAAA9jB,OAAA,EAAAA,EAAA9qB,QAAQ,UAAW,IAElD00C,UAAc/jB,EAAAx1B,KAAKw4C,WAAWgB,eAAeF,wBAAsBt5C,KAAKw4C,WAAWiB,YAAYH,IAC7FI,QAASjG,EAAUkG,SAAUrG,GAAciG,EAOnD,OALAv5C,KAAKmK,OAAO3I,MAAM,mCAAoC,CACpD83C,aACAC,gBAGK,IACF72C,EACH+wC,WACAH,aAIJ,OAAO5wC,EAMT,uBAAAk3C,CAAwBC,GACtB,OAAO,IAAI1mB,IAAoBK,IAC7B,IAAIsmB,EAEJ,MAAMC,EAA4B3pC,UAChC,IAOE,OANA0pC,QAAsB95C,KAAKs4C,KAAKC,UAAUyB,2BAA2BH,GACrErmB,EAAW3T,KAAKi6B,GAChB95C,KAAKk9B,OAAOyE,KAAK,4BAA6B,CAC5C2G,OAAQwR,IAEV95C,KAAKmK,OAAO3I,MAAM,oDAAqD,CAAE8mC,OAAQwR,IAC1EA,EACP,MAAOxqC,GACP,MAAM2qC,EAAmB,IAAIzS,GAC3B,yCACAD,GAAgB2S,mBAChB5qC,GAGFkkB,EAAW7xB,MAAMs4C,KAIfE,EAAgC/pC,MAAOk4B,IAC3C,UACQtoC,KAAKs4C,KAAKC,UAAU6B,gBAAgB9R,GAC1CtoC,KAAKmK,OAAO1I,KAAK,qBAAsB,CAAE44C,SAAU/R,EAAO9jB,KAC1DxkB,KAAKmK,OAAO3I,MAAM,qBAAsB8mC,GACxCtoC,KAAKk9B,OAAOyE,KAAK,4BAA6B,CAC5C2G,WAEF,MAAOh5B,GACP,MAAM2qC,EAAmB,IAAIzS,GAC3B,yCACAD,GAAgB2S,mBAChB5qC,GAGFkkB,EAAW7xB,MAAMs4C,KAIhBF,IAEL,MAAMO,EAAWre,aAAY,KAC3B18B,QAAQoR,IAAI,CAACwpC,EAA8BL,GAAgBC,MACxDjsC,MAAK,EAAI,CAAAw6B,MACJA,IACFtoC,KAAKk9B,OAAOyE,KAAK,8BAA+B,CAC9C2G,WAEFtoC,KAAKmK,OAAO1I,KAAK,iEAAkE,CAAE6mC,eAGxFr6B,OAAOqB,IACNtP,KAAKmK,OAAOxI,MAAM,8CAA+C2N,GACjEkkB,EAAW7xB,MAAM2N,EAAI,GACrB,GACqC,IAAxCtP,KAAK0C,QAAQ+1C,0BAEhB,MAAO,KACLrc,cAAcke,GACVR,GACGK,EAA8BL,GAEtC,IAIL,2BAAAS,CAA4BjS,GAC1B,OAAOtoC,KAAKs4C,KAAKC,UAAUgC,4BAA4BjS,GAAQvU,KAC7D0H,IAAK4B,GAAUr9B,KAAKmK,OAAO3I,MAAM,yCAA0C,CAAE67B,YAC7E5B,IAAK4B,GAAUr9B,KAAKw6C,yBAAyBnd,MAIjD,wBAAAod,CAAyBnS,GACvB,OAAOtoC,KAAKu6C,4BAA4BjS,GAAQvU,KAC9C7jB,IAAQmtB,GAA8D,qBAAfA,EAAM16B,OAC7DmE,IAAKu2B,GAAsCA,EAAMkN,YAIrD,uBAAMmQ,CACJC,EACAC,GAEA,IACE,MAAMC,QAAwB76C,KAAKs4C,KAAKC,UAAUsC,gBAAgBF,EAAeC,GAMjF,OALA56C,KAAKmK,OAAO3I,MAAM,wBAAyBq5C,GAC3C76C,KAAKk9B,OAAOyE,KAAK,2BAA4B,CAC3CgZ,gBACAE,oBAEKA,EACP,MAAOl5C,GAKP,MAJA3B,KAAKk9B,OAAOyE,KAAK,8BAA+B,CAC9CgZ,gBACAh5C,UAEIA,GAIV,sBAAMm5C,CAAiBvQ,EAAyB7nC,GAC9C,MAAMq4C,QAAkB/6C,KAAKu4C,UAAUuC,iBAAiBvQ,EAAU7nC,GAOlE,OALA1C,KAAKmK,OAAO1I,KAAK,0CAA2C,CAC1D0T,YAAa4lC,EAAUv2B,GACvBxN,SAAU+jC,EAAU/jC,WAGf+jC,EAGT,wBAAMvlC,CAAmBulC,EAAsBrtC,GAS7C,aARM1N,KAAKu4C,UAAU/iC,mBAAmBulC,EAAWrtC,GAEnD1N,KAAKmK,OAAO1I,KAAK,uBAAwB,CACvC0T,YAAa4lC,EAAUv2B,GACvBxN,SAAU+jC,EAAU/jC,SACpBtJ,WAGKqtC,EAGT,0BAAAC,CAA2Bt4C,GAOzB,OAAO1C,KAAK45C,wBAAwBl3C,EAAQm3C,qBAAqB9lB,KAE/DoH,IAAW8f,GAAgBj7C,KAAKu6C,4BAA4BU,KAE5D/qC,IAAQmtB,GAAyB,qBAAfA,EAAM16B,OAExBmE,IAAKu2B,GAAWA,EAAqCkN,WAErDr6B,IAAQq6B,IAAcA,EAASxC,aAAewC,EAASvC,YAAcuC,EAASpC,YAE9Ej4B,IAAQq6B,GAAavqC,KAAKk7C,gCAAgCx4C,EAAQ8lC,QAAS+B,KAE3Er6B,IAAQq6B,KAAc7nC,aAAA,EAAAA,EAASwN,SAASlQ,KAAKm7C,4BAA4Bz4C,EAAQwN,OAAQq6B,KAEzFvqC,KAAKo7C,oCAAoC,CACvCC,sBAAuB34C,aAAA,EAAAA,EAAS24C,sBAChCC,+BAAgC54C,aAAA,EAAAA,EAAS44C,iCAG3C7f,IAAK8O,IACCA,EAASxC,aACX/nC,KAAK06C,kBAAkBnQ,EAAU7nC,EAAQm3C,qBAAqB5rC,OAAOqB,GACnEtP,KAAKmK,OAAOxI,MAAM,mCAAoC2N,QAK5DY,IAAQq6B,GAAaA,EAASvC,aAI1B,wBAAAwS,CAAyBnd,GAC/B,MAAM16B,KAAEA,GAAS06B,EACjB,OAAQ16B,GACN,IAAK,mBACH3C,KAAKk9B,OAAOyE,KAAK,wBAAyB,CACxCgZ,cAAetd,EAAMkN,WAEvB,MACF,IAAK,mBACHvqC,KAAKk9B,OAAOyE,KAAK,+BAAgC,CAC/CkZ,gBAAiBxd,EAAMwd,gBACvBntC,OAAQ2vB,EAAM3vB,SAEhB,MACF,IAAK,wBACH1N,KAAKk9B,OAAOyE,KAAK,8BACjB,MACF,QACE3hC,KAAKmK,OAAOzI,KAAK,kCAAmC,CAAE27B,WAK5D,2BAAMke,CACJC,EACAC,EACAlP,GAEAvsC,KAAKmK,OAAO1I,KAAK,kCACjB,MAAMkQ,EAASs0B,GAA6BsG,GAEtCmP,EAActrC,UAClB,IACEuB,EAAO66B,iBACPxsC,KAAKmK,OAAO3I,MAAM,8CAA+C,CAC/Dm6C,kBAAmB,CACjBC,MAAOJ,EAAkBre,QACzBmQ,UAAWkO,EAAkB5N,oBAGjC,MAAMrD,QAAiBiR,EAAkB/N,QAAQ97B,GAMjD,OALA3R,KAAKmK,OAAO3I,MAAM,kCAAmC,CAAE+oC,aACnD54B,EAAOwqB,UACTqf,EAAkBv2B,QAAQslB,GAC1B54B,EAAO66B,kBAEFjC,EACP,MAAO5oC,GACP,GAAIgQ,EAAOwqB,QACT,KAA6B,iBAAvBxqB,EAAOjE,OAAOxM,KAChB,IAAIZ,EAAkB,wCACtB,IAAIJ,EAAgB,gDAAiDyB,GAE3E,MAAMA,IAIJk6C,EAAezrC,UACnB,MAAMm6B,QAAiBmR,IACvB,IACE,MAAMX,QAAkB/6C,KAAK86C,iBAAiBvQ,EAAUkR,GAGxD,OADAD,EAAkB1rB,OAAOya,GAClBwQ,EACP,MAAOp5C,GAIP,OAHA3B,KAAKmK,OAAO3I,MAAM,wCAAyC,CAAEG,UAE7D65C,EAAkB1rB,OAAOya,GAClB7D,GAA4BmV,KAGvC,OAAOA,IAMD,mCAAAT,CAAoC14C,GAI1C,OAAQwxB,GACN,IAAIf,IAAYsR,IACd,IAAIr3B,GAAc,EAClB,MAAM0uC,EAAiB,IAAI7L,GAAe,CACxCG,aAAc1tC,aAAA,EAAAA,EAAS24C,sBACvBhL,iBAAkB3tC,aAAA,EAAAA,EAAS44C,iCAEvBS,EAAe7nB,EAAMd,WAAWmX,IAChCA,EAASxC,YACX+T,EACGxL,YAAY/F,GACZt8B,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,kDAAmD2N,KAEvFm1B,EAAS5kB,KAAK0qB,MAIZ2F,EAAQ9/B,UACZ,IAAIhD,EAAJ,CAGA,UACQ0uC,EAAelL,mBACrB,MAAMxD,QAAkB0O,EAAerL,eACnCrD,EAAUxqC,OAAS,IACrB5C,KAAKmK,OAAO3I,MAAM,8BAA+B,CAAE27B,MAAOiQ,EAAUxqC,SACpEwqC,EAAUtlC,SAASyiC,GAAa9F,EAAS5kB,KAAK0qB,MAEhD,MAAO5oC,GACP8iC,EAAS9iC,MAAMA,GAEjBuuC,IAAO,EAIT,OAFAA,IAEO,KACL9iC,GAAc,EACd2uC,EAAavsB,aAAa,CAC3B,IAIP,cAAAwsB,EAAeC,MAAEA,EAAKC,cAAEA,YACtB,MAAMC,EAAeF,EAAMjY,OAAOwE,QAAQd,MAGpCsL,EAAoD,QAApCrjB,EAAqB,QAArB/kB,EAAAqxC,EAAM3T,OAAOsN,gBAAQ,IAAAhrC,OAAA,EAAAA,EAAEooC,qBAAa,IAAArjB,EAAAA,EAAI,GAExDma,UAAEA,GAAcmS,EAAMjY,OAE5B,OAAQmY,GACN,IAAK,SAAU,CACb,MAAMC,mBAAEA,EAAkBC,cAAEA,EAAaC,mBAAEA,GAAuBL,EAAMjY,OAAOwE,QAM/E,OAHkB0T,EAAgBG,EAClBH,EAAgBpS,EAAYwS,EAFzBJ,EAAgBpS,EAAYkJ,EAAgBoJ,EAMjE,IAAK,YACH,OAAOF,EAAgBpS,EAAYmS,EAAMjY,OAAOwE,QAAQ+T,cAC1D,QACE,MAAM,IAAIt8C,EAAe,6BAA6Bk8C,MAI5D,oBAAMK,CAAernC,GACnB,OAAOnV,KAAKu4C,UAAUrjC,aAAaC,GAO7B,6BAAAujC,GACN14C,KAAKu4C,UAAUnjC,yBAAyBge,WAAWiK,IACjD,OAAQA,EAAM16B,MACZ,IAAK,oBACH3C,KAAKk9B,OAAOyE,KAAK,oBAAqB,CACpCoZ,UAAW1d,EAAM0d,YAEnB,MACF,IAAK,qBACH/6C,KAAKk9B,OAAOyE,KAAK,qBAAsB,CACrCoZ,UAAW1d,EAAM0d,YAEnB,MACF,IAAK,sBACH/6C,KAAKk9B,OAAOyE,KAAK,sBAAuB,CACtCoZ,UAAW1d,EAAM0d,UACjBrtC,OAAQ2vB,EAAM3vB,OACd+uC,aAAcpf,EAAMof,eAEtB,MACF,IAAK,oBACHz8C,KAAKk9B,OAAOyE,KAAK,oBAAqB,CACpCoZ,UAAW1d,EAAM0d,UACjBrtC,OAAQ2vB,EAAM3vB,aAOhB,2BAAAytC,CAA4BjrC,EAA6Bq6B,GAC/D,IACE,MAAMh4B,EAASrC,EAAOq6B,GAStB,OAPKh4B,IACHvS,KAAKk9B,OAAOyE,KAAK,wCAAyC,CACxDgZ,cAAepQ,IAEjBvqC,KAAKmK,OAAO3I,MAAM,4CAA6C,CAAEgjB,GAAI+lB,EAAS/lB,MAGzEjS,EACP,MAAOjD,GAEP,MADAtP,KAAKmK,OAAOxI,MAAM,iEAAkE2N,GAC9EA,GAIF,+BAAA4rC,CAAgC1S,EAAyB+B,GAC/D,IAAImS,GAAe,EAoBnB,MAnBsB,WAAlBlU,EAAQd,MACVgV,EACEnS,EAAS/B,QAAQQ,QAAUR,EAAQ4T,mBAAqB,MACxD7R,EAAS/B,QAAQO,QAAUP,EAAQ8T,mBAAqB,MACxD/R,EAAS/B,QAAQS,OAAST,EAAQ6T,cACT,cAAlB7T,EAAQd,QACjBgV,EACEnS,EAAS/B,QAAQS,MAAkC,KAA1BsB,EAAS/B,QAAQO,OAA0C,KAA1BwB,EAAS/B,QAAQQ,QAC3ER,EAAQ+T,eAEPG,IACH18C,KAAKk9B,OAAOyE,KAAK,qCAAsC,CACrDgZ,cAAepQ,IAEjBvqC,KAAKmK,OAAO3I,MAAM,uDAAwD,CACxEgjB,GAAI+lB,EAAS/lB,GACbgkB,QAAS+B,EAAS/B,WAGfkU,EAGT,IAAAC,CAAKC,GACH,OAAO58C,KAAKs4C,KAAKC,UAAUoE,KAAKC,UC3sBvBC,GAMX,WAAAj9C,CACkB4kB,EACCkjB,EACDY,GAFAtoC,KAAEwkB,GAAFA,EACCxkB,KAAK0nC,MAALA,EACD1nC,KAAMsoC,OAANA,EAOlB,QAAAwU,GACE,OAAO98C,KAAK0nC,MAAM/6B,MAGpB,YAAIqK,GACF,MAAO,CACLwN,GAAIxkB,KAAK0nC,MAAMqV,MAAMtF,WACrBv2C,KAAMlB,KAAK0nC,MAAMqV,MAAMlV,WAAW,sBAClCqC,cAAelqC,KAAK0nC,MAAMqV,MAAMlV,WAAW,8BAA8B7nC,KAAKsoC,OAAOlB,4BASzF,YAAA4V,GACE,MAAMrwC,EAAQ3M,KAAK88C,WACnB,MAAiB,YAAVnwC,GAAiC,aAAVA,SCnDZswC,GAUpB,WAAAr9C,CACkB4kB,EACNkjB,EACM1wB,GAFAhX,KAAEwkB,GAAFA,EACNxkB,KAAK0nC,MAALA,EACM1nC,KAAQgX,SAARA,EAEhBhX,KAAKk9C,YAAcxV,EAAMwV,YACzBl9C,KAAKm9C,UAAYzV,EAAMyV,UACvBn9C,KAAKo9C,uBAAyB1V,EAAM2V,UACpCr9C,KAAKonC,gBAAkBM,EAAMN,gBAC7BpnC,KAAKmV,YAAcuyB,EAAMvyB,YACzBnV,KAAKs9C,eAAiB5V,EAAM4V,eAC5Bt9C,KAAK+L,OAAS27B,EAAM37B,OAMf,SAAAwxC,GACL,OAAOv9C,KAAK+L;wFC5Cf,SAAWyxC,GAkBV,IA2DEC,EA3DEC,EAAa,IAIfC,EAAU,CAORC,UAAW,GAkBXC,SAAU,EAIVC,UAAW,EAIXC,SAAW,GAIXC,KAAM,wHAORC,GAAW,EAEXC,EAAe,kBACfC,EAAkBD,EAAe,qBACjCE,EAAqBF,EAAe,0BAEpCG,EAAY97C,KAAK+7C,MACjBC,EAAUh8C,KAAKi8C,IAEfC,EAAY,qCAGZprC,EAAO,IAEPkN,EAAmB,iBACnBm+B,EAAQL,EAAU99B,oBAGlB+L,EAAI,CAAA,EAg0BN,SAASiE,EAAI2C,EAAGjxB,GACd,IAAI08C,EAAO58C,EAAG8Q,EAAG3L,EAAG4I,EAAGzI,EAAKu3C,EAAIC,EAC9BC,EAAO5rB,EAAEtzB,YACT2pB,EAAKu1B,EAAKlB,UAGZ,IAAK1qB,EAAEtxB,IAAMK,EAAEL,EAKb,OADKK,EAAEL,IAAGK,EAAI,IAAI68C,EAAK5rB,IAChB+qB,EAAWz7C,EAAMP,EAAGsnB,GAAMtnB,EAcnC,GAXA28C,EAAK1rB,EAAEnxB,EACP88C,EAAK58C,EAAEF,EAIP+N,EAAIojB,EAAErgB,EACNA,EAAI5Q,EAAE4Q,EACN+rC,EAAKA,EAAGp3C,QACRN,EAAI4I,EAAI+C,EAGD,CAsBL,IArBI3L,EAAI,GACNnF,EAAI68C,EACJ13C,GAAKA,EACLG,EAAMw3C,EAAGj8C,SAETb,EAAI88C,EACJhsC,EAAI/C,EACJzI,EAAMu3C,EAAGh8C,QAOPsE,GAFJG,GADAyI,EAAIvN,KAAKw8C,KAAKx1B,EA12BL,IA22BCliB,EAAMyI,EAAI,EAAIzI,EAAM,KAG5BH,EAAIG,EACJtF,EAAEa,OAAS,GAIbb,EAAEi9C,UACK93C,KAAMnF,EAAEuF,KAAK,GACpBvF,EAAEi9C,SACH,CAcD,KAZA33C,EAAMu3C,EAAGh8C,SACTsE,EAAI23C,EAAGj8C,QAGO,IACZsE,EAAIG,EACJtF,EAAI88C,EACJA,EAAKD,EACLA,EAAK78C,GAIF48C,EAAQ,EAAGz3C,GACdy3C,GAASC,IAAK13C,GAAK03C,EAAG13C,GAAK23C,EAAG33C,GAAKy3C,GAAStrC,EAAO,EACnDurC,EAAG13C,IAAMmM,EAUX,IAPIsrC,IACFC,EAAGj6C,QAAQg6C,KACT9rC,GAKCxL,EAAMu3C,EAAGh8C,OAAqB,GAAbg8C,IAAKv3C,IAAYu3C,EAAGj2B,MAK1C,OAHA1mB,EAAEF,EAAI68C,EACN38C,EAAE4Q,EAAIA,EAECorC,EAAWz7C,EAAMP,EAAGsnB,GAAMtnB,CAClC,CAGD,SAASg9C,EAAW/3C,EAAGg4C,EAAK1/B,GAC1B,GAAItY,MAAQA,GAAKA,EAAIg4C,GAAOh4C,EAAIsY,EAC9B,MAAM7f,MAAMw+C,EAAkBj3C,EAEjC,CAGD,SAASi4C,EAAep9C,GACtB,IAAImF,EAAG4I,EAAGsvC,EACRC,EAAkBt9C,EAAEa,OAAS,EAC7BC,EAAM,GACNb,EAAID,EAAE,GAER,GAAIs9C,EAAkB,EAAG,CAEvB,IADAx8C,GAAOb,EACFkF,EAAI,EAAGA,EAAIm4C,EAAiBn4C,KAE/B4I,EA16BO,GAy6BPsvC,EAAKr9C,EAAEmF,GAAK,IACMtE,UACXC,GAAOy8C,EAAcxvC,IAC5BjN,GAAOu8C,GAKTtvC,EAj7BS,GAg7BTsvC,GADAp9C,EAAID,EAAEmF,IACG,IACStE,UACXC,GAAOy8C,EAAcxvC,GAClC,MAAW,GAAU,IAAN9N,EACT,MAAO,IAIT,KAAOA,EAAI,IAAO,GAAIA,GAAK,GAE3B,OAAOa,EAAMb,CACd,CAr4BDsqB,EAAEizB,cAAgBjzB,EAAEhpB,IAAM,WACxB,IAAI4vB,EAAI,IAAIlzB,KAAKJ,YAAYI,MAE7B,OADIkzB,EAAEtxB,IAAGsxB,EAAEtxB,EAAI,GACRsxB,CACX,EAUE5G,EAAEkzB,WAAalzB,EAAE/D,IAAM,SAAUtmB,GAC/B,IAAIiF,EAAGyC,EAAG81C,EAAKC,EACbxsB,EAAIlzB,KAKN,GAHAiC,EAAI,IAAIixB,EAAEtzB,YAAYqC,GAGlBixB,EAAEtxB,IAAMK,EAAEL,EAAG,OAAOsxB,EAAEtxB,IAAMK,EAAEL,EAGlC,GAAIsxB,EAAErgB,IAAM5Q,EAAE4Q,EAAG,OAAOqgB,EAAErgB,EAAI5Q,EAAE4Q,EAAIqgB,EAAEtxB,EAAI,EAAI,GAAK,EAMnD,IAAKsF,EAAI,EAAGyC,GAJZ81C,EAAMvsB,EAAEnxB,EAAEa,SACV88C,EAAMz9C,EAAEF,EAAEa,QAGkB68C,EAAMC,EAAKx4C,EAAIyC,IAAKzC,EAC9C,GAAIgsB,EAAEnxB,EAAEmF,KAAOjF,EAAEF,EAAEmF,GAAI,OAAOgsB,EAAEnxB,EAAEmF,GAAKjF,EAAEF,EAAEmF,GAAKgsB,EAAEtxB,EAAI,EAAI,GAAK,EAIjE,OAAO69C,IAAQC,EAAM,EAAID,EAAMC,EAAMxsB,EAAEtxB,EAAI,EAAI,GAAK,CACxD,EAOE0qB,EAAEqzB,cAAgBrzB,EAAEszB,GAAK,WACvB,IAAI1sB,EAAIlzB,KACNgC,EAAIkxB,EAAEnxB,EAAEa,OAAS,EACjBg9C,EApGS,GAoGH59C,EAAIkxB,EAAErgB,GAId,GADA7Q,EAAIkxB,EAAEnxB,EAAEC,GACD,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAI49C,IAEpC,OAAOA,EAAK,EAAI,EAAIA,CACxB,EAQEtzB,EAAEuzB,UAAYvzB,EAAEwzB,IAAM,SAAU79C,GAC9B,OAAO89C,EAAO//C,KAAM,IAAIA,KAAKJ,YAAYqC,GAC7C,EAQEqqB,EAAE0zB,mBAAqB1zB,EAAE2zB,KAAO,SAAUh+C,GACxC,IACE68C,EADM9+C,KACGJ,YACX,OAAO4C,EAAMu9C,EAFL//C,KAEe,IAAI8+C,EAAK78C,GAAI,EAAG,GAAI68C,EAAKlB,UACpD,EAOEtxB,EAAE4zB,OAAS5zB,EAAE/G,GAAK,SAAUtjB,GAC1B,OAAQjC,KAAKuoB,IAAItmB,EACrB,EAOEqqB,EAAE6zB,SAAW,WACX,OAAOC,EAAkBpgD,KAC7B,EAQEssB,EAAE+zB,YAAc/zB,EAAE7G,GAAK,SAAUxjB,GAC/B,OAAOjC,KAAKuoB,IAAItmB,GAAK,CACzB,EAQEqqB,EAAEg0B,qBAAuBh0B,EAAE5G,IAAM,SAAUzjB,GACzC,OAAOjC,KAAKuoB,IAAItmB,IAAM,CAC1B,EAOEqqB,EAAEuiB,UAAYviB,EAAEi0B,MAAQ,WACtB,OAAOvgD,KAAK6S,EAAI7S,KAAK+B,EAAEa,OAAS,CACpC,EAOE0pB,EAAEk0B,WAAal0B,EAAEm0B,MAAQ,WACvB,OAAOzgD,KAAK4B,EAAI,CACpB,EAOE0qB,EAAEo0B,WAAap0B,EAAEq0B,MAAQ,WACvB,OAAO3gD,KAAK4B,EAAI,CACpB,EAOE0qB,EAAEs0B,OAAS,WACT,OAAkB,IAAX5gD,KAAK4B,CAChB,EAOE0qB,EAAEu0B,SAAWv0B,EAAE3G,GAAK,SAAU1jB,GAC5B,OAAOjC,KAAKuoB,IAAItmB,GAAK,CACzB,EAOEqqB,EAAEw0B,kBAAoBx0B,EAAE1G,IAAM,SAAU3jB,GACtC,OAAOjC,KAAKuoB,IAAItmB,GAAK,CACzB,EAgBEqqB,EAAEy0B,UAAYz0B,EAAElnB,IAAM,SAAUggB,GAC9B,IAAIzc,EACFuqB,EAAIlzB,KACJ8+C,EAAO5rB,EAAEtzB,YACT2pB,EAAKu1B,EAAKlB,UACVoD,EAAMz3B,EAAK,EAGb,QAAa,IAATnE,EACFA,EAAO,IAAI05B,EAAK,SAOhB,IALA15B,EAAO,IAAI05B,EAAK15B,IAKPxjB,EAAI,GAAKwjB,EAAKG,GAAGk4B,GAAM,MAAM99C,MAAMu+C,EAAe,OAK7D,GAAIhrB,EAAEtxB,EAAI,EAAG,MAAMjC,MAAMu+C,GAAgBhrB,EAAEtxB,EAAI,MAAQ,cAGvD,OAAIsxB,EAAE3N,GAAGk4B,GAAa,IAAIqB,EAAK,IAE/Bb,GAAW,EACXt1C,EAAIo3C,EAAOkB,EAAG/tB,EAAG8tB,GAAMC,EAAG77B,EAAM47B,GAAMA,GACtC/C,GAAW,EAEJz7C,EAAMmG,EAAG4gB,GACpB,EAQE+C,EAAE40B,MAAQ50B,EAAE60B,IAAM,SAAUl/C,GAC1B,IAAIixB,EAAIlzB,KAER,OADAiC,EAAI,IAAIixB,EAAEtzB,YAAYqC,GACfixB,EAAEtxB,GAAKK,EAAEL,EAAIw/C,EAASluB,EAAGjxB,GAAKsuB,EAAI2C,GAAIjxB,EAAEL,GAAKK,EAAEL,EAAGK,GAC7D,EAQEqqB,EAAE+0B,OAAS/0B,EAAEzO,IAAM,SAAU5b,GAC3B,IAAI+rB,EACFkF,EAAIlzB,KACJ8+C,EAAO5rB,EAAEtzB,YACT2pB,EAAKu1B,EAAKlB,UAKZ,KAHA37C,EAAI,IAAI68C,EAAK78C,IAGNL,EAAG,MAAMjC,MAAMu+C,EAAe,OAGrC,OAAKhrB,EAAEtxB,GAGPq8C,GAAW,EACXjwB,EAAI+xB,EAAO7sB,EAAGjxB,EAAG,EAAG,GAAGq/C,MAAMr/C,GAC7Bg8C,GAAW,EAEJ/qB,EAAEguB,MAAMlzB,IAPExrB,EAAM,IAAIs8C,EAAK5rB,GAAI3J,EAQxC,EASE+C,EAAEi1B,mBAAqBj1B,EAAEk1B,IAAM,WAC7B,OAAOA,EAAIxhD,KACf,EAQEssB,EAAEm1B,iBAAmBn1B,EAAE20B,GAAK,WAC1B,OAAOA,EAAGjhD,KACd,EAQEssB,EAAEo1B,QAAUp1B,EAAEq1B,IAAM,WAClB,IAAIzuB,EAAI,IAAIlzB,KAAKJ,YAAYI,MAE7B,OADAkzB,EAAEtxB,GAAKsxB,EAAEtxB,GAAK,EACPsxB,CACX,EAQE5G,EAAEs1B,KAAOt1B,EAAEiE,IAAM,SAAUtuB,GACzB,IAAIixB,EAAIlzB,KAER,OADAiC,EAAI,IAAIixB,EAAEtzB,YAAYqC,GACfixB,EAAEtxB,GAAKK,EAAEL,EAAI2uB,EAAI2C,EAAGjxB,GAAKm/C,EAASluB,GAAIjxB,EAAEL,GAAKK,EAAEL,EAAGK,GAC7D,EASEqqB,EAAEsxB,UAAYtxB,EAAEu1B,GAAK,SAAUj4B,GAC7B,IAAI/W,EAAGgvC,EAAI7/C,EACTkxB,EAAIlzB,KAEN,QAAU,IAAN4pB,GAAgBA,MAAQA,GAAW,IAANA,GAAiB,IAANA,EAAS,MAAMjqB,MAAMw+C,EAAkBv0B,GAQnF,GANA/W,EAAIutC,EAAkBltB,GAAK,EAE3B2uB,EAlXW,GAiXX7/C,EAAIkxB,EAAEnxB,EAAEa,OAAS,GACG,EACpBZ,EAAIkxB,EAAEnxB,EAAEC,GAGD,CAGL,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAI6/C,IAG7B,IAAK7/C,EAAIkxB,EAAEnxB,EAAE,GAAIC,GAAK,GAAIA,GAAK,GAAI6/C,GACpC,CAED,OAAOj4B,GAAK/W,EAAIgvC,EAAKhvC,EAAIgvC,CAC7B,EAQEv1B,EAAEw1B,WAAax1B,EAAEy1B,KAAO,WACtB,IAAIlvC,EAAGxQ,EAAGknB,EAAI5gB,EAAG/G,EAAGqf,EAAG+/B,EACrB9tB,EAAIlzB,KACJ8+C,EAAO5rB,EAAEtzB,YAGX,GAAIszB,EAAEtxB,EAAI,EAAG,CACX,IAAKsxB,EAAEtxB,EAAG,OAAO,IAAIk9C,EAAK,GAG1B,MAAMn/C,MAAMu+C,EAAe,MAC5B,CAgCD,IA9BArrC,EAAIutC,EAAkBltB,GACtB+qB,GAAW,EAOF,IAJTr8C,EAAIW,KAAKw/C,MAAM7uB,KAIDtxB,GAAK,OACjBS,EAAI88C,EAAejsB,EAAEnxB,IACda,OAASiQ,GAAK,GAAK,IAAGxQ,GAAK,KAClCT,EAAIW,KAAKw/C,KAAK1/C,GACdwQ,EAAIwrC,GAAWxrC,EAAI,GAAK,IAAMA,EAAI,GAAKA,EAAI,GAS3ClK,EAAI,IAAIm2C,EANNz8C,EADET,GAAK,IACH,KAAOiR,GAEXxQ,EAAIT,EAAEogD,iBACAx6C,MAAM,EAAGnF,EAAE4sB,QAAQ,KAAO,GAAKpc,IAKvClK,EAAI,IAAIm2C,EAAKl9C,EAAE4E,YAIjB5E,EAAIo/C,GADJz3B,EAAKu1B,EAAKlB,WACK,IAOb,GAFAj1C,GADAsY,EAAItY,GACEi5C,KAAK7B,EAAO7sB,EAAGjS,EAAG+/B,EAAM,IAAIM,MAAM,IAEpCnC,EAAel+B,EAAElf,GAAGyF,MAAM,EAAGw5C,MAAU3+C,EAAI88C,EAAex2C,EAAE5G,IAAIyF,MAAM,EAAGw5C,GAAM,CAKjF,GAJA3+C,EAAIA,EAAEmF,MAAMw5C,EAAM,EAAGA,EAAM,GAIvBp/C,GAAKo/C,GAAY,QAAL3+C,GAMd,GAFAG,EAAMye,EAAGsI,EAAK,EAAG,GAEbtI,EAAEqgC,MAAMrgC,GAAGsE,GAAG2N,GAAI,CACpBvqB,EAAIsY,EACJ,KACD,OACI,GAAS,QAAL5e,EACT,MAGF2+C,GAAO,CACR,CAKH,OAFA/C,GAAW,EAEJz7C,EAAMmG,EAAG4gB,EACpB,EAQE+C,EAAEg1B,MAAQh1B,EAAE21B,IAAM,SAAUhgD,GAC1B,IAAI08C,EAAO9rC,EAAG3L,EAAG4I,EAAGnH,EAAGu5C,EAAIjhC,EAAGw+B,EAAKC,EACjCxsB,EAAIlzB,KACJ8+C,EAAO5rB,EAAEtzB,YACTg/C,EAAK1rB,EAAEnxB,EACP88C,GAAM58C,EAAI,IAAI68C,EAAK78C,IAAIF,EAGzB,IAAKmxB,EAAEtxB,IAAMK,EAAEL,EAAG,OAAO,IAAIk9C,EAAK,GAoBlC,IAlBA78C,EAAEL,GAAKsxB,EAAEtxB,EACTiR,EAAIqgB,EAAErgB,EAAI5Q,EAAE4Q,GACZ4sC,EAAMb,EAAGh8C,SACT88C,EAAMb,EAAGj8C,UAIP+F,EAAIi2C,EACJA,EAAKC,EACLA,EAAKl2C,EACLu5C,EAAKzC,EACLA,EAAMC,EACNA,EAAMwC,GAIRv5C,EAAI,GAECzB,EADLg7C,EAAKzC,EAAMC,EACEx4C,KAAMyB,EAAErB,KAAK,GAG1B,IAAKJ,EAAIw4C,IAAOx4C,GAAK,GAAI,CAEvB,IADAy3C,EAAQ,EACH7uC,EAAI2vC,EAAMv4C,EAAG4I,EAAI5I,GACpB+Z,EAAItY,EAAEmH,GAAK+uC,EAAG33C,GAAK03C,EAAG9uC,EAAI5I,EAAI,GAAKy3C,EACnCh2C,EAAEmH,KAAOmR,EAAI5N,EAAO,EACpBsrC,EAAQ19B,EAAI5N,EAAO,EAGrB1K,EAAEmH,IAAMnH,EAAEmH,GAAK6uC,GAAStrC,EAAO,CAChC,CAGD,MAAQ1K,IAAIu5C,IAAMv5C,EAAEggB,MAQpB,OANIg2B,IAAS9rC,EACRlK,EAAE0lB,QAEPpsB,EAAEF,EAAI4G,EACN1G,EAAE4Q,EAAIA,EAECorC,EAAWz7C,EAAMP,EAAG68C,EAAKlB,WAAa37C,CACjD,EAaEqqB,EAAE61B,gBAAkB71B,EAAE81B,KAAO,SAAUxC,EAAIyC,GACzC,IAAInvB,EAAIlzB,KACN8+C,EAAO5rB,EAAEtzB,YAGX,OADAszB,EAAI,IAAI4rB,EAAK5rB,QACF,IAAP0sB,EAAsB1sB,GAE1B+rB,EAAWW,EAAI,EAAGlC,QAEP,IAAP2E,EAAeA,EAAKvD,EAAKjB,SACxBoB,EAAWoD,EAAI,EAAG,GAEhB7/C,EAAM0wB,EAAG0sB,EAAKQ,EAAkBltB,GAAK,EAAGmvB,GACnD,EAWE/1B,EAAE01B,cAAgB,SAAUpC,EAAIyC,GAC9B,IAAIx/C,EACFqwB,EAAIlzB,KACJ8+C,EAAO5rB,EAAEtzB,YAcX,YAZW,IAAPggD,EACF/8C,EAAM2D,EAAS0sB,GAAG,IAElB+rB,EAAWW,EAAI,EAAGlC,QAEP,IAAP2E,EAAeA,EAAKvD,EAAKjB,SACxBoB,EAAWoD,EAAI,EAAG,GAGvBx/C,EAAM2D,EADN0sB,EAAI1wB,EAAM,IAAIs8C,EAAK5rB,GAAI0sB,EAAK,EAAGyC,IACb,EAAMzC,EAAK,IAGxB/8C,CACX,EAmBEypB,EAAEg2B,QAAU,SAAU1C,EAAIyC,GACxB,IAAIx/C,EAAKZ,EACPixB,EAAIlzB,KACJ8+C,EAAO5rB,EAAEtzB,YAEX,YAAW,IAAPggD,EAAsBp5C,EAAS0sB,IAEnC+rB,EAAWW,EAAI,EAAGlC,QAEP,IAAP2E,EAAeA,EAAKvD,EAAKjB,SACxBoB,EAAWoD,EAAI,EAAG,GAGvBx/C,EAAM2D,GADNvE,EAAIO,EAAM,IAAIs8C,EAAK5rB,GAAI0sB,EAAKQ,EAAkBltB,GAAK,EAAGmvB,IACrC/+C,OAAO,EAAOs8C,EAAKQ,EAAkBn+C,GAAK,GAIpDixB,EAAEutB,UAAYvtB,EAAE0tB,SAAW,IAAM/9C,EAAMA,EAClD,EAQEypB,EAAEi2B,UAAYj2B,EAAEk2B,MAAQ,WACtB,IAAItvB,EAAIlzB,KACN8+C,EAAO5rB,EAAEtzB,YACX,OAAO4C,EAAM,IAAIs8C,EAAK5rB,GAAIktB,EAAkBltB,GAAK,EAAG4rB,EAAKjB,SAC7D,EAOEvxB,EAAEm2B,SAAW,WACX,OAAQziD,IACZ,EAgBEssB,EAAEo2B,QAAUp2B,EAAEkyB,IAAM,SAAUv8C,GAC5B,IAAI4Q,EAAG/C,EAAGyZ,EAAI5gB,EAAGg6C,EAAMC,EACrB1vB,EAAIlzB,KACJ8+C,EAAO5rB,EAAEtzB,YAETijD,IAAO5gD,EAAI,IAAI68C,EAAK78C,IAGtB,IAAKA,EAAEL,EAAG,OAAO,IAAIk9C,EAAKrB,GAM1B,KAJAvqB,EAAI,IAAI4rB,EAAK5rB,IAINtxB,EAAG,CACR,GAAIK,EAAEL,EAAI,EAAG,MAAMjC,MAAMu+C,EAAe,YACxC,OAAOhrB,CACR,CAGD,GAAIA,EAAE3N,GAAGk4B,GAAM,OAAOvqB,EAKtB,GAHA3J,EAAKu1B,EAAKlB,UAGN37C,EAAEsjB,GAAGk4B,GAAM,OAAOj7C,EAAM0wB,EAAG3J,GAO/B,GAHAq5B,GAFA/vC,EAAI5Q,EAAE4Q,KACN/C,EAAI7N,EAAEF,EAAEa,OAAS,GAEjB+/C,EAAOzvB,EAAEtxB,EAEJghD,GAME,IAAK9yC,EAAI+yC,EAAK,GAAKA,EAAKA,IAAOtiC,EAAkB,CAStD,IARA5X,EAAI,IAAIm2C,EAAKrB,GAIb5qC,EAAItQ,KAAKw8C,KAAKx1B,EAzrBL,EAyrBqB,GAE9B00B,GAAW,EAGLnuC,EAAI,GAENgzC,GADAn6C,EAAIA,EAAE24C,MAAMpuB,IACDnxB,EAAG8Q,GAIN,KADV/C,EAAIuuC,EAAUvuC,EAAI,KAIlBgzC,GADA5vB,EAAIA,EAAEouB,MAAMpuB,IACDnxB,EAAG8Q,GAKhB,OAFAorC,GAAW,EAEJh8C,EAAEL,EAAI,EAAI,IAAIk9C,EAAKrB,GAAKqC,IAAIn3C,GAAKnG,EAAMmG,EAAG4gB,EAClD,OA5BC,GAAIo5B,EAAO,EAAG,MAAMhjD,MAAMu+C,EAAe,OAwC3C,OATAyE,EAAOA,EAAO,GAA2B,EAAtB1gD,EAAEF,EAAEQ,KAAKid,IAAI3M,EAAG/C,KAAW,EAAI,EAElDojB,EAAEtxB,EAAI,EACNq8C,GAAW,EACXt1C,EAAI1G,EAAEq/C,MAAML,EAAG/tB,EAAG3J,EAlER,KAmEV00B,GAAW,GACXt1C,EAAI64C,EAAI74C,IACN/G,EAAI+gD,EAECh6C,CACX,EAcE2jB,EAAEy2B,YAAc,SAAUlB,EAAIQ,GAC5B,IAAIxvC,EAAGhQ,EACLqwB,EAAIlzB,KACJ8+C,EAAO5rB,EAAEtzB,YAgBX,YAdW,IAAPiiD,EAEFh/C,EAAM2D,EAAS0sB,GADfrgB,EAAIutC,EAAkBltB,KACC4rB,EAAKhB,UAAYjrC,GAAKisC,EAAKf,WAElDkB,EAAW4C,EAAI,EAAGnE,QAEP,IAAP2E,EAAeA,EAAKvD,EAAKjB,SACxBoB,EAAWoD,EAAI,EAAG,GAIvBx/C,EAAM2D,EAFN0sB,EAAI1wB,EAAM,IAAIs8C,EAAK5rB,GAAI2uB,EAAIQ,GAETR,IADlBhvC,EAAIutC,EAAkBltB,KACOrgB,GAAKisC,EAAKhB,SAAU+D,IAG5Ch/C,CACX,EAYEypB,EAAE02B,oBAAsB12B,EAAE22B,KAAO,SAAUpB,EAAIQ,GAC7C,IACEvD,EADM9+C,KACGJ,YAYX,YAVW,IAAPiiD,GACFA,EAAK/C,EAAKlB,UACVyE,EAAKvD,EAAKjB,WAEVoB,EAAW4C,EAAI,EAAGnE,QAEP,IAAP2E,EAAeA,EAAKvD,EAAKjB,SACxBoB,EAAWoD,EAAI,EAAG,IAGlB7/C,EAAM,IAAIs8C,EAbT9+C,MAakB6hD,EAAIQ,EAClC,EAUE/1B,EAAE9lB,SAAW8lB,EAAEilB,QAAUjlB,EAAE7pB,IAAM6pB,EAAE42B,OAAS,WAC1C,IAAIhwB,EAAIlzB,KACN6S,EAAIutC,EAAkBltB,GACtB4rB,EAAO5rB,EAAEtzB,YAEX,OAAO4G,EAAS0sB,EAAGrgB,GAAKisC,EAAKhB,UAAYjrC,GAAKisC,EAAKf,SACvD,EAuJE,IAAIgC,EAAS,WAGX,SAASoD,EAAgBjwB,EAAGpjB,GAC1B,IAAIszC,EACFzE,EAAQ,EACRz3C,EAAIgsB,EAAEtwB,OAER,IAAKswB,EAAIA,EAAE1rB,QAASN,KAClBk8C,EAAOlwB,EAAEhsB,GAAK4I,EAAI6uC,EAClBzrB,EAAEhsB,GAAKk8C,EAAO/vC,EAAO,EACrBsrC,EAAQyE,EAAO/vC,EAAO,EAKxB,OAFIsrC,GAAOzrB,EAAEvuB,QAAQg6C,GAEdzrB,CACR,CAED,SAASvO,EAAQtB,EAAGC,EAAG+/B,EAAIC,GACzB,IAAIp8C,EAAGyB,EAEP,GAAI06C,GAAMC,EACR36C,EAAI06C,EAAKC,EAAK,GAAK,OAEnB,IAAKp8C,EAAIyB,EAAI,EAAGzB,EAAIm8C,EAAIn8C,IACtB,GAAImc,EAAEnc,IAAMoc,EAAEpc,GAAI,CAChByB,EAAI0a,EAAEnc,GAAKoc,EAAEpc,GAAK,GAAK,EACvB,KACD,CAIL,OAAOyB,CACR,CAED,SAASy4C,EAAS/9B,EAAGC,EAAG+/B,GAItB,IAHA,IAAIn8C,EAAI,EAGDm8C,KACLhgC,EAAEggC,IAAOn8C,EACTA,EAAImc,EAAEggC,GAAM//B,EAAE+/B,GAAM,EAAI,EACxBhgC,EAAEggC,GAAMn8C,EAAImM,EAAOgQ,EAAEggC,GAAM//B,EAAE+/B,GAI/B,MAAQhgC,EAAE,IAAMA,EAAEzgB,OAAS,GAAIygB,EAAEgL,OAClC,CAED,OAAO,SAAU6E,EAAGjxB,EAAGsnB,EAAIq2B,GACzB,IAAIr3B,EAAK1V,EAAG3L,EAAG4I,EAAGyzC,EAAMC,EAAOx1B,EAAGy1B,EAAIC,EAAKC,EAAMC,EAAM/B,EAAI5gC,EAAG4iC,EAAIC,EAAIC,EAAKC,EAAIC,EAC7EnF,EAAO5rB,EAAEtzB,YACT+iD,EAAOzvB,EAAEtxB,GAAKK,EAAEL,EAAI,GAAK,EACzBg9C,EAAK1rB,EAAEnxB,EACP88C,EAAK58C,EAAEF,EAGT,IAAKmxB,EAAEtxB,EAAG,OAAO,IAAIk9C,EAAK5rB,GAC1B,IAAKjxB,EAAEL,EAAG,MAAMjC,MAAMu+C,EAAe,oBASrC,IAPArrC,EAAIqgB,EAAErgB,EAAI5Q,EAAE4Q,EACZmxC,EAAKnF,EAAGj8C,OACRkhD,EAAKlF,EAAGh8C,OAER6gD,GADAz1B,EAAI,IAAI8wB,EAAK6D,IACN5gD,EAAI,GAGNmF,EAAI,EAAG23C,EAAG33C,KAAO03C,EAAG13C,IAAM,MAAQA,EAWvC,GAVI23C,EAAG33C,IAAM03C,EAAG13C,IAAM,MAAM2L,GAG1BgvC,EADQ,MAANt4B,EACGA,EAAKu1B,EAAKlB,UACNgC,EACJr2B,GAAM62B,EAAkBltB,GAAKktB,EAAkBn+C,IAAM,EAErDsnB,GAGE,EAAG,OAAO,IAAIu1B,EAAK,GAO5B,GAJA+C,EAAKA,EAhhCI,EAghCY,EAAI,EACzB36C,EAAI,EAGM,GAAN88C,EAMF,IALAl0C,EAAI,EACJ+uC,EAAKA,EAAG,GACRgD,KAGQ36C,EAAI48C,GAAMh0C,IAAM+xC,IAAM36C,IAC5B+Z,EAAInR,EAAIuD,GAAQurC,EAAG13C,IAAM,GACzBu8C,EAAGv8C,GAAK+Z,EAAI49B,EAAK,EACjB/uC,EAAImR,EAAI49B,EAAK,MAIV,CAiBL,KAdA/uC,EAAIuD,GAAQwrC,EAAG,GAAK,GAAK,GAEjB,IACNA,EAAKsE,EAAgBtE,EAAI/uC,GACzB8uC,EAAKuE,EAAgBvE,EAAI9uC,GACzBk0C,EAAKnF,EAAGj8C,OACRkhD,EAAKlF,EAAGh8C,QAGVihD,EAAKG,EAELL,GADAD,EAAM9E,EAAGp3C,MAAM,EAAGw8C,IACPphD,OAGJ+gD,EAAOK,GAAKN,EAAIC,KAAU,GAEjCM,EAAKpF,EAAGr3C,SACL7C,QAAQ,GACXo/C,EAAMlF,EAAG,GAELA,EAAG,IAAMxrC,EAAO,KAAK0wC,EAEzB,GACEj0C,EAAI,GAGJyY,EAAM5D,EAAQk6B,EAAI6E,EAAKM,EAAIL,IAGjB,GAGRC,EAAOF,EAAI,GACPM,GAAML,IAAMC,EAAOA,EAAOvwC,GAAQqwC,EAAI,IAAM,KAGhD5zC,EAAI8zC,EAAOG,EAAM,GAUT,GACFj0C,GAAKuD,IAAMvD,EAAIuD,EAAO,GAWf,IAHXkV,EAAM5D,EALN4+B,EAAOJ,EAAgBtE,EAAI/uC,GAKP4zC,EAJpBF,EAAQD,EAAK3gD,OACb+gD,EAAOD,EAAI9gD,WAOTkN,IAGAsxC,EAASmC,EAAMS,EAAKR,EAAQS,EAAKpF,EAAI2E,MAO9B,GAAL1zC,IAAQyY,EAAMzY,EAAI,GACtByzC,EAAO1E,EAAGr3C,UAGZg8C,EAAQD,EAAK3gD,QACD+gD,GAAMJ,EAAK5+C,QAAQ,GAG/By8C,EAASsC,EAAKH,EAAMI,IAGR,GAARp7B,IAIFA,EAAM5D,EAAQk6B,EAAI6E,EAAKM,EAHvBL,EAAOD,EAAI9gD,SAMD,IACRkN,IAGAsxC,EAASsC,EAAKM,EAAKL,EAAOM,EAAKpF,EAAI8E,IAIvCA,EAAOD,EAAI9gD,QACM,IAAR2lB,IACTzY,IACA4zC,EAAM,CAAC,IAITD,EAAGv8C,KAAO4I,EAGNyY,GAAOm7B,EAAI,GACbA,EAAIC,KAAU/E,EAAGiF,IAAO,GAExBH,EAAM,CAAC9E,EAAGiF,IACVF,EAAO,UAGDE,IAAOC,QAAiB,IAAXJ,EAAI,KAAkB7B,IAC9C,CAOD,OAJK4B,EAAG,IAAIA,EAAGp1B,QAEfL,EAAEnb,EAAIA,EAECrQ,EAAMwrB,EAAG4xB,EAAKr2B,EAAK62B,EAAkBpyB,GAAK,EAAIzE,EAC3D,CACG,CAhOY,GAyPb,SAASi4B,EAAItuB,EAAG2uB,GACd,IAAIqC,EAAoB1F,EAAK2F,EAAKljC,EAAG+/B,EACnC95C,EAAI,EACJ4I,EAAI,EACJgvC,EAAO5rB,EAAEtzB,YACT2pB,EAAKu1B,EAAKlB,UAEZ,GAAIwC,EAAkBltB,GAAK,GAAI,MAAMvzB,MAAMy+C,EAAqBgC,EAAkBltB,IAGlF,IAAKA,EAAEtxB,EAAG,OAAO,IAAIk9C,EAAKrB,GAW1B,IATU,MAANoE,GACF5D,GAAW,EACX+C,EAAMz3B,GAENy3B,EAAMa,EAGR5gC,EAAI,IAAI69B,EAAK,QAEN5rB,EAAE5vB,MAAMoiB,IAAI,KACjBwN,EAAIA,EAAEouB,MAAMrgC,GACZnR,GAAK,EASP,IAJAkxC,GADQz+C,KAAK6C,IAAIm5C,EAAQ,EAAGzuC,IAAMvN,KAAKy7C,KAAO,EAAI,EAAI,EAEtDkG,EAAc1F,EAAM2F,EAAM,IAAIrF,EAAKrB,GACnCqB,EAAKlB,UAAYoD,IAER,CAKP,GAJAxC,EAAMh8C,EAAMg8C,EAAI8C,MAAMpuB,GAAI8tB,GAC1BkD,EAAcA,EAAY5C,QAAQp6C,GAG9Bi4C,GAFJl+B,EAAIkjC,EAAIvC,KAAK7B,EAAOvB,EAAK0F,EAAalD,KAEjBj/C,GAAGyF,MAAM,EAAGw5C,KAAS7B,EAAegF,EAAIpiD,GAAGyF,MAAM,EAAGw5C,GAAM,CAC7E,KAAOlxC,KAAKq0C,EAAM3hD,EAAM2hD,EAAI7C,MAAM6C,GAAMnD,GAExC,OADAlC,EAAKlB,UAAYr0B,EACJ,MAANs4B,GAAc5D,GAAW,EAAMz7C,EAAM2hD,EAAK56B,IAAO46B,CACzD,CAEDA,EAAMljC,CACP,CACF,CAID,SAASm/B,EAAkBltB,GAKzB,IAJA,IAAIrgB,EAzuCO,EAyuCHqgB,EAAErgB,EACR7Q,EAAIkxB,EAAEnxB,EAAE,GAGHC,GAAK,GAAIA,GAAK,GAAI6Q,IACzB,OAAOA,CACR,CAGD,SAASuxC,EAAQtF,EAAM+C,EAAIt4B,GAEzB,GAAIs4B,EAAK/C,EAAKd,KAAK6D,KAMjB,MAFA5D,GAAW,EACP10B,IAAIu1B,EAAKlB,UAAYr0B,GACnB5pB,MAAMu+C,EAAe,iCAG7B,OAAO17C,EAAM,IAAIs8C,EAAKA,EAAKd,MAAO6D,EACnC,CAGD,SAASvC,EAAcxvC,GAErB,IADA,IAAIu0C,EAAK,GACFv0C,KAAMu0C,GAAM,IACnB,OAAOA,CACR,CAUD,SAASpD,EAAGh/C,EAAG4/C,GACb,IAAIv5C,EAAGg8C,EAAIJ,EAAarxC,EAAG0xC,EAAWJ,EAAKljC,EAAG+/B,EAAKwD,EACjDniD,EAAI,EAEJ6wB,EAAIjxB,EACJ28C,EAAK1rB,EAAEnxB,EACP+8C,EAAO5rB,EAAEtzB,YACT2pB,EAAKu1B,EAAKlB,UAIZ,GAAI1qB,EAAEtxB,EAAI,EAAG,MAAMjC,MAAMu+C,GAAgBhrB,EAAEtxB,EAAI,MAAQ,cAGvD,GAAIsxB,EAAE3N,GAAGk4B,GAAM,OAAO,IAAIqB,EAAK,GAS/B,GAPU,MAAN+C,GACF5D,GAAW,EACX+C,EAAMz3B,GAENy3B,EAAMa,EAGJ3uB,EAAE3N,GAAG,IAEP,OADU,MAANs8B,IAAY5D,GAAW,GACpBmG,EAAQtF,EAAMkC,GASvB,GANAA,GAzBU,GA0BVlC,EAAKlB,UAAYoD,EAEjBsD,GADAh8C,EAAI62C,EAAeP,IACZ6F,OAAO,GACd5xC,EAAIutC,EAAkBltB,KAElB3wB,KAAKe,IAAIuP,GAAK,OAqChB,OAJAoO,EAAImjC,EAAQtF,EAAMkC,EAAM,EAAGz3B,GAAI+3B,MAAMzuC,EAAI,IACzCqgB,EAAI+tB,EAAG,IAAInC,EAAKwF,EAAK,IAAMh8C,EAAEd,MAAM,IAAKw5C,EAjEhC,IAiE6CY,KAAK3gC,GAE1D69B,EAAKlB,UAAYr0B,EACJ,MAANs4B,GAAc5D,GAAW,EAAMz7C,EAAM0wB,EAAG3J,IAAO2J,EAxBtD,KAAOoxB,EAAK,GAAW,GAANA,GAAiB,GAANA,GAAWh8C,EAAEm8C,OAAO,GAAK,GAGnDH,GADAh8C,EAAI62C,GADJjsB,EAAIA,EAAEouB,MAAMr/C,IACSF,IACd0iD,OAAO,GACdpiD,IAgCJ,IA7BEwQ,EAAIutC,EAAkBltB,GAElBoxB,EAAK,GACPpxB,EAAI,IAAI4rB,EAAK,KAAOx2C,GACpBuK,KAEAqgB,EAAI,IAAI4rB,EAAKwF,EAAK,IAAMh8C,EAAEd,MAAM,IAmBpC28C,EAAMI,EAAYrxB,EAAI6sB,EAAO7sB,EAAEguB,MAAMzD,GAAMvqB,EAAE0uB,KAAKnE,GAAMuD,GACxDwD,EAAKhiD,EAAM0wB,EAAEouB,MAAMpuB,GAAI8tB,GACvBkD,EAAc,IAEL,CAIP,GAHAK,EAAY/hD,EAAM+hD,EAAUjD,MAAMkD,GAAKxD,GAGnC7B,GAFJl+B,EAAIkjC,EAAIvC,KAAK7B,EAAOwE,EAAW,IAAIzF,EAAKoF,GAAclD,KAEjCj/C,GAAGyF,MAAM,EAAGw5C,KAAS7B,EAAegF,EAAIpiD,GAAGyF,MAAM,EAAGw5C,GAQvE,OAPAmD,EAAMA,EAAI7C,MAAM,GAGN,IAANzuC,IAASsxC,EAAMA,EAAIvC,KAAKwC,EAAQtF,EAAMkC,EAAM,EAAGz3B,GAAI+3B,MAAMzuC,EAAI,MACjEsxC,EAAMpE,EAAOoE,EAAK,IAAIrF,EAAKz8C,GAAI2+C,GAE/BlC,EAAKlB,UAAYr0B,EACJ,MAANs4B,GAAc5D,GAAW,EAAMz7C,EAAM2hD,EAAK56B,IAAO46B,EAG1DA,EAAMljC,EACNijC,GAAe,CAChB,CACF,CAMD,SAASQ,EAAaxxB,EAAGrwB,GACvB,IAAIgQ,EAAG3L,EAAGG,EAmBV,KAhBKwL,EAAIhQ,EAAIosB,QAAQ,OAAS,IAAGpsB,EAAMA,EAAIgC,QAAQ,IAAK,MAGnDqC,EAAIrE,EAAI8hD,OAAO,OAAS,GAGvB9xC,EAAI,IAAGA,EAAI3L,GACf2L,IAAMhQ,EAAI2E,MAAMN,EAAI,GACpBrE,EAAMA,EAAI4D,UAAU,EAAGS,IACd2L,EAAI,IAGbA,EAAIhQ,EAAID,QAILsE,EAAI,EAAyB,KAAtBrE,EAAIoF,WAAWf,MAAcA,EAGzC,IAAKG,EAAMxE,EAAID,OAAoC,KAA5BC,EAAIoF,WAAWZ,EAAM,MAAcA,EAG1D,GAFAxE,EAAMA,EAAI2E,MAAMN,EAAGG,GAEV,CAaP,GAZAA,GAAOH,EACP2L,EAAIA,EAAI3L,EAAI,EACZgsB,EAAErgB,EAAIwrC,EAAUxrC,EAv5CP,GAw5CTqgB,EAAEnxB,EAAI,GAMNmF,GAAK2L,EAAI,GA95CA,EA+5CLA,EAAI,IAAG3L,GA/5CF,GAi6CLA,EAAIG,EAAK,CAEX,IADIH,GAAGgsB,EAAEnxB,EAAEuF,MAAMzE,EAAI2E,MAAM,EAAGN,IACzBG,GAn6CE,EAm6CeH,EAAIG,GAAM6rB,EAAEnxB,EAAEuF,MAAMzE,EAAI2E,MAAMN,EAAGA,GAn6ChD,IAq6CPA,EAr6CO,GAo6CPrE,EAAMA,EAAI2E,MAAMN,IACGtE,MAC3B,MACQsE,GAAKG,EAGP,KAAOH,KAAMrE,GAAO,IAGpB,GAFAqwB,EAAEnxB,EAAEuF,MAAMzE,GAENo7C,IAAa/qB,EAAErgB,EAAI6rC,GAASxrB,EAAErgB,GAAK6rC,GAAQ,MAAM/+C,MAAMy+C,EAAqBvrC,EACtF,MAGMqgB,EAAEtxB,EAAI,EACNsxB,EAAErgB,EAAI,EACNqgB,EAAEnxB,EAAI,CAAC,GAGT,OAAOmxB,CACR,CAMA,SAAS1wB,EAAM0wB,EAAG2uB,EAAIQ,GACrB,IAAIn7C,EAAGyC,EAAGmG,EAAGzN,EAAGuiD,EAAIC,EAAS7iD,EAAG8iD,EAC9BlG,EAAK1rB,EAAEnxB,EAWT,IAAKM,EAAI,EAAGyN,EAAI8uC,EAAG,GAAI9uC,GAAK,GAAIA,GAAK,GAAIzN,IAIzC,IAHA6E,EAAI26C,EAAKx/C,GAGD,EACN6E,GA/8CS,EAg9CTyC,EAAIk4C,EACJ7/C,EAAI48C,EAAGkG,EAAM,OACR,CAGL,IAFAA,EAAMviD,KAAKw8C,MAAM73C,EAAI,GAn9CZ,MAo9CT4I,EAAI8uC,EAAGh8C,QACO,OAAOswB,EAIrB,IAHAlxB,EAAI8N,EAAI8uC,EAAGkG,GAGNziD,EAAI,EAAGyN,GAAK,GAAIA,GAAK,GAAIzN,IAO9BsH,GAJAzC,GA59CS,KAg+CU7E,CACpB,CAwBD,QAtBW,IAAPggD,IAIFuC,EAAK5iD,GAHL8N,EAAIyuC,EAAQ,GAAIl8C,EAAIsH,EAAI,IAGX,GAAK,EAGlBk7C,EAAUhD,EAAK,QAAqB,IAAhBjD,EAAGkG,EAAM,IAAiB9iD,EAAI8N,EAMlD+0C,EAAUxC,EAAK,GACVuC,GAAMC,KAAmB,GAANxC,GAAWA,IAAOnvB,EAAEtxB,EAAI,EAAI,EAAI,IACpDgjD,EAAK,GAAW,GAANA,IAAkB,GAANvC,GAAWwC,GAAiB,GAANxC,IAG1Cn7C,EAAI,EAAIyC,EAAI,EAAI3H,EAAIu8C,EAAQ,GAAIl8C,EAAIsH,GAAK,EAAIi1C,EAAGkG,EAAM,IAAM,GAAM,GAClEzC,IAAOnvB,EAAEtxB,EAAI,EAAI,EAAI,KAGzBigD,EAAK,IAAMjD,EAAG,GAkBhB,OAjBIiG,GACF/0C,EAAIswC,EAAkBltB,GACtB0rB,EAAGh8C,OAAS,EAGZi/C,EAAKA,EAAK/xC,EAAI,EAGd8uC,EAAG,GAAKL,EAAQ,IAlgDT,EAkgDyBsD,EAlgDzB,MAmgDP3uB,EAAErgB,EAAIwrC,GAAWwD,EAngDV,IAmgD4B,IAEnCjD,EAAGh8C,OAAS,EAGZg8C,EAAG,GAAK1rB,EAAErgB,EAAIqgB,EAAEtxB,EAAI,GAGfsxB,EAiBT,GAbS,GAALhsB,GACF03C,EAAGh8C,OAASkiD,EACZh1C,EAAI,EACJg1C,MAEAlG,EAAGh8C,OAASkiD,EAAM,EAClBh1C,EAAIyuC,EAAQ,GArhDH,EAqhDkBr3C,GAI3B03C,EAAGkG,GAAOn7C,EAAI,GAAK3H,EAAIu8C,EAAQ,GAAIl8C,EAAIsH,GAAK40C,EAAQ,GAAI50C,GAAK,GAAKmG,EAAI,GAGpE+0C,EACF,OAAS,CAGP,GAAW,GAAPC,EAAU,EACPlG,EAAG,IAAM9uC,IAAMuD,IAClBurC,EAAG,GAAK,IACN1rB,EAAErgB,GAGN,KACV,CAEU,GADA+rC,EAAGkG,IAAQh1C,EACP8uC,EAAGkG,IAAQzxC,EAAM,MACrBurC,EAAGkG,KAAS,EACZh1C,EAAI,CAEP,CAIH,IAAK5I,EAAI03C,EAAGh8C,OAAoB,IAAZg8C,IAAK13C,IAAW03C,EAAGj2B,MAEvC,GAAIs1B,IAAa/qB,EAAErgB,EAAI6rC,GAASxrB,EAAErgB,GAAK6rC,GACrC,MAAM/+C,MAAMy+C,EAAqBgC,EAAkBltB,IAGrD,OAAOA,CACR,CAGD,SAASkuB,EAASluB,EAAGjxB,GACnB,IAAIF,EAAG8Q,EAAG3L,EAAGyC,EAAGmG,EAAGzI,EAAKu3C,EAAImG,EAAIC,EAAMnG,EACpCC,EAAO5rB,EAAEtzB,YACT2pB,EAAKu1B,EAAKlB,UAIZ,IAAK1qB,EAAEtxB,IAAMK,EAAEL,EAGb,OAFIK,EAAEL,EAAGK,EAAEL,GAAKK,EAAEL,EACbK,EAAI,IAAI68C,EAAK5rB,GACX+qB,EAAWz7C,EAAMP,EAAGsnB,GAAMtnB,EAcnC,GAXA28C,EAAK1rB,EAAEnxB,EACP88C,EAAK58C,EAAEF,EAIP8Q,EAAI5Q,EAAE4Q,EACNkyC,EAAK7xB,EAAErgB,EACP+rC,EAAKA,EAAGp3C,QACRsI,EAAIi1C,EAAKlyC,EAGF,CAyBL,KAxBAmyC,EAAOl1C,EAAI,IAGT/N,EAAI68C,EACJ9uC,GAAKA,EACLzI,EAAMw3C,EAAGj8C,SAETb,EAAI88C,EACJhsC,EAAIkyC,EACJ19C,EAAMu3C,EAAGh8C,QAQPkN,GAFJ5I,EAAI3E,KAAKid,IAAIjd,KAAKw8C,KAAKx1B,EAnmDd,GAmmD8BliB,GAAO,KAG5CyI,EAAI5I,EACJnF,EAAEa,OAAS,GAIbb,EAAEi9C,UACG93C,EAAI4I,EAAG5I,KAAMnF,EAAEuF,KAAK,GACzBvF,EAAEi9C,SAGR,KAAW,CASL,KAHAgG,GAFA99C,EAAI03C,EAAGh8C,SACPyE,EAAMw3C,EAAGj8C,WAECyE,EAAMH,GAEXA,EAAI,EAAGA,EAAIG,EAAKH,IACnB,GAAI03C,EAAG13C,IAAM23C,EAAG33C,GAAI,CAClB89C,EAAOpG,EAAG13C,GAAK23C,EAAG33C,GAClB,KACD,CAGH4I,EAAI,CACL,CAaD,IAXIk1C,IACFjjD,EAAI68C,EACJA,EAAKC,EACLA,EAAK98C,EACLE,EAAEL,GAAKK,EAAEL,GAGXyF,EAAMu3C,EAAGh8C,OAIJsE,EAAI23C,EAAGj8C,OAASyE,EAAKH,EAAI,IAAKA,EAAG03C,EAAGv3C,KAAS,EAGlD,IAAKH,EAAI23C,EAAGj8C,OAAQsE,EAAI4I,GAAI,CAC1B,GAAI8uC,IAAK13C,GAAK23C,EAAG33C,GAAI,CACnB,IAAKyC,EAAIzC,EAAGyC,GAAiB,IAAZi1C,IAAKj1C,IAAWi1C,EAAGj1C,GAAK0J,EAAO,IAC9CurC,EAAGj1C,GACLi1C,EAAG13C,IAAMmM,CACV,CAEDurC,EAAG13C,IAAM23C,EAAG33C,EACb,CAGD,KAAqB,IAAd03C,IAAKv3C,IAAau3C,EAAGj2B,MAG5B,KAAiB,IAAVi2B,EAAG,GAAUA,EAAGvwB,UAAWxb,EAGlC,OAAK+rC,EAAG,IAER38C,EAAEF,EAAI68C,EACN38C,EAAE4Q,EAAIA,EAGCorC,EAAWz7C,EAAMP,EAAGsnB,GAAMtnB,GANd,IAAI68C,EAAK,EAO7B,CAGD,SAASt4C,EAAS0sB,EAAG+xB,EAAOpD,GAC1B,IAAI/xC,EACF+C,EAAIutC,EAAkBltB,GACtBrwB,EAAMs8C,EAAejsB,EAAEnxB,GACvBsF,EAAMxE,EAAID,OAwBZ,OAtBIqiD,GACEpD,IAAO/xC,EAAI+xC,EAAKx6C,GAAO,EACzBxE,EAAMA,EAAI4hD,OAAO,GAAK,IAAM5hD,EAAI2E,MAAM,GAAK83C,EAAcxvC,GAChDzI,EAAM,IACfxE,EAAMA,EAAI4hD,OAAO,GAAK,IAAM5hD,EAAI2E,MAAM,IAGxC3E,EAAMA,GAAOgQ,EAAI,EAAI,IAAM,MAAQA,GAC1BA,EAAI,GACbhQ,EAAM,KAAOy8C,GAAezsC,EAAI,GAAKhQ,EACjCg/C,IAAO/xC,EAAI+xC,EAAKx6C,GAAO,IAAGxE,GAAOy8C,EAAcxvC,KAC1C+C,GAAKxL,GACdxE,GAAOy8C,EAAczsC,EAAI,EAAIxL,GACzBw6C,IAAO/xC,EAAI+xC,EAAKhvC,EAAI,GAAK,IAAGhQ,EAAMA,EAAM,IAAMy8C,EAAcxvC,OAE3DA,EAAI+C,EAAI,GAAKxL,IAAKxE,EAAMA,EAAI2E,MAAM,EAAGsI,GAAK,IAAMjN,EAAI2E,MAAMsI,IAC3D+xC,IAAO/xC,EAAI+xC,EAAKx6C,GAAO,IACrBwL,EAAI,IAAMxL,IAAKxE,GAAO,KAC1BA,GAAOy8C,EAAcxvC,KAIlBojB,EAAEtxB,EAAI,EAAI,IAAMiB,EAAMA,CAC9B,CAID,SAASigD,EAASzjC,EAAKhY,GACrB,GAAIgY,EAAIzc,OAASyE,EAEf,OADAgY,EAAIzc,OAASyE,GACN,CAEV,CAgID,SAASoE,EAAO0qB,GACd,IAAKA,GAAsB,iBAARA,EACjB,MAAMx2B,MAAMu+C,EAAe,mBAE7B,IAAIh3C,EAAGoiB,EAAGpjB,EACRg/C,EAAK,CACH,YAAa,EAAGxH,EAChB,WAAY,EAAG,EACf,YAAY,IAAQ,EACpB,WAAY,EAAG,KAGnB,IAAKx2C,EAAI,EAAGA,EAAIg+C,EAAGtiD,OAAQsE,GAAK,EAC9B,QAA6B,KAAxBhB,EAAIiwB,EAAI7M,EAAI47B,EAAGh+C,KAAiB,CACnC,KAAIm3C,EAAUn4C,KAAOA,GAAKA,GAAKg/C,EAAGh+C,EAAI,IAAMhB,GAAKg/C,EAAGh+C,EAAI,IACnD,MAAMvH,MAAMw+C,EAAkB70B,EAAI,KAAOpjB,GADclG,KAAKspB,GAAKpjB,CAEvE,CAGH,QAA8B,KAAzBA,EAAIiwB,EAAI7M,EAAI,SAAqB,CAClC,GAAIpjB,GAAK3D,KAAKy7C,KACT,MAAMr+C,MAAMw+C,EAAkB70B,EAAI,KAAOpjB,GAD1BlG,KAAKspB,GAAK,IAAItpB,KAAKkG,EAE1C,CAED,OAAOlG,IACR,CAID29C,EA5IA,SAASwH,EAAMhvB,GACb,IAAIjvB,EAAGoiB,EAAG47B,EASV,SAASvH,EAAQpyC,GACf,IAAI2nB,EAAIlzB,KAGR,KAAMkzB,aAAayqB,GAAU,OAAO,IAAIA,EAAQpyC,GAOhD,GAHA2nB,EAAEtzB,YAAc+9C,EAGZpyC,aAAiBoyC,EAInB,OAHAzqB,EAAEtxB,EAAI2J,EAAM3J,EACZsxB,EAAErgB,EAAItH,EAAMsH,OACZqgB,EAAEnxB,GAAKwJ,EAAQA,EAAMxJ,GAAKwJ,EAAM/D,QAAU+D,GAI5C,GAAqB,iBAAVA,EAAoB,CAG7B,GAAY,EAARA,GAAc,EAChB,MAAM5L,MAAMw+C,EAAkB5yC,GAGhC,GAAIA,EAAQ,EACV2nB,EAAEtxB,EAAI,MACD,MAAI2J,EAAQ,GAOjB,OAHA2nB,EAAEtxB,EAAI,EACNsxB,EAAErgB,EAAI,OACNqgB,EAAEnxB,EAAI,CAAC,IALPwJ,GAASA,EACT2nB,EAAEtxB,GAAK,CAMR,CAGD,OAAI2J,MAAYA,GAASA,EAAQ,KAC/B2nB,EAAErgB,EAAI,OACNqgB,EAAEnxB,EAAI,CAACwJ,KAIFm5C,EAAaxxB,EAAG3nB,EAAM/E,WACrC,CAAa,GAAqB,iBAAV+E,EAChB,MAAM5L,MAAMw+C,EAAkB5yC,GAWhC,GAP4B,KAAxBA,EAAMtD,WAAW,IACnBsD,EAAQA,EAAM/D,MAAM,GACpB0rB,EAAEtxB,GAAK,GAEPsxB,EAAEtxB,EAAI,GAGJ68C,EAAUh3C,KAAK8D,GACd,MAAM5L,MAAMw+C,EAAkB5yC,GADRm5C,EAAaxxB,EAAG3nB,EAE5C,CAkBD,GAhBAoyC,EAAQ7/B,UAAYwO,EAEpBqxB,EAAQyH,SAAW,EACnBzH,EAAQ0H,WAAa,EACrB1H,EAAQ2H,WAAa,EACrB3H,EAAQ4H,YAAc,EACtB5H,EAAQ6H,cAAgB,EACxB7H,EAAQ8H,gBAAkB,EAC1B9H,EAAQ+H,gBAAkB,EAC1B/H,EAAQgI,gBAAkB,EAC1BhI,EAAQiI,iBAAmB,EAE3BjI,EAAQwH,MAAQA,EAChBxH,EAAQlyC,OAASkyC,EAAQ13C,IAAMwF,OAEnB,IAAR0qB,IAAgBA,EAAM,CAAA,GACtBA,EAEF,IADA+uB,EAAK,CAAC,YAAa,WAAY,WAAY,WAAY,QAClDh+C,EAAI,EAAGA,EAAIg+C,EAAGtiD,QAAcuzB,EAAI/iB,eAAekW,EAAI47B,EAAGh+C,QAAOivB,EAAI7M,GAAKtpB,KAAKspB,IAKlF,OAFAq0B,EAAQlyC,OAAO0qB,GAERwnB,CACR,CA6CSwH,CAAMxH,GAEhBA,EAAiB,QAAIA,EAAQA,QAAUA,EAGvCF,EAAM,IAAIE,EAAQ,GAayBt1C,GAAOD,QAChDC,GAAAD,QAAiBu1C,GAIZH,IACHA,EAA6B,oBAARv8C,MAAuBA,MAAQA,KAAKA,MAAQA,KAC7DA,KAAOwxB,SAAS,cAATA,IAGb+qB,EAAYG,QAAUA,EAEzB,CA59DA,CA49DE39C,OC79DS6lD,oBCeN,MAAOC,WAAgB7I,GAc3B,WAAAr9C,CACY8nC,EACVqe,GAEAhmD,MAAM2nC,EAAM7tB,UAAW6tB,EAAOqe,GAHpB/lD,KAAK0nC,MAALA,EAIV1nC,KAAKgmD,YAActe,EAAMse,YACzBhmD,KAAKimD,OAASve,EAAMue,OACpBjmD,KAAK8nC,UAAYJ,EAAMI,UACvB9nC,KAAKk9C,YAAcxV,EAAMwV,YAGpB,gBAAAgJ,GACL,OAAO,IAAIvI,GAAQ39C,KAAKimD,QAMnB,QAAAE,CAASC,GACd,OAAOpmD,KAAKwkB,KAAO4hC,EAAQ5hC,IAAMxkB,KAAKimD,SAAWG,EAAQH,QAAUjmD,KAAKmV,cAAgBixC,EAAQjxC,aCpC9F,MAAOkxC,WAAkBpJ,GAa7B,WAAAr9C,CACY8nC,EACVqe,GAEAhmD,MAAM2nC,EAAMruB,YAAaquB,EAAOqe,GAHtB/lD,KAAK0nC,MAALA,EAIV1nC,KAAKwkB,GAAKkjB,EAAMruB,YAChBrZ,KAAK8nC,UAAYJ,EAAMI,UACvB9nC,KAAK4X,WAAa8vB,EAAM9vB,WACxB5X,KAAKsmD,eAAiB5e,EAAM4e,eAC5BtmD,KAAKumD,mBAAqB7e,EAAM6e,mBAG3B,gBAAAL,GACL,OAAO,IAAIvI,GAAQ39C,KAAKsmD,uBCvBfE,GAyBX,WAAA5mD,CAA6B8nC,GAQ3B,GAR2B1nC,KAAK0nC,MAALA,EAC3B1nC,KAAKwkB,GAAKkjB,EAAM1sB,aAChBhb,KAAKsU,QAAUozB,EAAMpzB,QACrBtU,KAAK8nC,UAAYJ,EAAMI,UACvB9nC,KAAKymD,YAAc/e,EAAM+e,YACzBzmD,KAAK0mD,YAAchf,EAAMgf,YACzB1mD,KAAK2mD,gBAAkBjf,EAAMif,iBAExBjf,EAAMyQ,UAAYzQ,EAAMN,gBAC3B,MAAM,IAAIjnC,EAAiB,qDAG7BH,KAAKm4C,QAAUzQ,EAAMyQ,QACrBn4C,KAAKonC,gBAAkBM,EAAMN,kBHrDjC,SAAYye,GACVA,EAAA,mBAAA,sBACAA,EAAA,WAAA,cACAA,EAAA,gBAAA,mBACAA,EAAA,0BAAA,+BAOAA,EAAA,mBAAA,qBACD,CAZD,CAAYA,KAAAA,GAYX,CAAA,cIRWe,8DCC6B,IAAMx2C,UAAY,0BAGpB,IAAMA,UAAY,iCAGVy2C,GAAsBz2C,MAAO02C,GAC1E,IAAInJ,GAAQmJ,EAAUR,gBAAgB1gC,IAAIihC,gCAGCA,GAAsBz2C,MAAOg2C,GACxE,IAAIzI,GAAQyI,EAAQH,QAAQrgC,IAAIihC,MDZlC,SAAYD,GACVA,EAAA,yBAAA,2BACAA,EAAA,kBAAA,oBACAA,EAAA,6BAAA,+BACAA,EAAA,wBAAA,0BACAA,EAAA,wBAAA,0BACAA,EAAA,0BAAA,4BACAA,EAAA,uBAAA,yBACAA,EAAA,yBAAA,2BACAA,EAAA,qBAAA,uBACAA,EAAA,mBAAA,qBACAA,EAAA,yBAAA,2BACAA,EAAA,qBAAA,uBACAA,EAAA,uBAAA,wBACD,CAdD,CAAYA,KAAAA,GAcX,CAAA,IACK,MAAOG,WAA0BxmD,EAGrC,WAAAX,CACEC,EACOW,EACP4zC,EACAp9B,EACOlX,GAEPC,MAAMF,EAASW,EAAMV,GALdE,KAAIQ,KAAJA,EAGAR,KAAQF,SAARA,EAPTknD,GAAyB/gD,IAAAjG,UAAA,GACzBinD,GAAyBhhD,IAAAjG,UAAA,GASvByM,GAAAzM,KAAIgnD,GAAe5S,EAAU,KAC7B3nC,GAAAzM,KAAIinD,GAAajwC,EAAQ,KAEpB,aAAA+D,GACL,OAAO/N,GAAAhN,KAAIgnD,GAAA,KAEN,WAAAE,GACL,OAAOl6C,GAAAhN,KAAIinD,GAAA,0CEbFE,GAIX,WAAAvnD,CAAoCwnD,GAAApnD,KAAGonD,IAAHA,EA4BpC,qBAAMC,EAAgBC,MACpBA,EAAQ,IAAI/iD,KAAK,GAAEgjD,MACnBA,EAAQ,GAAEC,SACVA,EAAQld,YACRA,EAAWmd,UACXA,EAASZ,UACTA,EAASa,gBACTA,EAAeC,iBACfA,GAUE,IAKF,MACMC,SADiB5nD,KAAKonD,IAAIjjB,QAAQxqB,YAAY2tC,aAAA,EAAAA,EAAOtqB,gBACzB9sB,QAAQk2C,KACpCoB,IAAaA,EAASj2C,SAAS60C,EAAQr6C,aAGvCu+B,IAAgBA,EAAY/4B,SAAS60C,EAAQnc,mBAG/B74B,IAAdq2C,IAA2B,IAAI9J,GAAQyI,EAAQH,QAAQtgC,GAAG8hC,YAG5Cr2C,IAAdy1C,IAA2B,IAAIlJ,GAAQyI,EAAQH,QAAQxgC,GAAGohC,QAG1Da,IAAoBA,EAAgBn2C,SAAS60C,EAAQjJ,eAGrDwK,IAAqBA,EAAiBp2C,SAAS60C,EAAQhf,wBAM7D,OADAwgB,EAAiB3W,MAAK,CAAC5tB,EAAGC,IAAM,IAAI/e,KAAK8e,EAAEykB,WAAW+f,UAAY,IAAItjD,KAAK+e,EAAEwkB,WAAW+f,YACjFD,EAAiBpgD,MAAM,EAAG+/C,GAMnC,wBAAMO,CAAmBjuC,GACvB,OAAO7Z,KAAKonD,IAAIjjB,QAAQvqB,WAAWC,GAOrC,mBAAMc,EAAcyrC,QAClBA,EAAO2B,OACPA,GAAS,IAKT,IAAI3T,EAAuC,CACzCqS,YAAaL,EAAQH,OACrB7e,gBAAiBgf,EAAQhf,gBACzB+Q,QAASiO,EAAQ/I,UACjBvV,WAAW,IAAIvjC,MAAOy4B,cACtB1oB,QAAS,IAAI/P,KAAKA,KAAKiwC,MAAQ,KAAQxX,cACvCgrB,aAAa,EACbrB,gBAAiB,GACjBD,YAAa,GACb1rC,aAAc,IAGhB,GAAI+sC,EACF,MAAO,CACL3T,aACA6R,OAAQG,EAAQH,OAChBpsC,UAAWusC,EAAQvsC,UACnBouC,SAAS,EACTF,UAIJ,IAQE,OAPA3T,QAAmBp0C,KAAKonD,IAAIjjB,QAAQtpB,iBAAiBu5B,SAE/Cp0C,KAAKonD,IAAIjjB,QAAQxpB,cAAcyrC,EAAQvsC,UAAW,CACtDmB,aAAco5B,EAAWp5B,aACzBktC,oBAAqB9B,EAAQH,SAGxB,CACLgC,SAAS,EACT7T,aACA6R,OAAQG,EAAQH,OAChBpsC,UAAWusC,EAAQvsC,UACnBkuC,UAEF,MAAOl1C,GACP,MAAO,CACLo1C,SAAS,EACT7T,aACA6R,OAAQG,EAAQH,OAChBpsC,UAAWusC,EAAQvsC,UACnBnM,OAAQmF,EACRk1C,WAcN,wBAAMI,EAAmBC,SACvBA,EAAQL,OACRA,GAAS,IAUT,MAOMM,EAAuBC,GACpBA,EAAep3C,QAAgD,CAACq3C,EAAKlkD,KAC1EkkD,EAAIlkD,EAAKg5C,WAAakL,EAAIlkD,EAAKg5C,YAAc,GAC7CkL,EAAIlkD,EAAKg5C,WAAW/1C,KAAKjD,GAClBkkD,IACN,IAGCC,EAAiC,GAEjCC,EAAkDL,EAhBhCl3C,QAAgD,CAACq3C,EAAKlkD,KAC1EkkD,EAAIlkD,EAAK+iC,iBAAmBmhB,EAAIlkD,EAAK+iC,kBAAoB,GACzDmhB,EAAIlkD,EAAK+iC,iBAAiB9/B,KAAKjD,GACxBkkD,IACN,IAaL,IAAK,MAAOnhB,EAAiBghB,KAAaziD,OAAOkK,QAAQ44C,GAA2B,CAClF,MAAMC,EAAwBL,EAAoBD,GAClD,IAAK,MAAOO,EAAcP,KAAaziD,OAAOkK,QAAQ64C,GAAwB,CAE5E,IAAItU,EAAuC,CACzCqS,YAFU2B,EAASl3C,QAAO,CAACq3C,EAAKlkD,IAASkkD,EAAI3G,KAAKv9C,EAAK4hD,SAAS,IAAItI,GAAQ,IAE3D2E,QAAQ,IACzBlb,kBACA+Q,QAASwQ,EACT7gB,WAAW,IAAIvjC,MAAOy4B,cACtB1oB,QAAS,IAAI/P,KAAKA,KAAKiwC,MAAQ,KAAQxX,cACvCgrB,aAAa,EACbrB,gBAAiB,GACjBD,YAAa,GACb1rC,aAAc,IAEX+sC,IACH3T,QAAmBp0C,KAAKonD,IAAIjjB,QAAQtpB,iBAAiBu5B,IAEvD,IAAK,MAAMgS,KAAWgC,EACpB,GAAIL,EACFS,EAAQlhD,KAAK,CACXuS,UAAWusC,EAAQvsC,UACnBu6B,aACA6T,SAAS,EACThC,OAAQG,EAAQH,OAChB8B,gBAKJ,UACQ/nD,KAAKonD,IAAIjjB,QAAQxpB,cAAcyrC,EAAQvsC,UAAW,CACtDmB,aAAco5B,EAAWp5B,aACzBktC,oBAAqB9B,EAAQH,SAE/BuC,EAAQlhD,KAAK,CACXuS,UAAWusC,EAAQvsC,UACnBu6B,aACA6T,SAAS,EACThC,OAAQG,EAAQH,OAChB8B,WAEF,MAAOl1C,GACP21C,EAAQlhD,KAAK,CACXuS,UAAWusC,EAAQvsC,UACnBu6B,aACA6T,SAAS,EACThC,OAAQG,EAAQH,OAChBv4C,OAAQmF,EACRk1C,aAMV,OAAOS,SC1QEI,GACX,WAAAhpD,CACkBwa,EACAC,EACA89B,EAEA5nC,GAJAvQ,KAAOoa,QAAPA,EACApa,KAAMqa,OAANA,EACAra,KAAOm4C,QAAPA,EAEAn4C,KAAKuQ,MAALA,EAGlB,kBAAAs4C,GACE,MAAO,GAAG7oD,KAAKqa,UAAUra,KAAKoa,WAAWpa,KAAKuQ,SCF5C,SAAUu4C,GAAuBnnD,GACrC,KAAMA,aAAiBhC,OACrB,OAAOmD,OAAOnB,GAGhB,GAZF,SAAoBA,GAClB,MAAuB,iBAATA,GAA+B,OAAVA,GAAkB,SAAUA,GAAwB,aAAfA,EAAMT,IAChF,CAUM6nD,CAAWpnD,GACb,IACE,OAAO8B,KAAKC,UAAU/B,EAAMsK,KAAM,KAAM,GACxC,MAAO+8C,GACP,OAAOrnD,EAAM9B,QAGjB,OAAO8B,EAAM9B,OACf,OCqBaopD,GAgBX,WAAArpD,CACkBm7C,EACA3G,EACA8U,EAChBxmD,EACAyH,GAJgBnK,KAAS+6C,UAATA,EACA/6C,KAAUo0C,WAAVA,EACAp0C,KAAakpD,cAAbA,EAlBVlpD,KAAOomD,QAAmB,KAC1BpmD,KAAAmpD,WAAqC,IAAI1pC,IAOzCzf,KAAAmwC,KAAkB,IAAIjC,GAc5BluC,KAAKmK,OAASA,GAAUP,EAAc,WACtC5J,KAAK0C,QAAU,CACb0mD,eAAe1mD,aAAA,EAAAA,EAAS0mD,gBAAa,MAAW,GAChDC,iBAAiB3mD,aAAA,EAAAA,EAAS2mD,kBAAe,MAAW,IAGtD,MAAMC,EAAsBtpD,KAAKkpD,cAC9BK,kBACAx1B,KAAK7jB,IAAQk2C,GAAYA,EAAQjxC,cAAgBnV,KAAK+6C,UAAUv2B,MAChE4O,WAAWgzB,GAAYpmD,KAAKwpD,WAAWpD,KAEpCqD,EAAwBzpD,KAAKkpD,cAChCQ,oBACA31B,KAAK7jB,IAAQ42C,GAAcA,EAAU3xC,cAAgBnV,KAAK+6C,UAAUv2B,MACpE4O,WAAW0zB,GAAc9mD,KAAK2pD,aAAa7C,KAE9C9mD,KAAK4pD,qBAAuB,KAC1BN,EAAoB95B,cACpBi6B,EAAsBj6B,aAAa,EAOhC,YAAAm6B,CAAa7C,GAClB,OAAO9mD,KAAKmwC,KAAK1C,QAAQ,OAAOqZ,EAAU3xC,eAAe,IAAMnV,KAAK6pD,eAAe/C,KAM9E,UAAA0C,CAAWpD,GAChB,OAAOpmD,KAAKmwC,KAAK1C,QAAQ,OAAO2Y,EAAQjxC,eAAe,IAAMnV,KAAK8pD,aAAa1D,KAM1E,UAAAxpB,GACL,OAAwB,OAAjB58B,KAAKomD,QAGN,oBAAMyD,CAAe/C,GAG3B,GAF2B9mD,KAAK+pD,qBAS9B,aANM/pD,KAAK0a,gBACTosC,EACAjB,GAAgBmE,mBAChB,aAAalD,EAAUtiC,qCAAqCsiC,EAAU3xC,sGAGjE,EAGT,GAAInV,KAAKmpD,WAAWp8C,IAAI+5C,EAAUtiC,IAAK,CAGrC,SAFiCxkB,KAAKiqD,sBAAsBnD,GAU1D,OAPA9mD,KAAKmK,OAAOzI,KACV,uGACA,CACE2X,YAAaytC,EAAUtiC,GACvBrP,YAAa2xC,EAAU3xC,eAGpB,EAIXnV,KAAKmpD,WAAWljD,IAAI6gD,EAAUtiC,GAAIsiC,GAElC,IAAIoD,GAAmB,EACvB,IACEA,QAAyBlqD,KAAK0C,QAAQ2mD,gBAAgBvC,EAAW,CAC/D/L,UAAW/6C,KAAK+6C,UAChB3G,WAAYp0C,KAAKo0C,WACjB9L,OAAQtoC,KAAK+6C,UAAUzS,SAEzB,MAAO3mC,GACP,MAAM,IAAI1B,EAAe,6CAA8C0B,GAGzE,IAAKuoD,EAOH,aANMlqD,KAAK0a,gBACTosC,EACAjB,GAAgBsE,0BAChB,aAAarD,EAAUtiC,oBAAoBsiC,EAAU3xC,6CAGhD,EAGT,IAME,aALMnV,KAAKkpD,cAAczuC,gBAAgBqsC,EAAW9mD,KAAKo0C,WAAY0S,EAAUR,gBAC/EtmD,KAAKmK,OAAO3I,MAAM,qBAAsB,CACtC6X,YAAaytC,EAAUtiC,GACvBrP,YAAa2xC,EAAU3xC,eAElB,EACP,MAAOxT,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,+BAA+BD,EAAUtiC,OAAO3kB,IAChD+mD,GAAiBwD,+BACjBh5C,EACA01C,EAAU9vC,SACVrV,IAKE,2BAAMsoD,CAAsBnD,GAGlC,MAAkB,mBAFGA,EAAUvJ,YAKzB,qBAAM7iC,CAAgBosC,EAAsBuD,EAAkCC,GACpF,UACQtqD,KAAKkpD,cAAcxuC,gBAAgBosC,EAAWwD,GACpD,MAAO3oD,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,+BAA+BD,EAAUtiC,OAAO3kB,IAChD+mD,GAAiB2D,8BACjBn5C,EACA01C,EAAU9vC,SACVrV,IAKE,QAAAi5B,CAASwrB,GACfpmD,KAAKomD,QAAUA,EACfpmD,KAAK4pD,uBAGC,kBAAME,CAAa1D,GAOzB,GANApmD,KAAKmK,OAAO3I,MAAM,iCAAkC,CAClDqY,UAAWusC,EAAQ5hC,GACnBrP,YAAaixC,EAAQjxC,YACrB6B,SAAUovC,EAAQpvC,WAGhBhX,KAAKomD,QAEP,MAAM,IAAIW,GACR,aAAa/mD,KAAK+6C,UAAUv2B,0CAA0CxkB,KAAKomD,QAAQ5hC,KACnFoiC,GAAiB4D,qBACjBxqD,KAAKo0C,WACLp0C,KAAKomD,QAAQpvC,UAIjB,GAA4B,aAAxBovC,EAAQ7I,YACV,MAAM,IAAIwJ,GACR,eAAeX,EAAQ5hC,oBAAoB4hC,EAAQjxC,0BAA0BixC,EAAQ7I,oEAErFqJ,GAAiB6D,uBACjBzqD,KAAKo0C,WACLgS,EAAQpvC,UAIZhX,KAAK46B,SAASwrB,GAEd,IAAI8D,GAAmB,EACvB,IACEA,QAAyBlqD,KAAK0C,QAAQ0mD,cAAchD,EAAS,CAC3DrL,UAAW/6C,KAAK+6C,UAChB3G,WAAYp0C,KAAKo0C,WACjB9L,OAAQtoC,KAAK+6C,UAAUzS,SAEzB,MAAO3mC,GACP,MAAM,IAAI1B,EAAe,0CAA2C0B,GAGtE,IAAKuoD,EAAkB,CACrB,MAAMG,EAAkBxE,GAAgBsE,0BAClCtqD,EAAU,WAAWumD,EAAQ5hC,oBAAoB4hC,EAAQjxC,yCAG/D,aAFMnV,KAAK4a,cAAcwrC,EAASiE,EAAiBxqD,IAE5C,EAGT,UACQG,KAAKkpD,cAAcvuC,cAAcyrC,EAASpmD,KAAKo0C,WAAYgS,EAAQH,QACzE,MAAOtkD,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,4BAA4BX,EAAQ5hC,MAAM3kB,IAC1C+mD,GAAiB8D,6BACjBt5C,EACAg1C,EAAQpvC,SACRrV,GAIJ,OAAO,EAGD,mBAAMiZ,CACZwrC,EACAiE,EACAxqD,GAEA,UACQG,KAAKkpD,cAActuC,cAAcwrC,EAASvmD,GAChDG,KAAKmK,OAAOzI,KAAK,mBAAoB,CAAEgM,OAAQ7N,IAC/C,MAAO8B,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,4BAA4BX,EAAQ5hC,MAAM3kB,IAC1C+mD,GAAiB+D,4BACjBv5C,EACAg1C,EAAQpvC,SACRrV,IAKE,kBAAAooD,GACN,OAAwB,OAAjB/pD,KAAKomD,QAGP,SAAAwE,GACL,OAAqC,OAA9B5qD,KAAK4pD,qBAGP,IAAAiB,GACL7qD,KAAK4pD,wBC1NT,MAAMkB,GAAWnlD,OAAOoa,OAAO,CAAC,UAAW,kBAE9BgrC,GAeX,WAAAnrD,CAAY04C,EAAqB51C,aAdjC1C,KAAAk9B,OAAsC,IAAIqF,GAMzBviC,KAAAmK,OAASP,EAAc,WAEvB5J,KAAA0C,QAA0C,CACzD2X,OAAQ,QACRD,QAAS4wC,KACTz6C,MAAO,QAIP,MAAM6J,UAAUxP,EAAAlI,aAAA,EAAAA,EAAS0X,uBAAWpa,KAAK0C,QAAQ0X,QAC3CC,UAASsV,EAAAjtB,aAAA,EAAAA,EAAS2X,sBAAUra,KAAK0C,QAAQ2X,OACzC9J,EAAsB,QAAdilB,EAAA9yB,aAAO,EAAPA,EAAS6N,aAAK,IAAAilB,EAAAA,EAAKs1B,GAASv5C,SAAS6I,GAAW,MAAQ,OACtEpa,KAAK0C,QAAU,CAAE0X,UAASC,SAAQ9J,SAElCvQ,KAAKmK,OAASmuC,EAAKnuC,OACnBnK,KAAKirD,SAAW3S,EAAK4S,MACrBlrD,KAAKmrD,WAAa7S,EAAK6S,WAEvBnrD,KAAKorD,6BAGC,0BAAAA,GACNprD,KAAKmrD,WAAWE,kBAAkBj4B,WAAWgzB,IAC3CpmD,KAAKk9B,OAAOyE,KAAK,kBAAmB,CAClCykB,WACA,IAGJpmD,KAAKmrD,WAAWG,oBAAoBl4B,WAAW0zB,IAC7C9mD,KAAKk9B,OAAOyE,KAAK,oBAAqB,CAAEmlB,aAAY,IAIhD,kBAAA+B,GACN,MAAO,GAAG7oD,KAAK0C,QAAQ2X,UAAUra,KAAK0C,QAAQ0X,WAAWpa,KAAK0C,QAAQ6N,QAGxE,qBAAMg7C,GACJ,MAAQt4B,SAAUklB,SAAkBn4C,KAAKirD,SAASh4B,SAAShW,cAE3D,OAAO,IAAI2rC,GAAa5oD,KAAK0C,QAAQ0X,QAASpa,KAAK0C,QAAQ2X,OAAQ89B,EAASn4C,KAAK0C,QAAQ6N,OAG3F,iBAAAm5C,GACE,OAAO1pD,KAAKmrD,WAAWG,oBAGzB,eAAA/B,GACE,OAAOvpD,KAAKmrD,WAAWE,kBAGzB,sBAAMxwC,CAAiBpL,GACrBzP,KAAKmK,OAAO3I,MAAM,sBAAuB,CAAEiO,OAAQA,IAEnD,IACE,MAAM2kC,QAAmBp0C,KAAKmrD,WAAWtwC,iBAAiB,CACxDusB,gBAAiBpnC,KAAK6oD,wBACnBp5C,IASL,OAPAzP,KAAKk9B,OAAOyE,KAAK,oBAAqB,CAAEyS,eACxCp0C,KAAKmK,OAAO1I,KAAK,qBAAsB,CACrCuZ,aAAco5B,EAAW5vB,GACzBgnC,OAAQpX,EAAWqS,YACnBgF,SAAUzrD,KAAK6oD,uBAEjB7oD,KAAKmK,OAAO3I,MAAM,qBAAsB4yC,GACjCA,EACP,MAAOzyC,GAEP,MADA3B,KAAKk9B,OAAOyE,KAAK,0BAA2BhgC,GACtCA,GAIV,uBAAMuZ,CAAkBk5B,GACtBp0C,KAAKmK,OAAO3I,MAAM,uBAAwB4yC,GAC1C,IACE,MAAMsX,QAAiC1rD,KAAK+a,cAAcq5B,EAAW5vB,IAAIvW,OAAM,KAC7EjO,KAAKmK,OAAOzI,KAAK,8CAA+C,CAAE8iB,GAAI4vB,EAAW5vB,KAC1E4vB,WAEHp0C,KAAKmrD,WAAWjwC,kBAAkBk5B,GACxCp0C,KAAKk9B,OAAOyE,KAAK,qBAAsB,CACrCyS,WAAYsX,IAEd1rD,KAAKmK,OAAO1I,KAAK,sBAAuB,CACtCuZ,aAAc0wC,EAAyBlnC,GACvCiiC,YAAaiF,EAAyBjF,YACtCC,YAAagF,EAAyBhF,cAExC,MAAO/kD,GAQP,MAPA3B,KAAKk9B,OAAOyE,KAAK,2BAA4B,CAC3CyS,iBAAkBp0C,KAAKmrD,WAAWpwC,cAAcq5B,EAAW5vB,IAAIvW,OAAM,KACnEjO,KAAKmK,OAAOzI,KAAK,0DAA2D,CAAE8iB,GAAI4vB,EAAW5vB,KACtF4vB,KAETzyC,UAEIA,GAIV,aAAAoZ,CAAcyJ,GAEZ,OADAxkB,KAAKmK,OAAO3I,MAAM,4BAA6B,CAAEgjB,OAC1CxkB,KAAKmrD,WAAWpwC,cAAcyJ,GAIvC,eAAAvJ,CAAgBm5B,EAAwBuX,GACtC,MAAMr8C,EAAM3P,MAAM,4CAOlB,MALAK,KAAKk9B,OAAOyE,KAAK,0BAA2B,CAC1CyS,aACAzyC,MAAO2N,IAGHA,EAGR,mBAAMqL,CAAcyrC,EAAkBhS,EAAwB6R,GAC5DjmD,KAAKmK,OAAO3I,MAAM,oBAAqB4kD,GACvC,IACE,MAAMwF,QAAwB5rD,KAAKmrD,WAAWxwC,cAAcyrC,EAAShS,EAAY6R,GAWjF,OAVAjmD,KAAKk9B,OAAOyE,KAAK,kBAAmB,CAClCykB,QAASwF,IAEX5rD,KAAKmK,OAAO1I,KAAK,mBAAoB,CACnC+iB,GAAI4hC,EAAQ5hC,GACZxJ,aAAco5B,EAAW5vB,GACzBrP,YAAaixC,EAAQjxC,YACrB6B,SAAUovC,EAAQpvC,SAClBivC,WAEK2F,EACP,MAAOjqD,GASP,MARA3B,KAAKk9B,OAAOyE,KAAK,wBAAyB,CAAEykB,UAASzkD,UACrD3B,KAAKmK,OAAOxI,MAAM,6BAA6BA,IAAS,CACtD6iB,GAAI4hC,EAAQ5hC,GACZxJ,aAAco5B,EAAW5vB,GACzBrP,YAAaixC,EAAQjxC,YACrB6B,SAAUovC,EAAQpvC,SAClBivC,WAEItkD,GAIV,mBAAMiZ,CAAcwrC,EAAkB14C,GACpC1N,KAAKmK,OAAO3I,MAAM,oBAAqB,CAAEgjB,GAAI4hC,EAAQ5hC,GAAI9W,WACzD,IACE,MAAMm+C,QAAwB7rD,KAAKmrD,WAAWvwC,cAAcwrC,EAAS14C,GAKrE,OAJA1N,KAAKk9B,OAAOyE,KAAK,kBAAmB,CAClCykB,QAASyF,IAEX7rD,KAAKmK,OAAOzI,KAAK,kBAAmB,CAAE8iB,GAAI4hC,EAAQ5hC,GAAI9W,WAC/Cm+C,EACP,MAAOlqD,GAGP,MAFA3B,KAAKk9B,OAAOyE,KAAK,wBAAyB,CAAEykB,UAASzkD,UACrD3B,KAAKmK,OAAOxI,MAAM,6BAA6BA,IAAS,CAAE6iB,GAAI4hC,EAAQ5hC,GAAI9W,WACpE/L,GAIV,qBAAM8Y,CAAgBqsC,EAAsB1S,EAAwB6R,GAClEjmD,KAAKmK,OAAO3I,MAAM,uBAAwBslD,GAC1C,IACE,MAAMgF,QAA0B9rD,KAAKmrD,WAAW1wC,gBAAgBqsC,EAAW1S,EAAY6R,GAWvF,OAVAjmD,KAAKk9B,OAAOyE,KAAK,oBAAqB,CACpCmlB,UAAWgF,IAEb9rD,KAAKmK,OAAO3I,MAAM,sBAAuB,CACvCgjB,GAAIsiC,EAAUtiC,GACdxJ,aAAco5B,EAAW5vB,GACzB5M,WAAYkvC,EAAUlvC,WACtBZ,SAAU8vC,EAAU9vC,SACpBivC,WAEK6F,EACP,MAAOnqD,GASP,MARA3B,KAAKk9B,OAAOyE,KAAK,0BAA2B,CAAEmlB,YAAWnlD,UACzD3B,KAAKmK,OAAOxI,MAAM,+BAA+BA,IAAS,CACxD6iB,GAAIsiC,EAAUtiC,GACdxJ,aAAco5B,EAAW5vB,GACzB5M,WAAYkvC,EAAUlvC,WACtBZ,SAAU8vC,EAAU9vC,SACpBivC,WAEItkD,GAIV,qBAAM+Y,CAAgBosC,EAAsBp5C,GAC1C1N,KAAKmK,OAAO1I,KAAK,uBAAwB,CAAE+iB,GAAIsiC,EAAUtiC,GAAI9W,WAE7D,MAAM7N,EAAU,qFAGhB,OAFAG,KAAKmK,OAAOzI,KAAK7B,GACjBG,KAAKk9B,OAAOyE,KAAK,0BAA2B,CAAEmlB,YAAWnlD,MAAO,IAAIvB,EAAmBP,KAChFinD,EAeT,sBAAAiF,GACE,OAAO,IAAI5E,GAAiBnnD,KAAKirD,UAGnC,6BAAAe,CACEjR,EACA3G,EACA1xC,GAEA,OAAO,IAAIumD,GACTlO,EACA3G,EACAp0C,KACA0C,EACA1C,KAAKmK,OAAO5I,MAAM,mCCvTZ0qD,IAAZ,SAAYA,GACVA,EAAA,IAAA,MACAA,EAAA,YAAA,cACAA,EAAA,SAAA,WACAA,EAAA,MAAA,QACAA,EAAA,aAAA,eACAA,EAAA,WAAA,aAEAA,EAAA,QAAA,SACD,CATD,CAAYA,KAAAA,GASX,CAAA,UAiBYC,GAQX,WAAAtsD,CACkB4kB,EACAu2B,EACGoR,EAAkCF,GAAkBG,IACpDC,EAAmCJ,GAAkBK,QACrDC,GAJHvsD,KAAEwkB,GAAFA,EACAxkB,KAAS+6C,UAATA,EACG/6C,KAAYmsD,aAAZA,EACAnsD,KAAaqsD,cAAbA,EACArsD,KAAKusD,MAALA,EAGrB,YAAWv1C,GACT,OAAOhX,KAAK+6C,UAAU/jC,SAGjB,QAAA8lC,GACL,OAAO98C,KAAKmsD,aAGP,gBAAAK,GACL,OAAOxsD,KAAKqsD,qBC1BHI,GAUX,WAAA7sD,CAAY8sD,GACV1sD,KAAK4E,MAAQ8nD,EAAM9nD,MACnB5E,KAAKs9B,UAAYovB,EAAMpvB,UACvBt9B,KAAKuS,OAASm6C,EAAMn6C,OACpBvS,KAAK2sD,OAASD,EAAMC,OACpB3sD,KAAK4sD,OAASF,EAAME,OACpB5sD,KAAKH,QAAU6sD,EAAM7sD,QACrBG,KAAK6sD,gBAAkBH,EAAMG,gBAC7B7sD,KAAK6+B,KAAO6tB,EAAM7tB,KAMb,eAAAiuB,GACL,IAAK9sD,KAAK2sD,OACR,MAAM,IAAIvsD,EAAmB,uEAG/B,IACE,OAAOqD,KAAKN,MAAMnD,KAAK2sD,OAAOnmD,WAAWwd,QACzC,MAAO1U,GACP,MAAM,IAAIlP,EACR,4CAA4CJ,KAAK2sD,OAAOnmD,uBAAuB8I,OC1DvF,MAAM0gC,GACuC,EADvCA,GAE8B,SAMvB+c,GAIX,WAAAntD,CAAY8C,GACV1C,KAAKgtD,kCACHtqD,aAAA,EAAAA,EAASsqD,mCAAoChd,GAC/ChwC,KAAKitD,2CACHvqD,aAAA,EAAAA,EAASuqD,4CAA6Cjd,UCV/Ckd,GACX,WAAAttD,CAAoButD,EAAsB,IAAtBntD,KAAQmtD,SAARA,EAEpB,aAAO/vC,CAAO+vC,GACZ,OAAO,IAAID,GAAOC,GAGpB,GAAA58B,CAAI68B,GACFptD,KAAKmtD,SAAS7lD,KAAK8lD,GAGrB,YAAMC,SACE9tD,QAAQoR,IAAI3Q,KAAKmtD,SAASrmD,KAAKwmD,GAAQA,EAAID,YAGnD,WAAM/F,CAAMkB,GAEV,OAAOjpD,QAAQoR,IAAI3Q,KAAKmtD,SAASrmD,KAAI,CAACsmD,EAASlmD,IAAMkmD,EAAQ9F,MAAMkB,EAAQthD,OAG7E,mBAAAqmD,GACE,IAAKvtD,KAAKmtD,SAASvqD,OACjB,MAAM,IAAIxC,EAAmB,uCAE/B,MAAO,CAAEiS,KAAM5O,KAAKC,UAAU1D,KAAKmtD,SAASrmD,KAAKwmD,GAAQA,EAAIE,cC5BjE,MAAMC,GAAqB,IAAIhB,GAAO,CACpCl6C,OAAQ,QACR+qB,WAAW,IAAI/4B,MAAOy4B,cACtBp4B,OAAQ,EACR/E,QAAS,iCAME6tD,GAGX,WAAA9tD,CACU+tD,EACRxpD,GADQnE,KAAW2tD,YAAXA,EAGR3tD,KAAKmE,KAAOA,GAAQ,CAAE,EAMxB,MAAAqpD,GACE,MAAO,CACL,CAACxtD,KAAK2tD,aAAc3tD,KAAKmE,MAO7B,kBAAAypD,GACE,MAAO,CAAEv7C,KAAM5O,KAAKC,UAAU,CAAC1D,KAAKwtD,YAMtC,YAAMH,GAAM,CAaZ,WAAM/F,CAAM/0C,GACV,OAAOA,QAAAA,EAAUk7C,IA4Bf,MAAOI,WAAeH,GAC1B,WAAA9tD,CAAYuE,GACVpE,MAAM,SAAUoE,IAId,MAAO2pD,WAAcJ,GACzB,WAAA9tD,CAAYuE,GACVpE,MAAM,QAASoE,IAiBb,MAAO4pD,WAAYL,GACvB,WAAA9tD,CAAY0tD,EAAanpD,EAAwBP,EAAqBoqD,GAKpEjuD,MAAM,MAAO,CACXkuD,YAAaX,EACbnpD,OACAP,MACAoqD,QARiBA,GAAW,CAC5BrB,OAAQ,CAAEuB,MAAO,CAAEppD,OAAQ,WAC3B8nD,OAAQ,CAAEsB,MAAO,CAAEppD,OAAQ,eAiB3B,MAAOqpD,WAA8BT,GACzC,WAAA9tD,CACY4P,EACAub,EACV5mB,GAEApE,MAAM,WAAY,CAAEyP,OAAMub,KAAI5mB,SAJpBnE,KAAIwP,KAAJA,EACAxP,KAAE+qB,GAAFA,GAOR,MAAOqjC,WAAmBD,GAC9B,WAAAvuD,CACUyuD,EACArtC,EACAstC,GAERvuD,QAJQC,KAAequD,gBAAfA,EACAruD,KAAGghB,IAAHA,EACAhhB,KAAOsuD,QAAPA,EAGRtuD,KAAKmE,KAAS,GAAI,aAAamqD,IAGjC,YAAMjB,GACJrtD,KAAKmE,KAAW,WAAUnE,KAAKquD,gBAAgB5U,YAAYz5C,KAAKghB,KAGlE,WAAMsmC,CAAM/0C,GAEV,aADMvS,KAAKquD,gBAAgBppC,QAAQ,CAACjlB,KAAKmE,KAAW,OAC7CoO,GAIL,MAAOg8C,WAAmBJ,GAC9B,WAAAvuD,CACUyuD,EACArtC,EACAstC,GAERvuD,QAJQC,KAAequD,gBAAfA,EACAruD,KAAGghB,IAAHA,EACAhhB,KAAOsuD,QAAPA,EAGRtuD,KAAKmE,KAAS,GAAI,aAAamqD,IAGjC,YAAMjB,GACJrtD,KAAKmE,KAAW,WAAUnE,KAAKquD,gBAAgBG,YAAYxuD,KAAKghB,KAGlE,WAAMsmC,CAAM/0C,GAEV,aADMvS,KAAKquD,gBAAgBppC,QAAQ,CAACjlB,KAAKmE,KAAW,OAC7CoO,GAIL,MAAOk8C,WAAqBN,GAChC,WAAAvuD,CACUyuD,EACAK,EACAJ,GAERvuD,QAJQC,KAAequD,gBAAfA,EACAruD,KAAO0uD,QAAPA,EACA1uD,KAAOsuD,QAAPA,EAGRtuD,KAAKmE,KAAO,CAAEqL,KAAM,aAAak/C,KAGnC,YAAMrB,GACJrtD,KAAKmE,KAAS,SAAUnE,KAAKquD,gBAAgBM,YAAY3uD,KAAKsuD,SAGhE,WAAMhH,CAAM/0C,GAEV,aADMvS,KAAKquD,gBAAgBppC,QAAQ,CAACjlB,KAAKmE,KAAS,KAC3CoO,GAIL,MAAOq8C,WAAqBT,GAGhC,WAAAvuD,CACUyuD,EACAK,GAER3uD,QAHQC,KAAequD,gBAAfA,EACAruD,KAAO0uD,QAAPA,EAJF1uD,KAAM6uD,OAAiB,GAO7B7uD,KAAKmE,KAAO,CAAEqL,KAAM,aAAak/C,KAGnC,YAAMrB,GACJrtD,KAAKmE,KAAS,SAAUnE,KAAKquD,gBAAgBS,aAAajwB,IAExD7+B,KAAK6uD,OAAOvnD,KAAKu3B,EAAK,IAI1B,WAAMyoB,CAAM/0C,GAEV,aADMvS,KAAKquD,gBAAgBppC,QAAQ,CAACjlB,KAAKmE,KAAS,KAC5B,OAAlBoO,EAAOA,OACF,IAAIk6C,GAAmB,IACzBl6C,EACHssB,KAAM7+B,KAAK+uD,kBAIR,IAAItC,GAAmB,IACzBl6C,EACHA,OAAQ,QACRssB,UAAMztB,IAIF,aAAA29C,GACN,MAAMlwB,EAAO,IAAIngB,WAAW1e,KAAK6uD,OAAO39C,QAAO,CAACq3C,EAAKxnB,IAAUwnB,EAAMxnB,EAAMn+B,QAAQ,IACnF,IAAIsc,EAAS,EACb,IAAK,MAAM6hB,KAAS/gC,KAAK6uD,OACvBhwB,EAAK54B,IAAI86B,EAAO7hB,GAChBA,GAAU6hB,EAAMn+B,OAMlB,OAFA5C,KAAK6uD,OAAS,GAEPhwB,mzDCrPPmwB,maAEFA,GADuB,UAArBnuD,EAAQ4qD,UAAwBwD,EAAOC,gDCF3CC,GAAiBC,EACjBA,EAAMC,KAsCN,SAAep8C,EAAMvQ,GACnB,OAAO4sD,EAAUC,EAAGC,SAASv8C,GAAOA,EAAMvQ,EAC5C,EAtCA,IAAI6sD,EAAK5nD,GAuBT,SAAS2nD,EAAWG,EAAMx8C,EAAMvQ,GAC9B,SAAK+sD,EAAKC,mBAAqBD,EAAKE,WAtBtC,SAAuB18C,EAAMvQ,GAC3B,IAAIktD,OAA8Bx+C,IAApB1O,EAAQmtD,QACpBntD,EAAQmtD,QAAUhvD,EAAQ+C,IAAIksD,QAEhC,IAAKF,EACH,OAAO,EAIT,IAA6B,KAD7BA,EAAUA,EAAQxoD,MAAM,MACZ6nB,QAAQ,IAClB,OAAO,EAET,IAAK,IAAI/nB,EAAI,EAAGA,EAAI0oD,EAAQhtD,OAAQsE,IAAK,CACvC,IAAIoiB,EAAIsmC,EAAQ1oD,GAAGhE,cACnB,GAAIomB,GAAKrW,EAAK88C,QAAQzmC,EAAE1mB,QAAQM,gBAAkBomB,EAChD,OAAO,CAEb,CACE,OAAO,CACT,CAMS0mC,CAAa/8C,EAAMvQ,EAC5B,CAEA,SAAS0sD,EAAOn8C,EAAMvQ,EAASmvB,GAC7B09B,EAAGE,KAAKx8C,GAAM,SAAUiV,EAAIunC,GAC1B59B,EAAG3J,GAAIA,GAAaonC,EAAUG,EAAMx8C,EAAMvQ,GAC3C,GACH,WDlCSsM,mCEHTihD,GAAiBb,EACjBA,EAAMC,KAUN,SAAep8C,EAAMvQ,GACnB,OAAO4sD,EAAUC,EAAGC,SAASv8C,GAAOvQ,EACtC,EAVA,IAAI6sD,EAAK5nD,GAET,SAASynD,EAAOn8C,EAAMvQ,EAASmvB,GAC7B09B,EAAGE,KAAKx8C,GAAM,SAAUiV,EAAIunC,GAC1B59B,EAAG3J,GAAIA,GAAaonC,EAAUG,EAAM/sD,GACrC,GACH,CAMA,SAAS4sD,EAAWG,EAAM/sD,GACxB,OAAO+sD,EAAKE,UAGd,SAAoBF,EAAM/sD,GACxB,IAAImb,EAAM4xC,EAAKQ,KACXC,EAAMT,EAAKS,IACXC,EAAMV,EAAKU,IAEXC,OAAwBh/C,IAAhB1O,EAAQwtD,IAClBxtD,EAAQwtD,IAAMrvD,EAAQwvD,QAAUxvD,EAAQwvD,SACtCC,OAAwBl/C,IAAhB1O,EAAQytD,IAClBztD,EAAQytD,IAAMtvD,EAAQ0vD,QAAU1vD,EAAQ0vD,SAEtCC,EAAIjnD,SAAS,MAAO,GACpB0jB,EAAI1jB,SAAS,MAAO,GASxB,OALWsU,EAHHtU,SAAS,MAAO,IAIrBsU,EAAMoP,GAAMkjC,IAAQG,GACpBzyC,EAAM2yC,GAAMN,IAAQE,GACpBvyC,GALM2yC,EAAIvjC,IAKa,IAAVmjC,CAGlB,CAxB0BK,CAAUhB,EAAM/sD,EAC1C,WFZSoU,GAGT,IAAA45C,GAAiBtB,GAGjB,SAASA,GAAOn8C,EAAMvQ,EAASmvB,GAM7B,GALuB,mBAAZnvB,IACTmvB,EAAKnvB,EACLA,EAAU,CAAA,IAGPmvB,EAAI,CACP,GAAuB,mBAAZtyB,QACT,MAAM,IAAIuN,UAAU,yBAGtB,OAAO,IAAIvN,SAAQ,SAAUC,EAAS+N,GACpC6hD,GAAMn8C,EAAMvQ,GAAW,CAAE,GAAE,SAAUwlB,EAAIyoC,GACnCzoC,EACF3a,EAAO2a,GAEP1oB,EAAQmxD,EAEX,GACF,GACL,CAEE3B,GAAK/7C,EAAMvQ,GAAW,CAAE,GAAE,SAAUwlB,EAAIyoC,GAElCzoC,IACc,WAAZA,EAAG1nB,MAAqBkC,GAAWA,EAAQkuD,gBAC7C1oC,EAAK,KACLyoC,GAAK,GAGT9+B,EAAG3J,EAAIyoC,EACR,GACH,CAlCAvB,GAAMC,KAoCN,SAAep8C,EAAMvQ,GAEnB,IACE,OAAOssD,GAAKK,KAAKp8C,EAAMvQ,GAAW,CAAE,EACrC,CAAC,MAAOwlB,GACP,GAAIxlB,GAAWA,EAAQkuD,cAA4B,WAAZ1oC,EAAG1nB,KACxC,OAAO,EAEP,MAAM0nB,CAEZ,CACA,EGxDA,MAAM2oC,GAAiC,UAArBhwD,EAAQ4qD,UACC,WAAvB5qD,EAAQ+C,IAAIktD,QACW,SAAvBjwD,EAAQ+C,IAAIktD,OAEV79C,GAAOtL,GACPopD,GAAQF,GAAY,IAAM,IAC1BzB,GAAQpgD,GAERgiD,GAAoB1D,GACxB3nD,OAAOytC,OAAO,IAAIzzC,MAAM,cAAc2tD,KAAQ,CAAE9sD,KAAM,WAElDywD,GAAc,CAAC3D,EAAK4D,KACxB,MAAMC,EAAQD,EAAIC,OAASJ,GAIrBK,EAAU9D,EAAIvqD,MAAM,OAAS8tD,IAAavD,EAAIvqD,MAAM,MAAQ,CAAC,IACrE,IAGY8tD,GAAY,CAAChwD,EAAQwwD,OAAS,OAC9BH,EAAIj+C,MAAQpS,EAAQ+C,IAAI0tD,MACe,IAAIlqD,MAAM+pD,IAGrDI,EAAaV,GACfK,EAAIrB,SAAWhvD,EAAQ+C,IAAIksD,SAAW,sBACtC,GACED,EAAUgB,GAAYU,EAAWnqD,MAAM+pD,GAAS,CAAC,IAOvD,OALIN,KACwB,IAAtBvD,EAAIr+B,QAAQ,MAA8B,KAAf4gC,EAAQ,IACrCA,EAAQlrD,QAAQ,IAGb,CACLysD,UACAvB,UACA0B,aACJ,EAGMC,GAAQ,CAAClE,EAAK4D,EAAKr/B,KACJ,mBAARq/B,IACTr/B,EAAKq/B,EACLA,EAAM,CAAA,GAEHA,IACHA,EAAM,CAAA,GAER,MAAME,QAAEA,EAAOvB,QAAEA,EAAO0B,WAAEA,GAAeN,GAAY3D,EAAK4D,GACpDO,EAAQ,GAERhlC,EAAOvlB,GAAK,IAAI3H,SAAQ,CAACC,EAAS+N,KACtC,GAAIrG,IAAMkqD,EAAQxuD,OAChB,OAAOsuD,EAAIvgD,KAAO8gD,EAAM7uD,OAASpD,EAAQiyD,GACrClkD,EAAOyjD,GAAiB1D,IAE9B,MAAMoE,EAAQN,EAAQlqD,GAChByqD,EAAW,SAASlqD,KAAKiqD,GAASA,EAAMlqD,MAAM,GAAI,GAAKkqD,EAEvDE,EAAO3+C,GAAKjM,KAAK2qD,EAAUrE,GAC3BhkC,GAAKqoC,GAAY,YAAYlqD,KAAK6lD,GAAOA,EAAI9lD,MAAM,EAAG,GAAKoqD,EAC7DA,EAEJpyD,EAAQqyD,EAAQvoC,EAAGpiB,EAAG,GAAE,IAGpB2qD,EAAU,CAACvoC,EAAGpiB,EAAGiyB,IAAO,IAAI55B,SAAQ,CAACC,EAAS+N,KAClD,GAAI4rB,IAAO02B,EAAQjtD,OACjB,OAAOpD,EAAQitB,EAAKvlB,EAAI,IAC1B,MAAM4qD,EAAMjC,EAAQ12B,GACpBi2B,GAAM9lC,EAAIwoC,EAAK,CAAEjC,QAAS0B,IAAc,CAACrpC,EAAIyoC,KAC3C,IAAKzoC,GAAMyoC,EAAI,CACb,IAAIO,EAAIvgD,IAGN,OAAOnR,EAAQ8pB,EAAIwoC,GAFnBL,EAAMnqD,KAAKgiB,EAAIwoC,EAGzB,CACM,OAAOtyD,EAAQqyD,EAAQvoC,EAAGpiB,EAAGiyB,EAAK,GAAE,GACrC,IAGH,OAAOtH,EAAKpF,EAAK,GAAG3e,MAAK+xB,GAAOhO,EAAG,KAAMgO,IAAMhO,GAAMpF,EAAK,EAAC,EAwC7D,IAAAslC,GAAiBP,GACjBA,GAAMnC,KAtCY,CAAC/B,EAAK4D,KACtBA,EAAMA,GAAO,CAAA,EAEb,MAAME,QAAEA,EAAOvB,QAAEA,EAAO0B,WAAEA,GAAeN,GAAY3D,EAAK4D,GACpDO,EAAQ,GAEd,IAAK,IAAIvqD,EAAI,EAAGA,EAAIkqD,EAAQxuD,OAAQsE,IAAM,CACxC,MAAMwqD,EAAQN,EAAQlqD,GAChByqD,EAAW,SAASlqD,KAAKiqD,GAASA,EAAMlqD,MAAM,GAAI,GAAKkqD,EAEvDE,EAAO3+C,GAAKjM,KAAK2qD,EAAUrE,GAC3BhkC,GAAKqoC,GAAY,YAAYlqD,KAAK6lD,GAAOA,EAAI9lD,MAAM,EAAG,GAAKoqD,EAC7DA,EAEJ,IAAK,IAAIjoD,EAAI,EAAGA,EAAIkmD,EAAQjtD,OAAQ+G,IAAM,CACxC,MAAMqoD,EAAM1oC,EAAIumC,EAAQlmD,GACxB,IAEE,GADWylD,GAAMC,KAAK2C,EAAK,CAAEnC,QAAS0B,IAC9B,CACN,IAAIL,EAAIvgD,IAGN,OAAOqhD,EAFPP,EAAMnqD,KAAK0qD,EAGvB,CACO,CAAC,MAAOC,GAAI,CACnB,CACA,CAEE,GAAIf,EAAIvgD,KAAO8gD,EAAM7uD,OACnB,OAAO6uD,EAET,GAAIP,EAAIgB,QACN,OAAO,KAET,MAAMlB,GAAiB1D,EAAG,sBCtH5B,MAAM6E,GAAU,CAACzvD,EAAU,MAC1B,MAAM0vD,EAAc1vD,EAAQkB,KAAO/C,EAAQ+C,IAG3C,MAAiB,WAFAlB,EAAQ+oD,UAAY5qD,EAAQ4qD,UAGrC,OAGD9lD,OAAOkC,KAAKuqD,GAAapT,UAAUqT,MAAKtqD,GAA6B,SAAtBA,EAAIuqD,iBAA6B,MAAM,EAG9FC,GAAAnqD,QAAiB+pD,GAEjBI,GAAAnqD,QAAA1B,QAAyByrD,qBCbzB,MAAMl/C,GAAOtL,GACP6pD,GAAQxiD,GACRwjD,GAAa17C,GAEnB,SAAS27C,GAAsBC,EAAQC,GACnC,MAAM/uD,EAAM8uD,EAAOhwD,QAAQkB,KAAO/C,EAAQ+C,IACpCytD,EAAMxwD,EAAQwwD,MACduB,EAAqC,MAAtBF,EAAOhwD,QAAQ2uD,IAE9BwB,EAAkBD,QAAkCxhD,IAAlBvQ,EAAQiyD,QAAwBjyD,EAAQiyD,MAAMC,SAItF,GAAIF,EACA,IACIhyD,EAAQiyD,MAAMJ,EAAOhwD,QAAQ2uD,IAChC,CAAC,MAAO/hD,GAEjB,CAGI,IAAI6/B,EAEJ,IACIA,EAAWqiB,GAAMnC,KAAKqD,EAAOtF,QAAS,CAClCn6C,KAAMrP,EAAI4uD,GAAW,CAAE5uD,SACvBisD,QAAS8C,EAAiB1/C,GAAK7M,eAAYgL,GAElD,CAAC,MAAOyB,GAEb,CAAc,QACFggD,GACAhyD,EAAQiyD,MAAMzB,EAE1B,CAQI,OAJIliB,IACAA,EAAWl8B,GAAKzT,QAAQozD,EAAeF,EAAOhwD,QAAQ2uD,IAAM,GAAIliB,IAG7DA,CACX,CAMA,IAAA6jB,GAJA,SAAwBN,GACpB,OAAOD,GAAsBC,IAAWD,GAAsBC,GAAQ,EAC1E,QC9CA,MAAMO,GAAkB,2BA0CxBC,GAAA9F,QAxCA,SAAuB+F,GAInB,OAFAA,EAAMA,EAAItuD,QAAQouD,GAAiB,MAGvC,EAoCAC,GAAAE,SAlCA,SAAwBD,EAAKE,GA8BzB,OAPAF,GAHAA,EAAM,IALNA,GALAA,GARAA,EAAM,GAAGA,KAQCtuD,QAAQ,kBAAmB,YAK3BA,QAAQ,iBAAkB,YAQ1BA,QAAQouD,GAAiB,OAG/BI,IACAF,EAAMA,EAAItuD,QAAQouD,GAAiB,QAGhCE,CACX,EC1CA,MAAMG,GCAW,UCCjB,MAAM/D,GAAK5nD,GACL4rD,GFAW,CAACC,EAAS,MAC1B,MAAMzwD,EAAQywD,EAAOzwD,MAAMuwD,IAE3B,IAAKvwD,EACJ,OAAO,KAGR,MAAOkQ,EAAMmgD,GAAYrwD,EAAM,GAAG8B,QAAQ,OAAQ,IAAIuC,MAAM,KACtDqsD,EAASxgD,EAAK7L,MAAM,KAAKuhB,MAE/B,MAAe,QAAX8qC,EACIL,EAGDA,EAAW,GAAGK,KAAUL,IAAaK,CAAM,EGfnD,MAAMxgD,GAAOtL,GACP+rD,GAAiB1kD,GACjB2kD,GAAS78C,GACT88C,GDAN,SAAqBxG,GAEjB,MACM7zB,EAAShqB,GAAOyxB,MADT,KAGb,IAAI6yB,EAEJ,IACIA,EAAKtE,GAAGuE,SAAS1G,EAAS,KAC1BmC,GAAGwE,SAASF,EAAIt6B,EAAQ,EAPf,IAOwB,GACjCg2B,GAAGyE,UAAUH,EAChB,CAAC,MAAOhhD,GAAG,CAGZ,OAAO0gD,GAAeh6B,EAAO/yB,WACjC,ECbMytD,GAA6B,UAArBpzD,EAAQ4qD,SAChByI,GAAqB,kBACrBC,GAAkB,2CAiBxB,SAASC,GAAc1B,GACnB,IAAKuB,GACD,OAAOvB,EAIX,MAAM2B,EArBV,SAAuB3B,GACnBA,EAAO4B,KAAOZ,GAAehB,GAE7B,MAAM6B,EAAU7B,EAAO4B,MAAQV,GAAYlB,EAAO4B,MAElD,OAAIC,GACA7B,EAAOvuD,KAAKQ,QAAQ+tD,EAAO4B,MAC3B5B,EAAOtF,QAAUmH,EAEVb,GAAehB,IAGnBA,EAAO4B,IAClB,CAQwBE,CAAc9B,GAG5B+B,GAAcP,GAAmBzsD,KAAK4sD,GAI5C,GAAI3B,EAAOhwD,QAAQgyD,YAAcD,EAAY,CAKzC,MAAME,EAA6BR,GAAgB1sD,KAAK4sD,GAIxD3B,EAAOtF,QAAUn6C,GAAK2hD,UAAUlC,EAAOtF,SAGvCsF,EAAOtF,QAAUuG,GAAOvG,QAAQsF,EAAOtF,SACvCsF,EAAOvuD,KAAOuuD,EAAOvuD,KAAK2C,KAAKqsD,GAAQQ,GAAOP,SAASD,EAAKwB,KAE5D,MAAME,EAAe,CAACnC,EAAOtF,SAASx/B,OAAO8kC,EAAOvuD,MAAM6C,KAAK,KAE/D0rD,EAAOvuD,KAAO,CAAC,KAAM,KAAM,KAAM,IAAI0wD,MACrCnC,EAAOtF,QAAUvsD,EAAQ+C,IAAIkxD,SAAW,UACxCpC,EAAOhwD,QAAQqyD,0BAA2B,CAClD,CAEI,OAAOrC,CACX,CA4BA,IAAApnC,GA1BA,SAAe8hC,EAASjpD,EAAMzB,GAEtByB,IAASwL,MAAMC,QAAQzL,KACvBzB,EAAUyB,EACVA,EAAO,MAOX,MAAMuuD,EAAS,CACXtF,UACAjpD,KANJA,EAAOA,EAAOA,EAAKqD,MAAM,GAAK,GAO1B9E,QANJA,EAAUiD,OAAOytC,OAAO,CAAE,EAAE1wC,GAOxB4xD,UAAMljD,EACN4jD,SAAU,CACN5H,UACAjpD,SAKR,OAAOzB,EAAQuyD,MAAQvC,EAAS0B,GAAc1B,EAClD,ECtFA,MAAMuB,GAA6B,UAArBpzD,EAAQ4qD,SAEtB,SAASyJ,GAAcF,EAAUG,GAC7B,OAAOxvD,OAAOytC,OAAO,IAAIzzC,MAAM,GAAGw1D,KAAWH,EAAS5H,kBAAmB,CACrE5sD,KAAM,SACN40D,MAAO,SACPD,QAAS,GAAGA,KAAWH,EAAS5H,UAChCn6C,KAAM+hD,EAAS5H,QACfiI,UAAWL,EAAS7wD,MAE5B,CAyBA,SAASmxD,GAAavpD,EAAQ2mD,GAC1B,OAAIuB,IAAoB,IAAXloD,IAAiB2mD,EAAO4B,KAC1BY,GAAcxC,EAAOsC,SAAU,SAGnC,IACX,CAUA,IAAAO,GAAiB,CACbC,iBAxCJ,SAA0BC,EAAI/C,GAC1B,IAAKuB,GACD,OAGJ,MAAMyB,EAAeD,EAAG9zB,KAExB8zB,EAAG9zB,KAAO,SAAUzgC,EAAMy0D,GAItB,GAAa,SAATz0D,EAAiB,CACjB,MAAMoO,EAAMgmD,GAAaK,EAAMjD,GAE/B,GAAIpjD,EACA,OAAOomD,EAAazwD,KAAKwwD,EAAI,QAASnmD,EAEtD,CAEQ,OAAOomD,EAAarwD,MAAMowD,EAAI/nC,UACjC,CACL,EAoBI4nC,gBACAM,iBAXJ,SAA0B7pD,EAAQ2mD,GAC9B,OAAIuB,IAAoB,IAAXloD,IAAiB2mD,EAAO4B,KAC1BY,GAAcxC,EAAOsC,SAAU,aAGnC,IACX,EAMIE,kBCvDJ,MAAMO,GAAK9tD,GACLxE,GAAQ6L,GACRumD,GAASz+C,GAEf,SAAS++C,GAAMzI,EAASjpD,EAAMzB,GAE1B,MAAMgwD,EAASvvD,GAAMiqD,EAASjpD,EAAMzB,GAG9BozD,EAAUL,GAAGI,MAAMnD,EAAOtF,QAASsF,EAAOvuD,KAAMuuD,EAAOhwD,SAM7D,OAFA6yD,GAAOC,iBAAiBM,EAASpD,GAE1BoD,CACX,CAeAC,GAAA3tD,QAAiBytD,GACjBE,GAAA3tD,QAAAytD,MAAuBA,GACvBE,GAAA3tD,QAAAinD,KAfA,SAAmBjC,EAASjpD,EAAMzB,GAE9B,MAAMgwD,EAASvvD,GAAMiqD,EAASjpD,EAAMzB,GAG9B6P,EAASkjD,GAAGO,UAAUtD,EAAOtF,QAASsF,EAAOvuD,KAAMuuD,EAAOhwD,SAKhE,OAFA6P,EAAO5Q,MAAQ4Q,EAAO5Q,OAAS4zD,GAAOK,iBAAiBrjD,EAAOxG,OAAQ2mD,GAE/DngD,CACX,EAMAwjD,GAAA3tD,QAAA6tD,OAAwB9yD,GACxB4yD,GAAA3tD,QAAA8tD,QAAyBX,8BCvBZY,GAmBX,WAAAv2D,CAAYuK,GACV,GAZMnK,KAAAo2D,cAAgB,IAAI7oB,IAEpBvtC,KAAaq2D,eAAG,EAOhBr2D,KAAAmwC,KAAO,IAAIjC,GAGbztC,EACF,MAAM,IAAIR,EAAe,uEAE3BD,KAAKmK,OAASA,GAAUP,EAAc,WAGxC,UAAMzD,GACAnG,KAAKq2D,cACPr2D,KAAKmK,OAAOzI,KAAK,qGAIb1B,KAAKs2D,kBAEXt2D,KAAKmK,OAAO1I,KAAK,uBAAuBzB,KAAKu2D,QAAQ,eAG/C,eAAAD,GACN,OAAO,IAAI/2D,SAAQ,CAACC,EAAS+N,qBAC3BvN,KAAKmK,OAAO3I,MAAM,wBAElBxB,KAAKw2D,kBAAoBX,GAAM,OAAQ,CAAC,WAExC71D,KAAKw2D,kBAAkB/1B,GAAG,SAAS,KACjCzgC,KAAKmK,OAAO1I,KAAK,uBACjBzB,KAAKq2D,eAAgB,EACrB72D,GAAS,IAGXQ,KAAKw2D,kBAAkB/1B,GAAG,SAAU9+B,IAClC3B,KAAKmK,OAAOxI,MAAM,mCAAoCA,GACtD4L,EAAO5L,EAAM,IAGf3B,KAAKw2D,kBAAkB/1B,GAAG,SAAS,CAACjgC,EAAMmR,KACxC3R,KAAKmK,OAAO1I,KAAK,qBAAsB,CAAEjB,OAAMmR,WAC/C3R,KAAKq2D,eAAgB,CAAK,IAGE,QAA9B1mC,EAAsB,QAAtB/kB,EAAA5K,KAAKw2D,yBAAiB,IAAA5rD,OAAA,EAAAA,EAAE+hD,cAAM,IAAAh9B,GAAAA,EAAE8mC,YAAY,SACd,QAA9B5gB,EAAsB,QAAtBrgB,EAAAx1B,KAAKw2D,yBAAiB,IAAAhhC,OAAA,EAAAA,EAAEo3B,cAAM,IAAA/W,GAAAA,EAAE4gB,YAAY,SAE5Cz2D,KAAKy2B,OAAyC,QAAhCqf,EAAwB,QAAxBC,EAAA/1C,KAAKw2D,yBAAmB,IAAAzgB,OAAA,EAAAA,EAAA4W,cAAQ,IAAA7W,OAAA,EAAAA,EAAA1oB,UAAU,IAIpD,0BAAMspC,GACZ,MAAM33C,WAAEA,SAAqBxf,QAAgBC,UAAAsO,MAAA,WAAA,OAAA6oD,EAAA,IACvCC,QAAYr3D,QAAaC,UAAAsO,MAAA,WAAA,OAAA+oD,EAAA,IACzBC,EAAW7jD,GAAKjM,KAAK4vD,EAAIG,UAAU71D,KAAM6d,IAAavY,YAE5D,OADI+oD,GAAGyH,WAAWF,IAAWvH,GAAG0H,WAAWH,GACpCA,EAGT,iBAAMnI,CAAY17C,GAChB,MAAMnH,IAAEA,SAAc9L,KAAKu2D,QAAQ,UAAW,CAAEW,YAAajkD,IAC7D,OAAOnH,EAGT,WAAAgjD,GACE,MAAM,IAAI7uD,EAAe,yDAG3B,iBAAMw5C,CAAYz4B,GAChB,MAAMlV,QAAY9L,KAAKm3D,WAAWn2C,GAElC,OADAhhB,KAAKo2D,cAAc7lC,IAAIzkB,GAChBA,EAGT,iBAAM0iD,CAAYxtC,GAChB,IAAIlV,EAUJ,OAPEA,EADEyD,OAAO6nD,SAASp2C,SACNhhB,KAAKq3D,YAAYr2C,SAEjBhhB,KAAKq3D,YAAY9nD,OAAOC,KAAKwR,IAG3ChhB,KAAKo2D,cAAc7lC,IAAIzkB,GAEhBA,EAGT,OAAAmZ,GAGE,OAAO1lB,QAAQC,aAAQ4R,GAGjB,gBAAMk7B,GACZ,MAAMgrB,EAAO3nD,MAAMH,KAAKxP,KAAKo2D,eAAelmD,QAAQpE,KAAUA,IAE1DwrD,EAAK10D,cACD5C,KAAKu2D,QAAQ,QAAS,CAAEe,SAIlC,WAAMh3B,SACAtgC,KAAKq2D,sBACDr2D,KAAKssC,aACa,QAAxB1hC,EAAA5K,KAAKw2D,yBAAmB,IAAA5rD,GAAAA,EAAA2sD,QAIpB,aAAMhB,CAAQ7kD,EAAgBjC,EAAqD,IACzF,OAAOzP,KAAKmwC,KAAK1C,QAAQ,WAAWr9B,sBAClC,IAAKpQ,KAAKq2D,cACR,MAAM,IAAIj2D,EACR,kDAAkDsR,UAAejO,KAAKC,UAAU+L,MAIpF,MAEM7D,EAAU,CACd4rD,QAAS,MACThzC,GAJaxF,KAKbtN,OAAQA,EACRjC,OAAQA,GAGJ6D,EAAQ,GAAG7P,KAAKC,UAAUkI,OAEhC5L,KAAKmK,OAAO3I,MAAM,uBAAwB,CAAEoK,YACf,QAA7B+jB,EAAsB,QAAtB/kB,EAAA5K,KAAKw2D,yBAAiB,IAAA5rD,OAAA,EAAAA,EAAE6sD,aAAK,IAAA9nC,GAAAA,EAAE+nC,MAAMpkD,GAErC,MAAM/H,EAAmC,QAA3BsqC,gBAAOrgB,EAAAx1B,KAAKy2B,6BAAQ5W,eAAO,IAAAg2B,OAAA,EAAAA,EAAEtqC,MAC3C,IAAKA,EACH,MAAM,IAAInL,EAAmB,qCAG/B,MAAMmS,OAAEA,GAAW9O,KAAKN,MAAMoI,GAC9B,QAAe6F,IAAXmB,EACF,MAAM,IAAInS,EAAmBmL,GAG/B,OAAOgH,CAAM,IAIT,kBAAMolD,CAAa1oD,SAEzB,MAAM6nD,QAAiB92D,KAAK02D,uBACtBkB,EAAUrI,GAAGsI,kBAAkBf,EAAU,CAC7CgB,SAAU,iBAGN,IAAIv4D,SAAQ6Q,MAAO+d,IACvBypC,EAAQ5sB,KAAK,SAAU7c,GACvB,UAAW,MAAM4S,KAAS9xB,EACxB2oD,EAAQF,MAAM32B,GAEhB62B,EAAQn2B,KAAK,IAEf,MAAMs2B,QAAc/3D,KAAKu2D,QAAQ,UAAW,CAAEyB,MAAO,CAAClB,EAAStwD,cAC/D,GAAqB,IAAjBuxD,EAAMn1D,OAAc,KAAM,gCAC9B,OAAe,UAARm1D,EAAM,UAAE,IAAAntD,OAAA,EAAAA,EAAEkB,IAGX,iBAAMurD,CAAYx4B,GACxB,aAAa7+B,KAAK23D,aAChB,wBACQ94B,CACP,CAFD,IAMI,gBAAMs4B,CAAW7C,SAEvB,OAAe,iBADKt0D,KAAKu2D,QAAQ,UAAW,CAAEyB,MAAO,CAAC1D,EAAK9tD,eAC9C,UAAE,IAAAoE,OAAA,EAAAA,EAAEkB,IAGnB,OAAAgiC,GACE,OAAO9tC,KAAKq2D,qBCnMH4B,GACX,KAAA33B,GACE,OAAO/gC,QAAQC,aAAQ4R,GAGzB,IAAAjL,GACE,OAAO5G,QAAQC,aAAQ4R,GAIzB,WAAAo9C,CAAYxtC,GACV,OAAOzhB,QAAQgO,OAAO,IAAInN,EAAmB,qDAI/C,WAAAq5C,CAAYz4B,GACV,OAAOzhB,QAAQgO,OAAO,IAAInN,EAAmB,sDAI/C,WAAAuuD,CAAY17C,GACV,OAAO1T,QAAQgO,OAAO,IAAInN,EAAmB,wDAI/C,WAAA0uD,CAAYj0B,GACV,OAAOt7B,QAAQgO,OAAO,IAAInN,EAAmB,uDAI/C,OAAA6kB,CAAQqyC,GACN,OAAO/3D,QAAQC,aAAQ4R,GAGzB,OAAA08B,GACE,OAAO,OC7CPoqB,qBAFJvyD,OAAOC,eAAeuyD,GAAS,aAAc,CAAE5sD,OAAO,IACtC4sD,GAAAD,cAAG,EAEnB,SAAWA,GACPA,EAASA,EAAiB,OAAI,GAAK,SACnCA,EAASA,EAAkB,QAAI,GAAK,UACpCA,EAASA,EAAkB,QAAI,GAAK,UACpCA,EAASA,EAAkB,QAAI,GAAK,SACvC,CALD,CAKGA,KAAaC,GAAAD,SAAmBA,GAAW,CAAE,cCRhDvyD,OAAOC,eAAewyD,GAAS,aAAc,CAAE7sD,OAAO,IACtD6sD,GAAAC,YAAsBD,GAAAE,cAAwBF,GAAAG,OAAiBH,GAAAI,OAAiBJ,GAAAK,OAAiBL,GAAAM,iBAAsB,EACvH,MAAMC,GAAiBhxD,GAIvBywD,GAAAM,YAHA,SAAqBP,GACjB,OAAO,GAAKA,CAChB,EAWAC,GAAAK,OATA,SAAgBltD,GACZ,OAAIA,IAAU,KAAOA,GAAS,IACnBotD,GAAeT,SAASU,OAC/BrtD,IAAU,OAASA,GAAS,MACrBotD,GAAeT,SAASW,QAC/BttD,IAAU,YAAcA,GAAS,WAC1BotD,GAAeT,SAASY,QAC5BH,GAAeT,SAASa,OACnC,EAKAX,GAAAI,OAHA,SAAgBjtD,GACZ,OAAOA,IAAUhJ,KAAKy2D,OAAOztD,GAASotD,GAAeT,SAASY,QAAUH,GAAeT,SAASa,OACpG,EAWAX,GAAAG,OATA,SAAgBhtD,GACZ,OAAIA,GAAS,IACFotD,GAAeT,SAASU,OAC/BrtD,GAAS,MACFotD,GAAeT,SAASW,QAC/BttD,GAAS,WACFotD,GAAeT,SAASY,QAC5BH,GAAeT,SAASa,OACnC,EAWAX,GAAAE,cATA,SAAuB/sD,GACnB,OAAc,IAAVA,EACOotD,GAAeT,SAASU,OACrB,IAAVrtD,EACOotD,GAAeT,SAASW,QACrB,IAAVttD,EACOotD,GAAeT,SAASY,QAC5BH,GAAeT,SAASa,OACnC,EAKAX,GAAAC,YAHA,SAAqBY,EAASC,GAC1B,OAAmB,GAAVD,EAAgBC,EAAa,CAC1C,YC3CAvzD,OAAOC,eAAeuzD,GAAS,aAAc,CAAE5tD,OAAO,IACtD4tD,GAAAC,YAAsBD,GAAAE,mBAAwB,EAK9CF,GAAAE,cAJA,SAAuBx6B,GAEnB,OADgB,IAAIy6B,aACLC,OAAO16B,EAC1B,EAMAs6B,GAAAC,YAJA,SAAqBv2D,GAEjB,OADgB,IAAI22D,aACLC,OAAO52D,EAC1B,MCRI62D,SAFJ/zD,OAAOC,eAAe+zD,GAAS,aAAc,CAAEpuD,OAAO,IACrCouD,GAAAD,eAAG,EAEpB,SAAWA,GACPA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAiB,MAAI,GAAK,QACpCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAkB,OAAI,GAAK,SACrCA,EAAUA,EAAwB,aAAI,GAAK,eAC3CA,EAAUA,EAAyB,cAAI,GAAK,gBAC5CA,EAAUA,EAA0B,eAAI,GAAK,iBAC7CA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAkB,OAAI,IAAM,SACtCA,EAAUA,EAAsB,WAAI,IAAM,aAC1CA,EAAUA,EAAuB,YAAI,IAAM,cAC3CA,EAAUA,EAAwB,aAAI,IAAM,eAC5CA,EAAUA,EAAsB,WAAI,IAAM,aAC1CA,EAAUA,EAAoC,yBAAI,IAAM,2BACxDA,EAAUA,EAAuB,YAAI,IAAM,cAC3CA,EAAUA,EAAwB,aAAI,IAAM,eAC5CA,EAAUA,EAAyB,cAAI,IAAM,gBAC7CA,EAAUA,EAAuB,YAAI,IAAM,cAC3CA,EAAUA,EAAwB,aAAI,IAAM,eAC5CA,EAAUA,EAAyB,cAAI,IAAM,gBAC7CA,EAAUA,EAAuB,YAAI,IAAM,cAC3CA,EAAUA,EAAwB,aAAI,IAAM,eAC5CA,EAAUA,EAAyB,cAAI,IAAM,gBAC7CA,EAAUA,EAAgB,KAAI,IAAM,OACpCA,EAAUA,EAAgB,KAAI,IAAM,OACpCA,EAAUA,EAAuB,YAAI,IAAM,aAC9C,CA7BD,CA6BGA,KAAcC,GAAAD,UAAoBA,GAAY,CAAE,cChCnD/zD,OAAOC,eAAeg0D,GAAS,aAAc,CAAEruD,OAAO,IACpCquD,GAAAC,WAAsCD,GAAAE,4BAAsCF,GAAAG,sDAAoCH,GAAAI,cAAwBJ,GAAAK,UAAoBL,GAAAM,mBAAkDN,GAAAO,cAA+BP,GAAAQ,qBAA2BR,GAAAS,6BAAsBT,GAAAU,cAAmB,EACnU,MAAMC,GAAkB5yD,GAsBxB,SAASwyD,GAAc5uD,GACnB,OAAOA,IAAUgvD,GAAgBb,UAAUc,aACnCjvD,GAASgvD,GAAgBb,UAAUe,YAChClvD,GAASgvD,GAAgBb,UAAUgB,wBAClD,CAEA,SAASR,GAAmB3uD,GACxB,OAAOA,GAASgvD,GAAgBb,UAAUiB,aACnCpvD,GAASgvD,GAAgBb,UAAUkB,aAC9C,CA1BAhB,GAAAU,SAJA,SAAkB/uD,GACd,OAAOA,IAAUgvD,GAAgBb,UAAUmB,MACpCtvD,GAASgvD,GAAgBb,UAAUoB,KAC9C,EAMAlB,GAAAmB,SAJA,SAAkBxvD,GACd,OAAOA,GAASgvD,GAAgBb,UAAUsB,KACnCzvD,GAASgvD,GAAgBb,UAAUoB,KAC9C,EAMAlB,GAAAS,iBAJA,SAA0B9uD,GACtB,OAAOA,GAASgvD,GAAgBb,UAAUuB,cACnC1vD,GAASgvD,GAAgBb,UAAUwB,cAC9C,EAOAtB,GAAAQ,qBALA,SAA8B7uD,GAC1B,OAAOA,IAAUgvD,GAAgBb,UAAUmB,MACnCtvD,GAASgvD,GAAgBb,UAAUsB,KAChCzvD,GAASgvD,GAAgBb,UAAUyB,MAClD,EAOAvB,GAAAO,cAAwBA,GAKxBP,GAAAM,mBAA6BA,GAM7BN,GAAAK,UALA,SAAmB1uD,GACf,OAAO4uD,GAAc5uD,IACd2uD,GAAmB3uD,IACnBA,IAAUgvD,GAAgBb,UAAU0B,MAC/C,EAaAxB,GAAAI,cAXA,SAAuBL,EAAW/2D,GAC9B,GAAe,IAAXA,EACA,OAAO+2D,EAAYY,GAAgBb,UAAUsB,IAAMT,GAAgBb,UAAUe,WACjF,GAAe,IAAX73D,EACA,OAAO+2D,EAAYY,GAAgBb,UAAUsB,IAAMT,GAAgBb,UAAUiB,YACjF,GAAe,IAAX/3D,EACA,OAAO+2D,EAAYY,GAAgBb,UAAUsB,IAAMT,GAAgBb,UAAU2B,YACjF,GAAe,IAAXz4D,EACA,OAAO+2D,EAAYY,GAAgBb,UAAUsB,IAAMT,GAAgBb,UAAU4B,YACjF,KAAM,qBAAuB14D,CACjC,EAKAg3D,GAAA2B,uBAHA,SAAgC5B,GAC5B,OAAOA,EAAYY,GAAgBb,UAAUe,WAAaF,GAAgBb,UAAUsB,GACxF,EAKApB,GAAAG,4BAHA,SAAqCJ,GACjC,OAASA,EAAYY,GAAgBb,UAAUiB,aAAe,EAAKJ,GAAgBb,UAAUsB,GACjG,EAMApB,GAAAE,4BAJA,SAAqCH,GAEjC,OAA0E,IAAhEA,EAAYY,GAAgBb,UAAUiB,aAAe,EAAM,EACzE,EAKAf,GAAAC,WAHA,SAAoBF,EAAWxB,GAC3B,OAAOA,EAAYwB,GAAa,CACpC,YCpEAh0D,OAAOC,eAAe41D,GAAS,aAAc,CAAEjwD,OAAO,IACpCiwD,GAAAC,gBAAG,EACrB,MAAM9C,GAAiBhxD,GACjB+zD,GAAsB1sD,GACtBurD,GAAkBzjD,GAClB6kD,GAAuBxkD,GA8D7BqkD,GAAAC,WA7DA,MACI,WAAA77D,CAAYk0C,EAASnxC,EAAMi5D,EAAOrwD,EAAQ,KAAM2T,EAAS,GACrDlf,KAAK8zC,QAAUA,EACf9zC,KAAK2C,KAAOA,EACZ3C,KAAK47D,MAAQA,EACb57D,KAAKuL,MAAQA,EACbvL,KAAKkf,OAASA,CACtB,CACI,YAAA28C,CAAal8C,EAAM/a,GACf,IAAI,EAAI+2D,GAAqBrB,UAAUt6D,KAAK2C,MACxC,OAAO3C,KAAK47D,MAChB,IAAK,IAAI10D,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,MAAM00D,EAAQ,GAAK10D,EAEbgY,EADYS,GAAO,EAAI+7C,GAAoBrD,aAAa14C,EAAMi8C,GAASh3D,EAAQg3D,EAC1D57D,KAAKkf,OAC1Bi5C,GAAW,EAAIuD,GAAoBnD,QAAQr5C,GACjD,GAAI,GAAKi5C,IAAayD,EAClB,OAAOzD,CAEvB,CACQ,KAAM,6BAA6Bx4C,eAAkB/a,iGAC7D,CACI,aAAAk3D,CAAcC,GACV,MAAMC,EAAYh8D,KAAK8zC,QAAQmoB,cAAcF,GAC7C,GAAI/7D,KAAK2C,OAAS43D,GAAgBb,UAAUoB,MACpC96D,KAAK47D,QAAUjD,GAAeT,SAASY,QACvC94D,KAAK8zC,QAAQooB,KAAKC,WAAWn8D,KAAK8zC,QAAQ50B,OAAQlf,KAAKuL,OAAO,GAG9DvL,KAAK8zC,QAAQooB,KAAKE,WAAWp8D,KAAK8zC,QAAQ50B,OAAQlf,KAAKuL,OAAO,QAGjE,GAAIvL,KAAK2C,OAAS43D,GAAgBb,UAAUsB,IAAK,CAClD,MAAM7C,GAAW,EAAIuD,GAAoBpD,eAAeyD,GACxD/7D,KAAK8zC,QAAQuoB,QAAQr8D,KAAKuL,MAAO4sD,EAC7C,MACa,GAAIn4D,KAAK2C,OAAS43D,GAAgBb,UAAU4C,KAAM,CACnD,MAAMnE,GAAW,EAAIuD,GAAoBpD,eAAeyD,GACxD/7D,KAAK8zC,QAAQyoB,SAASv8D,KAAKuL,MAAO4sD,EAC9C,MACa,GAAIn4D,KAAK2C,OAAS43D,GAAgBb,UAAU8C,KAC7Cx8D,KAAK8zC,QAAQuoB,QAAQ,EAAGr8D,KAAK47D,WAE5B,IAAI57D,KAAK2C,OAAS43D,GAAgBb,UAAUmB,KAI7C,KAAM,oBAAoB76D,KAAK2C,qGAH/B3C,KAAK8zC,QAAQuoB,QAAQr8D,KAAKuL,MAAQ,EAAI,EAAGvL,KAAK47D,MAI1D,CACQ57D,KAAKkf,OAAS88C,CACtB,CACI,WAAAS,CAAYb,EAAQjD,GAAeT,SAASU,QACxC,OAAO,EAAI+C,GAAqBrB,UAAUt6D,KAAK2C,MAAQJ,KAAKid,IAAIo8C,EAAO57D,KAAK47D,OAAS57D,KAAK47D,KAClG,CACI,gBAAAc,CAAiBd,EAAQjD,GAAeT,SAASU,QAC7C,OAAO,EAAI+C,GAAqB9B,YAAY75D,KAAK2C,KAAM3C,KAAKy8D,YAAYb,GAChF,CACI,QAAAe,GACI,QAAQ,EAAIhB,GAAqBrB,UAAUt6D,KAAK2C,KACxD,GCjEAgD,OAAOC,eAAekuC,GAAS,aAAc,CAAEvoC,OAAO,IACvCuoC,GAAA8oB,aAAG,EAClB,MAAMjE,GAAiBhxD,GACjB+zD,GAAsB1sD,GACtB6tD,GAAwB/lD,GACxByjD,GAAkBpjD,GAClBwkD,GAAuBtkD,GACvBylD,GAAmBxlD,GAugBzBw8B,GAAA8oB,QAtgBA,MACI,WAAAh9D,CAAY+f,EAAO,KAAMo9C,GAAe,EAAMC,GAAY,EAAMC,GAAkB,GAC9Ej9D,KAAK+8D,aAAeA,EACpB/8D,KAAKg9D,UAAYA,EACjBh9D,KAAKi9D,gBAAkBA,EACvBj9D,KAAK2G,MAAQ,GACb3G,KAAKk9D,cAAgB,GACrBl9D,KAAKkf,OAAS,EACdlf,KAAKm9D,UAAW,EAChBn9D,KAAKo9D,aAAe,CAAE,EACtBp9D,KAAKq9D,UAAY,CAAE,EACnBr9D,KAAKs9D,gBAAkB,CAAE,EACzBt9D,KAAKu9D,kBAAoB,CAAE,EAC3Bv9D,KAAKw9D,mBAAqB,CAAE,EAC5Bx9D,KAAKy9D,oBAAsB,CAAE,EAC7Bz9D,KAAKu5B,OAAS,IAAImkC,YAAY/9C,EAAO,EAAIA,EAAO,MAChD3f,KAAKk8D,KAAO,IAAIyB,SAAS39D,KAAKu5B,OACtC,CACI,KAAAqkC,CAAMhC,GACF,MAAMG,GAAY,EAAIL,GAAoBhD,aAAakD,GAEvD,OADA57D,KAAKkf,SAAU,EAAIw8C,GAAoBrD,aAAar4D,KAAKkf,OAAQ68C,GAC1DA,CACf,CACI,aAAAE,CAAc4B,GACV,MAAMC,EAAe99D,KAAKkf,OAAS2+C,EACnC,IAAIl+C,EAAO3f,KAAKu5B,OAAOwkC,WACvB,MAAMC,EAAWr+C,EACjB,KAAOA,EAAOm+C,GACVn+C,IAAS,EAEb,GAAIq+C,EAAWr+C,EAAM,CACjB,MAAMs+C,EAAaj+D,KAAKu5B,OACxBv5B,KAAKu5B,OAAS,IAAImkC,YAAY/9C,GAC9B3f,KAAKk8D,KAAO,IAAIyB,SAAS39D,KAAKu5B,QAC9B,IAAI7a,WAAW1e,KAAKu5B,QAAQtzB,IAAI,IAAIyY,WAAWu/C,GAAa,EACxE,CACQ,OAAOH,CACf,CACI,OAAAzB,CAAQ9wD,EAAOqwD,GACX,GAAIA,IAAUjD,GAAeT,SAASU,OAClC54D,KAAKk8D,KAAKgC,QAAQl+D,KAAKkf,OAAQ3T,QAE9B,GAAIqwD,IAAUjD,GAAeT,SAASW,QACvC74D,KAAKk8D,KAAKiC,SAASn+D,KAAKkf,OAAQ3T,GAAO,QAEtC,GAAIqwD,IAAUjD,GAAeT,SAASY,QACvC94D,KAAKk8D,KAAKkC,SAASp+D,KAAKkf,OAAQ3T,GAAO,OAEtC,IAAIqwD,IAAUjD,GAAeT,SAASa,QAIvC,KAAM,qBAAqB6C,gBAAoBrwD,IAH/CvL,KAAKk8D,KAAKmC,YAAYr+D,KAAKkf,OAAQo/C,OAAO/yD,IAAQ,EAI9D,CACA,CACI,QAAAgxD,CAAShxD,EAAOqwD,GACZ,GAAIA,IAAUjD,GAAeT,SAASU,OAClC54D,KAAKk8D,KAAKqC,SAASv+D,KAAKkf,OAAQ3T,QAE/B,GAAIqwD,IAAUjD,GAAeT,SAASW,QACvC74D,KAAKk8D,KAAKsC,UAAUx+D,KAAKkf,OAAQ3T,GAAO,QAEvC,GAAIqwD,IAAUjD,GAAeT,SAASY,QACvC94D,KAAKk8D,KAAKuC,UAAUz+D,KAAKkf,OAAQ3T,GAAO,OAEvC,IAAIqwD,IAAUjD,GAAeT,SAASa,QAIvC,KAAM,qBAAqB6C,gBAAoBrwD,IAH/CvL,KAAKk8D,KAAKwC,aAAa1+D,KAAKkf,OAAQo/C,OAAO/yD,IAAQ,EAI/D,CACA,CACI,QAAAozD,CAASpzD,EAAOwwD,GACZ,MAAMC,EAAYh8D,KAAKi8D,cAAcF,GACrC/7D,KAAKq8D,QAAQ9wD,GAAO,EAAImwD,GAAoBpD,eAAeyD,IAC3D/7D,KAAKkf,OAAS88C,CACtB,CACI,SAAA4C,CAAUrzD,EAAOwwD,GACb,MAAMC,EAAYh8D,KAAKi8D,cAAcF,GACrC/7D,KAAKu8D,SAAShxD,GAAO,EAAImwD,GAAoBpD,eAAeyD,IAC5D/7D,KAAKkf,OAAS88C,CACtB,CACI,SAAA6C,CAAU3vD,GACN,MAAMtM,EAASsM,EAAY6uD,WACrB5F,GAAW,EAAIuD,GAAoBnD,QAAQ31D,GAC3Cm5D,EAAY/7D,KAAK49D,MAAMzF,GAC7Bn4D,KAAK4+D,UAAUh8D,EAAQm5D,GACvB,MAAM+C,EAAa9+D,KAAKkf,OAClB88C,EAAYh8D,KAAKi8D,cAAcr5D,GACrC,IAAI8b,WAAW1e,KAAKu5B,QAAQtzB,IAAI,IAAIyY,WAAWxP,GAAc4vD,GAC7D9+D,KAAK2G,MAAMW,KAAKtH,KAAK++D,iBAAiBD,EAAYvE,GAAgBb,UAAUsF,KAAM7G,IAClFn4D,KAAKkf,OAAS88C,CACtB,CACI,WAAAiD,CAAYp8D,GACR,GAAI7C,KAAK+8D,cAAgBp3D,OAAOmY,UAAU1K,eAAenO,KAAKjF,KAAKo9D,aAAcv6D,GAE7E,YADA7C,KAAK2G,MAAMW,KAAKtH,KAAKo9D,aAAav6D,IAGtC,MAAMq8D,GAAO,EAAIrC,GAAsBzD,aAAav2D,GAC9CD,EAASs8D,EAAKt8D,OACdu1D,GAAW,EAAIuD,GAAoBnD,QAAQ31D,GAC3Cm5D,EAAY/7D,KAAK49D,MAAMzF,GAC7Bn4D,KAAK4+D,UAAUh8D,EAAQm5D,GACvB,MAAMoD,EAAen/D,KAAKkf,OACpB88C,EAAYh8D,KAAKi8D,cAAcr5D,EAAS,GAC9C,IAAI8b,WAAW1e,KAAKu5B,QAAQtzB,IAAIi5D,EAAMC,GACtC,MAAM3D,EAAax7D,KAAK++D,iBAAiBI,EAAc5E,GAAgBb,UAAUyB,OAAQhD,GACzFn4D,KAAK2G,MAAMW,KAAKk0D,GACZx7D,KAAK+8D,eACL/8D,KAAKo9D,aAAav6D,GAAO24D,GAE7Bx7D,KAAKkf,OAAS88C,CACtB,CACI,QAAAoD,CAASv8D,GACL,GAAI7C,KAAKg9D,WAAar3D,OAAOmY,UAAU1K,eAAenO,KAAKjF,KAAKq9D,UAAWx6D,GAEvE,YADA7C,KAAK2G,MAAMW,KAAKtH,KAAKq9D,UAAUx6D,IAGnC,MAAMq8D,GAAO,EAAIrC,GAAsBzD,aAAav2D,GAC9CD,EAASs8D,EAAKt8D,OACdo5D,EAAYh8D,KAAKi8D,cAAcr5D,EAAS,GAC9C,IAAI8b,WAAW1e,KAAKu5B,QAAQtzB,IAAIi5D,EAAMl/D,KAAKkf,QAC3C,MAAMs8C,EAAax7D,KAAK++D,iBAAiB/+D,KAAKkf,OAAQq7C,GAAgBb,UAAU2F,IAAK1G,GAAeT,SAASU,QAC7G54D,KAAK2G,MAAMW,KAAKk0D,GACZx7D,KAAKg9D,YACLh9D,KAAKq9D,UAAUx6D,GAAO24D,GAE1Bx7D,KAAKkf,OAAS88C,CACtB,CACI,eAAAsD,CAAgB/zD,EAAOwwD,GACnB,MAAMC,EAAYh8D,KAAKi8D,cAAcF,GACrC,GAAIxwD,EAAMoxD,WAAY,CAClB,MAAM4C,EAAiBv/D,KAAKkf,OAAS3T,EAAM2T,OAC3C,KAAkB,IAAd68C,GAAmBuC,OAAOiB,GAAmBjB,OAAO,IAAMA,OAAmB,EAAZvC,IAIjE,KAAM,mBAAmBA,kGAHzB/7D,KAAK4+D,UAAUW,EAAgBxD,EAK/C,MAEYxwD,EAAMuwD,cAAcC,GAExB/7D,KAAKkf,OAAS88C,CACtB,CACI,6BAAAwD,GACI,GAAIx/D,KAAKm9D,SACL,KAAM,2CAEV,GAAkC,IAA9Bn9D,KAAKk9D,cAAct6D,SAA+E,IAA/D5C,KAAKk9D,cAAcl9D,KAAKk9D,cAAct6D,OAAS,GAAG68D,UACjFz/D,KAAK2G,MAAM3G,KAAK2G,MAAM/D,OAAS,GAAGD,OAAS43D,GAAgBb,UAAU2F,IACrE,KAAM,yDAGtB,CACI,2BAAAK,GACI,GAAI1/D,KAAKm9D,SACL,KAAM,2CAEV,GAAkC,IAA9Bn9D,KAAKk9D,cAAct6D,QAAgB5C,KAAKk9D,cAAcl9D,KAAKk9D,cAAct6D,OAAS,GAAG68D,SACrF,KAAM,gDAElB,CACI,WAAAE,GACI3/D,KAAKk9D,cAAc51D,KAAK,CAAEs4D,cAAe5/D,KAAK2G,MAAM/D,OAAQ68D,UAAU,GAC9E,CACI,QAAAI,CAASC,GAAY,GACjB9/D,KAAKk9D,cAAc51D,KAAK,CAAEs4D,cAAe5/D,KAAK2G,MAAM/D,OAAQ68D,UAAU,EAAOK,UAAWA,GAChG,CACI,SAAAC,CAAUC,GACN,MAAMC,EAAYjgE,KAAK2G,MAAM/D,OAASo9D,EAAaJ,cAC7CM,EAAMlgE,KAAKmgE,aAAaH,EAAaJ,cAAeK,EAAW,GACrEjgE,KAAK2G,MAAMzB,OAAO86D,EAAaJ,cAAeK,GAC9CjgE,KAAK2G,MAAMW,KAAK44D,EACxB,CACI,MAAAE,CAAOJ,GACEA,EAAaF,WACd9/D,KAAKixC,KAAK+uB,GAEd,IAAIK,EAAgB,GACpB,IAAK,IAAIn5D,EAAI84D,EAAaJ,cAAe14D,EAAIlH,KAAK2G,MAAM/D,OAAQsE,GAAK,EACjEm5D,GAAiB,IAAIrgE,KAAK2G,MAAMO,GAAGgY,SAEvC,MAAM+gD,EAAajgE,KAAK2G,MAAM/D,OAASo9D,EAAaJ,eAAkB,EAClE5/D,KAAKi9D,kBAAoBt3D,OAAOmY,UAAU1K,eAAenO,KAAKjF,KAAKs9D,gBAAiB+C,KACpFrgE,KAAKs9D,gBAAgB+C,GAAiBrgE,KAAKmgE,aAAaH,EAAaJ,cAAeK,EAAW,IAEnG,MAAMK,EAAiBtgE,KAAKi9D,gBAAkBj9D,KAAKs9D,gBAAgB+C,GAAiBrgE,KAAKmgE,aAAaH,EAAaJ,cAAeK,EAAW,GACvIM,EAAmBvgE,KAAKmgE,aAAaH,EAAaJ,cAAgB,EAAGK,EAAW,EAAGK,GACzFtgE,KAAK2G,MAAMzB,OAAO86D,EAAaJ,cAAeK,GAAa,GAC3DjgE,KAAK2G,MAAMW,KAAKi5D,EACxB,CACI,IAAAtvB,CAAK+uB,GACD,MAAM9D,EAAOl8D,KAAKk8D,KACZv1D,EAAQ3G,KAAK2G,MACnB,SAAS65D,EAAWC,EAAIC,GACpB,GAAID,EAAG99D,OAAS43D,GAAgBb,UAAU2F,KAAOqB,EAAG/9D,OAAS43D,GAAgBb,UAAU2F,IACnF,KAAM,6BAA6BoB,OAAQC,uEAE/C,IAAIC,EAAIC,EACJh8D,EAAQ,EACZ,EAAG,CAGC,GAFA+7D,EAAKzE,EAAK2E,SAASJ,EAAGvhD,OAASta,GAC/Bg8D,EAAK1E,EAAK2E,SAASH,EAAGxhD,OAASta,GAC3Bg8D,EAAKD,EACL,OAAO,EACX,GAAIA,EAAKC,EACL,OAAO,EACXh8D,GAAS,CACzB,OAA4B,IAAP+7D,GAAmB,IAAPC,GACrB,OAAO,CACnB,CACQ,SAASE,EAAKn6D,EAAOo6D,EAAW75D,GAC5B,GAAI65D,IAAc75D,EACd,OACJ,MAAM4I,EAAInJ,EAAMo6D,GACV76D,EAAIS,EAAMo6D,EAAY,GAC5Bp6D,EAAMo6D,GAAap6D,EAAMO,GACzBP,EAAMo6D,EAAY,GAAKp6D,EAAMO,EAAI,GACjCP,EAAMO,GAAK4I,EACXnJ,EAAMO,EAAI,GAAKhB,CAC3B,CAcQ,SAAS86D,EAAQP,EAAIC,GACjB,GAAID,EAAG99D,OAAS43D,GAAgBb,UAAU2F,KAAOqB,EAAG/9D,OAAS43D,GAAgBb,UAAU2F,IACnF,KAAM,6BAA6BoB,OAAQC,uEAE/C,GAAID,EAAGvhD,SAAWwhD,EAAGxhD,OACjB,OAAO,EAEX,IAAIyhD,EAAIC,EACJh8D,EAAQ,EACZ,EAAG,CAGC,GAFA+7D,EAAKzE,EAAK2E,SAASJ,EAAGvhD,OAASta,GAC/Bg8D,EAAK1E,EAAK2E,SAASH,EAAGxhD,OAASta,GAC3B+7D,EAAKC,EACL,OAAO,EACX,GAAIA,EAAKD,EACL,OAAO,EACX/7D,GAAS,CACzB,OAA4B,IAAP+7D,GAAmB,IAAPC,GACrB,OAAO,CACnB,CAwBQ,IAAIK,GAAS,EACb,IAAK,IAAI/5D,EAAI84D,EAAaJ,cAAe14D,EAAIlH,KAAK2G,MAAM/D,OAAS,EAAGsE,GAAK,EACrE,GAAIs5D,EAAWxgE,KAAK2G,MAAMO,GAAIlH,KAAK2G,MAAMO,EAAI,IAAK,CAC9C+5D,GAAS,EACT,KAChB,CAEaA,IACGjhE,KAAK2G,MAAM/D,OAASo9D,EAAaJ,cAAgB,GA/BzD,SAASsB,EAAUC,EAAMC,GACrB,GAAID,EAAOC,EAAO,CACd,MACMC,EAAQ16D,EADFw6D,EAAiC,GAAvBC,EAAQD,GAAS,IAEvC,IAAIG,EAAWH,EACXI,EAAYH,EAChB,EAAG,CACC,KAAOJ,EAAQr6D,EAAM26D,GAAWD,IAC5BC,GAAY,EAEhB,KAAON,EAAQK,EAAO16D,EAAM46D,KACxBA,GAAa,EAEbD,GAAYC,IACZT,EAAKn6D,EAAO26D,EAAUC,GACtBD,GAAY,EACZC,GAAa,EAEpB,OAAQD,GAAYC,GACrBL,EAAUC,EAAMI,GAChBL,EAAUI,EAAUF,EACpC,CACA,CAUgBF,CAAUlB,EAAaJ,cAAe5/D,KAAK2G,MAAM/D,OAAS,GAjElE,WACI,IAAK,IAAIsE,EAAI84D,EAAaJ,cAAe14D,EAAIP,EAAM/D,OAAQsE,GAAK,EAAG,CAC/D,IAAI65D,EAAY75D,EAChB,IAAK,IAAIyC,EAAIzC,EAAI,EAAGyC,EAAIhD,EAAM/D,OAAQ+G,GAAK,EACnC62D,EAAW75D,EAAMo6D,GAAYp6D,EAAMgD,MACnCo3D,EAAYp3D,GAGhBo3D,IAAc75D,GACd45D,EAAKn6D,EAAOo6D,EAAW75D,EAE3C,CACA,CAwDgBs6D,GAGhB,CACI,GAAA//B,GACI,GAAIzhC,KAAKk9D,cAAct6D,OAAS,EAC5B,OACJ,MAAM6+D,EAAUzhE,KAAKk9D,cAAcv0C,MAC/B84C,EAAQhC,SACRz/D,KAAK+/D,UAAU0B,GAGfzhE,KAAKogE,OAAOqB,EAExB,CACI,YAAAtB,CAAal3B,EAAOg3B,EAAWxzC,EAAM5kB,EAAO,MACxC,IAAIswD,GAAW,EAAIuD,GAAoBnD,QAAQ0H,GAC3CyB,EAAiB,EACrB,GAAa,OAAT75D,EAAe,CACf,MAAMg0D,EAAeh0D,EAAKg0D,aAAa77D,KAAKkf,OAAQ,GAChD28C,EAAe1D,IACfA,EAAW0D,GAEf6F,GAAkB,CAC9B,CACQ,IAAIC,EAAapH,GAAgBb,UAAU2F,IACvCuC,EAAiB,OAAT/5D,EACZ,IAAK,IAAIX,EAAI+hC,EAAO/hC,EAAIlH,KAAK2G,MAAM/D,OAAQsE,GAAKulB,EAAM,CAClD,MAAMovC,EAAe77D,KAAK2G,MAAMO,GAAG20D,aAAa77D,KAAKkf,OAAQhY,EAAIw6D,GAC7D7F,EAAe1D,IACfA,EAAW0D,GAEX30D,IAAM+hC,GACN04B,EAAa3hE,KAAK2G,MAAMO,GAAGvE,KAC3Bi/D,EAAQA,IAAS,EAAIjG,GAAqBvB,sBAAsBuH,IAG5DA,IAAe3hE,KAAK2G,MAAMO,GAAGvE,OAC7Bi/D,GAAQ,EAG5B,CACQ,MAAM7F,EAAY/7D,KAAK49D,MAAMzF,GACvB0J,EAAMD,IAAS,EAAIjG,GAAqBZ,UAAU4G,IAAe1B,GAAa,GAAKA,GAAa,EACzF,OAATp4D,IACA7H,KAAKs/D,gBAAgBz3D,EAAMk0D,GAC3B/7D,KAAK4+D,UAAU,GAAK/2D,EAAK+zD,MAAOG,IAE/B8F,GACD7hE,KAAK4+D,UAAUqB,EAAWlE,GAE9B,MAAM+F,EAAY9hE,KAAKkf,OACvB,IAAK,IAAIhY,EAAI+hC,EAAO/hC,EAAIlH,KAAK2G,MAAM/D,OAAQsE,GAAKulB,EAC5CzsB,KAAKs/D,gBAAgBt/D,KAAK2G,MAAMO,GAAI60D,GAExC,IAAK6F,EACD,IAAK,IAAI16D,EAAI+hC,EAAO/hC,EAAIlH,KAAK2G,MAAM/D,OAAQsE,GAAKulB,EAC5CzsB,KAAK4+D,UAAU5+D,KAAK2G,MAAMO,GAAGw1D,mBAAoB,GAGzD,GAAa,OAAT70D,EACA,OAAO7H,KAAK++D,iBAAiB+C,EAAWvH,GAAgBb,UAAUqI,IAAK5J,GAE3E,GAAIyJ,EAAO,CACP,MAAMI,GAAQ,EAAIrG,GAAqB3B,eAAe2H,EAAYE,EAAM5B,EAAY,GACpF,OAAOjgE,KAAK++D,iBAAiB+C,EAAWE,EAAO7J,EAC3D,CACQ,OAAOn4D,KAAK++D,iBAAiB+C,EAAWvH,GAAgBb,UAAU0B,OAAQjD,EAClF,CACI,cAAA8J,GACI,OAAO,IAAInF,GAAiBrB,WAAWz7D,KAAMu6D,GAAgBb,UAAU8C,KAAM7D,GAAeT,SAASU,OAC7G,CACI,cAAAsJ,CAAe32D,GACX,OAAO,IAAIuxD,GAAiBrB,WAAWz7D,KAAMu6D,GAAgBb,UAAUmB,KAAMlC,GAAeT,SAASU,OAAQrtD,EACrH,CACI,aAAA42D,CAAc52D,GACV,OAAO,IAAIuxD,GAAiBrB,WAAWz7D,KAAMu6D,GAAgBb,UAAUsB,KAAK,EAAIU,GAAoBjD,QAAQltD,GAAQA,EAC5H,CACI,cAAA62D,CAAe72D,GACX,OAAO,IAAIuxD,GAAiBrB,WAAWz7D,KAAMu6D,GAAgBb,UAAU4C,MAAM,EAAIZ,GAAoBnD,QAAQhtD,GAAQA,EAC7H,CACI,eAAA82D,CAAgB92D,GACZ,OAAO,IAAIuxD,GAAiBrB,WAAWz7D,KAAMu6D,GAAgBb,UAAUoB,OAAO,EAAIY,GAAoBlD,QAAQjtD,GAAQA,EAC9H,CACI,gBAAAwzD,CAAiB7/C,EAAQy6C,EAAWxB,GAChC,OAAO,IAAI2E,GAAiBrB,WAAWz7D,KAAM25D,EAAWxB,EAAU,KAAMj5C,EAChF,CACI,YAAAojD,GACI,GAA0B,IAAtBtiE,KAAK2G,MAAM/D,OACX,KAAM,wCAAwC5C,KAAK2G,MAAM/D,+EAE7D,MAAM2I,EAAQvL,KAAK2G,MAAM,GACnBo1D,EAAY/7D,KAAK49D,MAAMryD,EAAMswD,aAAa77D,KAAKkf,OAAQ,IAC7Dlf,KAAKs/D,gBAAgB/zD,EAAOwwD,GAC5B/7D,KAAK4+D,UAAUrzD,EAAMmxD,mBAAoB,GACzC18D,KAAK4+D,UAAU7C,EAAW,GAC1B/7D,KAAKm9D,UAAW,CACxB,CACI,GAAA5sC,CAAIhlB,GAEA,GADAvL,KAAKw/D,qCACgB,IAAVj0D,EACP,KAAM,8BAEV,GAAc,OAAVA,EACAvL,KAAK2G,MAAMW,KAAKtH,KAAKiiE,uBAEpB,GAAqB,kBAAV12D,EACZvL,KAAK2G,MAAMW,KAAKtH,KAAKkiE,eAAe32D,SAEnC,GAAqB,iBAAVA,EACZvL,KAAK2G,MAAMW,KAAKtH,KAAKmiE,cAAc52D,SAElC,GAAoB,iBAATA,EACRjH,OAAOuqC,UAAUtjC,GACjBvL,KAAK2G,MAAMW,KAAKtH,KAAKmiE,cAAc52D,IAGnCvL,KAAK2G,MAAMW,KAAKtH,KAAKqiE,gBAAgB92D,SAGxC,GAAImyD,YAAY6E,OAAOh3D,GACxBvL,KAAK6+D,UAAUtzD,EAAMguB,aAEpB,GAAqB,iBAAVhuB,GAAsBA,aAAiBzI,OACnD9C,KAAKi/D,YAAY1zD,QAEhB,GAAIoE,MAAMC,QAAQrE,GAAQ,CAC3BvL,KAAK2/D,cACL,IAAK,IAAIz4D,EAAI,EAAGA,EAAIqE,EAAM3I,OAAQsE,IAC9BlH,KAAKuwB,IAAIhlB,EAAMrE,IAEnBlH,KAAKyhC,KACjB,KACa,IAAqB,iBAAVl2B,EAWZ,KAAM,0BAA0BA,IAXA,CAChC,MAAMs8B,EAAaliC,OAAO68D,oBAAoBj3D,GAAO0lC,OACrDjxC,KAAK6/D,UAAS,GACd,IAAK,IAAI34D,EAAI,EAAGA,EAAI2gC,EAAWjlC,OAAQsE,IAAK,CACxC,MAAMa,EAAM8/B,EAAW3gC,GACvBlH,KAAKyiE,OAAO16D,GACZ/H,KAAKuwB,IAAIhlB,EAAMxD,GAC/B,CACY/H,KAAKyhC,KACjB,CAGA,CACA,CACI,MAAAihC,GACS1iE,KAAKm9D,UACNn9D,KAAKsiE,eAET,MAAM/vD,EAASvS,KAAKu5B,OAAO/xB,MAAM,EAAGxH,KAAKkf,QACzC,OAAO,IAAIR,WAAWnM,EAC9B,CACI,UAAAqqB,GACI,OAAO58B,KAAKm9D,QACpB,CACI,MAAAsF,CAAO16D,GACH/H,KAAK0/D,8BACL1/D,KAAKo/D,SAASr3D,EACtB,CACI,MAAA46D,CAAOp3D,EAAOq3D,GAAW,EAAOC,GAAc,GAE1C,GADA7iE,KAAKw/D,iCACAoD,EAED,YADA5iE,KAAK2G,MAAMW,KAAKtH,KAAKmiE,cAAc52D,IAGvC,GAAIs3D,GAAel9D,OAAOmY,UAAU1K,eAAenO,KAAKjF,KAAKu9D,kBAAmBhyD,GAE5E,YADAvL,KAAK2G,MAAMW,KAAKtH,KAAKu9D,kBAAkBhyD,IAG3C,MAAMiwD,EAAax7D,KAAKmiE,cAAc52D,GAChCwwD,EAAY/7D,KAAK49D,MAAMpC,EAAWI,OAClCI,EAAYh8D,KAAKi8D,cAAcF,GAC/B+G,EAAc9iE,KAAKkf,OACzBs8C,EAAWM,cAAcC,GACzB,MAAMgH,EAAc/iE,KAAK++D,iBAAiB+D,EAAavI,GAAgBb,UAAUuB,aAAcO,EAAWI,OAC1G57D,KAAK2G,MAAMW,KAAKy7D,GAChB/iE,KAAKkf,OAAS88C,EACV6G,IACA7iE,KAAKu9D,kBAAkBhyD,GAASw3D,EAE5C,CACI,OAAAC,CAAQz3D,EAAOq3D,GAAW,EAAOC,GAAc,GAE3C,GADA7iE,KAAKw/D,iCACAoD,EAED,YADA5iE,KAAK2G,MAAMW,KAAKtH,KAAKoiE,eAAe72D,IAGxC,GAAIs3D,GAAel9D,OAAOmY,UAAU1K,eAAenO,KAAKjF,KAAKw9D,mBAAoBjyD,GAE7E,YADAvL,KAAK2G,MAAMW,KAAKtH,KAAKw9D,mBAAmBjyD,IAG5C,MAAMiwD,EAAax7D,KAAKoiE,eAAe72D,GACjCwwD,EAAY/7D,KAAK49D,MAAMpC,EAAWI,OAClCI,EAAYh8D,KAAKi8D,cAAcF,GAC/B+G,EAAc9iE,KAAKkf,OACzBs8C,EAAWM,cAAcC,GACzB,MAAMgH,EAAc/iE,KAAK++D,iBAAiB+D,EAAavI,GAAgBb,UAAUuJ,cAAezH,EAAWI,OAC3G57D,KAAK2G,MAAMW,KAAKy7D,GAChB/iE,KAAKkf,OAAS88C,EACV6G,IACA7iE,KAAKw9D,mBAAmBjyD,GAASw3D,EAE7C,CACI,QAAAG,CAAS33D,EAAOq3D,GAAW,EAAOC,GAAc,GAE5C,GADA7iE,KAAKw/D,iCACAoD,EAED,YADA5iE,KAAK2G,MAAMW,KAAKtH,KAAKqiE,gBAAgB92D,IAGzC,GAAIs3D,GAAel9D,OAAOmY,UAAU1K,eAAenO,KAAKjF,KAAKy9D,oBAAqBlyD,GAE9E,YADAvL,KAAK2G,MAAMW,KAAKtH,KAAKy9D,oBAAoBlyD,IAG7C,MAAMiwD,EAAax7D,KAAKqiE,gBAAgB92D,GAClCwwD,EAAY/7D,KAAK49D,MAAMpC,EAAWI,OAClCI,EAAYh8D,KAAKi8D,cAAcF,GAC/B+G,EAAc9iE,KAAKkf,OACzBs8C,EAAWM,cAAcC,GACzB,MAAMgH,EAAc/iE,KAAK++D,iBAAiB+D,EAAavI,GAAgBb,UAAUwB,eAAgBM,EAAWI,OAC5G57D,KAAK2G,MAAMW,KAAKy7D,GAChB/iE,KAAKkf,OAAS88C,EACV6G,IACA7iE,KAAKy9D,oBAAoBlyD,GAASw3D,EAE9C,mBC5gBAp9D,OAAOC,eAAeu9D,GAAS,aAAc,CAAE53D,OAAO,IACtD43D,GAAAC,YAAsCD,GAAAE,SAAmBF,GAAAG,qBAAsBH,GAAAI,UAAoBJ,GAAAK,SAAkCL,GAAAM,QAAyBN,GAAAO,oBAAG,EACjK,MAAM/K,GAAiBhxD,GACjB+zD,GAAsB1sD,GACtB6tD,GAAwB/lD,GA6B9B,SAAS0sD,GAASG,EAAUzkD,EAAQ08C,GAChC,OAAIA,EAAQ,EACJA,EAAQ,EACD+H,EAAS9C,SAAS3hD,GAGlBykD,EAASC,UAAU1kD,GAAQ,GAIlC08C,EAAQ,EACD+H,EAASE,UAAU3kD,GAAQ,QAGJ9N,IAA1BuyD,EAASG,aACFxF,OAAOqF,EAASE,UAAU3kD,GAAQ,KAAUo/C,OAAOqF,EAASE,UAAU3kD,EAAS,GAAG,KAAUo/C,OAAO,KAEvGqF,EAASG,aAAa5kD,GAAQ,EAGjD,CAYA,SAAS0jD,GAASe,EAAUzkD,EAAQ08C,GAEhC,OAAO18C,EADMskD,GAASG,EAAUzkD,EAAQ08C,EAE5C,CAyBA,SAASyH,GAASnvC,EAAOtvB,EAAO++D,EAAUzkD,EAAQ08C,GAC9C,MAAMmI,EAAY7kD,EAASta,EAAQg3D,EAC7BoI,EAAoBD,EAAYz/D,OAAOk/D,GAASG,EAAUI,GAAW,EAAIrI,GAAoBpD,eAAesD,KAClH,IAAK,IAAI10D,EAAI,EAAGA,EAAIgtB,EAAMtxB,OAAQsE,IAAK,CACnC,MAAM+8D,EAAM/vC,EAAMhtB,GAAKy8D,EAAS9C,SAASmD,EAAoB98D,GAC7D,GAAY,IAAR+8D,EACA,OAAOA,CAEnB,CACI,OAA+D,IAAxDN,EAAS9C,SAASmD,EAAoB9vC,EAAMtxB,QAAgB,GAAK,CAC5E,CA7FAugE,GAAAO,eALA,SAAwBC,EAAUzkD,EAAQ08C,GACtC,GAAI+H,EAAS5F,YAAc7+C,EAAS08C,GAAU18C,GAAU,EAAIw8C,GAAoBhD,aAAakD,GAAS,EAClG,KAAM,eAAiB18C,EAAS,YAAc08C,CAEtD,EAuBAuH,GAAAM,QArBA,SAAiBE,EAAUzkD,EAAQ08C,GAC/B,OAAIA,EAAQ,EACJA,EAAQ,EACD+H,EAASO,QAAQhlD,GAGjBykD,EAASQ,SAASjlD,GAAQ,GAIjC08C,EAAQ,EACD+H,EAASS,SAASllD,GAAQ,QAGJ9N,IAAzBuyD,EAAStF,YACFC,OAAOqF,EAASE,UAAU3kD,GAAQ,KAAUo/C,OAAOqF,EAASE,UAAU3kD,EAAS,GAAG,KAAUo/C,OAAO,KAEvGqF,EAASU,YAAYnlD,GAAQ,EAGhD,EAuBAikD,GAAAK,SAAmBA,GAUnBL,GAAAI,UATA,SAAmBI,EAAUzkD,EAAQ08C,GACjC,GAAIA,EAAQjD,GAAeT,SAASY,QAChC,KAAM,cAAgB8C,EAE1B,OAAIA,IAAUjD,GAAeT,SAASY,QAC3B6K,EAASW,WAAWplD,GAAQ,GAEhCykD,EAASY,WAAWrlD,GAAQ,EACvC,EAMAikD,GAAAP,SAAmBA,GAuBnBO,GAAAG,SAtBA,SAAkBv7D,EAAK47D,EAAUzkD,EAAQslD,EAAazI,EAAWn5D,GAC7D,MAAMsxB,GAAQ,EAAI2oC,GAAsBzD,aAAarxD,GAC/C08D,EAAmB7B,GAASe,EAAUzkD,EAAQslD,GAA2B,EAAZzI,EAC7D5D,GAAW,EAAIuD,GAAoBpD,eAAeyD,GAClD2I,EAAiBD,EAAmBngE,OAAOk/D,GAASG,EAAUc,EAAkBtM,IAChFwM,EAAargE,OAAOk/D,GAASG,EAAUc,EAAmB1I,EAAW5D,IAC3E,IAAIyM,EAAM,EACNC,EAAOjiE,EAAS,EACpB,KAAOgiE,GAAOC,GAAM,CAChB,MAAMC,EAAOD,EAAOD,GAAQ,EACtBX,EAAMZ,GAASnvC,EAAO4wC,EAAKnB,EAAUe,EAAgBC,GAC3D,GAAY,IAARV,EACA,OAAOa,EACPb,EAAM,EACNY,EAAOC,EAAM,EAGbF,EAAME,EAAM,CAExB,CACI,OAAO,IACX,EAaA3B,GAAAE,SAAmBA,GAcnBF,GAAAC,YAbA,SAAqBx+D,EAAO++D,EAAUzkD,EAAQslD,EAAazI,GACvD,MAAM0I,EAAmB7B,GAASe,EAAUzkD,EAAQslD,GAA2B,EAAZzI,EAC7D5D,GAAW,EAAIuD,GAAoBpD,eAAeyD,GAClD2I,EAAiBD,EAAmBngE,OAAOk/D,GAASG,EAAUc,EAAkBtM,IAChFwM,EAAargE,OAAOk/D,GAASG,EAAUc,EAAmB1I,EAAW5D,IACrE4L,EAAYW,EAAiB9/D,EAAQ+/D,EACrCX,EAAoBD,EAAYz/D,OAAOk/D,GAASG,EAAUI,GAAW,EAAIrI,GAAoBpD,eAAeqM,KAClH,IAAI/hE,EAAS,EACb,KAAyD,IAAlD+gE,EAAS9C,SAASmD,EAAoBphE,IACzCA,IAEJ,OAAO,EAAIi6D,GAAsBxD,eAAe,IAAI36C,WAAWilD,EAASpqC,OAAQyqC,EAAmBphE,GACvG,ECrHA+C,OAAOC,eAAem/D,GAAS,aAAc,CAAEx5D,OAAO,IACtDw5D,GAAAC,UAAoBD,GAAAE,iBAAsB,EAC1C,MAAMvJ,GAAsB/zD,GACtB4yD,GAAkBvrD,GAClB2sD,GAAuB7kD,GACvBouD,GAAsB/tD,GACtB0lD,GAAwBxlD,GACxBshD,GAAiBrhD,GAcvB,SAAS6tD,GAAqBvgE,EAAOmD,EAAK47D,EAAUzkD,EAAQslD,EAAazI,EAAWn5D,EAAQqQ,GACxF,MAAMmyD,GAAY,EAAIF,GAAoBtC,UAAUe,EAAUzkD,EAAQslD,GAChEa,EAAgBD,EAAYxgE,EAAQm3D,EACpClC,EAAa8J,EAAS9C,SAASuE,EAAYxiE,EAASm5D,EAAYn3D,GACtE,OAAO,IAAIogE,GAAUrB,EAAU0B,GAAe,EAAI3J,GAAoBpD,eAAeyD,GAAYlC,EAAY,GAAG5mD,KAAQlL,IAC5H,CANAg9D,GAAAE,YAZA,SAAqB1rC,GACjB,MAAMlyB,EAAMkyB,EAAOwkC,WACnB,GAAI12D,EAAM,EACN,KAAM,mCAEV,MAAMs8D,EAAW,IAAIhG,SAASpkC,GACxBwiC,EAAY4H,EAAS9C,SAASx5D,EAAM,GACpCwyD,EAAa8J,EAAS9C,SAASx5D,EAAM,GACrCm9D,GAAc,EAAI9I,GAAoBpD,eAAeyD,GAE3D,OAAO,IAAIiJ,GAAUrB,EADNt8D,EAAM00D,EAAY,EACMyI,EAAa3K,EAAY,IACpE,EAQA,MAAMmL,GACF,WAAAplE,CAAY+jE,EAAUzkD,EAAQslD,EAAa3K,EAAY5mD,GACnDjT,KAAK2jE,SAAWA,EAChB3jE,KAAKkf,OAASA,EACdlf,KAAKwkE,YAAcA,EACnBxkE,KAAK65D,WAAaA,EAClB75D,KAAKiT,KAAOA,EACZjT,KAAKslE,SAAW,EAChBtlE,KAAK+7D,UAAY,IAAmB,EAAblC,GACvB75D,KAAK25D,UAAYE,GAAc,CACvC,CACI,MAAA0L,GAAW,OAAOvlE,KAAK25D,YAAcY,GAAgBb,UAAU8C,IAAK,CACpE,QAAAzB,GAAa,OAAO,EAAIY,GAAqBZ,UAAU/6D,KAAK25D,aAAc,EAAIgC,GAAqBtB,kBAAkBr6D,KAAK25D,UAAW,CACrI,OAAA6L,GAAY,OAAOjL,GAAgBb,UAAUoB,QAAU96D,KAAK25D,WAAaY,GAAgBb,UAAUwB,iBAAmBl7D,KAAK25D,SAAU,CACrI,KAAA8L,GAAU,OAAOzlE,KAAK+6D,aAAe/6D,KAAKwlE,SAAU,CACpD,QAAA12D,GAAa,OAAOyrD,GAAgBb,UAAUyB,SAAWn7D,KAAK25D,WAAaY,GAAgBb,UAAU2F,MAAQr/D,KAAK25D,SAAU,CAC5H,MAAA+L,GAAW,OAAOnL,GAAgBb,UAAUmB,OAAS76D,KAAK25D,SAAU,CACpE,MAAA/qD,GAAW,OAAO2rD,GAAgBb,UAAUsF,OAASh/D,KAAK25D,SAAU,CACpE,QAAA8F,GAAa,OAAO,EAAI9D,GAAqB1B,WAAWj6D,KAAK25D,UAAW,CACxE,KAAAgM,GAAU,OAAOpL,GAAgBb,UAAUqI,MAAQ/hE,KAAK25D,SAAU,CAClE,SAAAiM,GACI,OAAI5lE,KAAK0lE,UACE,EAAIR,GAAoBzB,SAASzjE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aAAe,EAErF,IACf,CACI,QAAAqB,GACI,OAAI7lE,KAAK25D,YAAcY,GAAgBb,UAAUsB,KACtC,EAAIkK,GAAoBzB,SAASzjE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aAEzExkE,KAAK25D,YAAcY,GAAgBb,UAAU4C,MACtC,EAAI4I,GAAoB1B,UAAUxjE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aAE1ExkE,KAAK25D,YAAcY,GAAgBb,UAAUuB,cACtC,EAAIiK,GAAoBzB,SAASzjE,KAAK2jE,UAAU,EAAIuB,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,cAAc,EAAI9I,GAAoBpD,eAAet4D,KAAK+7D,YAEpL/7D,KAAK25D,YAAcY,GAAgBb,UAAUuJ,eACtC,EAAIiC,GAAoB1B,UAAUxjE,KAAK2jE,UAAU,EAAIuB,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,cAAc,EAAI9I,GAAoBpD,eAAet4D,KAAK+7D,YAElL,IACf,CACI,UAAA+J,GACI,OAAI9lE,KAAK25D,YAAcY,GAAgBb,UAAUoB,OACtC,EAAIoK,GAAoB3B,WAAWvjE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aAE3ExkE,KAAK25D,YAAcY,GAAgBb,UAAUwB,gBACtC,EAAIgK,GAAoB3B,WAAWvjE,KAAK2jE,UAAU,EAAIuB,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,cAAc,EAAI9I,GAAoBpD,eAAet4D,KAAK+7D,YAEnL,IACf,CACI,YAAAgK,GAAiB,OAAO/lE,KAAK8lE,cAAgB9lE,KAAK6lE,UAAW,CAC7D,WAAAG,GACI,GAAIhmE,KAAK25D,YAAcY,GAAgBb,UAAUyB,QAAUn7D,KAAK25D,YAAcY,GAAgBb,UAAU2F,IAAK,CACzG,MAAM4G,GAAQ,EAAIf,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aACjF,OAAO,EAAI3H,GAAsBxD,eAAe,IAAI36C,WAAW1e,KAAK2jE,SAASpqC,OAAQ0sC,EAAOjmE,KAAK4C,UAC7G,CACQ,OAAO,IACf,CACI,SAAAsjE,GACI,GAAIlmE,KAAK4O,SAAU,CACf,MAAMq3D,GAAQ,EAAIf,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aACjF,OAAO,IAAI9lD,WAAW1e,KAAK2jE,SAASpqC,OAAQ0sC,EAAOjmE,KAAK4C,SACpE,CACQ,OAAO,IACf,CACI,GAAAmD,CAAIgC,GACA,MAAMnF,EAAS5C,KAAK4C,SACpB,GAAI0B,OAAOuqC,UAAU9mC,KAAQ,EAAI4zD,GAAqB1B,WAAWj6D,KAAK25D,WAAY,CAC9E,GAAI5xD,GAAOnF,GAAUmF,EAAM,EACvB,KAAM,SAASA,2BAA6B/H,KAAKiT,WAAWjT,KAAK25D,qBAAqB/2D,IAE1F,MAAMwiE,GAAY,EAAIF,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aAC/Ea,EAAgBD,EAAYr9D,EAAM/H,KAAK+7D,UAC7C,IAAIoK,EAAcnmE,KAAK2jE,SAAS9C,SAASuE,EAAYxiE,EAAS5C,KAAK+7D,UAAYh0D,GAC/E,IAAI,EAAI4zD,GAAqBxB,eAAen6D,KAAK25D,WAAY,CACzD,MAAMyM,GAAa,EAAIzK,GAAqBJ,wBAAwBv7D,KAAK25D,WACzEwM,GAAc,EAAIxK,GAAqB9B,YAAYuM,EAAYzN,GAAeT,SAASU,OACvG,MACiB,IAAI,EAAI+C,GAAqBzB,oBAAoBl6D,KAAK25D,WAAY,CACnE,MAAMyM,GAAa,EAAIzK,GAAqB5B,6BAA6B/5D,KAAK25D,WAC9EwM,GAAc,EAAIxK,GAAqB9B,YAAYuM,EAAYzN,GAAeT,SAASU,OACvG,CACY,OAAO,IAAIoM,GAAUhlE,KAAK2jE,SAAU0B,GAAe,EAAI3J,GAAoBpD,eAAet4D,KAAK+7D,WAAYoK,EAAa,GAAGnmE,KAAKiT,QAAQlL,KACpJ,CACQ,GAAmB,iBAARA,EAAkB,CACzB,MAAMnD,GAAQ,EAAIsgE,GAAoB5B,UAAUv7D,EAAK/H,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,YAAaxkE,KAAK+7D,UAAWn5D,GACnH,GAAc,OAAVgC,EACA,OAAOugE,GAAqBvgE,EAAOmD,EAAK/H,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,YAAaxkE,KAAK+7D,UAAWn5D,EAAQ5C,KAAKiT,KAEnI,CACQ,KAAM,QAAQlL,2BAA6B/H,KAAKiT,WAAWjT,KAAK25D,WACxE,CACI,MAAA/2D,GACI,IAAI+c,EACJ,GAAI3f,KAAKslE,SAAW,EAChB,OAAOtlE,KAAKslE,QAEhB,IAAI,EAAI3J,GAAqBzB,oBAAoBl6D,KAAK25D,WAClD35D,KAAKslE,SAAU,EAAI3J,GAAqB7B,6BAA6B95D,KAAK25D,gBAEzE,GAAI35D,KAAK25D,YAAcY,GAAgBb,UAAUsF,MAC/Ch/D,KAAK25D,YAAcY,GAAgBb,UAAUqI,MAC7C,EAAIpG,GAAqB1B,WAAWj6D,KAAK25D,WAC5C35D,KAAKslE,SAAU,EAAIJ,GAAoB1B,UAAUxjE,KAAK2jE,UAAU,EAAIuB,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aAAexkE,KAAK+7D,WAAW,EAAIL,GAAoBpD,eAAet4D,KAAK+7D,iBAE7M,GAAI/7D,KAAK25D,YAAcY,GAAgBb,UAAU8C,KAClDx8D,KAAKslE,QAAU,OAEd,GAAItlE,KAAK25D,YAAcY,GAAgBb,UAAUyB,OAAQ,CAC1D,MAAMiK,GAAY,EAAIF,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aACrF,IAAI6B,EAAgBrmE,KAAK+7D,UAEzB,IADAp8C,GAAO,EAAIulD,GAAoB1B,UAAUxjE,KAAK2jE,SAAUyB,EAAYiB,GAAe,EAAI3K,GAAoBpD,eAAet4D,KAAK+7D,YAC5E,IAA5C/7D,KAAK2jE,SAASO,QAAQkB,EAAYzlD,IACrC0mD,IAAkB,EAClB1mD,GAAO,EAAIulD,GAAoB1B,UAAUxjE,KAAK2jE,SAAUyB,EAAYiB,GAAe,EAAI3K,GAAoBpD,eAAet4D,KAAK+7D,YAEnI/7D,KAAKslE,QAAU3lD,CAC3B,MACa,GAAI3f,KAAK25D,YAAcY,GAAgBb,UAAU2F,IAAK,CACvD,MAAM+F,GAAY,EAAIF,GAAoBtC,UAAU5iE,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,aAErF,IADA7kD,EAAO,EAC4C,IAA5C3f,KAAK2jE,SAASO,QAAQkB,EAAYzlD,IACrCA,IAEJ3f,KAAKslE,QAAU3lD,CAC3B,MAEY3f,KAAKslE,QAAU,EAEnB,OAAOhhE,OAAOtE,KAAKslE,QAC3B,CACI,QAAAgB,GACI,MAAM1jE,EAAS5C,KAAK4C,SACpB,GAAI5C,KAAKy/D,WAAY,CACjB,MAAMltD,EAAS,GACf,IAAK,IAAIrL,EAAI,EAAGA,EAAItE,EAAQsE,IACxBqL,EAAOjL,KAAKtH,KAAK+F,IAAImB,GAAGo/D,YAE5B,OAAO/zD,CACnB,CACQ,GAAIvS,KAAK2lE,QAAS,CACd,MAAMpzD,EAAS,CAAE,EACjB,IAAK,IAAIrL,EAAI,EAAGA,EAAItE,EAAQsE,IAAK,CAC7B,MAAMa,GAAM,EAAIm9D,GAAoB9B,aAAal8D,EAAGlH,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,YAAaxkE,KAAK+7D,WACvGxpD,EAAOxK,GAAOo9D,GAAqBj+D,EAAGa,EAAK/H,KAAK2jE,SAAU3jE,KAAKkf,OAAQlf,KAAKwkE,YAAaxkE,KAAK+7D,UAAWn5D,EAAQ5C,KAAKiT,MAAMqzD,UAC5I,CACY,OAAO/zD,CACnB,CACQ,OAAIvS,KAAKulE,SACE,KAEPvlE,KAAK0lE,SACE1lE,KAAK4lE,YAEZ5lE,KAAK+6D,WACE/6D,KAAK+lE,eAET/lE,KAAKkmE,aAAelmE,KAAKgmE,aACxC,EAEAjB,GAAAC,UAAoBA,eC3LpBr/D,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAqxD,OAAiBrxD,EAAmBk+D,SAAAl+D,EAAA0rC,QAAkB1rC,EAAsB68D,iBAAA,EAE5E,MAAMsB,EAAe5+D,GACf6+D,EAAiBx3D,GACvB,IAAIy3D,EAAiBz3D,GACrBrJ,OAAOC,eAAewC,EAAS,cAAe,CAAEvC,YAAY,EAAME,IAAK,WAAc,OAAO0gE,EAAexB,WAAc,IAIzH78D,EAAA0rC,QAHA,WACI,OAAO,IAAIyyB,EAAa3J,OAC5B,EAKAx0D,EAAAk+D,SAHA,SAAkB/sC,GACd,OAAO,EAAIitC,EAAevB,aAAa1rC,GAAQ+sC,UACnD,EAOAl+D,EAAAqxD,OALA,SAAgBiN,EAAQ/mD,EAAO,KAAMgnD,GAAqB,EAAMC,GAAkB,EAAMC,GAAwB,GAC5G,MAAM/yB,EAAU,IAAIyyB,EAAa3J,QAAQj9C,EAAO,EAAIA,EAAO,KAAMgnD,EAAoBC,EAAiBC,GAEtG,OADA/yB,EAAQvjB,IAAIm2C,GACL5yB,EAAQ4uB,QACnB,yCCXA,WAGE,IAAIoE,EAAc,wBAEdC,EAA2B,iBAAXrmE,OAChBsmE,EAAOD,EAASrmE,OAAS,CAAE,EAC3BsmE,EAAKC,oBACPF,GAAS,GAEX,IAAIG,GAAcH,GAA0B,iBAAT9lE,MACpB+lE,EAAKG,oBAAyC,iBAAZtmE,GAAwBA,EAAQC,UAAYD,EAAQC,SAASC,KAE5GimE,EAAO/X,EACEiY,IACTF,EAAO/lE,MA+JT,IA7JA,IAAImmE,GAAaJ,EAAKK,sBAAsDh/D,EAAOD,QAE/Ek/D,GAAgBN,EAAKO,yBAAkD,oBAAhB7J,YACvD8J,EAAY,mBAAmBpgE,MAAM,IAErCqgE,EAAiB,CAAC,EAAG,KAAM,OAAQ,UAGnCC,EAAQ,CAAC,EAAG,EAAG,GAAI,IACnBC,EAAK,CAAC,EAAG,EAAG,MAAO,EAAG,MAAO,WAAY,WAAY,WAAY,MAAO,EAAG,WAC7E,EAAG,WAAY,WAAY,MAAO,WAAY,IAAK,EAAG,IAAK,EAAG,WAAY,EAC1E,WAAY,EAAG,WAAY,EAAG,IAAK,WAAY,MAAO,WAAY,MAClE,WAAY,MAAO,WAAY,IAAK,WAAY,MAAO,EAAG,WAAY,WACtE,WAAY,WAAY,MAAO,WAAY,WAAY,EAAG,WAAY,YACpEC,EAAO,CAAC,IAAK,IAAK,IAAK,KACvBC,EAAa,CAAC,IAAK,KACnBC,EAAe,CAAC,MAAO,SAAU,cAAe,QAAS,UACzDC,EAAiB,CACnB,IAAO,IACP,IAAO,KAILn4D,EAAUo3D,EAAKG,qBAAuBx3D,MAAMC,QAC5C,SAAUumB,GACR,MAA+C,mBAAxCxwB,OAAOmY,UAAUtX,SAASvB,KAAKkxB,EAC9C,EACMxmB,MAAMC,QAEN2yD,GAAU+E,IAAiBN,EAAKgB,iCAAoCtK,YAAY6E,OAIhF7E,YAAY6E,OAHZ,SAAUpsC,GACR,MAAsB,iBAARA,GAAoBA,EAAIoD,QAAUpD,EAAIoD,OAAO35B,cAAgB89D,WACnF,EAIMuK,EAAgB,SAAUpoE,GAC5B,IAAI8C,SAAc9C,EAClB,GAAa,WAAT8C,EACF,MAAO,CAAC9C,GAAS,GAEnB,GAAa,WAAT8C,GAAiC,OAAZ9C,EACvB,MAAM,IAAIF,MAAMmnE,GAElB,GAAIQ,GAAgBznE,EAAQD,cAAgB89D,YAC1C,MAAO,CAAC,IAAIh/C,WAAW7e,IAAU,GAEnC,IAAK+P,EAAQ/P,KAAa0iE,EAAO1iE,GAC/B,MAAM,IAAIF,MAAMmnE,GAElB,MAAO,CAACjnE,GAAS,EACrB,EAEM0vB,EAAQ,SAAU1vB,GACpB,OAA4C,IAArCooE,EAAcpoE,GAAS,GAAG+C,MAClC,EAEGslE,EAAa,SAAUlxC,GAEzB,IADA,IAAImxC,EAAW,GACNjhE,EAAI,EAAGA,EAAI8vB,EAAMp0B,SAAUsE,EAClCihE,EAASjhE,GAAK8vB,EAAM9vB,GAEtB,OAAOihE,CACX,EAEMC,EAAqB,SAAUC,EAAMC,EAASC,GAChD,OAAO,SAAU1oE,GACf,OAAO,IAAI2oE,EAAOH,EAAMC,EAASD,GAAMI,OAAO5oE,GAAS0oE,IACxD,CACF,EAEGG,EAA0B,SAAUL,EAAMC,EAASC,GACrD,OAAO,SAAU1oE,EAAS8oE,GACxB,OAAO,IAAIH,EAAOH,EAAMC,EAASK,GAAYF,OAAO5oE,GAAS0oE,IAC9D,CACF,EAEGK,EAA2B,SAAUP,EAAMC,EAASC,GACtD,OAAO,SAAU1oE,EAAS8oE,EAAYtmE,EAAGT,GACvC,OAAOinE,EAAQ,SAAWR,GAAMI,OAAO5oE,EAAS8oE,EAAYtmE,EAAGT,GAAG2mE,IACnE,CACF,EAEGO,EAAyB,SAAUT,EAAMC,EAASC,GACpD,OAAO,SAAUxgE,EAAKlI,EAAS8oE,EAAY/mE,GACzC,OAAOinE,EAAQ,OAASR,GAAMI,OAAO1gE,EAAKlI,EAAS8oE,EAAY/mE,GAAG2mE,IACnE,CACF,EAEGQ,EAAsB,SAAUr3D,EAAQs3D,EAAcX,EAAMC,GAC9D,IAAK,IAAIphE,EAAI,EAAGA,EAAI4gE,EAAallE,SAAUsE,EAAG,CAC5C,IAAIvE,EAAOmlE,EAAa5gE,GACxBwK,EAAO/O,GAAQqmE,EAAaX,EAAMC,EAAS3lE,EACjD,CACI,OAAO+O,CACR,EAEGs3D,EAAe,SAAUX,EAAMC,GACjC,IAAI52D,EAAS02D,EAAmBC,EAAMC,EAAS,OAO/C,OANA52D,EAAO0L,OAAS,WACd,OAAO,IAAIorD,EAAOH,EAAMC,EAASD,EAClC,EACD32D,EAAO+2D,OAAS,SAAU5oE,GACxB,OAAO6R,EAAO0L,SAASqrD,OAAO5oE,EAC/B,EACMkpE,EAAoBr3D,EAAQ02D,EAAoBC,EAAMC,EAC9D,EAyCGW,EAAa,CACf,CAAE/nE,KAAM,SAAUonE,QA9IC,CAAC,EAAG,IAAK,MAAO,UA8IQD,KAAMT,EAAMoB,aAAcA,GACrE,CAAE9nE,KAAM,OAAQonE,QA9IJ,CAAC,EAAG,KAAM,OAAQ,WA8IID,KAAMT,EAAMoB,aAAcA,GAC5D,CAAE9nE,KAAM,QAASonE,QAlJC,CAAC,GAAI,KAAM,QAAS,WAkJGD,KAAMR,EAAYmB,aA1CrC,SAAUX,EAAMC,GACtC,IAAI52D,EAASg3D,EAAwBL,EAAMC,EAAS,OAOpD,OANA52D,EAAO0L,OAAS,SAAUurD,GACxB,OAAO,IAAIH,EAAOH,EAAMC,EAASK,EAClC,EACDj3D,EAAO+2D,OAAS,SAAU5oE,EAAS8oE,GACjC,OAAOj3D,EAAO0L,OAAOurD,GAAYF,OAAO5oE,EACzC,EACMkpE,EAAoBr3D,EAAQg3D,EAAyBL,EAAMC,EACnE,GAkCC,CAAEpnE,KAAM,SAAUonE,QAASb,EAAgBY,KAAMR,EAAYmB,aAhCtC,SAAUX,EAAMC,GACvC,IAAItmE,EAAI+lE,EAAeM,GACnB32D,EAASk3D,EAAyBP,EAAMC,EAAS,OAWrD,OAVA52D,EAAO0L,OAAS,SAAUurD,EAAYtmE,EAAGT,GACvC,OAAI2tB,EAAMltB,IAAMktB,EAAM3tB,GACbinE,EAAQ,QAAUR,GAAMjrD,OAAOurD,GAE/B,IAAIH,EAAOH,EAAMC,EAASK,GAAYO,QAAQ,CAAC7mE,EAAGT,GAAII,EAEhE,EACD0P,EAAO+2D,OAAS,SAAU5oE,EAAS8oE,EAAYtmE,EAAGT,GAChD,OAAO8P,EAAO0L,OAAOurD,EAAYtmE,EAAGT,GAAG6mE,OAAO5oE,EAC/C,EACMkpE,EAAoBr3D,EAAQk3D,EAA0BP,EAAMC,EACpE,GAmBC,CAAEpnE,KAAM,OAAQonE,QAASb,EAAgBY,KAAMR,EAAYmB,aAjBtC,SAAUX,EAAMC,GACrC,IAAItmE,EAAI+lE,EAAeM,GACnB32D,EAASo3D,EAAuBT,EAAMC,EAAS,OAOnD,OANA52D,EAAO0L,OAAS,SAAUrV,EAAK4gE,EAAY/mE,GACzC,OAAO,IAAIunE,EAAKd,EAAMC,EAASK,GAAYO,QAAQ,CAAC,OAAQtnE,GAAII,GAAGknE,QAAQ,CAACnhE,GAAM/F,EACnF,EACD0P,EAAO+2D,OAAS,SAAU1gE,EAAKlI,EAAS8oE,EAAY/mE,GAClD,OAAO8P,EAAO0L,OAAOrV,EAAK4gE,EAAY/mE,GAAG6mE,OAAO5oE,EACjD,EACMkpE,EAAoBr3D,EAAQo3D,EAAwBT,EAAMC,EAClE,IAUGO,EAAU,GAAIO,EAAc,GAEvBliE,EAAI,EAAGA,EAAI+hE,EAAWrmE,SAAUsE,EAGvC,IAFA,IAAImiE,EAAYJ,EAAW/hE,GACvBmhE,EAAOgB,EAAUhB,KACZ1+D,EAAI,EAAGA,EAAI0+D,EAAKzlE,SAAU+G,EAAG,CACpC,IAAI2/D,EAAaD,EAAUnoE,KAAO,IAAMmnE,EAAK1+D,GAG7C,GAFAy/D,EAAY9hE,KAAKgiE,GACjBT,EAAQS,GAAcD,EAAUL,aAAaX,EAAK1+D,GAAI0/D,EAAUf,SACzC,SAAnBe,EAAUnoE,KAAiB,CAC7B,IAAIqoE,EAAgBF,EAAUnoE,KAAOmnE,EAAK1+D,GAC1Cy/D,EAAY9hE,KAAKiiE,GACjBV,EAAQU,GAAiBV,EAAQS,EACzC,CACA,CAGE,SAASd,EAAOH,EAAMC,EAASK,GAC7B3oE,KAAKwpE,OAAS,GACdxpE,KAAK4B,EAAI,GACT5B,KAAKsoE,QAAUA,EACftoE,KAAK2oE,WAAaA,EAClB3oE,KAAKypE,OAAQ,EACbzpE,KAAK0pE,WAAY,EACjB1pE,KAAK2pE,MAAQ,EACb3pE,KAAKipC,MAAQ,EACbjpC,KAAK4pE,WAAc,MAAQvB,GAAQ,IAAO,EAC1CroE,KAAK6pE,UAAY7pE,KAAK4pE,YAAc,EACpC5pE,KAAK8pE,aAAenB,GAAc,EAClC3oE,KAAK+pE,YAA2B,GAAbpB,IAAoB,EAEvC,IAAK,IAAIzhE,EAAI,EAAGA,EAAI,KAAMA,EACxBlH,KAAK4B,EAAEsF,GAAK,CAElB,CA8OE,SAASiiE,EAAKd,EAAMC,EAASK,GAC3BH,EAAOvjE,KAAKjF,KAAMqoE,EAAMC,EAASK,EACrC,CA9OEH,EAAO1qD,UAAU2qD,OAAS,SAAU5oE,GAClC,GAAIG,KAAK0pE,UACP,MAAM,IAAI/pE,MA9MO,2BAgNnB,IAAI4S,EAAS01D,EAAcpoE,GAC3BA,EAAU0S,EAAO,GAKjB,IAJA,IAEuDrL,EAAG1G,EAFtDsO,EAAWyD,EAAO,GAClBi3D,EAASxpE,KAAKwpE,OAAQK,EAAY7pE,KAAK6pE,UAAWjnE,EAAS/C,EAAQ+C,OACrEgnE,EAAa5pE,KAAK4pE,WAAYhlE,EAAQ,EAAGhD,EAAI5B,KAAK4B,EAE7CgD,EAAQhC,GAAQ,CACrB,GAAI5C,KAAKypE,MAGP,IAFAzpE,KAAKypE,OAAQ,EACbD,EAAO,GAAKxpE,KAAK2pE,MACZziE,EAAI,EAAGA,EAAI0iE,EAAa,IAAK1iE,EAChCsiE,EAAOtiE,GAAK,EAGhB,GAAI4H,EACF,IAAK5H,EAAIlH,KAAKipC,MAAOrkC,EAAQhC,GAAUsE,EAAI2iE,IAAajlE,GACtDpE,EAAOX,EAAQoI,WAAWrD,IACf,IACT4kE,EAAOtiE,GAAK,IAAM1G,GAAQknE,EAAY,EAANxgE,KACvB1G,EAAO,MAChBgpE,EAAOtiE,GAAK,KAAO,IAAQ1G,GAAQ,IAAOknE,EAAY,EAANxgE,KAChDsiE,EAAOtiE,GAAK,KAAO,IAAe,GAAP1G,IAAiBknE,EAAY,EAANxgE,MACzC1G,EAAO,OAAUA,GAAQ,OAClCgpE,EAAOtiE,GAAK,KAAO,IAAQ1G,GAAQ,KAAQknE,EAAY,EAANxgE,KACjDsiE,EAAOtiE,GAAK,KAAO,IAAS1G,GAAQ,EAAK,KAAUknE,EAAY,EAANxgE,KACzDsiE,EAAOtiE,GAAK,KAAO,IAAe,GAAP1G,IAAiBknE,EAAY,EAANxgE,OAElD1G,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BX,EAAQoI,aAAarD,IACjE4kE,EAAOtiE,GAAK,KAAO,IAAQ1G,GAAQ,KAAQknE,EAAY,EAANxgE,KACjDsiE,EAAOtiE,GAAK,KAAO,IAAS1G,GAAQ,GAAM,KAAUknE,EAAY,EAANxgE,KAC1DsiE,EAAOtiE,GAAK,KAAO,IAAS1G,GAAQ,EAAK,KAAUknE,EAAY,EAANxgE,KACzDsiE,EAAOtiE,GAAK,KAAO,IAAe,GAAP1G,IAAiBknE,EAAY,EAANxgE,WAItD,IAAKA,EAAIlH,KAAKipC,MAAOrkC,EAAQhC,GAAUsE,EAAI2iE,IAAajlE,EACtD4kE,EAAOtiE,GAAK,IAAMrH,EAAQ+E,IAAU8iE,EAAY,EAANxgE,KAI9C,GADAlH,KAAKgqE,cAAgB9iE,EACjBA,GAAK2iE,EAAW,CAGlB,IAFA7pE,KAAKipC,MAAQ/hC,EAAI2iE,EACjB7pE,KAAK2pE,MAAQH,EAAOI,GACf1iE,EAAI,EAAGA,EAAI0iE,IAAc1iE,EAC5BtF,EAAEsF,IAAMsiE,EAAOtiE,GAEjB2F,EAAEjL,GACF5B,KAAKypE,OAAQ,CACrB,MACQzpE,KAAKipC,MAAQ/hC,CAErB,CACI,OAAOlH,IACR,EAEDwoE,EAAO1qD,UAAU27C,OAAS,SAAUvmC,EAAGkuC,GACrC,IAAI/jD,EAAQ,IAAJ6V,EAAS7wB,EAAI,EACjB4nE,EAAQ,CAAC5sD,GAGb,IADAA,EAAQ,KADR6V,IAAS,GAEF7V,EAAI,GACT4sD,EAAMtlE,QAAQ0Y,GAEdA,EAAQ,KADR6V,IAAS,KAEP7wB,EAQJ,OANI++D,EACF6I,EAAM3iE,KAAKjF,GAEX4nE,EAAMtlE,QAAQtC,GAEhBrC,KAAKyoE,OAAOwB,GACLA,EAAMrnE,MACd,EAED4lE,EAAO1qD,UAAUosD,aAAe,SAAUrnE,GACxC,IAAI0P,EAAS01D,EAAcplE,GAC3BA,EAAM0P,EAAO,GACb,IAAIzD,EAAWyD,EAAO,GAClB03D,EAAQ,EAAGrnE,EAASC,EAAID,OAC5B,GAAIkM,EACF,IAAK,IAAI5H,EAAI,EAAGA,EAAIrE,EAAID,SAAUsE,EAAG,CACnC,IAAI1G,EAAOqC,EAAIoF,WAAWf,GACtB1G,EAAO,IACTypE,GAAS,EACAzpE,EAAO,KAChBypE,GAAS,EACAzpE,EAAO,OAAUA,GAAQ,MAClCypE,GAAS,GAETzpE,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtBqC,EAAIoF,aAAaf,IAC7D+iE,GAAS,EAEnB,MAEMA,EAAQrnE,EAIV,OAFAqnE,GAASjqE,KAAKy5D,OAAe,EAARwQ,GACrBjqE,KAAKyoE,OAAO5lE,GACLonE,CACR,EAEDzB,EAAO1qD,UAAUorD,QAAU,SAAUiB,EAAMnoE,GAEzC,IADA,IAAIioE,EAAQjqE,KAAKy5D,OAAOz3D,GACfkF,EAAI,EAAGA,EAAIijE,EAAKvnE,SAAUsE,EACjC+iE,GAASjqE,KAAKkqE,aAAaC,EAAKjjE,IAElC,IAAIkjE,GAAgBpoE,EAAIioE,EAAQjoE,GAAKA,EACjCqoE,EAAQ,GAGZ,OAFAA,EAAMznE,OAASwnE,EACfpqE,KAAKyoE,OAAO4B,GACLrqE,IACR,EAEDwoE,EAAO1qD,UAAU8c,SAAW,WAC1B,IAAI56B,KAAK0pE,UAAT,CAGA1pE,KAAK0pE,WAAY,EACjB,IAAIF,EAASxpE,KAAKwpE,OAAQtiE,EAAIlH,KAAKgqE,cAAeJ,EAAa5pE,KAAK4pE,WAAYhoE,EAAI5B,KAAK4B,EAEzF,GADA4nE,EAAOtiE,GAAK,IAAMlH,KAAKsoE,QAAY,EAAJphE,GAC3BlH,KAAKgqE,gBAAkBhqE,KAAK6pE,UAE9B,IADAL,EAAO,GAAKA,EAAOI,GACd1iE,EAAI,EAAGA,EAAI0iE,EAAa,IAAK1iE,EAChCsiE,EAAOtiE,GAAK,EAIhB,IADAsiE,EAAOI,EAAa,IAAM,WACrB1iE,EAAI,EAAGA,EAAI0iE,IAAc1iE,EAC5BtF,EAAEsF,IAAMsiE,EAAOtiE,GAEjB2F,EAAEjL,EAdN,CAeG,EAED4mE,EAAO1qD,UAAUtX,SAAWgiE,EAAO1qD,UAAUwsD,IAAM,WACjDtqE,KAAK46B,WAKL,IAHA,IAEc+uC,EAFVC,EAAa5pE,KAAK4pE,WAAYhoE,EAAI5B,KAAK4B,EAAGkoE,EAAe9pE,KAAK8pE,aAChEC,EAAa/pE,KAAK+pE,WAAY7iE,EAAI,EAAGyC,EAAI,EACvC2gE,EAAM,GACH3gE,EAAImgE,GAAc,CACvB,IAAK5iE,EAAI,EAAGA,EAAI0iE,GAAcjgE,EAAImgE,IAAgB5iE,IAAKyC,EACrDggE,EAAQ/nE,EAAEsF,GACVojE,GAAO9C,EAAWmC,GAAS,EAAK,IAAQnC,EAAkB,GAARmC,GAChDnC,EAAWmC,GAAS,GAAM,IAAQnC,EAAWmC,GAAS,EAAK,IAC3DnC,EAAWmC,GAAS,GAAM,IAAQnC,EAAWmC,GAAS,GAAM,IAC5DnC,EAAWmC,GAAS,GAAM,IAAQnC,EAAWmC,GAAS,GAAM,IAE5DhgE,EAAIigE,GAAe,IACrBhoE,EAAIsmE,EAAWtmE,GACfiL,EAAEjL,GACFsF,EAAI,EAEZ,CAWI,OAVI6iE,IACFJ,EAAQ/nE,EAAEsF,GACVojE,GAAO9C,EAAWmC,GAAS,EAAK,IAAQnC,EAAkB,GAARmC,GAC9CI,EAAa,IACfO,GAAO9C,EAAWmC,GAAS,GAAM,IAAQnC,EAAWmC,GAAS,EAAK,KAEhEI,EAAa,IACfO,GAAO9C,EAAWmC,GAAS,GAAM,IAAQnC,EAAWmC,GAAS,GAAM,MAGhEW,CACR,EAED9B,EAAO1qD,UAAU5O,YAAc,WAC7BlP,KAAK46B,WAEL,IAGIrB,EAHAqwC,EAAa5pE,KAAK4pE,WAAYhoE,EAAI5B,KAAK4B,EAAGkoE,EAAe9pE,KAAK8pE,aAChEC,EAAa/pE,KAAK+pE,WAAY7iE,EAAI,EAAGyC,EAAI,EACvCsgE,EAAQjqE,KAAK2oE,YAAc,EAG7BpvC,EADEwwC,EACO,IAAIrM,YAAaoM,EAAe,GAAM,GAEtC,IAAIpM,YAAYuM,GAG3B,IADA,IAAIjzC,EAAQ,IAAIuzC,YAAYhxC,GACrB5vB,EAAImgE,GAAc,CACvB,IAAK5iE,EAAI,EAAGA,EAAI0iE,GAAcjgE,EAAImgE,IAAgB5iE,IAAKyC,EACrDqtB,EAAMrtB,GAAK/H,EAAEsF,GAEXyC,EAAIigE,GAAe,IACrBhoE,EAAIsmE,EAAWtmE,GACfiL,EAAEjL,GAEV,CAKI,OAJImoE,IACF/yC,EAAMrtB,GAAK/H,EAAEsF,GACbqyB,EAASA,EAAO/xB,MAAM,EAAGyiE,IAEpB1wC,CACR,EAEDivC,EAAO1qD,UAAUyb,OAASivC,EAAO1qD,UAAU5O,YAE3Cs5D,EAAO1qD,UAAU0sD,OAAShC,EAAO1qD,UAAUkZ,MAAQ,WACjDh3B,KAAK46B,WAKL,IAHA,IAEgB1b,EAAQyqD,EAFpBC,EAAa5pE,KAAK4pE,WAAYhoE,EAAI5B,KAAK4B,EAAGkoE,EAAe9pE,KAAK8pE,aAChEC,EAAa/pE,KAAK+pE,WAAY7iE,EAAI,EAAGyC,EAAI,EACvCqtB,EAAQ,GACLrtB,EAAImgE,GAAc,CACvB,IAAK5iE,EAAI,EAAGA,EAAI0iE,GAAcjgE,EAAImgE,IAAgB5iE,IAAKyC,EACrDuV,EAASvV,GAAK,EACdggE,EAAQ/nE,EAAEsF,GACV8vB,EAAM9X,GAAkB,IAARyqD,EAChB3yC,EAAM9X,EAAS,GAAMyqD,GAAS,EAAK,IACnC3yC,EAAM9X,EAAS,GAAMyqD,GAAS,GAAM,IACpC3yC,EAAM9X,EAAS,GAAMyqD,GAAS,GAAM,IAElChgE,EAAIigE,GAAe,IACrBhoE,EAAIsmE,EAAWtmE,GACfiL,EAAEjL,GAEV,CAYI,OAXImoE,IACF7qD,EAASvV,GAAK,EACdggE,EAAQ/nE,EAAEsF,GACV8vB,EAAM9X,GAAkB,IAARyqD,EACZI,EAAa,IACf/yC,EAAM9X,EAAS,GAAMyqD,GAAS,EAAK,KAEjCI,EAAa,IACf/yC,EAAM9X,EAAS,GAAMyqD,GAAS,GAAM,MAGjC3yC,CACR,EAMDmyC,EAAKrrD,UAAY,IAAI0qD,EAErBW,EAAKrrD,UAAU8c,SAAW,WAExB,OADA56B,KAAKy5D,OAAOz5D,KAAK2oE,YAAY,GACtBH,EAAO1qD,UAAU8c,SAAS31B,KAAKjF,KACvC,EAED,IAAI6M,EAAI,SAAUjL,GAChB,IAAIE,EAAG6rB,EAAGtrB,EAAGiiD,EAAIqc,EAAIC,EAAI6J,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAC/CC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAC3EC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAC3EC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAC7E,IAAK5rE,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBiiD,EAAK1iD,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC++D,EAAK/+D,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCg/D,EAAKh/D,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC6oE,EAAK7oE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC8oE,EAAK9oE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC+oE,EAAK/oE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCgpE,EAAKhpE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCipE,EAAKjpE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAItCE,GAHAgpE,EAAKlpE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,MAG3Bg/D,GAAM,EAAM6J,IAAO,IAC9B98C,GAHAo9C,EAAKnpE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,MAG3B6oE,GAAM,EAAM7J,IAAO,IAC9Bh/D,EAAE,IAAME,EACRF,EAAE,IAAM+rB,EACR/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT7rB,EAAIwiD,GAAOomB,GAAM,EAAMC,IAAO,IAC9Bh9C,EAAIgzC,GAAOgK,GAAM,EAAMD,IAAO,IAC9B9oE,EAAE,IAAME,EACRF,EAAE,IAAM+rB,EACR/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT7rB,EAAI8+D,GAAOgK,GAAM,EAAMC,IAAO,IAC9Bl9C,EAAI88C,GAAOI,GAAM,EAAMD,IAAO,IAC9BhpE,EAAE,IAAME,EACRF,EAAE,IAAM+rB,EACR/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT7rB,EAAI4oE,GAAOI,GAAM,EAAMC,IAAO,IAC9Bp9C,EAAIg9C,GAAOI,GAAM,EAAMD,IAAO,IAC9BlpE,EAAE,IAAME,EACRF,EAAE,IAAM+rB,EACR/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT7rB,EAAI8oE,GAAOtmB,GAAM,EAAMqc,IAAO,IAC9BhzC,EAAIk9C,GAAOlK,GAAM,EAAMrc,IAAO,IAC9B1iD,EAAE,IAAME,EACRF,EAAE,IAAM+rB,EACR/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EACT/rB,EAAE,KAAOE,EACTF,EAAE,KAAO+rB,EAETq9C,EAAKppE,EAAE,GACPqpE,EAAKrpE,EAAE,GACPorE,EAAOprE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCqrE,EAAOrrE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCkqE,EAAOlqE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCmqE,EAAOnqE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCksE,GAAOlsE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCmsE,GAAOnsE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCgrE,EAAOhrE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCirE,EAAOjrE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCwqE,EAAOxqE,EAAE,IAAM,EAAMA,EAAE,KAAO,GAC9ByqE,EAAOzqE,EAAE,IAAM,EAAMA,EAAE,KAAO,GAC9BspE,EAAMtpE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCupE,EAAMvpE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCsrE,EAAOtrE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCurE,EAAOvrE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCoqE,EAAOpqE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCqqE,EAAOrqE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCosE,GAAOpsE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCqsE,GAAOrsE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC4rE,GAAO5rE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B6rE,GAAO7rE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B0qE,EAAO1qE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC2qE,EAAO3qE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCwpE,EAAMxpE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCypE,EAAMzpE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCwrE,EAAOxrE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCyrE,EAAOzrE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCsqE,EAAOtqE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCuqE,EAAOvqE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC8pE,EAAO9pE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B+pE,EAAO/pE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B8rE,GAAO9rE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC+rE,GAAO/rE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC4qE,EAAO5qE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC6qE,EAAO7qE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC0pE,EAAM1pE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChC2pE,EAAM3pE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChC0rE,EAAO1rE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC2rE,GAAO3rE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCkrE,EAAOlrE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BmrE,EAAOnrE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BgqE,EAAOhqE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCiqE,EAAOjqE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCgsE,GAAOhsE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCisE,GAAOjsE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC8qE,EAAO9qE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC+qE,EAAO/qE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC4pE,EAAM5pE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChC6pE,EAAM7pE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAEhCA,EAAE,GAAKopE,GAAOE,EAAKE,EACnBxpE,EAAE,GAAKqpE,GAAOE,EAAKE,EACnBzpE,EAAE,IAAM8pE,GAAQE,EAAME,EACtBlqE,EAAE,IAAM+pE,GAAQE,EAAME,EACtBnqE,EAAE,IAAMwqE,GAAQE,EAAME,EACtB5qE,EAAE,IAAMyqE,GAAQE,EAAME,EACtB7qE,EAAE,IAAMkrE,GAAQE,EAAME,EACtBtrE,EAAE,IAAMmrE,GAAQE,EAAME,EACtBvrE,EAAE,IAAM4rE,IAAQE,GAAME,GACtBhsE,EAAE,IAAM6rE,IAAQE,GAAME,GACtBjsE,EAAE,GAAKspE,GAAOE,EAAKE,EACnB1pE,EAAE,GAAKupE,GAAOE,EAAKE,EACnB3pE,EAAE,IAAMgqE,GAAQE,EAAME,EACtBpqE,EAAE,IAAMiqE,GAAQE,EAAME,EACtBrqE,EAAE,IAAM0qE,GAAQE,EAAME,EACtB9qE,EAAE,IAAM2qE,GAAQE,EAAME,EACtB/qE,EAAE,IAAMorE,GAAQE,EAAME,EACtBxrE,EAAE,IAAMqrE,GAAQE,EAAME,EACtBzrE,EAAE,IAAM8rE,IAAQE,GAAME,GACtBlsE,EAAE,IAAM+rE,IAAQE,GAAME,GACtBnsE,EAAE,GAAKwpE,GAAOE,EAAKE,EACnB5pE,EAAE,GAAKypE,GAAOE,EAAKE,EACnB7pE,EAAE,IAAMkqE,GAAQE,EAAME,EACtBtqE,EAAE,IAAMmqE,GAAQE,EAAME,EACtBvqE,EAAE,IAAM4qE,GAAQE,EAAME,EACtBhrE,EAAE,IAAM6qE,GAAQE,EAAME,EACtBjrE,EAAE,IAAMsrE,GAAQE,EAAME,EACtB1rE,EAAE,IAAMurE,GAAQE,EAAME,GACtB3rE,EAAE,IAAMgsE,IAAQE,GAAME,GACtBpsE,EAAE,IAAMisE,IAAQE,GAAME,GACtBrsE,EAAE,GAAK0pE,GAAOE,EAAKR,EACnBppE,EAAE,GAAK2pE,GAAOE,EAAKR,EACnBrpE,EAAE,IAAMoqE,GAAQE,EAAMR,EACtB9pE,EAAE,IAAMqqE,GAAQE,EAAMR,EACtB/pE,EAAE,IAAM8qE,GAAQE,EAAMR,EACtBxqE,EAAE,IAAM+qE,GAAQE,EAAMR,EACtBzqE,EAAE,IAAMwrE,GAAQE,EAAMR,EACtBlrE,EAAE,IAAMyrE,GAAQE,GAAMR,EACtBnrE,EAAE,IAAMksE,IAAQE,GAAMR,GACtB5rE,EAAE,IAAMmsE,IAAQE,GAAMR,GACtB7rE,EAAE,GAAK4pE,GAAOR,EAAKE,EACnBtpE,EAAE,GAAK6pE,GAAOR,EAAKE,EACnBvpE,EAAE,IAAMsqE,GAAQR,EAAME,EACtBhqE,EAAE,IAAMuqE,GAAQR,EAAME,EACtBjqE,EAAE,IAAMgrE,GAAQR,EAAME,EACtB1qE,EAAE,IAAMirE,GAAQR,EAAME,EACtB3qE,EAAE,IAAM0rE,GAAQR,EAAME,EACtBprE,EAAE,IAAM2rE,IAAQR,EAAME,EACtBrrE,EAAE,IAAMosE,IAAQR,GAAME,GACtB9rE,EAAE,IAAMqsE,IAAQR,GAAME,GAEtB/rE,EAAE,IAAM+lE,EAAGtlE,GACXT,EAAE,IAAM+lE,EAAGtlE,EAAI,EAElB,EAED,GAAI+kE,EACF/+D,UAAiBwgE,OAEjB,IAAK3hE,EAAI,EAAGA,EAAIkiE,EAAYxmE,SAAUsE,EACpC8/D,EAAKoC,EAAYliE,IAAM2hE,EAAQO,EAAYliE,GAQhD,CA5oBD,mCCPAgnE,GAAiB,WACf,MAAM,IAAIvuE,MACR,wFAGJ,WCMA,MAAMwuE,QAAaC,QAiDNC,GASX,WAAAzuE,CACmBqrD,EACjBvoD,SADiB1C,KAAQirD,SAARA,EANXjrD,KAAAsuE,SAAW,IAAI7uD,IAEfzf,KAAKuuE,OAAG,EACRvuE,KAAAwuE,YAAc,IAAIjhC,IAMxBvtC,KAAKmK,QAA0B,UAAjBzH,aAAO,EAAPA,EAASyH,cAAQ,IAAAS,OAAA,EAAAA,EAAArJ,MAAM,aAAcqI,EAAc,WAGnE,WAAM02B,GAGJ,OAFAtgC,KAAKuuE,OAAQ,QACPhvE,QAAQomC,WAAWh2B,MAAMH,KAAKxP,KAAKwuE,aAAa1nE,KAAK0qB,GAAWA,EAAO8O,WACtEtgC,KAAKilB,QAAQtV,MAAMH,KAAKxP,KAAKsuE,SAASzmE,SAG/C,IAAA1B,GAEE,OADAnG,KAAKuuE,OAAQ,EACNhvE,QAAQC,aAAQ4R,GAGzB,iBAAMo9C,CAAY3vB,GAChB,MAAM4vC,QAAiBzuE,KAAK0uE,iBAEtBtvB,QAAWp/C,KAAK2uE,aAAaF,EAAU,CAAC,cAAe,aAsB7D,OArBArvB,EAAG1c,iBAAiB,WAAYrF,IAC9B,KAAMA,EAAMwB,gBAAgB6+B,aAE1B,YADA19D,KAAKmK,OAAOxI,MAAM,gDAAiD,CAAEk9B,KAAMxB,EAAMwB,OAGnF,MAAMX,EAAMooC,GAAAA,SAASjpC,EAAMwB,MAE3B7+B,KAAKmK,OAAO3I,MAAM,wCAAyC08B,GAErC,gBAAlBA,EAAI0wC,UACN5uE,KAAK6uE,QAAQzvB,EAAIlhB,EAAI1Z,GAAI,CAAEsqD,SAAUjwC,EAAKk/B,aACf,aAAlB7/B,EAAI0wC,UACb5uE,KAAK6uE,QAAQzvB,EAAIlhB,EAAI1Z,GAAI,CACvBvS,QAAS4sB,EAAKr3B,MAAM02B,EAAI6wC,QAAQ7vD,OAAQgf,EAAI6wC,QAAQ7vD,OAASgf,EAAI6wC,QAAQpvD,MACzET,OAAQgf,EAAI6wC,QAAQ7vD,SAGtBlf,KAAKmK,OAAOxI,MAAM,yCAA0Cu8B,EAAyB0wC,gBAIlFH,EAAS3iE,IAGlB,iBAAM2tC,CAAYz4B,GAChB,GAAIvgB,EACF,MAAM,IAAIR,EAAe,iFAG3BD,KAAKmK,OAAO1I,KAAK,wBAAyB,CAAE63C,WAAYt4B,IAExD,MAAMytD,QAAiBzuE,KAAK0uE,iBACtBtvB,QAAWp/C,KAAK2uE,aAAaF,EAAU,CAAC,cAAe,aAEvDK,SADkBX,GAAW1e,KAAKzuC,IACbrB,KAErBqvD,QAAmBb,GAAWc,KAAKjuD,EAAK,KAmC9C,OAlCAhhB,KAAKwuE,YAAYj+C,IAAIy+C,GAErB5vB,EAAG1c,iBAAiB,WAAWtyB,MAAOitB,IACpC,KAAMA,EAAMwB,gBAAgB6+B,aAE1B,YADA19D,KAAKmK,OAAOxI,MAAM,gDAAiD,CAAEk9B,KAAMxB,EAAMwB,OAInF,MAAMX,EAAMooC,GAAAA,SAASjpC,EAAMwB,MAI3B,GAFA7+B,KAAKmK,OAAO3I,MAAM,wCAAyC08B,GAErC,gBAAlBA,EAAI0wC,UACN5uE,KAAK6uE,QAAQzvB,EAAIlhB,EAAI1Z,GAAI,CAAEsqD,kBACtB,GAAsB,aAAlB5wC,EAAI0wC,UAA0B,CACvC,MAAM1vD,OAAEA,EAAMS,KAAEA,GAASue,EAAI6wC,QAEvBG,EAAY3sE,KAAK28C,IAAIv/B,EAAMmvD,EAAW5vD,GACtC6hB,EAAQxxB,OAAOyxB,MAAMkuC,GAE3B,UACQF,EAAWr4C,KAAKoK,EAAO,EAAGmuC,EAAWhwD,GAC3Clf,KAAK6uE,QAAQzvB,EAAIlhB,EAAI1Z,GAAI,CACvBvS,QAAS8uB,EACT7hB,WAEF,MAAOvd,GACP3B,KAAKmK,OAAOxI,MAAM,oDAAqD,CAAEA,gBAG3E3B,KAAKmK,OAAOxI,MAAM,yCAA0Cu8B,EAAyB0wC,gBAIlFH,EAAS3iE,IAGlB,iBAAMgjD,CAAYj0B,GAChB,MAAMgE,EAA2B,GAC3B4vC,QAAiBzuE,KAAK0uE,iBAEtBtvB,QAAWp/C,KAAK2uE,aAAaF,EAAU,CAAC,cAAe,mBAuB7D,OAtBArvB,EAAG1c,iBAAiB,WAAYrF,IAC9B,KAAMA,EAAMwB,gBAAgB6+B,aAE1B,YADA19D,KAAKmK,OAAOxI,MAAM,gDAAiD,CAAEk9B,KAAMxB,EAAMwB,OAInF,MAAMX,EAAMooC,GAAAA,SAASjpC,EAAMwB,MAI3B,GAFA7+B,KAAKmK,OAAO3I,MAAM,wCAAyC08B,GAErC,gBAAlBA,EAAI0wC,UACN/vC,EAAKv3B,KAAK42B,EAAI6wC,QAAQhuC,OACtB/gC,KAAK6uE,QAAQzvB,EAAIlhB,EAAI1Z,GAAI,WACpB,GAAsB,mBAAlB0Z,EAAI0wC,UAAgC,CAC7C5uE,KAAK6uE,QAAQzvB,EAAIlhB,EAAI1Z,GAAI,MACzB,MAAMjS,EAASvS,KAAKmvE,gBAAgBjxC,EAAI6wC,QAAQ/mE,KAAM62B,GACtDhE,EAAStoB,QAETvS,KAAKmK,OAAOxI,MAAM,yCAA0Cu8B,EAAyB0wC,gBAIlFH,EAAS3iE,IAGlB,iBAAM6iD,CAAY17C,GAChB,GAAIxS,EACF,MAAM,IAAIR,EAAe,iFAG3BD,KAAKmK,OAAO1I,KAAK,0BAA2B,CAAEswB,YAAa9e,IAE3D,MAAMw7D,QAAiBzuE,KAAK0uE,iBACtBM,QAAmBb,GAAWc,KAAKh8D,EAAM,KAC/CjT,KAAKwuE,YAAYj+C,IAAIy+C,GACrB,MAAM5vB,QAAWp/C,KAAK2uE,aAAaF,EAAU,CAAC,cAAe,mBAuB7D,OArBArvB,EAAG1c,iBAAiB,WAAWtyB,MAAOitB,IACpC,KAAMA,EAAMwB,gBAAgB6+B,aAE1B,YADA19D,KAAKmK,OAAOxI,MAAM,gDAAiD,CAAEk9B,KAAMxB,EAAMwB,OAGnF,MAAMX,EAAMooC,GAAAA,SAASjpC,EAAMwB,MAE3B7+B,KAAKmK,OAAO3I,MAAM,wCAAyC08B,GAErC,gBAAlBA,EAAI0wC,iBACAI,EAAWtX,MAAMx5B,EAAI6wC,QAAQhuC,MAAM9uB,SACzCjS,KAAK6uE,QAAQzvB,EAAIlhB,EAAI1Z,GAAI,OACE,mBAAlB0Z,EAAI0wC,WACb5uE,KAAK6uE,QAAQzvB,EAAIlhB,EAAI1Z,GAAI,YACnBwqD,EAAW1uC,QACjBtgC,KAAKwuE,YAAY9uD,OAAOsvD,IAExBhvE,KAAKmK,OAAOxI,MAAM,yCAA0Cu8B,EAAyB0wC,gBAIlFH,EAAS3iE,IAGlB,aAAMmZ,CAAQqyC,GACZA,EAAKxvD,SAASgE,IACZ,MAAMsjE,EAAYpvE,KAAKsuE,SAASvoE,IAAI+F,GAChCsjE,GACFpvE,KAAKqvE,cAAcD,GAAWnhE,OAAOtM,GACnC3B,KAAKmK,OAAOzI,KAAK,2BAA4B,CAAE0tE,YAAWztE,YAG9D3B,KAAKsuE,SAAS5uD,OAAO5T,EAAI,IAI7B,OAAAgiC,GACE,OAAO9tC,KAAKuuE,MAGN,oBAAMG,GACZ,MAAMlqD,EAAKxF,KAIX,MAAO,CACLwF,KACA1Y,IAAK,iBALY9L,KAAKirD,SAASh4B,SAAShW,eAC1BgW,YAIOzO,KAIjB,gBAAA8qD,GACN,OAAI7uE,EACK8uE,UAEFC,GAGD,kBAAMb,CAAaF,EAAwBgB,GACjD,MAAMC,QAAgB1vE,KAAK2vE,cAAclB,EAAUgB,GAC7CrwB,EAAK,IAAKp/C,KAAKsvE,mBAAV,CAA8BI,EAAQ5jE,IAAK,CAAC,oBAKvD,OAJAszC,EAAG1c,iBAAiB,SAAS,KAC3B1iC,KAAKmK,OAAOxI,MAAM,iBAAiB8sE,EAASjqD,MAAM,IAEpD46B,EAAGwwB,WAAa,cACTxwB,EAGD,mBAAMuwB,CAAclB,EAAwBgB,GAClD,MAOM7yD,SAPc5c,KAAKirD,SAASjmB,IAAInoB,aAAa,CACjDgzD,OAAQ,CACNpvC,GAAI,gBAAgBguC,EAASjqD,KAC7BirD,iBAIoB7yD,WAClBkzD,EAAkB,wBAAwBlzD,eAAwB5c,KAAKirD,SAAStnB,aAAaJ,SAC7Fz3B,EAAM,IAAIo0B,IAAI4vC,EAAiB9vE,KAAKirD,SAAStnB,aAAaF,UAIhE,OAHA33B,EAAIkzB,SAAW,MACfh/B,KAAKsuE,SAASroE,IAAIwoE,EAAS3iE,IAAK8Q,GAEzB,CAAE9Q,MAAKsjE,UAAWxyD,GAGnB,mBAAMyyD,CAAc7qD,SACpBxkB,KAAKirD,SAASjmB,IAAIloB,eAAe0H,GAGjC,OAAAqqD,CAAQzvB,EAAmB56B,EAAYuqD,GAC7C3vB,EAAG2wB,KACDtW,UAAO,CACLj1C,KACAuqD,aAKE,eAAAI,CAAgBnnE,EAAc62B,GACpCA,EAAKoS,MAAK,CAAC5tB,EAAGC,IAAMD,EAAEnE,OAASoE,EAAEpE,SACjC,MAAMS,EAAOkf,EAAK3tB,QAAO,CAACq3C,EAAKyJ,IAAQzJ,EAAMyJ,EAAI//C,QAAQ8rD,YAAY,GAC/D9+C,EAAM,IAAIP,WAAWiB,GAC3Bkf,EAAK/2B,SAASi5B,IACZ9hB,EAAIhZ,IAAI86B,EAAM9uB,QAAS8uB,EAAM7hB,OAAO,IAItC,MAAM8wD,EAAUC,GAAeC,SAACjxD,GAEhC,GAAIjX,IAASgoE,EACX,MAAM,IAAI5vE,EAAmB,iCAAiC4H,UAAagoE,KAE3E,OAAO/wD,GC9TG,SAAAkxD,GAA6BllB,EAAoB9gD,GAC/D,OAAO,IAAIkkE,GAAyBpjB,EAAU,CAC5C9gD,OAAQA,aAAM,EAANA,EAAQ5I,MAAM,YAE1B,cCHY6uE,IAAZ,SAAYA,GACVA,EAAA,sBAAA,wBACAA,EAAA,sBAAA,wBACAA,EAAA,yBAAA,2BACAA,EAAA,8BAAA,gCACAA,EAAA,uBAAA,yBACAA,EAAA,oBAAA,sBACAA,EAAA,2BAAA,6BACAA,EAAA,yBAAA,2BACAA,EAAA,0BAAA,4BACAA,EAAA,oBAAA,qBACD,CAXD,CAAYA,KAAAA,GAWX,CAAA,IACK,MAAOC,WAAuB9vE,EAIlC,WAAAX,CACEC,EACOW,EACPu6C,EACAzW,EACAttB,EACOlX,GAEPC,MAAMF,EAASW,EAAMV,GANdE,KAAIQ,KAAJA,EAIAR,KAAQF,SAARA,EATTwwE,GAAuBrqE,IAAAjG,UAAA,GACvBuwE,GAAqBtqE,IAAAjG,UAAA,GACrBwwE,GAAyBvqE,IAAAjG,UAAA,GAUvByM,GAAAzM,KAAIswE,GAAcv1B,EAAS,KAC3BtuC,GAAAzM,KAAIuwE,GAAajsC,EAAQ,KACzB73B,GAAAzM,KAAIwwE,GAAax5D,EAAQ,KAEpB,YAAA9B,GACL,OAAOlI,GAAAhN,KAAIswE,GAAA,KAEN,WAAAG,GACL,OAAOzjE,GAAAhN,KAAIuwE,GAAA,KAEN,WAAArpB,GACL,OAAOl6C,GAAAhN,KAAIwwE,GAAA,yDC/BFE,GAGX,WAAA9wE,CACU0N,EACA+gD,EACAlkD,GAFAnK,KAAQsN,SAARA,EACAtN,KAAequD,gBAAfA,EACAruD,KAAMmK,OAANA,EAERnK,KAAK2wE,OAAS,IAAIzjB,GAAO,IAkB3B,GAAA0jB,CAAIC,EAA6BC,GAM/B,OALIA,EACF9wE,KAAK2wE,OAAOpgD,IAAI,IAAIw9B,GAAI8iB,EAAqBC,IAE7C9wE,KAAK2wE,OAAOpgD,IAAI,IAAIw9B,GAAI,UAAW,CAAC,KAAM8iB,KAErC7wE,KAGT,QAAA+wE,CAASvhE,EAAcub,GAErB,OADA/qB,KAAK2wE,OAAOpgD,IAAI,IAAI49B,GAAS3+C,EAAMub,IAC5B/qB,KAGT,UAAAm3D,CAAWn2C,EAAagwD,GAEtB,OADAhxE,KAAK2wE,OAAOpgD,IAAI,IAAI69B,GAAWpuD,KAAKquD,gBAAiBrtC,EAAKgwD,IACnDhxE,KAGT,UAAAixE,CAAW7+D,EAAc4+D,GACvB,MAAMhwD,GAAM,IAAIw4C,aAAcC,OAAOh2D,KAAKC,UAAU0O,IAEpD,OADApS,KAAK2wE,OAAOpgD,IAAI,IAAIg+B,GAAWvuD,KAAKquD,gBAAiBrtC,EAAKgwD,IACnDhxE,KAGT,UAAAkxE,CAAWryC,EAAkBmyC,GAE3B,OADAhxE,KAAK2wE,OAAOpgD,IAAI,IAAIg+B,GAAWvuD,KAAKquD,gBAAiBxvB,EAAMmyC,IACpDhxE,KAGT,YAAAmxE,CAAanwD,EAAagwD,GAExB,OADAhxE,KAAK2wE,OAAOpgD,IAAI,IAAIk+B,GAAazuD,KAAKquD,gBAAiBrtC,EAAKgwD,IACrDhxE,KAMT,SAAMyhC,SACEzhC,KAAK2wE,OAAOtjB,SAElB,IACE,MAAM+jB,EAAuB,GACvBT,EAAS3wE,KAAK2wE,OAAOpjB,sBAE3BvtD,KAAKmK,OAAO3I,MAAM,2DAA4D,CAAEmvE,WAChF,MAAMU,QAA0BrxE,KAAKsN,SAASgkE,QAAQX,GAChDY,EAAUvxE,KAAKsN,SAASkkE,qBAAqBH,GAEnD,OAAO,IAAI9xE,SAAQ,CAACC,EAAS+N,KAC3BvN,KAAKmK,OAAO3I,MAAM,2CAElB+vE,EAAQn+C,UAAU,CAChBvT,KAAOggB,IACL7/B,KAAKmK,OAAO3I,MAAM,2CAA4C,CAAEq+B,QAChEuxC,EAAW9pE,KAAKu4B,EAAI,EAEtB1N,SAAU,KACRnyB,KAAKmK,OAAO3I,MAAM,iCAClBxB,KAAK2wE,OACFrpB,MAAM8pB,GACNtjE,MAAM06C,GAAYhpD,EAAQgpD,KAC1Bv6C,OAAOtM,GAAU4L,EAAO5L,IAAO,EAEpCA,MAAQA,IACN,MAAM8vE,EACJ9vE,aAAiB0uE,GACb1uE,EACA,IAAI0uE,GACF,4BAA4B1uE,IAC5ByuE,GAAcsB,sBACd1xE,KAAKsN,SAASg3B,SAASyW,UACvB/6C,KAAKsN,SAASg3B,SACdtkC,KAAKsN,SAASg3B,SAASyW,UAAU/jC,SACjCrV,GAER3B,KAAKmK,OAAO3I,MAAM,kCAAmC,CAAEG,UACvD3B,KAAK2wE,OACFrpB,MAAM8pB,GACNtjE,MAAK,IAAMP,EAAOkkE,KAClBxjE,OAAM,IAAMV,EAAOkkE,IAAY,GAEpC,IAEJ,MAAO9vE,GAKP,GAJA3B,KAAKmK,OAAOxI,MAAM,6DAA8D,CAAEA,gBAG5E3B,KAAK2wE,OAAOrpB,MAAM,IACpB3lD,aAAiB0uE,GACnB,MAAM1uE,EAER,MAAM,IAAI0uE,GACR,4BAA4B1uE,IAC5ByuE,GAAcsB,sBACd1xE,KAAKsN,SAASg3B,SAASyW,UACvB/6C,KAAKsN,SAASg3B,SACdtkC,KAAKsN,SAASg3B,SAASyW,UAAU/jC,SACjCrV,IAKN,eAAMgwE,GACJ,MAAMhB,EAAS3wE,KAAK2wE,OAEpB,IAAIU,QADEV,EAAOtjB,SAEb,IACEgkB,QAA0BrxE,KAAKsN,SAASgkE,QAAQtxE,KAAK2wE,OAAOpjB,uBAC5D,MAAO5rD,GAGP,SADMgvE,EAAOrpB,MAAM,IACf3lD,aAAiB0uE,GACnB,MAAM1uE,EAER,MAAM,IAAI0uE,GACR,4BAA4B1uE,IAC5ByuE,GAAcsB,sBACd1xE,KAAKsN,SAASg3B,SAASyW,UACvB/6C,KAAKsN,SAASg3B,SACdtkC,KAAKsN,SAASg3B,SAASyW,UAAU/jC,SACjCrV,GAGJ,MAAMiwE,EAA2B,IAC3BttC,SAAEA,GAAatkC,KAAKsN,SAE1B,OADgBtN,KAAKsN,SAASkkE,qBAAqBH,GACpCt9C,KACbjtB,IAAKi6B,IACH,GAAqB,UAAjBA,EAAMxuB,OACR,OAAOwuB,EAET,MAAM,IAAIsvC,GACR,GAAGtvC,aAAK,EAALA,EAAOlhC,oBAAoBiD,OAAOi+B,aAAA,EAAAA,EAAO4rB,QAAQ3oC,mBAAmBlhB,OAAOi+B,aAAK,EAALA,EAAO6rB,QAAQ5oC,SAC7FosD,GAAcsB,sBACdptC,EAASyW,UACTzW,EACAA,EAASttB,SACV,IAEHykB,IAAKsF,IACH6wC,EAAetqE,KAAKy5B,EAAM,IAE5BnG,IAAS,IACP+1C,EAAOrpB,MAAMsqB,GAAgB3jE,OAAOtM,GAAU3B,KAAKmK,OAAOxI,MAAM,2BAA4B,CAAEA,gBC7KtG,MAAMquC,GACgB,UAMT6hC,GAgBX,WAAAjyE,CACmBkyE,EACjBC,EACQztC,EACSn6B,GAHAnK,KAAc8xE,eAAdA,EAET9xE,KAAQskC,SAARA,EACStkC,KAAMmK,OAANA,EAhBVnK,KAAA2sD,OAAoC,IAAI33B,GAIxCh1B,KAAA4sD,OAAoC,IAAI53B,GAc/Ch1B,KAAK+7C,aAAeg2B,EACjBh+C,KACC6G,IAAS,KACP56B,KAAK2sD,OAAOx6B,WACZnyB,KAAK4sD,OAAOz6B,UAAU,KAGzBiB,UAAU,CACTvT,KAAOtN,IACLvS,KAAKgyE,WAAaz/D,EACdA,EAAOo6C,QAAQ3sD,KAAK2sD,OAAO9sC,KAAKtN,EAAOo6C,QACvCp6C,EAAOq6C,QAAQ5sD,KAAK4sD,OAAO/sC,KAAKtN,EAAOq6C,OAAO,EAEpDjrD,MAAQA,IACN3B,KAAKiyE,YAActwE,CAAK,IAUhC,WAAAuwE,CAAY59D,GACV,OAAO,IAAI/U,SAAQ,CAACC,EAAS+N,KAC3B,MAAM4kE,EAAc79D,QAAAA,EAAW07B,GACzBa,EAAYpxC,YAAW,KAC3B8N,EACE,IAAI8iE,GACF,qDAAqD8B,+CACrD/B,GAAcgC,8BACdpyE,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,SACd,IAAI1W,EAAkB,qBAAqB6xE,kDAG/CnyE,KAAK8xE,eACFt5D,gBAAgBxY,KAAKskC,UACrBr2B,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,iCAAkC2N,IAAK,GAC1E6iE,GACG1wC,EAAM,KACVlQ,aAAasf,GACT7wC,KAAKgyE,WACPxyE,EAAQQ,KAAKgyE,aAEbzkE,EACE,IAAI8iE,GACF,mDAAmDrwE,KAAKiyE,cACxD7B,GAAcgC,8BACdpyE,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,WAGlBhX,KAAK8xE,eACFt5D,gBAAgBxY,KAAKskC,UACrBr2B,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,iCAAkC2N,OAG1EtP,KAAK+7C,aAAaxrB,KAAI,IAAMkR,KAAM,IAOtC,UAAA7E,GACE,OAAO58B,KAAK+7C,aAAa3sB,wBC3DhBijD,GASX,WAAAzyE,CAImB0yE,EAIAC,EAIjB7vE,EAAoC,CAAA,SARnB1C,KAAKsyE,MAALA,EAIAtyE,KAAMuyE,OAANA,EAdHvyE,KAAAk9B,OAAS,IAAIqF,GAoB3BphC,EAAuC,aAEvCnB,KAAKwyE,aAAuC,QAAxB5nE,EAAAlI,EAAQ8vE,oBAAgB,IAAA5nE,EAAAA,EAAA,GAC5C5K,KAAKmK,OAASzH,EAAQyH,OAASzH,EAAQyH,OAAO5I,MAAM,aAAeqI,EAAc,aAEjF5J,KAAKyyE,OAAS5tC,GAAI6tC,cAAcC,IAC9B3yE,KAAKmK,OAAO3I,MAAM,kCAElB,MAAMmL,EAAQ,CAEZimE,QAAQ,EAERC,QAAS,GAETC,SAAS,EAETC,SAAU,IAGNC,EAAoB,IAAOrmE,EAAMkmE,QAAU,GAC3CI,EAAuB,IAAOtmE,EAAMomE,SAAW,GAG/CG,EAAoB,KACxBlzE,KAAKmK,OAAO3I,MAAM,0BACdmL,EAAMkmE,QAAQjwE,OAAS,GACzB+vE,EAAOjb,MAAMnoD,GAAOqe,OAAOjhB,EAAMkmE,UAEnCG,GAAmB,EAGfG,EAAuB,KAC3BnzE,KAAKmK,OAAO3I,MAAM,6BACdmL,EAAMomE,SAASnwE,OAAS,GAC1Bw8C,EAAG2wB,KAAKxgE,GAAOqe,OAAOjhB,EAAMomE,UAAW,CACrCtf,QAAQ,EACR2f,MAAM,IAGVH,GAAsB,EAGlBI,EAAiB,KACrBj0B,EAAG9e,QACHqyC,EAAOlxC,MACPwxC,IACAD,GAAmB,EAGf5zB,EAAK,IAAImwB,GAAAA,UAAUvvE,KAAKsyE,MAAO,CAAEthE,QAAS,CAAEsiE,cAAe,UAAUtzE,KAAKuyE,YAGhFnzB,EAAG3e,GAAG,QAAQ,KACZzgC,KAAKmK,OAAO3I,MAAM,mBAClBmL,EAAMmmE,SAAU,EAEhBK,GAAsB,IAIxBR,EAAOlyC,GAAG,WAAW,KACnBzgC,KAAKmK,OAAO3I,MAAM,2BAClBmL,EAAMimE,QAAS,EAEfM,GAAmB,IAIrB9zB,EAAG3e,GAAG,SAAU9+B,IACd3B,KAAKuzE,cAAc,gCAAiC5xE,GACpD0xE,GAAgB,IAGlBV,EAAOlyC,GAAG,SAAU9+B,IAClB3B,KAAKuzE,cAAc,qCAAsC5xE,GACzD0xE,GAAgB,IAMlBj0B,EAAG3e,GAAG,SAAS,KACbrE,cAAco3C,GACdxzE,KAAKmK,OAAO3I,MAAM,mBAClBmxE,EAAOlxC,MACPwxC,IACAD,GAAmB,IAGrB5zB,EAAG3e,GAAG,OAAO,KACXzgC,KAAKmK,OAAO3I,MAAM,gBAClBmxE,EAAOlxC,MACPwxC,IACAD,GAAmB,IAIrBL,EAAOlyC,GAAG,SAAU9+B,IACdA,EACF3B,KAAKmK,OAAOxI,MAAM,wDAElB3B,KAAKmK,OAAO3I,MAAM,uDAEpB49C,EAAG9e,QACH2yC,IACAD,GAAmB,IAKrBL,EAAOlyC,GAAG,QAAQrwB,MAAO2wB,IACvB/gC,KAAKmK,OAAO3I,MAAM,8BAA+B,CAAEoB,OAAQm+B,EAAMn+B,OAAQkwE,QAASnmE,EAAMmmE,UACnFnmE,EAAMmmE,QAGT1zB,EAAG2wB,KAAKhvC,EAAO,CAAE0yB,QAAQ,EAAM2f,MAAM,IAFrCzmE,EAAMomE,SAASzrE,KAAKy5B,MAOxBqe,EAAG3e,GAAG,WAAY5gC,IAChB,MAAM+C,EAAS,WAAY/C,EAAUA,EAAQ+C,OAAS,KACtD5C,KAAKmK,OAAO3I,MAAM,yBAA0B,CAAEoB,SAAQ6wE,YAAa9mE,EAAMimE,SACrE/yE,aAAmB0P,GAChB5C,EAAMimE,OAGTD,EAAOjb,MAAM73D,GAFb8M,EAAMomE,SAASzrE,KAAKzH,GAMtBG,KAAKmK,OAAOxI,MAAM,iDAAkD9B,MAKxEu/C,EAAG3e,GAAG,QAAQ,KACZzgC,KAAKmK,OAAO3I,MAAM,+BAA+B,IAInD,IAAIkyE,GAAU,EAEd,MAgBMF,EAAev3C,aAhBH,KAChB,GAAItvB,EAAMmmE,QAAS,CAEjB,GADA9yE,KAAKmK,OAAO3I,MAAM,6CACbkyE,EAGH,OAFA1zE,KAAKuzE,cAAc,2DAEZn0B,EAAGu0B,YAGZD,GAAU,EACVt0B,EAAGw0B,YAEH5zE,KAAKmK,OAAO3I,MAAM,oDAI0C,IAApBxB,KAAKwyE,cAEjDpzB,EAAG3e,GAAG,QAAQ,KACZzgC,KAAKmK,OAAO3I,MAAM,gCAClBkyE,GAAU,CAAI,GACd,IAGJ1zE,KAAK6zE,0BASA,YAAMhE,CAAOh0D,EAAc/J,GAQhC,OAPA9R,KAAKmK,OAAO3I,MAAM,6BAElBxB,KAAKyyE,OAAO5C,OAAO,CACjBh0D,OACAlK,OAAQG,EAAQA,EAAMH,YAASP,IAG1B,IAAI7R,SAAc,CAACC,EAAS+N,KACjC,MAAMumE,EAAexkE,IACnBtP,KAAKuzE,cAAc,qCAAsC,CAAE13D,OAAMvM,QACjEtP,KAAKyyE,OAAO3vC,eAAe,YAAaixC,GACxCxmE,EAAO+B,EAAI,EAGPykE,EAAe,KACnB/zE,KAAKmK,OAAO1I,KAAK,wBAAyB,CAAEoa,SAC5C7b,KAAKyyE,OAAO3vC,eAAe,QAASgxC,GACpCt0E,GAAS,EAGXQ,KAAKyyE,OAAOznC,KAAK,YAAa+oC,GAC9B/zE,KAAKyyE,OAAOznC,KAAK,QAAS8oC,EAAY,IAOnC,KAAAxzC,GAEL,OADAtgC,KAAKmK,OAAO3I,MAAM,0CACX,IAAIjC,SAAc,CAACC,EAAS+N,WAC7BvN,KAAKyyE,OAAOuB,UACH,QAAXppE,EAAA5K,KAAKyyE,cAAM,IAAA7nE,GAAAA,EAAE01B,OAAOhxB,IACdA,GACFtP,KAAKuzE,cAAc,kCAAmCjkE,GACtD/B,EAAO+B,KAEPtP,KAAKmK,OAAO1I,KAAK,qCACjBjC,SAIJQ,KAAKmK,OAAO1I,KAAK,yCACjBjC,QAKE,aAAA+zE,CAAc1zE,EAAiByP,GACrCtP,KAAKmK,OAAOxI,MAAM9B,EAASyP,GAC3BtP,KAAKk9B,OAAOyE,KAAK,QAAS,GAAG9hC,MAAYyP,KAGnC,uBAAAukE,GACN7zE,KAAKyyE,OAAOhyC,GAAG,aAAa,IAAMzgC,KAAKmK,OAAO3I,MAAM,kCACpDxB,KAAKyyE,OAAOhyC,GAAG,SAAS,IAAMzgC,KAAKmK,OAAO3I,MAAM,uBAChDxB,KAAKyyE,OAAOhyC,GAAG,cAAc,IAAMzgC,KAAKmK,OAAO3I,MAAM,wCACrDxB,KAAKyyE,OAAOhyC,GAAG,QAAS5B,GACtB7+B,KAAKmK,OAAO3I,MAAM,uEAAwE,CAAEq9B,WAE9F7+B,KAAKyyE,OAAOhyC,GAAG,SAAUnxB,GAAQtP,KAAKmK,OAAOxI,MAAM,uBAAwB2N,YC9OlE2kE,GAUX,WAAAr0E,CACkB0kC,EACAwtC,EACRpvE,aAFQ1C,KAAQskC,SAARA,EACAtkC,KAAc8xE,eAAdA,EACR9xE,KAAO0C,QAAPA,EAER1C,KAAKmK,OAA4B,QAAnBS,EAAAlI,aAAO,EAAPA,EAASyH,cAAU,IAAAS,EAAAA,EAAAhB,EAAc,QAC/C5J,KAAKgX,SAAWstB,EAASttB,SACzBhX,KAAKquD,gBAA0C,QAAxB1+B,EAAAjtB,aAAA,EAAAA,EAAS2rD,uBAAe,IAAA1+B,EAAAA,EAAI,IAAIsoC,GAEvDj4D,KAAKk0E,YAAcxxE,aAAA,EAAAA,EAASwxE,YAC5Bl0E,KAAKk8B,YAAc+J,GAA6BvjC,aAAA,EAAAA,EAAS6pC,iBACzDvsC,KAAKsN,SAAWtN,KAAK8xE,eAAeqC,qBAAqBn0E,KAAKskC,SAAU,YACnE9O,EAAAx1B,KAAK0C,8BAAS0xE,iBACjB7nC,gBAAiBvsC,KAAKk8B,cAIlB,gBAAMm4C,GACZ,GAAIr0E,KAAKk8B,YAAYC,QACnB,MAAM,IAAIj8B,EAAgB,4BAE5B,OAAOF,KAAK8xE,eACTwC,gBAAgBt0E,KAAKskC,UACrBx2B,MAAMw2B,GAAaA,EAASwY,aAC5B7uC,OAAOqB,IAEN,MADAtP,KAAKmK,OAAOxI,MAAM,gCAAiC2N,GAC7C,IAAI+gE,GACR,gCACAD,GAAcmE,0BACdv0E,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLh1B,EACD,IASP,WAAMklE,GACJ,IACE,IAAI7nE,QAAc3M,KAAKq0E,aACvB,GAAI1nE,IAAUs/C,GAAkBwoB,MAE9B,kBADMz0E,KAAK00E,gBAWb,GAPI/nE,IAAUs/C,GAAkB0oB,mBACxB30E,KAAK40E,uBAGPx1E,EAAM,KAAM,GAClBuN,QAAc3M,KAAKq0E,aAEf1nE,IAAUs/C,GAAkBwoB,MAAO,CACrC,MAAMI,GAAkB,IAAItwE,MAAOy4B,cACnC,MAAM,IAAIqzC,GACR,YAAYrwE,KAAKskC,SAAS9f,uCAAuCqwD,qBAAmCloE,IACpGyjE,GAAc0E,yBACd90E,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,gBAGZhX,KAAK00E,gBACX,MAAO/yE,GACP,GAAI3B,KAAKk8B,YAAYC,QACnB,KAAuC,iBAAjCn8B,KAAKk8B,YAAYxuB,OAAOxM,KAC1B,IAAIZ,EACF,iEACAN,KAAKk8B,YAAYxuB,QAEnB,IAAIxN,EAAgB,gDAAiDF,KAAKk8B,YAAYxuB,QAE5F,MAAM/L,GAQV,cAAM6uB,UACc,UAAdxwB,KAAK0C,eAAS,IAAAkI,OAAA,EAAAA,EAAA4lB,iBACVxwB,KAAK0C,QAAQ8tB,SAASxwB,MAIxB,oBAAM40E,WACZ,IACE,MAAMvD,QAA0BrxE,KAAKsN,SAASgkE,QAC5C,IAAIpkB,GAAO,CACT,IAAIW,GAAO,IACuC,UAA7B,QAAhBjjD,EAAA5K,KAAKk0E,mBAAW,IAAAtpE,OAAA,EAAAA,EAAEmqE,+BAA2B,IAAAplD,OAAA,EAAAA,EAAA1qB,KAAA2F,MAC7C5K,KAAKg1E,2BAEV,IAAIlnB,KACHP,uBAECgkB,EAAUvxE,KAAKsN,SAASkkE,qBAAqBH,SAE7C14C,GACJ44C,EAAQx9C,KACN0H,IAAKlpB,IACH,GAAsB,UAAlBA,EAAOA,OACT,MAAM,IAAI5S,MAAMmD,OAAOyP,EAAO1S,eAKtC,MAAO8B,GACP,MAAM,IAAI0uE,GACR,8BAA8B1uE,IAC9ByuE,GAAc0E,yBACd90E,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,SACdrV,IAKE,mBAAM+yE,UACM,UAAd10E,KAAK0C,eAAS,IAAAkI,OAAA,EAAAA,EAAA4pE,cACVx0E,KAAK0C,QAAQ8xE,MAAMx0E,MAoB7B,SAAM4wE,CAAIqE,EAAkBC,EAA2CxyE,GACrE,MAAMkN,EAAUD,MAAMC,QAAQslE,GAE9Bl1E,KAAKmK,OAAO3I,MAAM,kBAAmB,CACnC4rD,QAASx9C,EAAU,GAAGqlE,KAAYC,eAAAA,EAAeluE,KAAK,OAASiuE,EAC/Dj+D,SAAUhX,KAAKgX,SAAS9V,OAG1B,MAAM0vE,EAAMhhE,EACR,IAAIm+C,GAAIknB,EAAUC,EAA2BxyE,eAAAA,EAASkB,IAAKlB,aAAA,EAAAA,EAASsrD,SACpE,IAAID,GAAI,UAAW,CAAC,KAAMknB,GAAWC,aAAa,EAAbA,EAAetxE,IAAKsxE,aAAa,EAAbA,EAAelnB,SACtEmnB,EAAavlE,EAAUlN,EAAWwyE,EAExC,OAAOl1E,KAAKo1E,cAAcxE,EAAKuE,GAiBjC,kBAAME,CACJJ,EACAC,EACAxyE,GAEA,MACMsrD,EAAmB,CACvBrB,OAAQ,CAAE19C,OAAQ,CAAEnK,OAAQ,WAC5B8nD,OAAQ,CAAE39C,OAAQ,CAAEnK,OAAQ,YAExB8rE,EALUjhE,MAAMC,QAAQslE,GAM1B,IAAInnB,GAAIknB,EAAUC,EAA2BxyE,aAAA,EAAAA,EAASkB,IAAKoqD,GAC3D,IAAID,GAAI,UAAW,CAAC,KAAMknB,GAAWC,aAAA,EAAAA,EAAetxE,IAAKoqD,GACvD2iB,EAAS,IAAIzjB,GAAO,CAAC0jB,IAGrBS,QAA0BrxE,KAAKsN,SAASgkE,QAAQX,EAAOpjB,uBAEvDwkB,EAAkB/xE,KAAKsN,SAASkkE,qBACpCH,GACA,EACA3uE,aAAO,EAAPA,EAAS6pC,gBACT7pC,aAAO,EAAPA,EAAS4yE,YAGX,OAAO,IAAIzD,GAAc7xE,KAAK8xE,eAAgBC,EAAiB/xE,KAAKskC,SAAUtkC,KAAKmK,QAUrF,cAAM4mE,CAASvhE,EAAcub,EAAYroB,GAEvC,OADA1C,KAAKmK,OAAO3I,MAAM,eAAgB,CAAEgO,OAAMub,OACnC/qB,KAAKo1E,cAAc,IAAIjnB,GAAS3+C,EAAMub,GAAKroB,GAGpD,gBAAMy0D,CAAWn2C,EAAagwD,EAAatuE,GAEzC,OADA1C,KAAKmK,OAAO3I,MAAM,iBAAkB,CAAEwf,MAAKgwD,QACpChxE,KAAKo1E,cAAc,IAAIhnB,GAAWpuD,KAAKquD,gBAAiBrtC,EAAKgwD,GAAMtuE,GAI5E,UAAAuuE,CAAW7+D,EAAW4+D,EAAatuE,GACjC1C,KAAKmK,OAAO3I,MAAM,iBAAkB,CAAEwvE,QACtC,MAAMhwD,GAAM,IAAIw4C,aAAcC,OAAOh2D,KAAKC,UAAU0O,IACpD,OAAOpS,KAAKo1E,cAAc,IAAI7mB,GAAWvuD,KAAKquD,gBAAiBrtC,EAAKgwD,GAAMtuE,GAG5E,UAAAwuE,CAAWryC,EAAkBmyC,EAAatuE,GAExC,OADA1C,KAAKmK,OAAO3I,MAAM,iBAAkB,CAAEwvE,QAC/BhxE,KAAKo1E,cAAc,IAAI7mB,GAAWvuD,KAAKquD,gBAAiBxvB,EAAMmyC,GAAMtuE,GAG7E,YAAAyuE,CAAanwD,EAAagwD,EAAatuE,GAErC,OADA1C,KAAKmK,OAAO3I,MAAM,wBAAyB,CAAEwf,MAAKgwD,QAC3ChxE,KAAKo1E,cAAc,IAAI3mB,GAAazuD,KAAKquD,gBAAiBrtC,EAAKgwD,GAAMtuE,GAG9E,YAAA6yE,CAAav0D,EAAate,GAExB,OADA1C,KAAKmK,OAAO3I,MAAM,mBAAoB,CAAEwf,QACjChhB,KAAKo1E,cAAc,IAAIxmB,GAAa5uD,KAAKquD,gBAAiBrtC,GAAMte,GAGzE,kBAAM8yE,CAAax0D,EAAate,GAC9B1C,KAAKmK,OAAO3I,MAAM,mBAAoB,CAAEwf,QACxC,MAAMzO,QAAevS,KAAKu1E,aAAav0D,EAAKte,GAC5C,MAAsB,OAAlB6P,EAAOA,OACF,IAAIk6C,GAAO,IACbl6C,EACHssB,UAAMztB,IAIH,IAAIq7C,GAAO,IACbl6C,EACHssB,KAAMp7B,KAAKN,OAAM,IAAIm2D,aAAcC,OAAOhnD,EAAOssB,SAIrD,UAAA42C,GACE,OAAO,IAAI/E,GAAM1wE,KAAKsN,SAAUtN,KAAKquD,gBAAiBruD,KAAKmK,QAQ7D,eAAAurE,CAAgB75D,GACd,IAAK7b,KAAKk0E,YACR,MAAM,IAAI7D,GACR,uCACAD,GAAcuF,oBACd31E,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,UAGlB,OAAOhX,KAAKk0E,YAAYwB,gBAAgB75D,GAG1C,KAAA+5D,GACE,IAAK51E,KAAKk0E,YACR,MAAM,IAAI7D,GACR,uCACAD,GAAcuF,oBACd31E,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,UAElB,OAAOhX,KAAKk0E,YAAYt4D,GAQ1B,cAAAi6D,CAAeC,WACb,KAA+B,QAA1BnmD,EAAY,QAAZ/kB,EAAA5K,KAAK0C,eAAO,IAAAkI,OAAA,EAAAA,EAAE+4B,oBAAY,IAAAhU,OAAA,EAAAA,EAAE4T,QAC/B,MAAM,IAAIpjC,EAAiB,wEAG7B,OAAO,IAAIkyE,GAASryE,KAAK01E,gBAAgBI,GAAiB91E,KAAK0C,QAAQihC,aAAaJ,OAAQ,CAC1Fp5B,OAAQnK,KAAKmK,SAIjB,MAAA++B,GACE,MAAO,CACLlyB,SAAUhX,KAAKgX,SACfwN,GAAIxkB,KAAKskC,SAAS9f,GAClBu2B,UAAW/6C,KAAKskC,SAASyW,WAIrB,mBAAMq6B,CAAiBhoB,EAAqB1qD,GAElD,MAAMiuE,EAAS,IAAIzjB,GAAO,CAACE,UACrBujB,EAAOtjB,SAASp/C,OAAO4E,YAC3B,MAAM,IAAIw9D,GACR,6CAA6C5sE,KAAKC,UAAU0pD,EAAQI,eAC/C,QAAnB79B,EAAa,QAAb/kB,EAAAiI,aAAA,EAAAA,EAAGhH,gBAAU,IAAAjB,OAAA,EAAAA,EAAAi0B,YAAM,IAAAlP,OAAA,EAAAA,EAAA9vB,WAAWgT,aAAC,EAADA,EAAGhT,UAAWgT,IAE9Cu9D,GAAc2F,2BACd/1E,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,SACdnE,EACD,UAEGzT,EAAM,KAAK,GAGjB,MAAMiyE,QAA0BrxE,KAAKsN,SAASgkE,QAAQX,EAAOpjB,uBACvDgkB,EAAUvxE,KAAKsN,SAASkkE,qBAC5BH,GACA,EACA3uE,aAAO,EAAPA,EAAS6pC,gBACT7pC,aAAO,EAAPA,EAAS4yE,YAIX,IAAIlE,QAAgCz4C,GAAc44C,EAAQx9C,K1FhanDK,IAAQ,SAAUb,EAAQC,GAC7BtiB,GAAOypB,GAAY,GAAnBzpB,CAAuBqiB,GAAQH,UAAUI,EACjD,M0F+ZI49C,QAAmBT,EAAOrpB,MAAM8pB,GAGhC,MAAM4E,EAAiB5E,EAAWlhE,QAAQ2vB,GAAuB,UAAfA,EAAIttB,SACtD,GAAIyjE,EAAepzE,OAAQ,CACzB,MAAMqzE,EAAeD,EAClBlvE,KACEwI,IACC,IAAA1E,EAAA+kB,EAAA,MAAA,UAAUrgB,EAAIzP,oBAA8B,QAAV+K,EAAA0E,EAAIq9C,cAAM,IAAA/hD,OAAA,EAAAA,EAAEpE,WAAWwd,mBAA+B,QAAZ2L,EAAArgB,EAAIs9C,cAAQ,IAAAj9B,OAAA,EAAAA,EAAAnpB,WAAWwd,QAAQ,IAE9Ghd,KAAK,MACRhH,KAAKmK,OAAOzI,KAAK,aAAc,CAC7BsV,SAAUhX,KAAKgX,SAAS9V,KACxBS,MAAOs0E,IAIX,OAAO7E,EAAW,GAGZ,sBAAA4D,SACN,KAAmB,QAAdpqE,EAAA5K,KAAK0C,eAAS,IAAAkI,OAAA,EAAAA,EAAAsrE,SACjB,MAAO,CAAE,EAGX,MAAM9iB,EAAkD,CACtD8iB,QAAS,CAAE,GAGb,IAAK,MAAM,CAAGC,KAAexwE,OAAOkK,QAAQ7P,KAAK0C,QAAQwzE,SACvD9iB,EAAS8iB,QAAQC,EAAWljE,MAAQ,CAClCzK,QAAS,CAAEmX,KAAM,GAAGw2D,EAAWC,WAAY5jE,OAAQ,UAIvD,OAAO4gD,GCtcJhjD,eAAeimE,GAAep/C,EAAqBq/C,GACxD,IAAIzlC,EAQJ,OAAOtxC,QAAQstC,KAAK,CAAC5V,GAPJs/C,EAOqBD,EANpC,IAAI/2E,SAAQ,CAAC4Q,EAAG5C,KACdsjC,EAAYpxC,YACV,IAAM8N,EAAO,IAAIjN,EAAkB,2CACnCi2E,EACD,OAE8CpoE,SAAQ,IAAMojB,aAAasf,KAP9D,IAAC0lC,CAQnB,WCZA,SAASC,GAAeC,EAAU/zE,GAET,kBAAZA,IACTA,EAAU,CAAEg0E,QAASh0E,IAGvB1C,KAAK22E,kBAAoBlzE,KAAKN,MAAMM,KAAKC,UAAU+yE,IACnDz2E,KAAK42E,UAAYH,EACjBz2E,KAAK62E,SAAWn0E,GAAW,CAAE,EAC7B1C,KAAK82E,cAAgBp0E,GAAWA,EAAQq0E,cAAgB79C,IACxDl5B,KAAKg3E,IAAM,KACXh3E,KAAKi3E,QAAU,GACfj3E,KAAKk3E,UAAY,EACjBl3E,KAAKm3E,kBAAoB,KACzBn3E,KAAKo3E,oBAAsB,KAC3Bp3E,KAAKq3E,SAAW,KAChBr3E,KAAKs3E,gBAAkB,KACvBt3E,KAAKu3E,OAAS,KAEVv3E,KAAK62E,SAASH,UAChB12E,KAAKw3E,gBAAkBx3E,KAAK42E,UAAUpvE,MAAM,GAEhD,CACA,IAAAiwE,GAAiBjB,GAEjBA,GAAe14D,UAAU2rD,MAAQ,WAC/BzpE,KAAKk3E,UAAY,EACjBl3E,KAAK42E,UAAY52E,KAAK22E,kBAAkBnvE,MAAM,EAChD,EAEAgvE,GAAe14D,UAAU+sC,KAAO,WAC1B7qD,KAAKq3E,UACP9lD,aAAavxB,KAAKq3E,UAEhBr3E,KAAKu3E,QACPhmD,aAAavxB,KAAKu3E,QAGpBv3E,KAAK42E,UAAkB,GACvB52E,KAAKw3E,gBAAkB,IACzB,EAEAhB,GAAe14D,UAAUkkB,MAAQ,SAAS1yB,GAKxC,GAJItP,KAAKq3E,UACP9lD,aAAavxB,KAAKq3E,WAGf/nE,EACH,OAAO,EAET,IAAIooE,GAAc,IAAInzE,MAAOsjD,UAC7B,GAAIv4C,GAAOooE,EAAc13E,KAAKs3E,iBAAmBt3E,KAAK82E,cAGpD,OAFA92E,KAAKi3E,QAAQ3vE,KAAKgI,GAClBtP,KAAKi3E,QAAQtyE,QAAQ,IAAIhF,MAAM,qCACxB,EAGTK,KAAKi3E,QAAQ3vE,KAAKgI,GAElB,IAAIgF,EAAUtU,KAAK42E,UAAUvoD,QAC7B,QAAgBjd,IAAZkD,EAAuB,CACzB,IAAItU,KAAKw3E,gBAKP,OAAO,EAHPx3E,KAAKi3E,QAAQ/xE,OAAO,EAAGlF,KAAKi3E,QAAQr0E,OAAS,GAC7C0R,EAAUtU,KAAKw3E,gBAAgBhwE,OAAO,EAI5C,CAEE,IAAIvG,EAAOjB,KAqBX,OApBAA,KAAKu3E,OAAS93E,YAAW,WACvBwB,EAAKi2E,YAEDj2E,EAAKm2E,sBACPn2E,EAAKo2E,SAAW53E,YAAW,WACzBwB,EAAKm2E,oBAAoBn2E,EAAKi2E,UACtC,GAASj2E,EAAKk2E,mBAEJl2E,EAAK41E,SAASc,OACd12E,EAAKo2E,SAASM,SAIpB12E,EAAK+1E,IAAI/1E,EAAKi2E,UACf,GAAE5iE,GAECtU,KAAK62E,SAASc,OACd33E,KAAKu3E,OAAOI,SAGT,CACT,EAEAnB,GAAe14D,UAAU85D,QAAU,SAASllD,EAAImlD,GAC9C73E,KAAKg3E,IAAMtkD,EAEPmlD,IACEA,EAAWvjE,UACbtU,KAAKm3E,kBAAoBU,EAAWvjE,SAElCujE,EAAWhmD,KACb7xB,KAAKo3E,oBAAsBS,EAAWhmD,KAI1C,IAAI5wB,EAAOjB,KACPA,KAAKo3E,sBACPp3E,KAAKq3E,SAAW53E,YAAW,WACzBwB,EAAKm2E,qBACX,GAAOn2E,EAAKk2E,oBAGVn3E,KAAKs3E,iBAAkB,IAAI/yE,MAAOsjD,UAElC7nD,KAAKg3E,IAAIh3E,KAAKk3E,UAChB,EAEAV,GAAe14D,UAAUg6D,IAAM,SAASplD,GACtC9qB,QAAQxC,IAAI,4CACZpF,KAAK43E,QAAQllD,EACf,EAEA8jD,GAAe14D,UAAUmrB,MAAQ,SAASvW,GACxC9qB,QAAQxC,IAAI,8CACZpF,KAAK43E,QAAQllD,EACf,EAEA8jD,GAAe14D,UAAUmrB,MAAQutC,GAAe14D,UAAUg6D,IAE1DtB,GAAe14D,UAAUtL,OAAS,WAChC,OAAOxS,KAAKi3E,OACd,EAEAT,GAAe14D,UAAUi6D,SAAW,WAClC,OAAO/3E,KAAKk3E,SACd,EAEAV,GAAe14D,UAAUk6D,UAAY,WACnC,GAA4B,IAAxBh4E,KAAKi3E,QAAQr0E,OACf,OAAO,KAOT,IAJA,IAAIq1E,EAAS,CAAE,EACXD,EAAY,KACZE,EAAiB,EAEZhxE,EAAI,EAAGA,EAAIlH,KAAKi3E,QAAQr0E,OAAQsE,IAAK,CAC5C,IAAIvF,EAAQ3B,KAAKi3E,QAAQ/vE,GACrBrH,EAAU8B,EAAM9B,QAChBs9B,GAAS86C,EAAOp4E,IAAY,GAAK,EAErCo4E,EAAOp4E,GAAWs9B,EAEdA,GAAS+6C,IACXF,EAAYr2E,EACZu2E,EAAiB/6C,EAEvB,CAEE,OAAO66C,CACT,cCjKA,IAAIxB,EAAiB7uE,GAErBS,EAAoB+vE,UAAA,SAASz1E,GAC3B,IAAI+zE,EAAWruE,EAAQquE,SAAS/zE,GAChC,OAAO,IAAI8zE,EAAeC,EAAU,CAChCC,QAASh0E,IAAYA,EAAQg0E,SAAWh0E,EAAQ01E,UAAYl/C,KAC5Dy+C,MAAOj1E,GAAWA,EAAQi1E,MAC1BZ,aAAcr0E,GAAWA,EAAQq0E,cAEtC,EAED3uE,EAAmBquE,SAAA,SAAS/zE,GAC1B,GAAIA,aAAmBiN,MACrB,MAAO,GAAGie,OAAOlrB,GAGnB,IAAImH,EAAO,CACTuuE,QAAS,GACTC,OAAQ,EACRC,WAAY,IACZC,WAAYr/C,IACZs/C,WAAW,GAEb,IAAK,IAAIzwE,KAAOrF,EACdmH,EAAK9B,GAAOrF,EAAQqF,GAGtB,GAAI8B,EAAKyuE,WAAazuE,EAAK0uE,WACzB,MAAM,IAAI54E,MAAM,yCAIlB,IADA,IAAI82E,EAAW,GACNvvE,EAAI,EAAGA,EAAI2C,EAAKuuE,QAASlxE,IAChCuvE,EAASnvE,KAAKtH,KAAKy4E,cAAcvxE,EAAG2C,IAYtC,OATInH,GAAWA,EAAQg0E,UAAYD,EAAS7zE,QAC1C6zE,EAASnvE,KAAKtH,KAAKy4E,cAAcvxE,EAAG2C,IAItC4sE,EAASxlC,MAAK,SAAS5tB,EAAEC,GACvB,OAAOD,EAAIC,CACf,IAESmzD,CACR,EAEDruE,EAAAqwE,cAAwB,SAASb,EAAS/tE,GACxC,IAAIuV,EAAUvV,EAAc,UACvBtH,KAAK6c,SAAW,EACjB,EAEA9K,EAAU/R,KAAKC,MAAM4c,EAAS7c,KAAKid,IAAI3V,EAAKyuE,WAAY,GAAK/1E,KAAKi8C,IAAI30C,EAAKwuE,OAAQT,IAGvF,OAFAtjE,EAAU/R,KAAK28C,IAAI5qC,EAASzK,EAAK0uE,WAGlC,EAEDnwE,EAAAswE,KAAe,SAASviD,EAAKzzB,EAASmmE,GAMpC,GALInmE,aAAmBiN,QACrBk5D,EAAUnmE,EACVA,EAAU,OAGPmmE,EAEH,IAAK,IAAI9gE,KADT8gE,EAAU,GACM1yC,EACU,mBAAbA,EAAIpuB,IACb8gE,EAAQvhE,KAAKS,GAKnB,IAAK,IAAIb,EAAI,EAAGA,EAAI2hE,EAAQjmE,OAAQsE,IAAK,CACvC,IAAIwK,EAAWm3D,EAAQ3hE,GACnB8tD,EAAW7+B,EAAIzkB,GAEnBykB,EAAIzkB,GAAU,SAAsBsjD,GAClC,IAAIlvC,EAAW1d,EAAQ+vE,UAAUz1E,GAC7ByB,EAAWwL,MAAMmO,UAAUtW,MAAMvC,KAAKyoB,UAAW,GACjDmN,EAAW12B,EAAKwkB,MAEpBxkB,EAAKmD,MAAK,SAASgI,GACbwW,EAAGkc,MAAM1yB,KAGTA,IACFoe,UAAU,GAAK5H,EAAGkyD,aAEpBn9C,EAASx1B,MAAMrF,KAAM0tB,WAC7B,IAEM5H,EAAG8xD,SAAQ,WACT5iB,EAAS3vD,MAAM8wB,EAAKhyB,EAC5B,GACA,EAAM0a,KAAKsX,EAAK6+B,GACZ7+B,EAAIzkB,GAAQhP,QAAUA,CAC1B,QClGA,ICCIi2E,GDDahxE,GC4DjB,IAAAixE,GAzDA,SAAelmD,EAAI7oB,GAsDjB,OAAO,IAAItK,SArDX,SAAaC,EAAS+N,GACpB,IACIuY,EADApjB,EAAUmH,GAAQ,CAAE,EAexB,SAASgvE,EAAKvpE,GACZ/B,EAAO+B,GAAO,IAAI3P,MAAM,WAC9B,CAEI,SAAS+0B,EAAQplB,EAAKmV,GAChBnV,EAAIupE,KACNA,EAAKvpE,GAIFwW,EAAGkc,MAAM1yB,GAEH5M,EAAQo2E,SACjBp2E,EAAQo2E,QAAQxpE,EAAKmV,GAFrBlX,EAAOuY,EAAGkyD,YAIlB,CA1BU,cAAet1E,IACnBA,EAAQ81E,WAAY,IAGtB1yD,EAAK6yD,GAAQR,UAAUz1E,IAyCpBk1E,SAjBH,SAAoBnzD,GAClB,IAAIhiB,EAEJ,IACEA,EAAMiwB,EAAGmmD,EAAMp0D,EAChB,CAAC,MAAOnV,GAEP,YADAolB,EAAQplB,EAAKmV,EAErB,CAEMllB,QAAQC,QAAQiD,GACbqL,KAAKtO,GACLyO,OAAM,SAAiBqB,GACtBolB,EAAQplB,EAAKmV,EACvB,GACA,GAGA,GAGA,WCnBA,MAAMs0D,GAA+B,CAAC,IAAK,WAE9BC,GAIX,WAAAp5E,CACkB0kC,EACCwtC,EACA3nE,EACjBzH,GAHgB1C,KAAQskC,SAARA,EACCtkC,KAAc8xE,eAAdA,EACA9xE,KAAMmK,OAANA,EAGjBnK,KAAK0C,QAAU,IAAIqqD,GAAgBrqD,GACnC1C,KAAKk8B,YAAc+J,GAA6BvjC,aAAA,EAAAA,EAAS6pC,iBASpD,aAAM+kC,CAAQX,GACnB,IACE3wE,KAAKk8B,YAAYsQ,iBACjB,MAAMl0B,QAAgBtY,KAAK+vE,KAAKY,GAC1BsI,EAAYx1E,KAAKN,MAAMwtE,EAAOt+D,MAAMzP,OAG1C,OADA5C,KAAKmK,OAAO3I,MAAM,eAAgB,CAAE8W,UAASq4D,WACtC,CAAEr4D,UAAS2gE,aAClB,MAAOt3E,GACP,MAAM9B,EAAUipD,GAAuBnnD,GAMvC,GAJA3B,KAAKmK,OAAOxI,MAAM,8BAA+B,CAC/C+L,OAAQ7N,IAGNG,KAAKk8B,YAAYC,QACnB,MAAM,IAAIj8B,EAAgB,wCAAyCF,KAAKk8B,YAAYxuB,QAGtF,MAAM,IAAI2iE,GACR,6BAA6BxwE,IAC7BuwE,GAAcsB,sBACd1xE,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,SACdrV,IAgBC,oBAAA6vE,CACLthC,EACAjhC,EACAs9B,EACA+oC,GAEA,MAAM3jE,OAAEA,EAAM80B,QAAEA,GAAYL,GAAepmC,KAAKk8B,YAAa+J,GAA6BsG,IAoB1F,OAAO5F,GAjBQ,IAAIxT,IAAmBK,IACpC,MAAM0lD,EAAW,IAAM,IAAIh5E,EAAgB,uCAAwCyR,EAAOjE,QAEtFiE,EAAOwqB,SACT3I,EAAW7xB,MAAMu3E,KAGnBvnE,EAAO+wB,iBAAiB,SAAS,KAC/BlP,EAAW7xB,MAAMu3E,IAAW,GAC5B,IAIajqE,EACbjP,KAAKm5E,eAAejpC,EAAM53B,QAAS43B,EAAM+oC,WACzCj5E,KAAKo5E,aAAalpC,EAAM53B,QAASg9D,IAEYvhD,KAAK6G,GAAS6L,IAGvD,UAAMspC,CAAKY,GACnB,OAAO0F,GAAYr2E,KAAK8xE,eAAeuH,cAAcr5E,KAAKskC,SAAUqsC,GAAS,KAGvE,YAAAyI,CAAa9gE,EAAiBg9D,GACpC,IACIzpD,EADAytD,GAAc,EAGlB,MAAQ90D,GAAI5M,EAAUmjC,UAAEA,GAAc/6C,KAAKskC,UAErC2oB,0CAAEA,EAAyCD,iCAAEA,GAAqChtD,KAAK0C,SACvFyH,OAAEA,EAAMm6B,SAAEA,EAAQwtC,eAAEA,GAAmB9xE,KAE7C,OAAO,IAAImzB,IAAoBK,IAC7B,MAAM+lD,EAAiBnpE,UACrB,IAAIkpE,EA8CJ,OA1CAnvE,EAAO3I,MAAM,mDAEPwgC,IACJ5xB,MAAOyoE,EAAMjB,aACXztE,EAAO3I,MAAM,mEAAmEo2E,KAChF,IACM0B,GACFT,EAAK,IAAIl5E,MAAM,sBAEjB,MAAM6oD,QAAgBspB,EAAe0H,gBACnCl1C,EACAhsB,OACAlH,EACA67C,GAGIwsB,EAAajxB,GAAWA,EAAQhhD,MAAMqkB,EAAY,GAExD1hB,EAAO3I,MAAM,mCAAoC,CAAEgnD,QAASixB,EAAY7hE,eAEpEjI,MAAMC,QAAQ6pE,IAAeA,EAAW72E,QAC1C62E,EAAW3xE,SAASyK,IAClBihB,EAAW3T,KAAKtN,GAChB+mE,IAAAA,IAAkB/mE,EAAOs6C,iBACzBhhC,EAAYtZ,EAAO3N,KAAK,IAG5B,MAAOjD,GACPwI,EAAO3I,MAAM,8CAA8Co2E,MAAYj2E,KACvE,MAAM+Q,UAAc9H,EAAAjJ,aAAA,EAAAA,EAAOoK,sBAAwB,QAAd4jB,EAAAhuB,EAAM7B,gBAAQ,IAAA6vB,OAAA,EAAAA,EAAE5jB,OACrD,GAAIgtE,GAA6BxnE,SAASmB,GACxC,MAAM/Q,EAENk3E,EAAKl3E,MAIX,CACEy2E,QAAS9C,QAAAA,EAActoB,EACvBurB,WAAY,OAGT7xC,GAA4B6yC,GA7CjC/lD,EAAWrB,UA6CqC,EAOpD,OAJAonD,IAAiBtrE,OAAOtM,IACtBwI,EAAOxI,MAAM,mCAAoCA,GACjD6xB,EAAW7xB,MAAMA,EAAM,IAElB,KACL23E,GAAc,CAAI,CACnB,IACAvlD,KACDkG,IAAYt4B,IACV,GAAIA,aAAiB0uE,GACnB,MAAM1uE,EAER,MAAM,IAAI0uE,GACR,mCAAmC1uE,IACnCyuE,GAAcgC,8BACdr3B,EACAzW,EACAA,EAASttB,SACTrV,EACD,KAKC,cAAAw3E,CAAe7gE,EAAiB2gE,GACtC,OAAOj5E,KAAK8xE,eAAe4H,4BAA4B15E,KAAKskC,SAAUhsB,GAASyb,KAC7EjtB,IAAK6yE,GAAiB35E,KAAK45E,mBAAmBD,EAAcV,MC3NxCj/C,ED4NTznB,IAAYA,EAAOs6C,gBC5NCgtB,GD4NgB,EC1N1CzlD,IAAQ,SAAUb,EAAQC,GAC7B,IAAI5uB,EAAQ,EACZ2uB,EAAOH,UAAUmB,GAAyBf,GAAY,SAAUjoB,GAC5D,IAAIgH,EAASynB,EAAUzuB,EAAO3G,MAC7B2N,GAAUsnE,IAAcrmD,EAAW3T,KAAKtU,IACxCgH,GAAUihB,EAAWrB,UAClC,IACA,KDqNM8H,IAAYt4B,IACV,MAAM,IAAI0uE,GACR,mCAAmC1uE,IACnCyuE,GAAcgC,8BACdpyE,KAAKskC,SAASyW,UACd/6C,KAAKskC,SACLtkC,KAAKskC,SAASttB,SACdrV,EACD,KCtOF,IAAmBq4B,EAAW6/C,ED2O3B,kBAAAD,CAAmBv8C,EAA4B47C,yBAGrD,MAAM1mE,EAAS,IAAIk6C,GAAO,CACxB7nD,MAAOy4B,EAAMz4B,MACb04B,UAAWD,EAAMyK,UACjBv1B,QAAmB,QAAX3H,EAAAyyB,aAAK,EAALA,EAAOzwB,YAAI,IAAAhC,OAAA,EAAAA,EAAEuyD,UACsB,KAAhB,QAAvB3nC,EAAa,QAAb7F,EAAA0N,aAAK,EAALA,EAAOzwB,YAAM,IAAA+iB,OAAA,EAAAA,EAAAwtC,gBAAU,IAAA3nC,OAAA,EAAAA,EAAAskD,aACrB,KACA,SACS,QAAXjkC,EAAAxY,aAAK,EAALA,EAAOzwB,YAAI,IAAAipC,OAAA,EAAAA,EAAE+W,QACX,QACA,KACND,OAAmB,QAAX5W,EAAA1Y,eAAAA,EAAOzwB,YAAI,IAAAmpC,OAAA,EAAAA,EAAE4W,OACrBC,OAAmB,QAAX9W,EAAAzY,eAAAA,EAAOzwB,YAAI,IAAAkpC,OAAA,EAAAA,EAAE8W,OACrB/sD,gBAASm2C,EAAa,QAAbC,EAAA5Y,aAAA,EAAAA,EAAOzwB,YAAM,IAAAqpC,OAAA,EAAAA,EAAAknB,+BAAUt9D,QAChCgtD,gBAAiBxvB,EAAMz4B,MAAQ,GAAKq0E,GAAac,QAAqB,QAAbC,EAAA38C,aAAK,EAALA,EAAOzwB,YAAM,IAAAotE,OAAA,EAAAA,EAAA7c,YAKxE,OAFAn9D,KAAKmK,OAAO3I,MAAM,yCAA0C,CAAE+Q,WAEvDA,SEvJE0nE,GAOX,WAAAr6E,CAA6B0uE,GAAAtuE,KAAQsuE,SAARA,EANbtuE,KAAAk9B,OAAuC,IAAIqF,GAE1CviC,KAAAmK,OAASP,EAAc,YAKtC5J,KAAKmK,OAASmkE,EAASnkE,OACvBnK,KAAKk6E,YAAc5L,EAAS4L,YAE9B,oBAAA/F,CAAqB7vC,EAAoB5hC,GACvC,OAAO,IAAIs2E,GAAkB10C,EAAUtkC,KAAMA,KAAKmK,OAAO5I,MAAM,YAAamB,GAG9E,mBAAM22E,CAAc/0C,EAAoBqsC,GACtC3wE,KAAKmK,OAAO3I,MAAM,+BAAgC,CAAEoW,WAAY0sB,EAAS9f,KACzE,IACExkB,KAAKk9B,OAAOyE,KAAK,aAAc,CAC7B2C,WACAqsC,WAGF,MAAMp+D,QAAevS,KAAKk6E,YAAYb,cAAc/0C,EAAUqsC,GAW9D,OATA3wE,KAAKk9B,OAAOyE,KAAK,iBAAkB,CACjC2C,eAAgBtkC,KAAKs0E,gBAAgBhwC,GAAUr2B,OAAM,KACnDjO,KAAKmK,OAAOzI,KAAK,oDAAqD,CAAEkW,WAAY0sB,EAAS9f,KACtF8f,KAETqsC,SACAp+D,WAGKA,EACP,MAAO5Q,GAUP,MATA3B,KAAKk9B,OAAOyE,KAAK,uBAAwB,CACvC2C,eAAgBtkC,KAAKs0E,gBAAgBhwC,GAAUr2B,OAAM,KACnDjO,KAAKmK,OAAOzI,KAAK,0DAA2D,CAAEkW,WAAY0sB,EAAS9f,KAC5F8f,KAETqsC,SACAhvE,UAGIA,GAGV,qBAAM63E,CACJl1C,EACAhsB,EACAC,EACAjE,GAEAtU,KAAKmK,OAAO3I,MAAM,yBAA0B,CAAEoW,WAAY0sB,EAAS9f,GAAIlM,YACvE,IACE,MAAMkwC,QAAgBxoD,KAAKk6E,YAAY7hE,oBAAoBisB,EAAUhsB,EAASC,EAAcjE,GAS5F,OARAtU,KAAKk9B,OAAOyE,KAAK,uBAAwB,CACvC2C,eAAgBtkC,KAAKs0E,gBAAgBhwC,GAAUr2B,OAAM,KACnDjO,KAAKmK,OAAOzI,KAAK,0DAA2D,CAAEkW,WAAY0sB,EAAS9f,KAC5F8f,KAEThsB,UACAkwC,YAEKA,EACP,MAAO7mD,GASP,MARA3B,KAAKk9B,OAAOyE,KAAK,2BAA4B,CAC3C2C,eAAgBtkC,KAAKs0E,gBAAgBhwC,GAAUr2B,OAAM,KACnDjO,KAAKmK,OAAOzI,KAAK,uDAAwD,CAAEkW,WAAY0sB,EAAS9f,KACzF8f,KAEThsB,UACA3W,UAEIA,GAGV,2BAAA+3E,CACEp1C,EACAhsB,EACAC,GAGA,OADAvY,KAAKmK,OAAO3I,MAAM,mCAAoC,CAAEoW,WAAY0sB,EAAS9f,GAAIlM,YAC1EtY,KAAKk6E,YAAYC,mBAAmB71C,EAAUhsB,EAASC,GAAcwb,KAC1E0H,IAAIrrB,MAAOitB,IACTr9B,KAAKk9B,OAAOyE,KAAK,sBAAuB,CACtC2C,eAAgBtkC,KAAKs0E,gBAAgBhwC,GAAUr2B,OAAM,KACnDjO,KAAKmK,OAAOzI,KAAK,yDAA0D,CAAEkW,WAAY0sB,EAAS9f,KAC3F8f,KAEThsB,UACA+kB,SACA,IAEJpD,IAAW7pB,MAAOzO,IAShB,MARA3B,KAAKk9B,OAAOyE,KAAK,0BAA2B,CAC1C2C,eAAgBtkC,KAAKs0E,gBAAgBhwC,GAAUr2B,OAAM,KACnDjO,KAAKmK,OAAOzI,KAAK,sDAAuD,CAAEkW,WAAY0sB,EAAS9f,KACxF8f,KAEThsB,UACA3W,UAEIA,CAAK,KAKjB,oBAAMwW,CAAe4iC,GACnB/6C,KAAKmK,OAAO3I,MAAM,oBAAqB,CACrC2T,YAAa4lC,EAAUv2B,GACvBxN,SAAU+jC,EAAU/jC,WAEtB,IACE,MAAMstB,QAAiBtkC,KAAKk6E,YAAY/hE,eAAe4iC,GAOvD,OANA/6C,KAAKk9B,OAAOyE,KAAK,kBAAmB,CAAE2C,aACtCtkC,KAAKmK,OAAO1I,KAAK,mBAAoB,CACnCmW,WAAY0sB,EAAS9f,GACrBrP,YAAa4lC,EAAUv2B,GACvBxN,SAAU+jC,EAAU/jC,WAEfstB,EACP,MAAO3iC,GAEP,MADA3B,KAAKk9B,OAAOyE,KAAK,wBAAyBhgC,GACpCA,GAIV,qBAAM6W,CAAgB8rB,GACpBtkC,KAAKmK,OAAO3I,MAAM,sBAAuB8iC,GACzC,IACE,MAAM81C,QAAgBp6E,KAAKk6E,YAAY1hE,gBAAgB8rB,GAWvD,OAVAtkC,KAAKk9B,OAAOyE,KAAK,oBAAqB,CACpC2C,SAAU81C,IAGZp6E,KAAKmK,OAAO1I,KAAK,qBAAsB,CACrCmW,WAAYwiE,EAAQ51D,GACpBrP,YAAailE,EAAQr/B,UAAUv2B,GAC/BxN,SAAUojE,EAAQr/B,UAAU/jC,WAGvBojE,EACP,MAAOz4E,GAEP,MADA3B,KAAKk9B,OAAOyE,KAAK,0BAA2B,CAAE2C,WAAU3iC,UAClDA,GAIV,qBAAM2yE,CAAgB+F,GAEpBr6E,KAAKmK,OAAO3I,MAAM,iCAAkC,CAClDoW,WAAYyiE,EAAc71D,GAC1B81D,UAAWD,EAAcv9B,aAE3B,IACE,MAAMy9B,QAAsBv6E,KAAKk6E,YAAYzJ,YAAY4J,EAAc71D,IAYvE,OAXI+1D,EAAcz9B,aAAey9B,EAAc/tB,qBAC7CxsD,KAAKmK,OAAO3I,MAAM,yBAA0B,CAC1CoW,WAAYyiE,EAAc71D,GAC1B6nC,cAAekuB,EAAc/tB,mBAC7BguB,SAAUD,EAAcz9B,aAE1B98C,KAAKk9B,OAAOyE,KAAK,uBAAwB,CACvC2C,SAAUi2C,EACVluB,cAAekuB,EAAc/tB,sBAG1B+tB,EACP,MAAO54E,GAKP,MAJA3B,KAAKk9B,OAAOyE,KAAK,0BAA2B,CAC1C2C,SAAU+1C,EACV14E,UAEIA,GAIV,sBAAM84E,CAAiB7iE,GAErB,OADA5X,KAAKmK,OAAO1I,KAAK,0BAA2B,CAAEmW,qBACjC5X,KAAKk6E,YAAYzJ,YAAY74D,GAG5C,mBAAM8iE,CAAcp2C,EAAoB5hC,GACtC1C,KAAKmK,OAAO3I,MAAM,iCAAkC,CAAEoW,WAAY0sB,EAAS9f,KAE3E,MAAMm2D,EAAM,IAAI1G,GAAQ3vC,EAAUtkC,KAAM,CACtC2jC,aAAc3jC,KAAKsuE,SAASpjB,MAAMvnB,aAClCx5B,OAAQnK,KAAKmK,OAAO5I,MAAM,eACvBmB,IAGL1C,KAAKmK,OAAO3I,MAAM,yCAA0C,CAAEoW,WAAY0sB,EAAS9f,KAEnF,UACQm2D,EAAInG,QACV,MAAMoG,QAA0B56E,KAAKs0E,gBAAgBhwC,GAAUr2B,OAAM,KACnEjO,KAAKmK,OAAOzI,KAAK,+DAAgE,CAAEkW,WAAY0sB,EAAS9f,KACjG8f,KAST,OAPAtkC,KAAKk9B,OAAOyE,KAAK,qBAAsB,CACrC2C,SAAUs2C,IAEZ56E,KAAKmK,OAAO1I,KAAK,uBAAwB,CACvCmW,WAAY0sB,EAAS9f,GACrB7X,MAAOiuE,EAAkB99B,aAEpB69B,EACP,MAAOh5E,GAUP,MATA3B,KAAKk9B,OAAOyE,KAAK,2BAA4B,CAC3C2C,eAAgBtkC,KAAKs0E,gBAAgBhwC,GAAUr2B,OAAM,KACnDjO,KAAKmK,OAAOzI,KAAK,iEAAkE,CACjFkW,WAAY0sB,EAAS9f,KAEhB8f,KAET3iC,UAEIA,6BCrUZgE,OAAOC,eAAcwC,GAAU,aAAc,CAAEmD,OAAO,IACtDnD,GAA2ByyE,iBAAAzyE,GAAA0yE,QAAkB1yE,gCAAuCA,GAA6B2yE,mBAAA3yE,GAAA4yE,oCAA8C5yE,6BAAoCA,GAAqC6yE,2BAAA7yE,GAAA8yE,0BAA+B,EAOvQ9yE,GAA+B8yE,qBAACz2D,GACrBA,EAAIje,SAAS,GASxB4B,GAAqC6yE,2BAACx2D,IAClC,IAAI02D,EAAe/yE,GAAQ8yE,qBAAqBz2D,GAEhD,GADa02D,EAAav4E,OACb,EACT,MAAM,IAAIjD,MAAM,iEAEpB,OAAOyI,GAAQ2yE,mBAAmBI,EAAc,EAAE,EAQtD/yE,GAAoCgzE,0BAAC32D,GAC1B65C,OAAO,KAAK75C,KASvBrc,GAA8C4yE,oCAACK,GACxBA,EAAcj0E,MAAM,KACnB8J,QAAO,CAACoqE,EAAgBC,IACjCD,EAAe1tD,OAAOxlB,GAAQ6yE,2BAA2B1xE,SAASgyE,MAC1E,IAQPnzE,GAAA2yE,mBAA6B,CAACI,EAAcK,KACxC,GAAIL,EAAav4E,OAAS44E,EACtB,MAAM,IAAI77E,MAAM,yEAAyE67E,KAE7F,MAAO,IAAI1jD,OAAO0jD,EAAoBL,EAAav4E,QAAQgrB,OAAOutD,EAAa,EAQnF/yE,GAAAqzE,6BAAuC,CAACC,EAAYC,KAChD,IAAIC,EAOJ,GALIA,EADU,QAAVD,EACiB,GAGA,IAEjBD,EAAaE,EACb,MAAMj8E,MAAM,yBAAyBi8E,KAGzC,MAAO,GAFM,IAAI9jD,OAAO4jD,KACV,IAAI5jD,OAAO8jD,EAAiBF,IACd,EAShCtzE,GAAkB0yE,QAACe,IACf,IAAItpE,EAAS,EACb,KAAOspE,EAAc,KAAO,IAAI,CAC5B,GAAoB,KAAhBA,EAAoB,CACpBtpE,IACA,KACZ,CAEQ,IADAspE,IAA6B,IACX,KAAO,GAAI,CACzBtpE,EAAS,EACT,KACZ,CACQA,GACR,CACI,GAAc,GAAVA,EACA,MAAM,IAAI5S,MAAM,yBAAyBk8E,EAAYr1E,gCAEzD,OAAO+L,CAAM,EAOjBnK,GAAAyyE,iBAA2B,CAACiB,EAAmBC,KAC3C,IAAIC,EACAC,EACAH,EAAkBl5E,QAAUm5E,EAAmBn5E,QAC/Co5E,EAAeF,EACfG,EAAcF,IAGdC,EAAeD,EACfE,EAAcH,GAElB,IAAI3+C,EAAQ,EACZ,KAAOA,EAAQ6+C,EAAap5E,QACpBo5E,EAAav3B,OAAOtnB,KAAW8+C,EAAYx3B,OAAOtnB,GADtBA,KAMpC,OAAOA,CAAK,8DCjIhBx3B,OAAOC,eAAes2E,GAAS,aAAc,CAAE3wE,OAAO,IACtD2wE,GAAAC,mBAA6BD,GAAAE,sBAA2B,EACxD,MAAMC,EAAgB10E,GAChB20E,EAActtE,KACpB,IAAIutE,EAAiBC,GACVA,EAAWjrE,SAAS,KAAO,IAAIirE,EAAWp1E,MAAM,KAAK,KAAO,UAU/C80E,GAAAE,iBAAII,IACxB,IAAIC,EAAkBC,GACAA,EAAiB51E,KAAK61E,GAC7BN,EAActB,mBAAmB4B,EAAa,KAEtC31E,KAAK,KAS5B,GAAI,UAAUS,KAAK+0E,GACf,KAAM,kDACV,MAAM5xC,EAAS2xC,EAAcC,GAK7B,GAJIA,EAAWjrE,SAAS,OACpBirE,EAAaA,EAAWp1E,MAAM,KAAK,KAEzBk1E,EAAYM,UAAUC,aAAap1E,KAAK+0E,GAElD,MAAM78E,MAAM28E,EAAYM,UAAUE,2BAEtC,GAAIN,EAAWjrE,SAAS,MAAO,CAC3B,IAAInK,EAAQo1E,EAAWp1E,MAAM,MACzB21E,EAAc31E,EAAM,GACpB41E,EAAe51E,EAAM,GACrB61E,EAAmBF,EAAY31E,MAAM,KAAK8I,QAAOysE,GAAwC,KAAhBA,IACzEO,EAAoBF,EAAa51E,MAAM,KAAK8I,QAAOysE,GAAwC,KAAhBA,IAC3EQ,EAvBgB,CAACC,IACrB,IAAIC,EAAO,GACX,IAAK,IAAIlgD,EAAQ,EAAGA,EAAQigD,EAAUjgD,IAClCkgD,EAAK/1E,KAAK,QAEd,OAAO+1E,EAAKr2E,KAAK,IAAI,EAkBDs2E,CAAkB,GAAKL,EAAiBr6E,OAASs6E,EAAkBt6E,SACnF26E,EAAad,EAAeQ,GACb,KAAfM,IACAA,GAAc,KAElB,IAAIC,EAAcf,EAAeS,GAIjC,MAHoB,KAAhBM,IACAA,EAAc,IAAMA,GAEjB,GAAGD,IAAaJ,IAAgBK,IAAc5yC,GAC7D,CAEQ,MAAO,GAAG6xC,EAAeD,EAAWp1E,MAAM,QAAQwjC,GAC1D,EAU0BsxC,GAAAC,mBAAIK,IAC1B,MAAM5xC,EAAS2xC,EAAcC,GAK7B,GAJIA,EAAWjrE,SAAS,OACpBirE,EAAaA,EAAWp1E,MAAM,KAAK,KAEzBk1E,EAAYM,UAAUC,aAAap1E,KAAK+0E,GAElD,MAAM78E,MAAM28E,EAAYM,UAAUE,2BAEtC,IAUIW,EAVejB,EAAWp1E,MAAM,KACeN,KAAK42E,IACpD,IAAIC,EAAqBD,EAAY74E,QAAQ,MAAO,IACpD,MAA2B,KAAvB84E,EACOA,EAGA,GACnB,IAEqD32E,KAAK,KAAKnC,QAAQ,+BAAgC,KACnG,MAA6B,MAAzB44E,EAAWj2E,OAAO,GACX,GAAGi2E,KAAc7yC,KAE5B6yC,EAAaA,EAAW54E,QAAQ,MAAO,MAChC,GAAG44E,IAAa7yC,IAAQ,gEC5FnCjlC,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IACtDnD,EAAAw1E,iCAA2Cx1E,kCAA0CA,EAAiDy1E,uCAAAz1E,EAAA01E,qCAA+C11E,EAA0C21E,gCAAA31E,EAAA41E,+BAAoC,EACnQ,MAAMC,EAAct2E,KACd00E,EAAgBrtE,GAMtB5G,EAAoC41E,0BAACv5D,GAC1BA,EAAIje,SAAS,IAOxB4B,EAA0C21E,gCAACG,GACvB5f,OAAO,KAAK4f,KACX13E,SAAS,GAQ9B4B,EAA+C01E,qCAACI,IAC5C,IAAI/C,EAAe/yE,EAAQ21E,gCAAgCG,GAE3D,GADa/C,EAAav4E,OACb,GACT,MAAM,IAAIjD,MAAM,uEAEpB,OAAO08E,EAActB,mBAAmBI,EAAc,GAAG,EAS7D/yE,EAAiDy1E,uCAACK,GAC3BD,EAAY7B,iBAAiB8B,GACX92E,MAAM,KAClB8J,QAAO,CAACoqE,EAAgBoC,IACtCpC,EAAe1tD,OAAOxlB,EAAQ01E,qCAAqCJ,KAC3E,IAOPt1E,EAA0C+1E,gCAAC15D,GAEvB65C,OAAO,KAAK75C,KACXje,SAAS,IAO9B4B,EAA2Cw1E,iCAACQ,GAC3BH,EAAY7B,iBAAiBgC,GAChBh3E,MAAM,KACZ8J,QAAO,CAACmtE,EAAqBC,IACtCD,EAAoBzwD,OAAOyuD,EAActB,mBAAmB3yE,EAAQ21E,gCAAgCO,GAAY,MACxH,gDCrEP34E,OAAOC,eAAe02E,GAAS,aAAc,CAAE/wE,OAAO,IACrC+wE,GAAAM,eAAG,EACpB,MAAMP,EAAgB10E,GAChB42E,EAAgB52E,GAChBs2E,EAAcjvE,KACdwvE,EAAqB1nE,KACrB2nE,EAAqB3nE,KAC3B,IAAA4nE,EAAA,MAAM9B,EASF,oBAAO+B,CAAcC,EAAUC,EAAYC,GACvC,OAAOF,GAAYC,GAAcD,GAAYE,CACrD,CAQI,uBAAOC,CAAiBC,GACpB,IAAI72C,EAAUnoC,KAAK2+E,cAAcK,EAAW,GAAIh/E,KAAKi/E,qBACrD,MAAO,CAAC92C,EAASA,EAAU,GAAK,CAACy0C,EAAUsC,wBACnD,CAQI,4BAAOC,CAAsBH,GACzB,IAAI72C,EAAUy0C,EAAU+B,cAAcK,EAAW,GAAIpC,EAAUwC,kBAC/D,MAAO,CAACj3C,EAASA,EAAU,GAAK,CAACy0C,EAAUyC,6BACnD,CAQI,wBAAOC,CAAkBC,GACrBA,EAAmC,iBAAfA,EAA0BA,EAAajhB,OAAOihB,GAClE,IAAIp3C,EAAUnoC,KAAK2+E,cAAcY,EAAY,GAAIv/E,KAAKi/E,qBACtD,OAAO92C,EAAU,CAACA,EAAS,IAAM,CAACA,EAAS,CAACy0C,EAAU4C,0BAC9D,CAQI,wBAAOC,CAAkBC,GACrB,IAAIv3C,EAAUnoC,KAAK2+E,cAAce,EAAY,GAAI1/E,KAAK2/E,uCACtD,OAAOx3C,EAAU,CAACA,EAAS,IAAM,CAACA,EAAS,CAACy0C,EAAUgD,0BAC9D,CAOI,uBAAOC,CAAiBC,GACpB,IAAIC,EAAc//E,KAAK2+E,cAAcmB,EAAa,GAAI9/E,KAAKggF,gBAC3D,MAAO,CAACD,EAAaA,EAAc,GAAK,CAACnD,EAAUqD,0BAC3D,CAQI,6BAAOC,CAAuBC,GAC1B,IAAIh4C,EAAUnoC,KAAK2+E,cAAcwB,EAAgB,GAAIngF,KAAKo/E,kBAC1D,OAAOj3C,EAAU,CAACA,EAAS,IAAM,CAACA,EAAS,CAACy0C,EAAUwD,2BAC9D,CAQI,wBAAOC,CAAkBC,GACrB,IAAIC,EAAYD,EAAWl5E,MAAM,KACjC,GAAwB,GAApBm5E,EAAU39E,QAAe29E,EAAUhvE,SAAS,IAC5C,MAAO,EAAC,EAAO,CAACqrE,EAAU4D,2BAE9B,IAAIr4C,EAAUo4C,EAAUx4D,OAAMwzD,KACnBqB,EAAU6D,UAAUlF,IAASqB,EAAUiD,iBAAiBvhB,OAAOid,IAAQ,KAElF,OAAKpzC,GAGLA,EAAUy0C,EAAU8D,aAAaj5E,KAAK64E,GAC/B,CAACn4C,EAASA,EAAU,GAAK,CAACy0C,EAAU+D,6BAHhC,EAAC,EAAO,CAAC/D,EAAUqD,0BAItC,CAQI,wBAAOW,CAAkBpE,GACrB,IACI,IAAIqE,EAAe5C,EAAY7B,iBAAiBI,GAAYp1E,MAAM,KAClE,GAA2B,GAAvBy5E,EAAaj+E,OACb,MAAO,EAAC,EAAO,CAACg6E,EAAUkE,iCAE9B,IAAI34C,EAAU04C,EAAa94D,OAAM40D,KACtBC,EAAUmE,cAAcpE,IAC3BC,EAAUsD,uBAAuB5hB,OAAO,KAAKqe,MAAgB,KAErE,OAAKx0C,GAGLA,EAAUy0C,EAAUC,aAAap1E,KAAK+0E,GAC/B,CAACr0C,EAASA,EAAU,GAAK,CAACy0C,EAAUE,6BAHhC,EAAC,EAAO,CAACF,EAAUwD,2BAI1C,CACQ,MAAOz+E,GACH,MAAO,EAAC,EAAO,CAACA,GAC5B,CACA,CAQI,yBAAOq/E,CAAmBC,EAAaC,GACnC,GAAI,SAAsBA,EAAW,CACjC,IAAInB,EAAcnD,EAAU+B,cAAcrgB,OAAO2iB,GAAc,GAAI,KACnE,MAAO,CAAClB,EAAaA,EAAc,GAAK,CAACnD,EAAUuE,2BAC/D,CACQ,GAAI,SAAsBD,EAAW,CACjC,IAAInB,EAAcnD,EAAU+B,cAAcrgB,OAAO2iB,GAAc,GAAI,MACnE,MAAO,CAAClB,EAAaA,EAAc,GAAK,CAACnD,EAAUuE,2BAC/D,CACQ,MAAO,EAAC,EAAO,CAACvE,EAAUwE,oBAClC,CAQI,sBAAOC,CAAgBC,GACnB,IAAIC,EAAelF,EAAcrB,oCAAoCsG,GACjEn5C,EAAUy0C,EAAU4E,iCAAiC/5E,KAAK85E,GAC9D,OAAOp5C,EAAU,CAACA,EAAS,IAAM,CAACA,EAAS,CAACy0C,EAAU6E,oBAC9D,CAQI,sBAAOC,CAAgBC,GACnB,IAAIC,EAAenD,EAAmBb,iCAAiC+D,GACnEx5C,EAAUy0C,EAAUiF,iCAAiCp6E,KAAKm6E,GAC9D,OAAOz5C,EAAU,CAACA,EAAS,IAAM,CAACA,EAAS,CAACy0C,EAAU6E,oBAC9D,CASI,8BAAOK,CAAwBC,GAC3B,IAAIC,EAAiBD,EAAsB36E,MAAM,KACjD,GAA8B,IAA1B46E,EAAep/E,QAA8C,IAA7Bo/E,EAAe,GAAGp/E,QAA6C,IAA7Bo/E,EAAe,GAAGp/E,OACpF,MAAO,EAAC,EAAO,CAACg6E,EAAUqF,iCAE9B,IAAIrmE,EAAKomE,EAAe,GACpB/7D,EAAQ+7D,EAAe,GAC3B,GAAI38D,MAAM/gB,OAAO2hB,IACb,MAAO,EAAC,EAAO,CAAC22D,EAAUqF,iCAE9B,IAAKC,EAAWC,GAAsBvF,EAAUyD,kBAAkBzkE,IAC7DwmE,EAAaC,GAAwBzF,EAAUoE,mBAAmB1iB,OAAOr4C,GAAQ,QAClFkiB,EAAU+5C,GAAaE,EACvBE,EAAiBH,EAAmBv0D,OAAOy0D,GAC/C,OAAOl6C,EAAU,CAACA,EAAS,IAAM,CAACA,EAASm6C,EACnD,CAUI,2BAAOC,CAAqBC,GACxB,OAAO5F,EAAU6F,iBAAiBD,EAAkB5F,EAAUkF,wBAAyBzF,EAAcrB,qCAAsCzvE,GAAUgzE,EAAc9C,6BAA6BlwE,EAAO,SAC/M,CAUI,2BAAOm3E,CAAqBC,GACxB,OAAO/F,EAAU6F,iBAAiBE,EAAkB/F,EAAUgG,wBAAyBpE,EAAmBX,wCAAyCtyE,GAAUgzE,EAAc9C,6BAA6BlwE,EAAO,SACvN,CACI,uBAAOk3E,CAAiBI,EAAaC,EAAuBC,EAAyBC,GACjF,IAAIC,EAAmBH,EAAsBD,GAC7C,IAAKI,EAAiB,GAClB,OAAOA,EAEX,IAAIjB,EAAiBa,EAAYz7E,MAAM,KACnCwU,EAAKomE,EAAe,GACpB/7D,EAAQ+7D,EAAe,GACvBpD,EAAWtgB,OAAO,KAAKykB,EAAwBnnE,MAE/CusB,GAAWy2C,EADJtgB,OAAO,KAAK0kB,EAAcz5E,SAAS0c,UACP,EACvC,OAAOkiB,EAAU,CAACA,EAAS,IAAM,CAACA,EAAS,CAACy0C,EAAUsG,2BAC9D,CACI,6BAAOC,CAAuBC,GAG1B,OAAOpjF,KAAKqjF,aAAaD,EAAiBxG,EAAUyD,mBAF3B,CAACiD,EAASC,IAAWjlB,OAAO,KAAK+d,EAAcrB,oCAAoCsI,OACrGhlB,OAAO,KAAK+d,EAAcrB,oCAAoCuI,OAE7E,CACI,6BAAOC,CAAuBC,GAG1B,OAAOzjF,KAAKqjF,aAAaI,EAAiB7G,EAAUgE,mBAF3B,CAAC0C,EAASC,IAAWjlB,OAAO,KAAKmgB,EAAmBb,iCAAiC0F,OACvGhlB,OAAO,KAAKmgB,EAAmBb,iCAAiC2F,OAE/E,CACI,mBAAOF,CAAaR,EAAaa,EAAWC,GACxC,IAAIC,EAAkBf,EAAYz7E,MAAM,KAAKN,KAAI8nE,GAAaA,EAAU5qD,SACxE,GAA+B,IAA3B4/D,EAAgBhhF,QAA+C,IAA9BghF,EAAgB,GAAGhhF,QAA8C,IAA9BghF,EAAgB,GAAGhhF,OACvF,MAAO,EAAC,EAAO,CAACg6E,EAAUiH,8BAE9B,IAAIP,EAAUM,EAAgB,GAC1BL,EAASK,EAAgB,IACxBE,EAAcC,GAAyBL,EAAUJ,IACjDU,EAAaC,GAAwBP,EAAUH,GAChDp7C,EAAU27C,GAAgBE,EAC9B,GAAI77C,GAAWw7C,EAAmBL,EAASC,GACvC,MAAO,EAAC,EAAO,CAAC3G,EAAUsH,6CAE9B,IAAI5B,EAAiByB,EAAsBn2D,OAAOq2D,GAClD,OAAO97C,EAAU,CAACA,EAAS,IAAM,CAACA,EAASm6C,EACnD,CAWI,8BAAOM,CAAwBuB,GAC3B,IAAIh8C,EAAUy0C,EAAUwH,mBAAmB38E,KAAK08E,GAChD,OAAOh8C,EAAU,CAACA,EAAS,IAAM,CAACA,EAAS,CAACy0C,EAAUyH,+BAC9D,CAOI,0BAAOC,CAAoBnJ,GACvB,MAAI,YAAY1zE,KAAK0zE,GACV,EAAC,EAAM,IAGP,EAAC,EAAO,CAACyB,EAAU2H,iCAEtC,CACI,gBAAO9D,CAAUl1E,GACb,MAAO,UAAU9D,KAAK8D,EAC9B,CACI,oBAAOw1E,CAAcx1E,GACjB,MAAO,mBAAmB9D,KAAK8D,EACvC,UAEA+wE,GAAAM,UAAoBA,EACpBA,EAAU8D,aAAe,IAAIn5E,OAAO,wMAEpCq1E,EAAUC,aAAe,IAAIt1E,OAAO,2jCACpCq1E,EAAU4H,mBAAqB,IAAIj9E,OAAO,qOAC1Cq1E,EAAUwH,mBAAqB,IAAI78E,OAAO,qiCAC1Cq1E,EAAU4E,iCAAmC,IAAIj6E,OAAO,wBACxDq1E,EAAUiF,iCAAmC,IAAIt6E,OAAO,0BACxDq1E,EAAUoD,eAAiB1hB,OAAO,KAAK,IAAIxmC,OAAO,MAClD8kD,EAAUwC,iBAAmB9gB,OAAO,KAAK,IAAIxmC,OAAO,OACpD8kD,EAAUqC,oBAAsB3gB,OAAO,KAAK,IAAIxmC,OAAO,OACvD8kD,EAAU+C,sCAAwCrhB,OAAO,KAAK,IAAIxmC,OAAO,QACzE8kD,EAAU6H,UAAYnmB,OAAO,cAC7Bse,EAAU8H,UAAYpmB,OAAO,2CAC7Bse,EAAUsC,uBAAyB,2DACnCtC,EAAUyC,4BAA8B,2DACxCzC,EAAU4C,yBAA2B,4DACrC5C,EAAUgD,yBAA2B,6DACrChD,EAAUqD,yBAA2B,yFACrCrD,EAAUwD,0BAA4B,6DACtCxD,EAAU4D,yBAA2B,0DACrC5D,EAAUkE,+BAAiC,gDAC3ClE,EAAU6E,mBAAqB,sBAC/B7E,EAAUuE,0BAA4B,0DACtCvE,EAAUqF,+BAAiC,0DAC3CrF,EAAUsG,0BAA4B,6DACtCtG,EAAUiH,4BAA8B,4DACxCjH,EAAUsH,2CAA6C,6DACvDtH,EAAUyH,8BAAgC,kEAC1CzH,EAAU+H,0BAA4B,sDACtC/H,EAAUgI,mCAAqC,mDAC/ChI,EAAUwE,mBAAqB,sEAC/BxE,EAAU2H,gCAAkC,yDAC5C3H,EAAUiI,0BAA4B,6DACtCjI,EAAUkI,iCAAmC,8CAC7ClI,EAAU+D,0BAA4B,oDACtC/D,EAAUE,0BAA4B,uDC7UtCn3E,OAAOC,eAAem/E,GAAS,aAAc,CAAEx5E,OAAO,IACnCw5E,GAAAC,iBAAG,EACtB,MAAM1I,GAAc30E,KAQpB,MAAMq9E,GAQF,WAAAplF,CAAYqlF,GACR,IAAIC,EAEAA,EADsB,iBAAfD,EACY17E,SAAS07E,EAAY,IAGrB17E,SAASzG,OAAOmiF,GAAa,IAEpD,IAAK98C,EAAStoC,GAAWy8E,GAAYM,UAAUsD,uBAAuB5hB,OAAO4mB,IAC7E,IAAK/8C,EACD,MAAMxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAE9DxG,KAAKuL,MAAQ25E,CACrB,CAQI,iBAAOC,CAAWC,GACd,OAAO,IAAIJ,GAAYI,EAC/B,CASI,iBAAOC,CAAWD,GACd,OAAO,IAAIJ,GAAYI,EAC/B,CAOI,QAAAE,GACI,OAAOtlF,KAAKuL,KACpB,CAMI,QAAA/E,GACI,OAAOxG,KAAKuL,MAAM/E,SAAS,GACnC,EAEAu+E,GAAAC,YAAsBA,mBCvEtBr/E,OAAOC,eAAe2/E,GAAS,aAAc,CAAEh6E,OAAO,IACzCg6E,GAAAC,WAAG,EAChB,MAAMlJ,GAAc30E,KASpB,MAAM69E,GAWF,WAAA5lF,CAAYqlF,GACR,IAAIQ,EAEAA,EADsB,iBAAfR,EACM17E,SAAS07E,GAGTA,EAEjB,IAAK98C,EAAStoC,GAAWy8E,GAAYM,UAAUiD,iBAAiBvhB,OAAOmnB,IACvE,IAAKt9C,EACD,MAAMxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAE9DxG,KAAKuL,MAAQk6E,CACrB,CAOI,iBAAON,CAAWC,GACd,OAAO,IAAII,GAAMJ,EACzB,CAQI,iBAAOC,CAAWD,GACd,OAAO,IAAII,GAAMJ,EACzB,CAOI,QAAAE,GACI,OAAOtlF,KAAKuL,KACpB,CAMI,QAAA/E,GACI,OAAOxG,KAAKuL,MAAM/E,SAAS,GACnC,EAEA++E,GAAAC,MAAgBA,GCzEhB7/E,OAAOC,eAAe8/E,GAAS,aAAc,CAAEn6E,OAAO,IACtDm6E,GAAAC,OAAiBD,GAAAE,SAAmBF,GAAAG,SAA+BH,GAAAI,KAAcJ,GAAAK,IAAeL,GAAAM,KAAwBN,GAAAO,mBAAG,EAC3H,MAAMV,GAAU59E,GACV20E,GAActtE,KACdqtE,GAAgBvlE,GAChBynE,GAAgBznE,GAChBovE,GAAgBpvE,GAChBqvE,GAAgBrvE,GAChBiuE,GAAgB5tE,GAChBqnE,GAAqBnnE,KACrB4mE,GAAc3mE,KACdmnE,GAAqBpnE,KAK3B,MAAM4uE,GAMF,QAAAX,GACI,OAAOtlF,KAAKuL,KACpB,CAMI,cAAA66E,GACI,OAAOF,GAAcnL,mBAAmB/6E,KAAKuL,MAAM/E,SAAS,GAAIxG,KAAKqmF,QAC7E,CAKI,OAAAC,GACI,OAAOtmF,KAAKuL,MAAQvL,KAAKumF,cACjC,CAKI,WAAAC,GACI,OAAOxmF,KAAKuL,MAAQ,EAC5B,CAOI,QAAAk7E,CAASC,GACL,OAAO1mF,KAAKuL,QAAUm7E,EAAan7E,KAC3C,CAOI,UAAAo7E,CAAWD,GACP,OAAO1mF,KAAKuL,MAAQm7E,EAAan7E,KACzC,CAOI,aAAAq7E,CAAcF,GACV,OAAO1mF,KAAKuL,MAAQm7E,EAAan7E,KACzC,CAOI,kBAAAs7E,CAAmBH,GACf,OAAO1mF,KAAKuL,OAASm7E,EAAan7E,KAC1C,CAQI,qBAAAu7E,CAAsBJ,GAClB,OAAO1mF,KAAKuL,OAASm7E,EAAan7E,KAC1C,EAEAm6E,GAAAO,cAAwBA,GAQxB,MAAMD,WAAaC,GAOf,WAAArmF,CAAYmnF,GA2BR,GA1BAhnF,QAIAC,KAAKqmF,QAAU,GAIfrmF,KAAKumF,eAAiBjK,GAAYM,UAAUqC,oBAK5Cj/E,KAAK2C,KAAO,OAMZ3C,KAAKgnF,OAAS,GAMdhnF,KAAKinF,UAAY,IACM,iBAAZF,EAAsB,CAC7B,IAAKx7E,EAAOy7E,GAAUhnF,KAAKknF,iCAAiCH,GAC5D/mF,KAAKuL,MAAQA,EACbvL,KAAKgnF,OAASA,CAC1B,KACa,CACD,IAAKz7E,EAAOy7E,GAAUhnF,KAAKmnF,yBAAyBJ,GACpD/mF,KAAKuL,MAAQA,EACbvL,KAAKgnF,OAASA,CAC1B,CACA,CAOI,iBAAO3B,CAAW+B,GACd,OAAO,IAAIpB,GAAKoB,EACxB,CAUI,8BAAOC,CAAwBC,GAC3B,OAAO,IAAItB,GAAKsB,EACxB,CAOI,iBAAOnC,CAAWmC,GACd,OAAOtB,GAAKqB,wBAAwBC,EAC5C,CAOI,uBAAOC,CAAiBC,GACpB,IAAIvE,EAAmB3G,GAAYM,UAAU0H,oBAAoBkD,GACjE,GAAIvE,EAAiB,GACjB,OAAO,IAAI+C,GAAKzH,GAAcnD,0BAA0BoM,IAGxD,MAAM7nF,MAAMsjF,EAAiB,GAAGj8E,KAAK,KAEjD,CAMI,QAAAR,GACI,OAAOxG,KAAKgnF,OAAOlgF,KAAKyE,GAAmBA,EAAM/E,aAAeQ,KAAKhH,KAAKinF,UAClF,CAMI,SAAAQ,GACI,OAAOznF,KAAKgnF,MACpB,CAMI,YAAAU,GACI,OAAO1B,GAAKX,WAAWrlF,KAAKslF,WAAa,GACjD,CAMI,gBAAAqC,GACI,OAAO3B,GAAKX,WAAWrlF,KAAKslF,WAAa,GACjD,CAUI,gBAAAsC,GACI,IAAIn0B,EAAS,IAAI37B,OAAO,IAAM93B,KAAKomF,iBACnC,OAAON,GAAKyB,iBAAiB9zB,EACrC,CACI,gCAAAyzB,CAAiCI,GAC7B,IAAIN,EACAz7E,GACC48B,EAAStoC,GAAWy8E,GAAYM,UAAUyD,kBAAkBiH,GACjE,IAAKn/C,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAOlE,OAJAwgF,EADmBM,EAASlgF,MAAM,KACZN,KAAK+gF,GAChBtC,GAAQC,MAAML,WAAW0C,KAEpCt8E,EAAQ+yD,OAAO,KAAK+d,GAAcrB,oCAAoCsM,MAC/D,CAAC/7E,EAAOy7E,EACvB,CACI,wBAAAG,CAAyB5H,GACrB,IAAKp3C,EAAStoC,GAAWy8E,GAAYM,UAAU0C,kBAAkBC,GACjE,IAAKp3C,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAElE,IAAI20E,EAAegL,GAAcjL,qBAAqBqE,GAEtD,MAAO,CADPA,EAAmC,iBAAfA,EAA0BA,EAAajhB,OAAOihB,GAC9Cv/E,KAAK8nF,4BAA4B3M,GAC7D,CACI,2BAAA2M,CAA4BC,GAKxB,OAJIA,EAAiBnlF,OAAS,KAC1BmlF,EAAmB7B,GAAcnL,mBAAmBgN,EAAkB,KAE7DA,EAAiBhlF,MAAM,WACtB+D,KAAKy0E,GACRgK,GAAQC,MAAML,WAAW5G,GAAcnD,0BAA0BG,GAAO/0E,aAE3F,EAEAk/E,GAAAM,KAAeA,GAQf,MAAMD,WAAYE,GAOd,WAAArmF,CAAYwlF,GAWR,GAVArlF,QAIAC,KAAKqmF,QAAU,GAIfrmF,KAAKumF,eAAiBjK,GAAYM,UAAUqC,oBAC5Cj/E,KAAK2C,KAAO,MACY,iBAAbyiF,EACHW,GAAIiC,kBAAkB5C,GACtBplF,KAAKuL,MAAQ+yD,OAAO/0D,SAAS67E,EAAS3+E,UAAU,MAEjB,GAA1B2+E,EAASn2D,QAAQ,KACtBjvB,KAAKuL,MAAQ+yD,OAAOt+D,KAAKioF,qBAAqB7C,IAG9CplF,KAAKuL,MAAQ+yD,OAAO/0D,SAAS67E,QAGhC,CACD,IAAI8C,EAAgB5pB,OAAO8mB,IACtBj9C,EAAStoC,GAAWy8E,GAAYM,UAAUmC,iBAAiBmJ,GAChE,IAAK//C,EACD,MAAMxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAE9DxG,KAAKuL,MAAQ28E,CACzB,CACA,CAWI,iBAAO/C,CAAWC,GACd,OAAO,IAAIW,GAAIX,EACvB,CAQI,iBAAOC,CAAWD,GACd,OAAO,IAAIW,GAAIX,EACvB,CAQI,uBAAOmC,CAAiBpM,GACpB,IAAI8H,EAAmB3G,GAAYM,UAAU0H,oBAAoBnJ,GACjE,GAAI8H,EAAiB,GACjB,OAAO,IAAI8C,GAAIx8E,SAAS4xE,EAAc,IAGtC,MAAMx7E,MAAMsjF,EAAiB,GAAGj8E,KAAK,KAEjD,CAMI,QAAAR,GACI,IAAIw/D,EAAchmE,KAAKuL,MAAM/E,WAC7B,MAAO,GAAGu/E,GAAIoC,YAAYniB,GAClC,CAMI,SAAAoiB,GACI,OAAOpoF,KAAKuL,MAAM/E,UAC1B,CAWI,OAAA6hF,GACI,OAAIroF,KAAKuL,MAAMgmC,WAAa,OACjBvxC,KAAKsoF,cAETtoF,KAAKooF,WACpB,CAOI,WAAAE,GACI,IAAIzjB,EAAO7kE,KAAKuL,MAAMgmC,UAAY,OAElC,MAAO,GAAGszB,KADC7kE,KAAKuL,MAAMgmC,UAAY,OAAUszB,GAEpD,CAMI,cAAAuhB,GACI,OAAOD,GAAcjL,qBAAqBl7E,KAAKuL,MACvD,CAMI,OAAAg9E,GACI,IAAKC,GAAwBlM,GAAYM,UAAUuC,sBAAsBn/E,KAAKuL,OAC9E,OAAOi9E,CACf,CAMI,OAAAC,GACI,OAAQzoF,KAAKuoF,SACrB,CAMI,YAAAb,GACI,OAAO,IAAI3B,GAAI/lF,KAAKuL,MAAMgmC,UAAY,GAC9C,CAMI,gBAAAo2C,GACI,OAAO,IAAI5B,GAAI/lF,KAAKuL,MAAMgmC,UAAY,GAC9C,CACI,wBAAOy2C,CAAkBU,GACrB,OAAuC,IAAhCA,EAAKz5D,QAAQ82D,GAAIoC,UAChC,CACI,oBAAAF,CAAqB7C,GACjB,IAAI19D,EAAS09D,EAASh+E,MAAM,KACxBy9D,EAAOt7D,SAASme,EAAO,IAE3B,OAAe,MAAPm9C,GADEt7D,SAASme,EAAO,IACKm9C,EACvC,EAEA6gB,GAAAK,IAAcA,GACdA,GAAIoC,UAAY,KAQhB,MAAMrC,WAAaG,GAOf,WAAArmF,CAAYmnF,GA2BR,GA1BAhnF,QAIAC,KAAKqmF,QAAU,IAIfrmF,KAAKumF,eAAiBjK,GAAYM,UAAU+C,sCAK5C3/E,KAAK2C,KAAO,OAMZ3C,KAAK2oF,YAAc,GAMnB3oF,KAAKinF,UAAY,IACM,iBAAZF,EAAsB,CAC7B,IAAI6B,EAAe3K,GAAY7B,iBAAiB2K,IAC3Cx7E,EAAOo9E,GAAe3oF,KAAK6oF,qCAAqCD,GACrE5oF,KAAKuL,MAAQA,EACbvL,KAAK2oF,YAAcA,CAC/B,KACa,CACD,IAAKp9E,EAAOo9E,GAAe3oF,KAAKmnF,yBAAyBJ,GACzD/mF,KAAKuL,MAAQA,EACbvL,KAAK2oF,YAAcA,CAC/B,CACA,CAOI,iBAAOG,CAAW1B,GACd,OAAO,IAAItB,GAAKsB,EACxB,CAUI,sBAAO2B,CAAgBzB,GACnB,OAAO,IAAIxB,GAAKwB,EACxB,CAOI,iBAAOnC,CAAWmC,GACd,OAAOxB,GAAKiD,gBAAgBzB,EACpC,CAOI,uBAAOC,CAAiBC,GACpB,IAAIvE,EAAmB3G,GAAYM,UAAU0H,oBAAoBkD,GACjE,GAAIvE,EAAiB,GAAI,CACrB,IAAI+F,EAAqB9C,GAAcnL,mBAAmByM,EAAgB,KAC1E,OAAO,IAAI1B,GAAKvH,GAAcnD,0BAA0B4N,GACpE,CAEY,MAAMrpF,MAAMsjF,EAAiB,GAAGj8E,KAAK,KAEjD,CAOI,eAAOiiF,CAASC,GACZ,OAAOA,EAAKtB,kBACpB,CAQI,+BAAOuB,CAAyBC,GAC5B,OAAO,IAAIpD,GAAKoD,GAAqBxB,kBAC7C,CAMI,QAAAphF,GACI,IAAIg2E,EAAax8E,KAAK2oF,YAAY7hF,KAAKyE,GAAmBA,EAAM/E,aAAeQ,KAAK,KACpF,OAAIhH,KAAK2oF,YAAY/lF,OAAS,EACnB,KAAO45E,EAGPA,CAEnB,CAOI,cAAA6M,GACI,OAAOrpF,KAAK2oF,WACpB,CAMI,YAAAjB,GACI,OAAO5B,GAAKgD,WAAW9oF,KAAKslF,WAAa,GACjD,CAMI,gBAAAqC,GACI,OAAO7B,GAAKgD,WAAW9oF,KAAKslF,WAAa,GACjD,CACI,wBAAA6B,CAAyBzH,GACrB,IAAKv3C,EAAStoC,GAAWy8E,GAAYM,UAAU6C,kBAAkBC,GACjE,IAAKv3C,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAElE,IAAI20E,EAAegL,GAAcjL,qBAAqBwE,GACtD,MAAO,CAACA,EAAY1/E,KAAKspF,2BAA2BnO,GAC5D,CACI,oCAAA0N,CAAqCD,GACjC,IAAKzgD,EAAStoC,GAAWy8E,GAAYM,UAAUgE,kBAAkBgI,GACjE,IAAKzgD,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAElE,IACImiF,EADqBC,EAAaxhF,MAAM,KACPN,KAAKyiF,GAC/BxE,GAAcC,YAAYG,WAAWoE,KAGhD,MAAO,CADKjrB,OAAO,KAAKmgB,GAAmBb,iCAAiCgL,MAC7DD,EACvB,CACI,0BAAAW,CAA2BnO,GACvB,IAAI+C,EAAoBM,GAAmBL,gCAAgChD,GAC3E,KAAO+C,EAAkBt7E,OAAS,GAAK,GACnCs7E,EAAoB,IAAMA,EAG9B,OADyBA,EAAkBn7E,MAAM,WACvB+D,KAAKyiF,GACpBxE,GAAcC,YAAYG,WAAWoE,IAExD,EAEA7D,GAAAI,KAAeA,GAMf,MAAMD,WAAiBG,GAOnB,WAAApmF,CAAY0nF,GAQR,IAAIn/C,EACAtoC,EAEJ,GAVAE,MAAMunF,GAMNtnF,KAAKgnF,OAAS,IAGb7+C,EAAStoC,GAAWy8E,GAAYM,UAAUyE,gBAAgBiG,IACtDn/C,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAElE,IAAIgjF,EAAelC,EAASlgF,MAAM,KAClCpH,KAAKgnF,OAASwC,EAAa1iF,KAAK+gF,GACrBtC,GAAQC,MAAML,WAAW0C,KAEpC,IAAI1M,EAAekB,GAAcrB,oCAAoCsM,GACrEtnF,KAAK4qC,QAAUuwC,EAAap4E,MAAM,OAAS,IAAIH,OAC/C5C,KAAKuL,MAAQ+yD,OAAO,KAAK6c,IACjC,CAQI,8BAAOkM,CAAwBjC,GAC3B,OAAO,IAAIS,GAAST,EAC5B,EAGAM,GAAAG,SAAmBA,GAOnB,MAAMD,WAAiBE,GAOnB,WAAAlmF,CAAY0nF,GAQR,IAAIn/C,EACAtoC,EARJE,MAAMunF,GAMNtnF,KAAK2oF,YAAc,GAGnB,IAAIC,EAAe3K,GAAY7B,iBAAiBkL,GAEhD,IADCn/C,EAAStoC,GAAWy8E,GAAYM,UAAU8E,gBAAgBkH,IACtDzgD,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAElE,IAAIijF,EAAqBb,EAAaxhF,MAAM,KAC5CpH,KAAK2oF,YAAcc,EAAmB3iF,KAAKyiF,GAChCxE,GAAcC,YAAYG,WAAWoE,KAEhD,IAAIpO,EAAesD,GAAmBb,iCAAiCgL,GACvE5oF,KAAK4qC,QAAUuwC,EAAap4E,MAAM,OAAS,IAAIH,OAC/C5C,KAAKuL,MAAQ+yD,OAAO,KAAK6c,KACzBn7E,KAAKuL,MAAQ+yD,OAAO,KAAKmgB,GAAmBb,iCAAiCgL,KACrF,CAQI,sBAAOG,CAAgB3D,GACnB,OAAO,IAAIQ,GAASR,EAC5B,EAGAM,GAAAE,SAAmBA,GAQnBF,GAAAC,OAHA,SAAgB/pE,GACZ,OAAsB,KAAfA,EAAGyqE,OACd,YCxuBA1gF,OAAOC,eAAe8jF,GAAS,aAAc,CAAEn+E,OAAO,0BCAtD5F,OAAOC,eAAe+jF,GAAS,aAAc,CAAEp+E,OAAO,IACtDo+E,GAAAC,aAAyCD,GAAAE,WAAqBF,GAAAG,gBAAG,EACjE,MAAMxN,GAAc30E,KACdoiF,GAAa/6E,GACbqtE,GAAgBvlE,GAChB0nE,GAAqBrnE,KACrB4tE,GAAgB1tE,GAStB,MAAMyyE,GAOF,WAAAlqF,CAAYwlF,GAGR,IAAIj9C,EACAtoC,EAEJ,GALAG,KAAK2C,KAAO,OACZ3C,KAAKgqF,SAAW,KAGf7hD,EAAStoC,GAAWy8E,GAAYM,UAAUoE,mBAAmBoE,EAAU,SACnEj9C,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAElExG,KAAKuL,MAAQ65E,CACrB,CAOI,iBAAOC,CAAWD,GACd,OAAO,IAAI0E,GAAW1E,EAC9B,CAEI,oBAAO6E,CAAcC,GACjB,IAAIC,OAAeD,EAAqB,GAAK,GAAKE,GAAkBF,EAAW5N,GAAYM,UAAU6H,WACrG,OAAOqF,GAAWzE,WAAW/mB,OAAO6rB,GAC5C,CAOI,QAAA7E,GACI,OAAOtlF,KAAKuL,KACpB,CAKI,QAAA/E,GACI,OAAOxG,KAAKuL,MAAM/E,UAC1B,CAQI,MAAA6jF,GACI,IAAIC,EAAS,IAAIxyD,OAAOxzB,OAAOtE,KAAKuL,QAChCg/E,EAAU,IAAIzyD,OAAOxzB,OAAO,IAAMtE,KAAKuL,QAC3C,OAAOw+E,GAAWlE,SAASwB,wBAAwBrnF,KAAKwqF,kBAAkB,GAAGF,IAASC,KAC9F,CAMI,WAAAE,GAOI,OAAO,IAAOzqF,KAAKgqF,SAAWhqF,KAAKslF,UAC3C,CAKI,KAAAxqD,GACI,OAAO,IAAIgvD,GAAW9pF,KAAKuL,MAAQ,GAC3C,CAKI,KAAAnE,GACI,OAAO,IAAI0iF,GAAW9pF,KAAKuL,MAAQ,GAC3C,CACI,iBAAAi/E,CAAkBniB,GACd,MAAO,GAAGgU,GAAcjB,0BAA0B/S,EAAKtY,OAAO,EAAG,OAAOssB,GAAcjB,0BAA0B/S,EAAKtY,OAAO,EAAG,OAAOssB,GAAcjB,0BAA0B/S,EAAKtY,OAAO,GAAI,OAAOssB,GAAcjB,0BAA0B/S,EAAKtY,OAAO,GAAI,KACrQ,EAEA45B,GAAAG,WAAqBA,GASrB,MAAMD,GAOF,WAAAjqF,CAAYwlF,GAGR,IAAIj9C,EACAtoC,EAEJ,GALAG,KAAK2C,KAAO,OACZ3C,KAAKgqF,SAAW,MAGf7hD,EAAStoC,GAAWy8E,GAAYM,UAAUoE,mBAAmBoE,EAAU,SACnEj9C,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAElExG,KAAKuL,MAAQ65E,CACrB,CAOI,iBAAOC,CAAWD,GACd,OAAO,IAAIyE,GAAWzE,EAC9B,CAEI,oBAAO6E,CAAcC,GACjB,IAAIC,OAAeD,EAAqB,IAAM,IAAME,GAAkBF,EAAW5N,GAAYM,UAAU8H,WACvG,OAAOmF,GAAWxE,WAAW/mB,OAAO6rB,GAC5C,CAMI,QAAA7E,GACI,OAAOtlF,KAAKuL,KACpB,CAKI,QAAA/E,GACI,OAAOxG,KAAKuL,MAAM/E,UAC1B,CAQI,MAAA6jF,GACI,IAAIC,EAAS,IAAIxyD,OAAOxzB,OAAOtE,KAAKuL,QAChCg/E,EAAU,IAAIzyD,OAAO,IAAMxzB,OAAOtE,KAAKuL,QAC3C,OAAOw+E,GAAWnE,SAASmD,gBAAgB/oF,KAAK0qF,sBAAsB,GAAGJ,IAASC,KAC1F,CAMI,WAAAE,GAOI,OAAO,IAAOzqF,KAAKgqF,SAAWhqF,KAAKslF,UAC3C,CAKI,KAAAxqD,GACI,OAAO,IAAI+uD,GAAW7pF,KAAKuL,MAAQ,GAC3C,CAKI,KAAAnE,GACI,OAAO,IAAIyiF,GAAW7pF,KAAKuL,MAAQ,GAC3C,CACI,qBAAAm/E,CAAsBriB,GAKlB,OAJoBA,EAAKtlE,MAAM,YACQ+D,KAAKq0E,GACjC4J,GAAcC,YAAYG,WAAW3G,GAAmBL,gCAAgChD,MAEzEr0E,KAAKyE,GAAmBA,EAAM/E,aAAeQ,KAAK,IACpF,EAGA,SAASojF,GAAkBF,EAAWS,GAClC,IAAIhP,EAASgP,EAAgBrO,GAAYM,UAAmB,UAAI,OAAS,OACzE,GAAIsN,EAAS,GAA8B,KAATA,EAC9B,MAAM,IAAIvqF,MAAM28E,GAAYM,UAAUiI,0BAA0BhgF,QAAQ,UAAW82E,IAEvF,IACI,OAAOU,GAAcvB,QAAQoP,EACrC,CACI,MAAOr3E,GACH,MAAM,IAAIlT,MAAM28E,GAAYM,UAAUkI,iCAC9C,CACA,CAZA6E,GAAAE,WAAqBA,GAoBrBF,GAAAC,aAHA,SAAsBh/C,GAClB,MAAuB,SAAhBA,EAAOjoC,IAClB,ECtOAgD,OAAOC,eAAeglF,GAAS,aAAc,CAAEr/E,OAAO,IAC/Bq/E,GAAAC,gBAAwBD,GAAAE,cAAwBF,GAAAG,iCAA6BH,GAAAI,eAAoB,EACxH,MAAMjB,GAAapiF,GACbsjF,GAAWj8E,GACXqtE,GAAgBvlE,GAChBwlE,GAAcnlE,KAMpB,MAAM6zE,GAUF,WAAAprF,CAAYymB,EAAOuP,GAGf,GAFA51B,KAAKqmB,MAAQA,EACbrmB,KAAK41B,KAAOA,EACRvP,EAAMugE,cAAchxD,GACpB,MAAM,IAAIj2B,MAAM,GAAG0mB,EAAM7f,mCAAmCovB,EAAKpvB,cAErExG,KAAKkrF,aAAe7kE,EACpBrmB,KAAKgqF,SAAW1rB,OAAOj4C,EAAMggE,QACrC,CAOI,mBAAO8E,CAAavvE,GAChB,OAAO,IAAIovE,GAAUpvE,EAAIA,EACjC,CAOI,oBAAOwvE,CAAcC,GACjB,OAAO,IAAIL,GAAUK,EAAUC,WAAYD,EAAUE,UAC7D,CAOI,sBAAOC,CAAgB3I,GACnB,IAAI4I,EAAM5I,EAAYz7E,MAAM,KAAKN,KAAI8U,GAAMA,EAAGoI,SAC9C,GAAmB,IAAfynE,EAAI7oF,OACJ,MAAM,IAAIjD,MAAM,mDAEpB,IAAK+rF,EAAeC,GAAgBF,GAC/BG,GAAqBtP,GAAYM,UAAUyD,kBAAkBqL,IAC7DG,GAAsBvP,GAAYM,UAAUyD,kBAAkBsL,IAC9DG,GAAqBxP,GAAYM,UAAUgE,kBAAkB8K,IAC7DK,GAAoBzP,GAAYM,UAAUgE,kBAAkB+K,GACjE,GAAIC,GAAoBC,EACpB,OAAO,IAAIb,GAAUjB,GAAW/D,KAAKqB,wBAAwBqE,GAAgB3B,GAAW/D,KAAKqB,wBAAwBsE,IAEpH,GAAIG,GAAoBC,EACzB,OAAO,IAAIf,GAAUjB,GAAWjE,KAAKiD,gBAAgB2C,GAAgB3B,GAAWjE,KAAKiD,gBAAgB4C,IAGrG,MAAM,IAAIhsF,MAAM,qDAE5B,CAII,QAAA2rF,GACI,OAAOtrF,KAAKqmB,KACpB,CAII,OAAAklE,GACI,OAAOvrF,KAAK41B,IACpB,CAII,OAAAo2D,GACI,OAAOhsF,KAAK41B,KAAK0vD,WAActlF,KAAKqmB,MAAMi/D,WAAc,EAChE,CAKI,aAAA2G,GACI,MAAO,GAAGjsF,KAAKsrF,cAActrF,KAAKurF,WAC1C,CAMI,MAAAW,CAAOC,GACH,OAAOA,EAAWC,SAASpsF,KACnC,CAMI,QAAAosF,CAASD,GACL,IAAIE,EAAYrsF,KAAKsrF,WACjBgB,EAAWtsF,KAAKurF,UAChBgB,EAAaJ,EAAWb,WACxBkB,EAAYL,EAAWZ,UAC3B,OAAQc,EAAUxF,mBAAmB0F,IAAeD,EAASxF,sBAAsB0F,EAC3F,CAMI,QAAA/F,CAAS0F,GACL,OAAOnsF,KAAKsrF,WAAW7E,SAAS0F,EAAWb,aACpCtrF,KAAKurF,UAAU9E,SAAS0F,EAAWZ,UAClD,CAOI,UAAA5E,CAAWwF,GACP,OAAInsF,KAAKymF,SAAS0F,KAIVnsF,KAAKsrF,WAAW7E,SAAS0F,EAAWb,YAC7BtrF,KAAKgsF,UAAaG,EAAWH,UAEjChsF,KAAKsrF,WAAW3E,WAAWwF,EAAWb,YAEzD,CAMI,aAAA1E,CAAcuF,GACV,OAAInsF,KAAKymF,SAAS0F,KAIVnsF,KAAKsrF,WAAW7E,SAAS0F,EAAWb,YAC7BtrF,KAAKgsF,UAAaG,EAAWH,UAEjChsF,KAAKsrF,WAAW1E,cAAcuF,EAAWb,YAE5D,CAUI,aAAAmB,CAAcN,GACV,IAAIE,EAAYrsF,KAAKsrF,WACjBgB,EAAWtsF,KAAKurF,UAChBgB,EAAaJ,EAAWb,WACxBkB,EAAYL,EAAWZ,UAC3B,OAAQe,EAAS1F,cAAc2F,IAAeD,EAASzF,mBAAmB2F,IAAcH,EAAU1F,WAAW4F,IAErGC,EAAU5F,cAAcyF,IAAcG,EAAU3F,mBAAmByF,IAAaC,EAAW5F,WAAW0F,EACtH,CAII,UAAAK,GACI,GAAuB,KAAnB1sF,KAAKgsF,UACL,OAAO,EAEX,IACI,IAAIphD,EAASyxC,GAAcvB,QAAQ96E,KAAKgsF,WACpCW,EAAUtQ,GAAcjB,0BAA0BiB,GAAcZ,6BAA6B7wC,EAAQm/C,GAAWpE,OAAO3lF,KAAKkrF,cAAgB,OAAoB,SACpK,OAAQlrF,KAAKqmB,MAAMi/D,cAAiBqH,EAAW3sF,KAAKqmB,MAAMi/D,WACtE,CACQ,MAAOzyE,GACH,OAAO,CACnB,CACA,CAII,WAAA+5E,GACI,OAAI7C,GAAWpE,OAAO3lF,KAAKkrF,cAChBlrF,KAAK6sF,kBAGL7sF,KAAK8sF,iBAExB,CAUI,aAAAC,CAAcZ,GACV,IAAIE,EAAYrsF,KAAKsrF,WACjBgB,EAAWtsF,KAAKurF,UAChBgB,EAAaJ,EAAWb,WACxBkB,EAAYL,EAAWZ,UAC3B,OAAQe,EAAShG,WAAagG,EAAS5E,eAAejB,SAAS8F,IAEvDC,EAAUlG,WAAakG,EAAU9E,eAAejB,SAAS4F,EACzE,CAMI,KAAAW,CAAMb,GACF,GAAInsF,KAAKymF,SAAS0F,GACd,OAAO,IAAInB,GAAUmB,EAAWb,WAAYa,EAAWZ,WAE3D,GAAIvrF,KAAKysF,cAAcN,GACnB,OAAInsF,KAAKsrF,WAAW3E,WAAWwF,EAAWb,YAC/B,IAAIN,GAAUhrF,KAAKsrF,WAAYa,EAAWZ,WAG1C,IAAIP,GAAUmB,EAAWb,WAAYtrF,KAAKurF,WAGzD,GAAIvrF,KAAKosF,SAASD,GACd,OAAO,IAAInB,GAAUhrF,KAAKsrF,WAAYtrF,KAAKurF,WAE1C,GAAIY,EAAWC,SAASpsF,MACzB,OAAO,IAAIgrF,GAAUmB,EAAWb,WAAYa,EAAWZ,WAE3D,MAAM,IAAI5rF,MAAM,sCACxB,CAOI,OAAAstF,CAAQd,GACJ,GAAIA,EAAWZ,UAAU7D,eAAejB,SAASzmF,KAAKsrF,YAClD,OAAO,IAAIN,GAAUmB,EAAWb,WAAYtrF,KAAKurF,WAGjD,MAAM,IAAI5rF,MAAM,oCAE5B,CAOI,MAAAqQ,CAAOm8E,GACH,GAAInsF,KAAKurF,UAAU7D,eAAejB,SAAS0F,EAAWb,YAClD,OAAO,IAAIN,GAAUhrF,KAAKsrF,WAAYa,EAAWZ,WAGjD,MAAM,IAAI5rF,MAAM,mCAE5B,CACI,QAAAyhD,CAAS+qC,GACL,IAAKnsF,KAAKysF,cAAcN,GACpB,MAAM,IAAIxsF,MAAM,mDAEpB,IAAKK,KAAK2mF,WAAWwF,GACjB,MAAM,IAAIxsF,MAAM,kDAEpB,OAAO,IAAIqrF,GAAUhrF,KAAKsrF,WAAYa,EAAWZ,UACzD,CAOI,YAAA2B,CAAahuE,EAAQS,GACjB,GAAIT,EAAM,EAAalf,KAAKgsF,UACxB,MAAM,IAAImB,WAAW,qDAEzB,GAAc,KAAVxtE,EACA,MAAM,IAAIhgB,MAAM,4BAEpB,IAAIytF,EAAiBptF,KAAKsrF,WAAW//E,MAAS,EAC1C8hF,EAAUtD,GAAWpE,OAAO3lF,KAAKsrF,YACjCvB,GAAW/D,KAAKX,WAAW+H,GAAkBrD,GAAWjE,KAAKgD,WAAWsE,GACxEE,EAAgBD,EAAQ9hF,OAASoU,EAAO,IACxC4tE,EAASxD,GAAWpE,OAAO0H,GAAWtD,GAAW/D,KAAKX,WAAWiI,GAAiBvD,GAAWjE,KAAKgD,WAAWwE,GACjH,OAAO,IAAItC,GAAUqC,EAASE,EACtC,CAQI,UAAAC,CAAWvnE,GACP,GAAIA,EAAM+lE,UAAahsF,KAAKgsF,UACxB,MAAM,IAAIrsF,MAAM,qDAEpB,IAAKK,KAAKosF,SAASnmE,GACf,MAAM,IAAItmB,MAAM,oDAEpB,IAAI8tF,EAAY,GAChB,IACIA,EAAUnmF,KAAK,IAAI0jF,GAAUhrF,KAAKsrF,WAAYrlE,EAAMqlE,WAAW3D,oBAC3E,CACQ,MAAO90E,GAAG,CACV,IACI46E,EAAUnmF,KAAK,IAAI0jF,GAAU/kE,EAAMslE,UAAU7D,eAAgB1nF,KAAKurF,WAC9E,CACQ,MAAO14E,GAAG,CACV,OAAO46E,CACf,CACI,KAACC,CAAKvwD,GACF,IAAIwwD,EAAW3tF,KAAKsrF,WAChBsC,OAAwBx8E,IAAV+rB,EAAsBn9B,KAAKgsF,UAAUz6C,UAAYpU,EACnE,KAAOywD,EAAc,GACjBA,UACMD,EACNA,EAAWA,EAASjG,cAEhC,CACI,EAAE95E,OAAOwf,kBACEptB,KAAK0tF,MACpB,CACI,eAAAb,GACI,IAAIgB,EAAiB,IAAI9C,GAAchB,GAAW/D,KAAKX,WAAWrlF,KAAKsrF,WAAWhG,YAAa2F,GAASnB,WAAWG,cAAcjqF,KAAKgsF,YACtI,GAAI6B,EAAevC,WAAW7E,SAASzmF,KAAKsrF,YACxC,OAAOuC,EAGP,MAAM,IAAIluF,MAAM,oCAE5B,CACI,eAAAmtF,GACI,IAAIe,EAAiB,IAAI/C,GAAcf,GAAWjE,KAAKgD,WAAW9oF,KAAKsrF,WAAWhG,YAAa2F,GAASpB,WAAWI,cAAcjqF,KAAKgsF,YACtI,GAAI6B,EAAevC,WAAW7E,SAASzmF,KAAKsrF,YACxC,OAAOuC,EAGP,MAAM,IAAIluF,MAAM,oCAE5B,EAEAirF,GAAAI,UAAoBA,GAIpB,MAAM8C,GACF,YAAAC,GACI,IAAIC,EAAqBhuF,KAAKgsF,UAC9B,OAAS,IAAMhsF,KAAKgqF,SAAYgE,GAAwBhuF,KAAKsrF,WAAWhG,WAAU,CAC1F,CACI,gBAAA2I,GACI,OAAOjuF,KAAKgsF,WAAchsF,KAAKsrF,WAAWhG,UAClD,CACI,UAAA4I,GACI,OAAO,IAAIlD,GAAUhrF,KAAKsrF,WAAYtrF,KAAKurF,UACnD,CACI,MAAAW,CAAOC,GACH,OAAOnsF,KAAKkuF,aAAahC,OAAOC,EAAW+B,aACnD,CACI,QAAA9B,CAASD,GACL,OAAOnsF,KAAKkuF,aAAa9B,SAASD,EAAW+B,aACrD,CACI,aAAAjC,GACI,OAAOjsF,KAAKkuF,aAAajC,eACjC,CACI,aAAAQ,CAAcN,GACV,OAAOnsF,KAAKkuF,aAAazB,cAAcN,EAAW+B,aAC1D,CACI,aAAAnB,CAAcZ,GACV,OAAOnsF,KAAKkuF,aAAanB,cAAcZ,EAAW+B,aAC1D,CACI,eAAAC,CAAgBhC,GACZ,MAAMhvD,EAAQmhC,OAAO+d,GAAcxB,iBAAiB76E,KAAKsrF,WAAWlF,iBAAkB+F,EAAWb,WAAWlF,mBAC5G,OAAIpmF,KAAKouF,YAAY7iF,MAAQ4xB,IAAU,KAGhCn9B,KAAK+sF,cAAcZ,IAAensF,KAAKgsF,YAAeG,EAAWH,UAChF,CACI,WAAAqC,CAAYlC,GACR,OAAOnsF,KAAKmuF,gBAAgBhC,IACrBnsF,KAAKosF,SAASD,IACdnsF,KAAKksF,OAAOC,EAC3B,CACI,QAAA1F,CAAS0F,GACL,OAAOnsF,KAAKkuF,aAAazH,SAAS0F,EAAW+B,aACrD,CACI,KAAApzD,CAAMqxD,GACF,IAAKnsF,KAAKmuF,gBAAgBhC,GACtB,MAAM,IAAIxsF,MAAM,yBAAyBK,KAAKisF,mBAAmBE,EAAWF,4DAEhF,OAAOjsF,KAAKsuF,YAAYtuF,KAAKsrF,WAAYtrF,KAAKouF,YAAYtzD,QAClE,CAWI,WAACyzD,CAAWpxD,GACR,OAAOn9B,KAAKkuF,aAAaR,KAAKvwD,EACtC,CACI,EAAEvvB,OAAOwf,kBACEptB,KAAKkuF,YACpB,EAEAtD,GAAAkD,gBAA0BA,GAO1B,MAAM/C,WAAsB+C,GAYxB,WAAAluF,CAAYspF,EAAMxN,GACd37E,QACAC,KAAKkpF,KAAOA,EACZlpF,KAAK07E,WAAaA,EAClB17E,KAAKgqF,SAAW,GACxB,CAOI,eAAOwE,CAASC,GACZ,IAAKtmD,EAASumD,GAAiBpS,GAAYM,UAAUkF,wBAAwB2M,GAC7E,IAAKtmD,EAAS,CACV,IAAIwmD,EAAWD,EAAcx+E,QAAOrQ,GAAgC,KAAZA,IACxD,MAAM,IAAIF,MAAMgvF,EAAS3nF,KAAK,SAC1C,CACQ,IAAIg7E,EAAiByM,EAAoBrnF,MAAM,KAC3CkgF,EAAWtF,EAAe,GAC1Bp3C,EAAS0zB,OAAO/0D,SAASy4E,EAAe,KAC5C,OAAO,IAAI+I,GAAchB,GAAW/D,KAAKqB,wBAAwBC,GAAW2D,GAASnB,WAAWzE,WAAWz6C,GACnH,CAMI,OAAAohD,GACI,OAAOhsF,KAAK07E,WAAW+O,aAC/B,CASI,YAAAmE,GAEI,MAAO,GADK5uF,KAAKkpF,KAAK1iF,WACNA,cAAcxG,KAAK07E,WAAWl1E,YACtD,CAOI,aAAAylF,GACI,OAAOlsF,MAAMksF,eACrB,CAMI,QAAAX,GACI,OAAOvB,GAAW/D,KAAKX,WAAWrlF,KAAKkpF,KAAK5D,WAActlF,KAAK07E,WAAW2O,SAAS/E,WAC3F,CAMI,OAAAiG,GACI,OAAO31D,GAAK51B,KAAMA,KAAKkpF,KAC/B,CACI,WAAAoF,CAAY7pE,EAAKmmB,GACb,OAAO,IAAImgD,GAActmE,EAAKmmB,EACtC,CACI,SAAAwjD,GACI,OAAOpuF,KAAK07E,UACpB,CAUI,aAAAqR,CAAcZ,GACV,OAAOpsF,MAAMgtF,cAAcZ,EACnC,CASI,QAAAC,CAASD,GACL,OAAOpsF,MAAMqsF,SAASD,EAC9B,CASI,MAAAD,CAAOC,GACH,OAAOpsF,MAAMmsF,OAAOC,EAC5B,CAMI,aAAAM,CAAcN,GACV,OAAOpsF,MAAM0sF,cAAcN,EACnC,CAOI,IAAAuB,CAAKvwD,GACD,IAAI0xD,EAAQ,CAAC7uF,KAAKsrF,YACdwD,EAAgB9uF,KAAKsrF,WACzB,GAAInuD,EAASn9B,KAAKgsF,UAAY,CAC1B,IAAI+C,EAAazS,GAAYM,UAAU+H,0BAClC9/E,QAAQ,SAAUs4B,EAAM32B,YACxB3B,QAAQ,QAAS7E,KAAKgsF,UAAUxlF,YACrC,MAAM,IAAI7G,MAAMovF,EAC5B,CACQ,IAAK,IAAIC,EAAU,EAAGA,EAAU7xD,EAAQ,GAAI6xD,IACxCH,EAAMvnF,KAAKwnF,EAAcpH,gBACzBoH,EAAgBA,EAAcpH,eAElC,OAAOmH,CACf,CAMI,KAAAznF,GACI,IAAI6nF,EAAgBjvF,KAAK07E,WAAW4J,WACpC,GAAsB,MAAlB2J,EACA,MAAM,IAAItvF,MAAM,oDAEpB,IAAIuvF,EAAYjE,GAASnB,WAAWzE,WAAW4J,EAAgB,IAC3DE,EAAsBnvF,KAAKsrF,WAC3B8D,EAAa,IAAIrE,GAAcoE,EAAqBD,GACpDG,EAAuBD,EAAW7D,UAAU7D,eAEhD,MAAO,CAAC0H,EADU,IAAIrE,GAAcsE,EAAsBH,GAElE,CAQI,SAAAI,CAAU1kD,GACN,IAAI2kD,EAAa3kD,EAAO06C,WAAatlF,KAAK07E,WAAW4J,WACrD,GAAIiK,EAAa,EACb,MAAM,IAAI5vF,MAAM,qDAEf,GAAmB,KAAf4vF,EACL,MAAO,CAAC,IAAIxE,GAAc/qF,KAAKsrF,WAAY1gD,IAE1C,GAAmB,KAAf2kD,EACL,OAAOvvF,KAAKoH,QAEX,CACD,IAAIohD,EAAUxoD,KAAKoH,QACnB,KAAOmoF,EAAa,GAChB/mC,EAAUA,EAAQgnC,SAAQj9E,GAAUA,EAAOnL,UAC3CmoF,GAA0B,GAE9B,OAAO/mC,CACnB,CACA,CAII,YAAAulC,GACI,OAAOhuF,MAAMguF,cACrB,CAII,gBAAAE,GACI,OAAOluF,MAAMkuF,kBACrB,CAII,SAAAwB,GACI,GAAIzvF,KAAK+tF,eAAgB,CACrB,IAAIC,EAAqBhuF,KAAKgsF,UAC1B0D,EAAmB1vF,KAAKsrF,WAAWhG,WAAc,EACrD,OAAO,IAAIyF,GAAc,IAAIhB,GAAW/D,KAAK0J,GAAmB1vF,KAAK07E,WACjF,CAEA,CAII,aAAAiU,GACI,GAAI3vF,KAAKiuF,mBAAoB,CACzB,IAAID,EAAqBhuF,KAAKgsF,UAC1B4D,EAAuB5vF,KAAKsrF,WAAWhG,WAAc,EACzD,OAAO,IAAIyF,GAAc,IAAIhB,GAAW/D,KAAK4J,GAAuB5vF,KAAK07E,WACrF,CAEA,EAEAkP,GAAAG,cAAwBA,GAOxB,MAAMD,WAAsBgD,GAYxB,WAAAluF,CAAYiwF,EAAMnU,GACd37E,QACAC,KAAK6vF,KAAOA,EACZ7vF,KAAK07E,WAAaA,EAClB17E,KAAKgqF,SAAW,IACxB,CAOI,eAAOwE,CAASsB,GACZ,IAAK3nD,EAAStoC,GAAWy8E,GAAYM,UAAUgG,wBAAwBkN,GACvE,IAAK3nD,EACD,MAAM,IAAIxoC,MAAME,EAAQqQ,QAAO5F,GAAwB,KAARA,IAAe9D,YAElE,IAAIw7E,EAAiB8N,EAAoB1oF,MAAM,KAC3CkgF,EAAWtF,EAAe,GAC1Bp3C,EAAS0zB,OAAO/0D,SAASy4E,EAAe,KAC5C,OAAO,IAAI8I,GAAcf,GAAWjE,KAAKiD,gBAAgBzB,GAAW2D,GAASpB,WAAWxE,WAAWz6C,GAC3G,CAOI,OAAAohD,GACI,OAAOhsF,KAAK07E,WAAW+O,aAC/B,CASI,YAAAmE,GAEI,MAAO,GADK5uF,KAAK6vF,KAAKrpF,WACNA,cAAcxG,KAAK07E,WAAWl1E,YACtD,CAOI,aAAAylF,GACI,OAAOlsF,MAAMksF,eACrB,CAMI,QAAAX,GACI,OAAOvB,GAAWjE,KAAKgD,WAAW9oF,KAAK6vF,KAAKvK,WAActlF,KAAK07E,WAAW2O,SAAS/E,WAC3F,CAMI,OAAAiG,GACI,OAAO31D,GAAK51B,KAAMA,KAAK6vF,KAC/B,CACI,WAAAvB,CAAY7pE,EAAKmmB,GACb,OAAO,IAAIkgD,GAAcrmE,EAAKmmB,EACtC,CACI,SAAAwjD,GACI,OAAOpuF,KAAK07E,UACpB,CAUI,aAAAqR,CAAcZ,GACV,OAAOpsF,MAAMgtF,cAAcZ,EACnC,CASI,QAAAC,CAASD,GACL,OAAOpsF,MAAMqsF,SAASD,EAC9B,CASI,MAAAD,CAAOC,GACH,OAAOpsF,MAAMmsF,OAAOC,EAC5B,CAMI,aAAAM,CAAcN,GACV,OAAOpsF,MAAM0sF,cAAcN,EACnC,CAOI,IAAAuB,CAAKvwD,GACD,IAAI4yD,EAAQ,CAAC/vF,KAAKsrF,YACd0E,EAAgBhwF,KAAKsrF,WACzB,GAAInuD,EAASn9B,KAAKgsF,UACd,MAAM,IAAIrsF,MAAM,GAAGw9B,EAAM32B,8BAA8BxG,KAAKgsF,UAAUxlF,qCAE1E,IAAK,IAAIwoF,EAAU,EAAGA,EAAU7xD,EAAQ,GAAI6xD,IACxCe,EAAMzoF,KAAK0oF,EAActI,gBACzBsI,EAAgBA,EAActI,eAElC,OAAOqI,CACf,CAMI,KAAA3oF,GACI,IAAI6nF,EAAgBjvF,KAAK07E,WAAW4J,WACpC,GAAsB,OAAlB2J,EACA,MAAM,IAAItvF,MAAM,oDAEpB,IAAIuvF,EAAYjE,GAASpB,WAAWxE,WAAW4J,EAAgB,IAC3DE,EAAsBnvF,KAAKsrF,WAC3B8D,EAAa,IAAItE,GAAcqE,EAAqBD,GACpDG,EAAuBD,EAAW7D,UAAU7D,eAEhD,MAAO,CAAC0H,EADU,IAAItE,GAAcuE,EAAsBH,GAElE,CAQI,SAAAI,CAAU1kD,GACN,IAAI2kD,EAAa3kD,EAAO06C,WAAatlF,KAAK07E,WAAW4J,WACrD,GAAIiK,EAAa,EACb,MAAM,IAAI5vF,MAAM,qDAEf,GAAmB,KAAf4vF,EACL,MAAO,CAAC,IAAIzE,GAAc9qF,KAAKsrF,WAAY1gD,IAE1C,GAAmB,KAAf2kD,EACL,OAAOvvF,KAAKoH,QAEX,CACD,IAAIohD,EAAUxoD,KAAKoH,QACnB,KAAOmoF,EAAa,GAChB/mC,EAAUA,EAAQgnC,SAAQj9E,GAAUA,EAAOnL,UAC3CmoF,GAA0B,GAE9B,OAAO/mC,CACnB,CACA,CAII,YAAAulC,GACI,OAAOhuF,MAAMguF,cACrB,CAII,gBAAAE,GACI,OAAOluF,MAAMkuF,kBACrB,CAII,SAAAwB,GACI,GAAIzvF,KAAK+tF,eAAgB,CACrB,IAAIC,EAAqBhuF,KAAKgsF,UAC1B0D,EAAmB1vF,KAAKsrF,WAAWhG,WAAc,EACrD,OAAO,IAAIwF,GAAc,IAAIf,GAAWjE,KAAK4J,GAAmB1vF,KAAK07E,WACjF,CAEA,CAII,aAAAiU,GACI,GAAI3vF,KAAKiuF,mBAAoB,CACzB,IAAID,EAAqBhuF,KAAKgsF,UAC1B4D,EAAuB5vF,KAAKsrF,WAAWhG,WAAa0I,EACxD,OAAO,IAAIlD,GAAc,IAAIf,GAAWjE,KAAK8J,GAAuB5vF,KAAK07E,WACrF,CAEA,EAEAkP,GAAAE,cAAwBA,GAExB,IAAIl1D,GAAO,CAAC3P,EAAOrK,KACf,IAAIouE,EAAW1lF,OAAO2hB,EAAM+jE,SAASz4C,WACjC0+C,EAAW3xB,OAAO,KAAK,IAAIxmC,OAAOkyD,MAClCkG,EAAmBjqE,EAAMy1D,WAAW2O,SAAS/E,WAC7C6K,EAAe9T,GAActB,oBAAoBmV,KAA+B1pF,SAAS,GAAIwjF,GACjG,OAAIa,GAAgB5kE,GACT8jE,GAAW/D,KAAKX,WAAYzpE,EAAG0pE,WAAejJ,GAAcjB,0BAA0B+U,IAGtFpG,GAAWjE,KAAKgD,WAAYltE,EAAG0pE,WAAejJ,GAAcjB,0BAA0B+U,GACrG,EAEA,SAAStF,GAAgBjvE,GACrB,OAAiC,MAA1BA,EAAGouE,SAASz4C,SACvB,CACAq5C,GAAAC,gBAA0BA,GCl5B1BllF,OAAOC,eAAewqF,GAAS,aAAc,CAAE7kF,OAAO,IAC1C6kF,GAAAC,UAAG,EACf,MAAMC,GAAY3oF,GACZsjF,GAAWj8E,GAIjB,MAAMqhF,GAQF,WAAAzwF,CAAY2wF,GACRvwF,KAAKwwF,WAAa,IAAIC,GACtBF,EAAOzoF,SAAQme,IACXjmB,KAAKwwF,WAAWjgE,IAAItK,EAAM,GAEtC,CAKI,aAAOyqE,CAAOC,GACV,IAAIJ,EAASI,EAAU7pF,KAAK8U,GACjB00E,GAAUtF,UAAUG,aAAavvE,KAE5C,OAAO,IAAIy0E,GAAKE,EACxB,CAOI,mBAAOK,CAAaC,GAChB,OAAO,IAAIR,GAAKQ,EACxB,CAMI,qBAAOC,CAAeC,GAClB,IACIC,EADOD,EACSjqF,KAAKmf,GACdA,EAAMioE,eAEjB,OAAO,IAAImC,GAAKW,EACxB,CAII,SAAAC,GACI,OAAOjxF,KAAKwwF,WAAWU,SAC/B,CAII,SAAAC,GACI,IACIC,EADepxF,KAAKwwF,WAAWU,UACHhgF,QAAO,CAACopB,EAAa+2D,EAAcC,EAAct6D,KAC7E,GAA0B,GAAtBsD,EAAY13B,OAEZ,OADA03B,EAAYhzB,KAAK+pF,GACV/2D,EAEN,CACD,IAAIx6B,EAAWw6B,EAAY3R,MACvB4oE,EAAoBzxF,EAAS8sF,cAC7B4E,EAAmBH,EAAazE,cACpC,GAAI2E,EAAkBpD,gBAAgBqD,GAAmB,CACrD,IAAIC,EAASF,EAAkBz2D,MAAM02D,GAErC,OADAl3D,EAAYhzB,KAAKmqF,EAAOvD,cACjB5zD,CAC3B,CASoB,OAPKx6B,EAASssF,SAASiF,GAKnB/2D,EAAYhzB,KAAKxH,IAJjBw6B,EAAYhzB,KAAKxH,GACjBw6B,EAAYhzB,KAAK+pF,IAKd/2D,CAE3B,IACW,IACCo3D,EAAiBrB,GAAKO,aAAaQ,GACvC,OAAIM,EAAeT,YAAYruF,SAAW5C,KAAKixF,YAAYruF,OAChD8uF,EAAeP,YAGfO,CAEnB,CAUI,YAAAC,CAAa/mD,GACT,GAAIA,EAAO6/C,cAAiBzqF,KAAKgsF,UAC7B,MAAM,IAAIrsF,MAAM,0DAA0DirC,KAE9E,IAAIgnD,EACAjwF,EACJkwF,EAAM,IAAK,IAAI5rE,KAASjmB,KAAKixF,YACzB,IAAK,IAAI/xE,EAAS,GAAIA,EAAU0rB,EAAO6/C,eAAmBxkE,EAAM+lE,UAAY9sE,GAAkB,GAC1F,IACI,IAAI4yE,EAAgB7rE,EAAMinE,aAAahuE,EAAQ0rB,EAAO6/C,eACtDmH,EAAoBE,EAAclF,cAClC,IAAImF,EAAY9rE,EAAMunE,WAAWsE,GACjC9xF,KAAKgyF,YAAY/rE,GACjBjmB,KAAKuwB,IAAIwhE,GACT,MAAMF,CAC1B,CACgB,MAAOh/E,GACH,GAAIA,aAAas6E,WACb,SAAS0E,EAEblwF,EAAQkR,CAC5B,CAEQ,GAAI++E,EACA,OAAOA,EAGP,WAAiBxgF,IAAVzP,EAAsB,IAAIhC,MAAM,yDAAyDirC,KAAYjpC,CAExH,CAQI,aAAAswF,CAAcC,GACV,GAAIA,EAAUzH,cAAiBzqF,KAAKgsF,UAChC,MAAM,IAAIrsF,MAAM,4BAEpB,IAAIwyF,EAAK,CAACD,EAAWtnD,EAAQwnD,KACzB,IACI,IAAIC,EAAkBryF,KAAK2xF,aAAa/mD,GACxCwnD,EAAa9qF,KAAK+qF,GAClB,IAAIC,EAAcF,EAAalhF,QAAO,CAACpR,EAAU2lC,IACtC3lC,EAAY2lC,EAAQumD,WAC5B,IACH,OAAIkG,EAAUzH,gBAAmB,EACtB2H,EAGAD,EAAGD,EAAWtnD,EAAQwnD,EAEjD,CACY,MAAOv/E,GACH,IAAI0/E,EAActH,GAASrB,aAAah/C,GACpCqgD,GAASnB,WAAWzE,WAAWz6C,EAAO06C,WAAa,IAAM2F,GAASpB,WAAWxE,WAAWz6C,EAAO06C,WAAa,IAChH,OAAO6M,EAAGD,EAAWK,EAAaH,EAClD,GAEQ,OAAOD,EAAGD,EAAWA,EAAW,GACxC,CAII,OAAAlG,GACI,OAAOhsF,KACFmxF,YACAF,YACA//E,QAAO,CAACpR,EAAU2lC,IACZ3lC,EAAW2lC,EAAQumD,WAC3B,GACX,CAMI,SAAAwG,CAAU3B,GACN7wF,KAAKwwF,WAAWziD,QAChB/tC,KAAKwwF,WAAaxwF,KAAKwwF,WAAWjgE,IAAIsgE,EAC9C,CAOI,WAAAmB,CAAYS,GACR,IAAIC,EAAa1yF,KAAKwwF,WAAWwB,YAAYS,GACzCE,GAAa3yF,KAAKwwF,WAAW/J,SAASiM,GAE1C,OADA1yF,KAAKwwF,WAAakC,EACXC,CACf,CAOI,iBAAAC,CAAkBH,GACd,IAAIC,EAAa1yF,KAAKwwF,WAAWoC,kBAAkBH,GAC/CE,GAAa3yF,KAAKwwF,WAAW/J,SAASiM,GAE1C,OADA1yF,KAAKwwF,WAAakC,EACXC,CACf,CAMI,GAAApiE,CAAItK,GACAjmB,KAAKwwF,WAAaxwF,KAAKwwF,WAAWjgE,IAAItK,EAC9C,CAII,KAAA8nB,GACI/tC,KAAKwwF,WAAWziD,OACxB,EAEAqiD,GAAAC,KAAeA,GACf,MAAMI,GACF,WAAA7wF,CAAYo3B,GAEJh3B,KAAK6yF,aADL77D,EACoBh3B,KAAK8yF,UAAU97D,GAGf,IAAIrnB,KAEpC,CACI,SAAAmjF,CAAU97D,GAUN,OATAA,EAAMia,MAAK,CAAC5tB,EAAGC,IACPD,EAAEsjE,WAAWrjE,IACL,EAERD,EAAEujE,cAActjE,GACT,EAEJ,IAEJ0T,CACf,CACI,OAAAk6D,GACI,OAAOlxF,KAAK6yF,YACpB,CACI,QAAApM,CAAS7hE,GACL,OAAI5kB,KAAK6yF,aAAajwF,SAAWgiB,EAAMssE,UAAUtuF,QAG1C5C,KAAK6yF,aAAa9qE,OAAM,CAACxc,EAAO3G,IAC5B2G,EAAMygF,YAAepnE,EAAMssE,UAAUtsF,GAAOonF,WAE/D,CACI,GAAAz7D,CAAIvB,GACA,IAAIgI,EAAQh3B,KAAK6yF,aAOjB,MANI,SAAU7jE,EACVgI,EAAQA,EAAMpJ,OAAOoB,GAGrBgI,EAAM1vB,KAAK0nB,GAER,IAAIyhE,GAAUzwF,KAAK8yF,UAAU97D,GAC5C,CACI,WAAAg7D,CAAYe,GACR,IAAIC,EAAWhzF,KAAK6yF,aACf3iF,QAAO+iF,GACJ,SAAUF,OACgD3hF,IAAnD2hF,EAAM1gC,MAAKrjC,GAAQA,EAAKy3D,SAASwM,MAGhCF,EAAMtM,SAASwM,KAG/B,OAAO,IAAIxC,GAAUzwF,KAAK8yF,UAAUE,GAC5C,CACI,iBAAAJ,CAAkBG,GACd,IAAIC,EAAWhzF,KAAK6yF,aACfrD,SAAQ0D,IACT,GAAI,SAAUH,EACV,OAAOA,EAAMvD,SAAQxgE,GACbkkE,EAAY9G,SAASp9D,GACdkkE,EAAY1F,WAAWx+D,GAEzBkkE,EAAYhH,OAAOl9D,GACjB,IAAIrf,MAENujF,EAAYzG,cAAcz9D,GACxB,CAACkkE,EAAY9xC,SAASpyB,IAGtB,CAACA,KAKhB,IACI,OAAOkkE,EAAY1F,WAAWuF,EAClD,CACgB,MAAOlgF,GACH,OAAOqgF,CAC3B,CACA,IAEQ,OAAO,IAAIzC,GAAUzwF,KAAK8yF,UAAUE,GAC5C,CACI,KAAAjlD,GACI/tC,KAAK6yF,aAAe,EAC5B,SCzTYM,GCSAC,gBCXZ,IAAIj2E,EAAmBnd,GAAQA,EAAKmd,kBAAqBxX,OAAOyX,OAAM,SAAaC,EAAGxb,EAAGiO,EAAGwN,QAC7ElM,IAAPkM,IAAkBA,EAAKxN,GAC3BnK,OAAOC,eAAeyX,EAAGC,EAAI,CAAEzX,YAAY,EAAME,IAAK,WAAa,OAAOlE,EAAEiO,EAAK,GACpF,EAAA,SAAcuN,EAAGxb,EAAGiO,EAAGwN,QACTlM,IAAPkM,IAAkBA,EAAKxN,GAC3BuN,EAAEC,GAAMzb,EAAEiO,EACb,GACGujF,EAAgBrzF,GAAQA,EAAKqzF,cAAiB,SAASxxF,EAAGuG,GAC1D,IAAK,IAAIkhB,KAAKznB,EAAa,YAANynB,GAAoBlhB,EAAQgL,eAAekW,IAAInM,EAAgB/U,EAASvG,EAAGynB,EACnG,EACD3jB,OAAOC,eAAcwC,EAAU,aAAc,CAAEmD,OAAO,IAUtD8nF,EAAa1rF,GAA0BS,GACvCirF,EAAarkF,GAA0B5G,GACvCirF,EAAav8E,KAA+B1O,GAC5CirF,EAAal8E,GAAuB/O,GACpCirF,EAAah8E,GAAwBjP,GACrCirF,EAAa/7E,GAAqBlP,GAClCirF,EAAa97E,GAAsBnP,GACnCirF,EAAa77E,KAAwBpP,GACrCirF,EAAav6E,GAAoB1Q,GACjCirF,EAAaC,GAAqBlrF,GAClCirF,EAAaE,KAAwBnrF,QF5BrC,SAAY+qF,GACVA,EAAA,sBAAA,wBACAA,EAAA,oBAAA,sBACAA,EAAA,sBAAA,wBACAA,EAAA,qBAAA,uBACAA,EAAA,kBAAA,oBACAA,EAAA,uBAAA,yBACAA,EAAA,iBAAA,mBACAA,EAAA,kBAAA,oBACAA,EAAA,qBAAA,uBACAA,EAAA,sBAAA,wBACAA,EAAA,eAAA,gBACD,CAZD,CAAYA,KAAAA,GAYX,CAAA,IAEK,MAAOK,WAA0BjzF,EAErC,WAAAX,CACEC,EACOW,EACP4Z,EACOta,GAEPC,MAAMF,EAASW,EAAMV,GAJdE,KAAIQ,KAAJA,EAEAR,KAAQF,SAARA,EALT2zF,GAAuBxtF,IAAAjG,UAAA,GAQrByM,GAAAzM,KAAIyzF,GAAYr5E,EAAO,KAElB,UAAA4B,GACL,OAAOhP,GAAAhN,KAAIyzF,GAAA,qBCjBf,SAAYL,GACVA,EAAA,OAAA,SACAA,EAAA,QAAA,SACD,CAHD,CAAYA,KAAAA,GAGX,CAAA,UAEYM,GASX,WAAA9zF,CACkB4kB,EAChB5I,EACAw3D,EACAugB,GAHgB3zF,KAAEwkB,GAAFA,EAJVxkB,KAAA4zF,MAAQ,IAAIn0E,IACZzf,KAAA2M,MAAsBymF,GAAaS,OAQzC7zF,KAAK8zF,QAAU/I,GAAAA,cAAcyD,SAC3Bpb,EAAO,GAAGx3D,EAAGxU,MAAM,KAAK,MAAMy+E,GAAAA,SAASwB,wBAAwBjU,GAAMxoC,SAAWhvB,GAElF5b,KAAK+zF,WAAa/zF,KAAK8zF,QAAQlmF,OAAOwf,YACtCptB,KAAK4b,GAAK5b,KAAKg0F,6BACfh0F,KAAKozE,KAAOpzE,KAAK8zF,QAAQ1F,YAAY/D,SACrCrqF,KAAK2zF,QAAUA,EAAU,IAAI3N,GAAAA,KAAK2N,QAAWviF,EAMxC,cAAA6iF,WACL,MAAO,CACLzvE,GAAIxkB,KAAKwkB,GACT5I,GAAI5b,KAAK4b,GAAGpV,WACZ4sE,KAAMpzE,KAAKozE,KAAK5sE,WAChBmtF,QAAmC,UAAd,QAAZ/oF,EAAA5K,KAAK2zF,eAAO,IAAA/oF,OAAA,EAAAA,EAAEpE,gBAAY,IAAAmpB,OAAA,EAAAA,EAAA1qB,KAAA2F,GACnCgpF,MAAOjuF,OAAOyyC,YAAYzoC,MAAMH,KAAKxP,KAAK4zF,OAAO9sF,KAAI,EAAE0d,EAAIzjB,KAAU,CAACA,EAAK6a,GAAI4I,OAQ5E,OAAAnI,CAAQtb,GACb,GAAIf,KAAKk0F,YACP,MAAM,IAAIV,GACR,sBAAsBzyF,EAAKyjB,wBAC3B2uE,GAAiBgB,eACjBn0F,KAAKi0F,kBAGT,GAAIj0F,KAAKo0F,QAAQrzF,GACf,MAAM,IAAIyyF,GACR,QAAQzyF,EAAKyjB,4CACb2uE,GAAiBkB,wBAGrBr0F,KAAK4zF,MAAM3tF,IAAIlF,EAAKyjB,GAAIzjB,GAOnB,OAAAqzF,CAAQrzF,GACb,OAAOf,KAAK4zF,MAAM7mF,IAAIhM,EAAKyjB,IAOtB,UAAAlI,CAAWvb,GAChB,GAAIf,KAAKk0F,YACP,MAAM,IAAIV,GACR,yBAAyBzyF,EAAKyjB,0BAC9B2uE,GAAiBgB,eACjBn0F,KAAKi0F,kBAGT,IAAKj0F,KAAKo0F,QAAQrzF,GAChB,MAAM,IAAIyyF,GAAkB,oBAAoBzyF,EAAKyjB,oBAAqB2uE,GAAiBmB,mBAE7Ft0F,KAAK4zF,MAAMl0E,OAAO3e,EAAKyjB,IAGlB,aAAA+vE,GACL,GAAIv0F,KAAK2M,QAAUymF,GAAaoB,QAC9B,MAAM,IAAIhB,GAAkB,0BAA2BL,GAAiBgB,eAAgBn0F,KAAKi0F,kBAE/Fj0F,KAAK2M,MAAQymF,GAAaoB,QAMrB,0BAAAR,GACL,MAAMp4E,EAAK5b,KAAK+zF,WAAWl0E,OAAOtU,MAClC,IAAKqQ,EACH,MAAM,IAAI43E,GACR,kCAAkCxzF,KAAK8zF,QAAQlF,iBAC/CuE,GAAiBsB,qBACjBz0F,KAAKi0F,kBAET,OAAOr4E,EAOF,aAAA84E,CAAc94E,GACnB,OAAO5b,KAAK8zF,QAAQ1H,SAAS,IAAIrB,GAAaA,cAACnvE,EAAI,IAAIkuE,GAAUA,WAACxrB,OAAOt+D,KAAKozE,KAAKxoC,WAO9E,cAAA+pD,CAAenwE,GACpB,OAAQxkB,KAAK4zF,MAAM7mF,IAAIyX,GAMlB,cAAAowE,CAAeh5E,GACpB,IAAK,MAAM7a,KAAQf,KAAK4zF,MAAMlsE,SAC5B,GAAI,IAAIs+D,GAAIA,KAACjlF,EAAK6a,IAAI6qE,SAAS7qE,GAAK,OAAO,EAE7C,OAAO,EAGF,SAAAs4E,GACL,OAAOl0F,KAAK2M,QAAUymF,GAAaoB,eE/I1BK,GACX,WAAAj1F,CACkB4kB,EACA5I,EACTq4E,EACAa,GAHS90F,KAAEwkB,GAAFA,EACAxkB,KAAE4b,GAAFA,EACT5b,KAAci0F,eAAdA,EACAj0F,KAAY80F,aAAZA,EAQT,uBAAA/f,GACE,MAAO,CACLlwC,IAAK,CACH,IACK7kC,KAAKi0F,iBACRc,OAAQ/0F,KAAK4b,MAMrB,eAAA85D,CAAgB75D,GACd,MAAM/P,EAAM,IAAIo0B,IAAIlgC,KAAK80F,cAEzB,OADAhpF,EAAIkzB,SAAW,KACR,GAAGlzB,EAAIkpF,YAAYh1F,KAAKi0F,iBAAiBzvE,UAAUxkB,KAAK4b,MAAMC,WCmC5Do5E,GASX,WAAAr1F,CAAY04C,GARZt4C,KAAAk9B,OAAsC,IAAIqF,GAIzBviC,KAAAmK,OAASP,EAAc,WAEhC5J,KAAAmwC,KAAkB,IAAIjC,GAG5BluC,KAAKk1F,WAAa58C,EAAK48C,WACnB58C,EAAKnuC,SACPnK,KAAKmK,OAASmuC,EAAKnuC,QAIvB,mBAAM4R,CAAcrZ,eAClB1C,KAAKmK,OAAO3I,MAAM,mBAAoBkB,GACtC,IACE,MAAMyyF,WAAwBxlE,EAAa,UAAbjtB,aAAO,EAAPA,EAASkZ,UAAI,IAAAhR,OAAA,EAAAA,EAAAxD,MAAM,2BAAO,KAAM,cACxDguF,EAAqB7rF,UAAmC,UAAf,QAAXisB,EAAA9yB,aAAA,EAAAA,EAASkZ,UAAE,IAAA4Z,OAAA,EAAAA,EAAEpuB,MAAM,YAAO,IAAAyuC,OAAA,EAAAA,EAAA,KAAM,MAC9Dw/C,GAAa3yF,aAAO,EAAPA,EAAS0wE,MAAOyS,GAAAA,SAASwB,wBAAwB3kF,EAAQ0wE,MAAMxoC,OAASwqD,EACrFtB,EAAU/I,GAAAA,cAAcyD,SAAS,GAAGxI,GAAAA,KAAKb,WAAWgQ,MAA0BE,KAC9Ez5E,EAAKk4E,EAAQxI,WACblY,EAAO0gB,EAAQ1F,YAAY/D,SAC3BsJ,GAAUjxF,aAAA,EAAAA,EAASixF,SAAU,IAAI3N,GAAAA,KAAKtjF,EAAQixF,cAAWviF,EACzDgJ,QAAgBpa,KAAKk1F,WAAWn5E,cAAc,CAClDH,GAAIA,EAAGpV,WACP4sE,KAAMA,eAAAA,EAAM5sE,WACZmtF,QAASA,eAAAA,EAASntF,aAGd8uF,QAAoBt1F,KAAKk1F,WAAWj4E,cAI1C,aAHMjd,KAAKu1F,kBAAkBn7E,EAASk7E,EAAa5yF,aAAA,EAAAA,EAAS8yF,SAC5Dx1F,KAAKmK,OAAO1I,KAAK,kBAAmB2Y,EAAQ65E,kBAC5Cj0F,KAAKk9B,OAAOyE,KAAK,iBAAkB,CAAEvnB,YAC9BA,EACP,MAAO9K,GACP,MAAMzP,EAAUipD,GAAuBx5C,GACjC3N,EACJ2N,aAAekkF,GACXlkF,EACA,IAAIkkF,GACF,6BAA6B3zF,IAC7BszF,GAAiBsC,2BACjBrkF,EACA9B,GAGR,MADAtP,KAAKk9B,OAAOyE,KAAK,uBAAwB,CAAEhgC,UACrCA,GAGV,mBAAMsa,CAAc7B,GAClBpa,KAAKmK,OAAO3I,MAAM,mBAAoB4Y,EAAQ65E,wBACxCj0F,KAAKmwC,KAAK1C,QAAQ,OAAOrzB,EAAQoK,MAAMpU,UAC3C,UACQpQ,KAAKk1F,WAAWj5E,cAAc7B,GACpCA,EAAQm6E,gBACRv0F,KAAKmK,OAAO1I,KAAK,kBAAmB2Y,EAAQ65E,kBAC5Cj0F,KAAKk9B,OAAOyE,KAAK,iBAAkB,CAAEvnB,YACrC,MAAOzY,GAEP,MADA3B,KAAKk9B,OAAOyE,KAAK,uBAAwB,CAAEvnB,UAASzY,UAC9CA,MAKZ,uBAAM4zF,CAAkBn7E,EAAkBmC,EAAgBw4E,GAExD,OADA/0F,KAAKmK,OAAO3I,MAAM,wBAAyB,CAAE+a,SAAQw4E,iBACxC/0F,KAAKmwC,KAAK1C,QAAQ,OAAOrzB,EAAQoK,MAAMpU,UAClD,IACE,IAAKgK,EAAQu6E,eAAep4E,GAC1B,MAAM,IAAIi3E,GACR,eAAej3E,gDACf42E,GAAiBkB,uBACjBj6E,EAAQ65E,kBAGZ,GAAI75E,EAAQ85E,YACV,MAAM,IAAIV,GACR,iCAAiCj3E,sCACjC42E,GAAiBgB,eACjB/5E,EAAQ65E,kBAGZ,MAAM/K,EAAOlpF,KAAK01F,mBAAmBt7E,EAAS26E,GACxCh0F,QAAaf,KAAKk1F,WAAWK,kBAAkBn7E,EAASmC,EAAQ2sE,EAAK1iF,YAI3E,OAHA4T,EAAQiC,QAAQtb,GAChBf,KAAKmK,OAAO1I,KAAK,qBAAsB,CAAE+iB,GAAIjI,EAAQX,GAAIstE,EAAK1iF,aAC9DxG,KAAKk9B,OAAOyE,KAAK,cAAe,CAAEvnB,UAASrZ,SACpCA,EACP,MAAOY,GAEP,MADA3B,KAAKk9B,OAAOyE,KAAK,oBAAqB,CAAEvnB,UAASzY,UAC3CA,MAKZ,uBAAMg0F,CAAkBv7E,EAAkBrZ,GAExC,OADAf,KAAKmK,OAAO3I,MAAM,wBAAyB,CAAE+a,OAAQxb,EAAKyjB,GAAIuwE,OAAQh0F,EAAK6a,WAC9D5b,KAAKmwC,KAAK1C,QAAQ,OAAOrzB,EAAQoK,MAAMpU,UAClD,IACE,IAAKgK,EAAQg6E,QAAQrzF,GACnB,MAAM,IAAIyyF,GACR,oBAAoBzyF,EAAKyjB,oCACzB2uE,GAAiBmB,kBACjBl6E,EAAQ65E,kBAGZ,GAAI75E,EAAQ85E,YAKV,YAJAl0F,KAAKmK,OAAO3I,MAAM,iCAAiCT,EAAKyjB,uCAAwC,CAC9FpK,UACArZ,eAIEf,KAAKk1F,WAAWS,kBAAkBv7E,EAASrZ,GACjDqZ,EAAQkC,WAAWvb,GACnBf,KAAKmK,OAAO1I,KAAK,uBAAwB,CACvC2Y,QAASA,EAAQ65E,iBAAiBr4E,GAClCm5E,OAAQh0F,EAAK6a,KAEf5b,KAAKk9B,OAAOyE,KAAK,cAAe,CAAEvnB,UAASrZ,SAC3C,MAAOY,GAEP,MADA3B,KAAKk9B,OAAOyE,KAAK,oBAAqB,CAAEvnB,UAASrZ,OAAMY,UACjDA,MAKJ,kBAAA+zF,CAAmBt7E,EAAkBw7E,GAC3C,IAAKA,EACH,OAAOx7E,EAAQ45E,6BAEjB,MAAM9K,EAAOlD,GAAAA,KAAKb,WAAWyQ,GAC7B,IAAKx7E,EAAQs6E,cAAcxL,GACzB,MAAM,IAAIsK,GACR,kBAAkBoC,4CAAmDx7E,EAAQ65E,iBAAiBr4E,QAC9Fu3E,GAAiB0C,kBACjBz7E,EAAQ65E,kBAGZ,IAAK75E,EAAQw6E,eAAe1L,GAC1B,MAAM,IAAIsK,GACR,OAAOoC,EAASpvF,yDAChB2sF,GAAiBkB,uBACjBj6E,EAAQ65E,kBAGZ,OAAO/K,SCvLE4M,GASX,WAAAl2F,CACkBm7C,EACCsT,EACA0nC,EACAC,EACAlkB,EACA3nE,EACA8rF,SANDj2F,KAAS+6C,UAATA,EACC/6C,KAAequD,gBAAfA,EACAruD,KAAc+1F,eAAdA,EACA/1F,KAAYg2F,aAAZA,EACAh2F,KAAc8xE,eAAdA,EACA9xE,KAAMmK,OAANA,EACAnK,KAAqBi2F,sBAArBA,EAfHj2F,KAAAk9B,OAAS,IAAIqF,GAGrBviC,KAAck2F,eAAmB,KACjCl2F,KAAAqsC,gBAAkB,IAAI56B,gBAa5BzR,KAAKk0E,YAA0C,QAA5BtpE,EAAA5K,KAAKi2F,6BAAuB,IAAArrF,OAAA,EAAAA,EAAAspE,YAE/Cl0E,KAAK06E,cAAc16E,KAAKqsC,gBAAgB16B,QAAQ1D,OAAOtM,GACrD3B,KAAKmK,OAAO3I,MAAM,oFAAqF,CAAEG,YAMrG,0BAAMw0F,CAAqB5pD,SACjC,IACMvsC,KAAKk2F,sBACDl2F,KAAKk2F,eAAe1lE,WAE5BxwB,KAAKqsC,gBAAgBv6B,MAAM,sCACF,UAArB9R,KAAKk2F,sBAAgB,IAAAtrF,OAAA,EAAAA,EAAA05B,iBACjBtkC,KAAK8xE,eAAet5D,gBAAgBxY,KAAKk2F,eAAe5xD,UAErB,qBAAhCtkC,KAAKo2F,6BACRp2F,KAAKg2F,aAAaxgF,mBAAmBxV,KAAK+6C,WAElD,MAAOp5C,GAEP,MADA3B,KAAKmK,OAAOxI,MAAM,oCAAqC,CAAEwT,YAAanV,KAAK+6C,UAAUv2B,GAAI7iB,UACnFA,EACE,QACR3B,KAAKk9B,OAAOyE,KAAK,cAYrB,qBAAM00D,CAAgB9pD,GACpB,OAAIvsC,KAAKs2F,kBAGTt2F,KAAKs2F,gBAAkBt2F,KAAKm2F,qBAAqB5pD,IAFxCvsC,KAAKs2F,gBAMT,WAAAC,GACL,OAA+B,OAAxBv2F,KAAKk2F,eAQd,gBAAMM,CAAWjqD,GACf,GAAIvsC,KAAKs2F,iBAAmBt2F,KAAKqsC,gBAAgB16B,OAAOwqB,QACtD,MAAM,IAAIl8B,EAAe,4EAE3B,GAA4B,OAAxBD,KAAKk2F,eACP,OAAOl2F,KAAKk2F,eAEd,MAAM7pD,EAAkB,IAAI56B,gBAI5B,GAHAzR,KAAKqsC,gBAAgB16B,OAAO+wB,iBAAiB,SAAS,IACpD2J,EAAgBv6B,MAAM9R,KAAKqsC,gBAAgB16B,OAAOjE,UAEhD6+B,EAAiB,CACnB,MAAMrQ,EAAc+J,GAA6BsG,GACjDrQ,EAAYwG,iBAAiB,SAAS,IAAM2J,EAAgBv6B,MAAMoqB,EAAYxuB,UAC1E6+B,aAA2BpG,aAAeoG,EAAgBpQ,SAC5DkQ,EAAgBv6B,MAAMy6B,EAAgB7+B,QAG1C,OAAO1N,KAAK06E,cAAcruC,EAAgB16B,QAQ5C,oBAAM8kF,SACJ,IACE,GAA4B,OAAxBz2F,KAAKk2F,eAIP,MAAM,IAAIj2F,EAAe,0CAHnBD,KAAK8xE,eAAet5D,gBAAgBxY,KAAKk2F,eAAe5xD,UAC9DtkC,KAAKk2F,eAAiB,KAIxB,MAAOv0F,GAGP,MAFA3B,KAAKk9B,OAAOyE,KAAK,QAAShgC,GAC1B3B,KAAKmK,OAAOxI,MAAM,+BAA+BA,IAAS,CAAEiW,mBAAYhN,EAAA5K,KAAKk2F,qCAAgB5xD,WACvF3iC,GAIV,yBAAMy0F,GACJ,OAAOp2F,KAAKg2F,aAAax5C,eAAex8C,KAAK+6C,UAAUv2B,IAAI1W,MAAMitC,GAAcA,EAAU+B,aAGnF,mBAAM49B,CAAcx+C,GAuB1B,OAtBKl8B,KAAK02F,iBACR12F,KAAK02F,eAAiB,qBACpB,MAAMpyD,QAAiBtkC,KAAK8xE,eAAe35D,eAAenY,KAAK+6C,WAS/D,OARA/6C,KAAKk2F,qBAAuBl2F,KAAK8xE,eAAe4I,cAAcp2C,EAAU,CACtE+pB,gBAAiBruD,KAAKquD,gBACtB6lB,oBAAatpE,EAAA5K,KAAKi2F,4CAAuB/hB,YACzCE,yBAAkBzkD,EAAA3vB,KAAKi2F,4CAAuB3xD,SAC9CiI,gBAAiBrQ,aACd1G,EAAAx1B,KAAKi2F,4CAAuBU,UAEjC32F,KAAKk9B,OAAOyE,KAAK,iBAAkB2C,GAC5BtkC,KAAKk2F,cACb,EAXqB,GAYnBjoF,OAAOtM,IAGN,MAFA3B,KAAKk9B,OAAOyE,KAAK,QAAShgC,GAC1B3B,KAAKmK,OAAOxI,MAAM,8BAA8BA,IAAS,CAAEwT,YAAanV,KAAK+6C,UAAUv2B,KACjF7iB,CAAK,IAEZwM,SAAQ,KACPnO,KAAK02F,oBAAiBtlF,CAAS,KAG9BpR,KAAK02F,sBCpHHE,GAsCX,WAAAh3F,CAAY8C,GArCI1C,KAAAk9B,OAAS,IAAIqF,GAKrBviC,KAAA62F,YAAc,IAAItpD,IAIlBvtC,KAAA82F,aAAe,IAAIvpD,IACnBvtC,KAAA+2F,SAAW,IAAIxpD,IAIfvtC,KAAAitC,aAAe,IAAId,GAgBnBnsC,KAAAg3F,UAAY,IAAI9oD,GAKhBluC,KAAkBi3F,mBAAG,EAG3Bj3F,KAAKo0C,WAAa1xC,EAAQ0xC,WAC1Bp0C,KAAKk3F,aAAex0F,EAAQw0F,aAC5Bl3F,KAAKg2F,aAAetzF,EAAQszF,aAC5Bh2F,KAAKm3F,aAAez0F,EAAQy0F,aAC5Bn3F,KAAKo3F,cAAgB10F,EAAQ00F,cAC7Bp3F,KAAKoa,QAAU1X,EAAQ0X,QACvBpa,KAAKi2F,sBAAwBvzF,EAAQuzF,sBACrCj2F,KAAKy7C,iBAAmB/4C,EAAQ+4C,iBAEhCz7C,KAAKmK,OAASzH,EAAQyH,OAEtBnK,KAAKq3F,aAEgC,iBAAtB30F,aAAO,EAAPA,EAAS40F,UACX50F,eAAAA,EAAS40F,SAEe,iBAAtB50F,aAAO,EAAPA,EAAS40F,UACX50F,aAAO,EAAPA,EAAS40F,SAASp4C,SAD3B,IAGM,EAEVl/C,KAAKu3F,YACH,MACE,GAAiC,iBAAtB70F,aAAO,EAAPA,EAAS40F,UAClB,OAAO50F,aAAO,EAAPA,EAAS40F,SAAS93E,GAE5B,EAJD,IAlEgB,IAwElBxf,KAAKqsC,gBAAkB,IAAI56B,gBAGrB,6BAAM+lF,CAAwBjrD,GACpCvsC,KAAKmK,OAAO3I,MAAM,+CAClB,MAAMmQ,OAAEA,EAAM80B,QAAEA,GAAYL,GAC1BpmC,KAAKqsC,gBAAgB16B,OACrBs0B,GAA6BsG,IAG/B,IACEvsC,KAAKi3F,qBACL,MAAMl8C,QAAkB/6C,KAAKg2F,aAAaz6C,sBAAsBv7C,KAAKk3F,aAAcl3F,KAAKy7C,iBAAkB9pC,GACpGuiE,EAAcl0E,KAAKoa,cACfpa,KAAKo3F,cAAc7B,kBAAkBv1F,KAAKoa,QAAS2gC,EAAU/jC,SAASwN,SAC5EpT,EACEqmF,EAAiBz3F,KAAKm3F,aAAaO,qBAAqB38C,EAAW/6C,KAAKo0C,WAAY,CACxF8/B,iBACGl0E,KAAKi2F,wBAGV,OADAj2F,KAAKk9B,OAAOyE,KAAK,UAAW,CAAEoZ,cACvB08C,EACP,MAAO91F,GACP,GAAIgQ,EAAOwqB,QAET,MADAn8B,KAAKmK,OAAO3I,MAAM,uCAAwCG,GACpDA,EAUR,MARA3B,KAAKk9B,OAAOyE,KAAK,sBAAuB,CACtChgC,MAAO,IAAI6lC,GACT,kCACAD,GAAgBowD,6BAChBh2F,KAGJ3B,KAAKmK,OAAOxI,MAAM,kCAAmCA,GAC/CA,EACE,QACR3B,KAAKi3F,qBACLxwD,KAII,cAAM2B,CAASqvD,GACrB,IACE,MAAM9qF,QAAc8qF,EAAerB,sBAC7B7jF,EAAmB,aAAV5F,EAEf,OADA3M,KAAKmK,OAAO3I,MAAM,wCAAyC,CAAE+Q,SAAQ5F,UAC9D4F,EACP,MAAOjD,GAEP,OADAtP,KAAKmK,OAAOxI,MAAM,8EAA+E2N,IAC1F,GAIH,4BAAAsoF,GACN,OAAO53F,KAAKgsF,UAAYhsF,KAAKi3F,mBAAqBj3F,KAAKu3F,YAOjD,6BAAMM,GACZ,IAAIJ,EAAwC,KAQ5C,GAPIz3F,KAAK82F,aAAan3E,KAAO,GAC3B83E,EAAiBz3F,KAAK82F,aAAapvE,SAAS7H,OAAOtU,MACnDvL,KAAK82F,aAAap3E,OAAO+3E,IAChBz3F,KAAK62F,YAAYl3E,KAAO,IACjC83E,EAAiBz3F,KAAK62F,YAAYnvE,SAAS7H,OAAOtU,MAClDvL,KAAK62F,YAAYn3E,OAAO+3E,KAErBA,EACH,OAAO,KAGT,aADsBz3F,KAAKooC,SAASqvD,GAK7BA,SAHCz3F,KAAK0F,QAAQ+xF,GACZz3F,KAAK63F,2BAKR,oBAAMC,CAAevrD,GAC3B,MAAMwrD,QAAe/3F,KAAKitC,aAAalnC,IAAIwmC,GAK3C,OAJAvsC,KAAK+2F,SAASxmE,IAAIwnE,GAClB/3F,KAAKk9B,OAAOyE,KAAK,WAAY,CAC3BoZ,UAAWg9C,EAAOh9C,YAEbg9C,EAOD,mCAAMC,CAA8BzrD,GAC1C,MAAM0rD,EAAK,IAAIxmF,iBACTE,OAAEA,EAAM80B,QAAEA,GAAYL,GAC1B6xD,EAAGtmF,OACHs0B,GAA6BsG,GAC7BvsC,KAAKqsC,gBAAgB16B,QAEvB,OAAOpS,QAAQ24F,IAAI,CACjBl4F,KAAKw3F,wBAAwB7lF,GAC7B3R,KAAKitC,aAAalnC,IAAI4L,GAAQ7D,MAAMiqF,IAClC/3F,KAAKmK,OAAO1I,KAAK,iFACVs2F,OAGR9pF,OAAOqB,IAGN,MAAMA,EAAIkD,OAAO,EAAE,IAEpBrE,SAAQ,KACP8pF,EAAGnmF,QACH20B,GAAS,IASf,aAAMgH,CAAQlB,GACZ,GAAIvsC,KAAKm4F,WACP,MAAM,IAAIj4F,EAAgB,kEAG5B,IAAIu3F,QAAuBz3F,KAAK63F,0BAEhC,IAAKJ,EAAgB,CACnB,IAAKz3F,KAAK43F,+BACR,OAAO53F,KAAK83F,eAAevrD,GAE7BkrD,QAAuBz3F,KAAKg4F,8BAA8BzrD,GAQ5D,OALAvsC,KAAK+2F,SAASxmE,IAAIknE,GAClBz3F,KAAKk9B,OAAOyE,KAAK,WAAY,CAC3BoZ,UAAW08C,EAAe18C,YAGrB08C,EAOD,8CAAAW,CAA+CX,GACjDz3F,KAAKitC,aAAaH,eACpB9sC,KAAKitC,aAAaF,IAAI0qD,GAGpBA,EAAelB,cACjBv2F,KAAK82F,aAAavmE,IAAIknE,GAEtBz3F,KAAK62F,YAAYtmE,IAAIknE,GAIzB,aAAMxyE,CAAQwyE,GACZ,OAAOz3F,KAAKg3F,UAAUvpD,QAAQ,wBAAwBr9B,UACpD,GAAIpQ,KAAKq4F,oBAAsBr4F,KAAKu3F,YAClC,OAAOv3F,KAAK0F,QAAQ+xF,GAEtBz3F,KAAK+2F,SAASr3E,OAAO+3E,GAErB,UADsBz3F,KAAKooC,SAASqvD,GAElC,OAAOz3F,KAAK0F,QAAQ+xF,GAEtBz3F,KAAKo4F,+CAA+CX,GACpDz3F,KAAKk9B,OAAOyE,KAAK,WAAY,CAC3BoZ,UAAW08C,EAAe18C,WAC1B,IAIN,aAAMr1C,CAAQ+xF,GACZ,IACEz3F,KAAK+2F,SAASr3E,OAAO+3E,GACrBz3F,KAAKmK,OAAO3I,MAAM,2CAA4C,CAAE2T,YAAasiF,EAAe18C,UAAUv2B,WAChGjlB,QAAQoR,IAAI,CAAC8mF,EAAepB,kBAAmBr2F,KAAK21F,kBAAkB8B,KAC5Ez3F,KAAKk9B,OAAOyE,KAAK,YAAa,CAC5BoZ,UAAW08C,EAAe18C,YAE5B,MAAOp5C,GACP3B,KAAKk9B,OAAOyE,KAAK,wBAAyB,CACxCoZ,UAAW08C,EAAe18C,UAC1Bp5C,MAAO,IAAI6lC,GACT,oCACAD,GAAgB+wD,gCAChB32F,KAGJ3B,KAAKmK,OAAOxI,MAAM,oCAAqCA,IAI3D,cAAYw2F,GACV,QAASn4F,KAAKu4F,aAGR,gBAAMC,GACZ,UACQx4F,KAAKg3F,UAAUvpD,QAAQ,wBAAwBr9B,UACnDpQ,KAAKqsC,gBAAgBv6B,MAAM,gCAC3B9R,KAAKk9B,OAAOyE,KAAK,YACjB3hC,KAAKitC,aAAaX,aAClB,MAAMmsD,EAAqB9oF,MAAMH,KAAKxP,KAAK+2F,UACxCnpE,OAAOje,MAAMH,KAAKxP,KAAK62F,cACvBjpE,OAAOje,MAAMH,KAAKxP,KAAK82F,qBACpBv3F,QAAQomC,WAAW8yD,EAAmB3xF,KAAK2wF,GAAmBz3F,KAAK0F,QAAQ+xF,MACjFz3F,KAAK62F,YAAY9oD,QACjB/tC,KAAK82F,aAAa/oD,QAClB/tC,KAAK+2F,SAAShpD,QACd/tC,KAAKqsC,gBAAkB,IAAI56B,eAAiB,IAE9C,MAAO9P,GAEP,MADA3B,KAAKmK,OAAOxI,MAAM,2BAA4BA,GACxCA,EACE,QACR3B,KAAKk9B,OAAOyE,KAAK,QAWrB,mBAAM+2D,GACJ,OAAI14F,KAAKm4F,aAGTn4F,KAAKu4F,aAAev4F,KAAKw4F,aAAarqF,SAAQ,KAC5CnO,KAAKu4F,kBAAennF,CAAS,KAHtBpR,KAAKu4F,aAWhB,OAAAvM,GACE,OAAOhsF,KAAKq4F,mBAAqBr4F,KAAK24F,kBAMxC,gBAAAN,GACE,OAAOr4F,KAAK62F,YAAYl3E,KAAO3f,KAAK82F,aAAan3E,KAMnD,eAAAg5E,GACE,OAAO34F,KAAK+2F,SAASp3E,KAoBvB,WAAM4uD,CAAMqqB,GACV,GAAI54F,KAAKq3F,aAAer3F,KAAKq4F,mBAC3B,OAEF,MAAM1mF,OAAEA,EAAM80B,QAAEA,GAAYL,GAC1BpmC,KAAKqsC,gBAAgB16B,OACrBs0B,GAA6B2yD,IAEzBC,EAAoCzoF,gBAClC7Q,QAAQomC,WACZ,IAAIh2B,MAAM3P,KAAKq3F,YAAcr3F,KAAKq4F,oBAAoBS,KAAK,GAAGhyF,KAAI,IAChE9G,KAAKw3F,wBAAwB7lF,GAAQ7D,MAClC2pF,GAAmBz3F,KAAK62F,YAAYtmE,IAAIknE,KACxC91F,GAAU3B,KAAKmK,OAAOxI,MAAM,kCAAmCA,OAGrE,EAGH,KAAO3B,KAAKq3F,YAAcr3F,KAAKq4F,qBACzB1mF,EAAOwqB,eAGLuK,GAA4BmyD,GAKpC,GAFApyD,IAEIzmC,KAAKq3F,YAAcr3F,KAAKq4F,mBAC1B,MAAM,IAAI14F,MAAM,mFAElBK,KAAKk9B,OAAOyE,KAAK,SAGX,uBAAMg0D,CAAkB8B,GAC1Bz3F,KAAKoa,SAAWq9E,EAAevjB,cACjCl0E,KAAKmK,OAAO3I,MAAM,mCAAoC,CACpD4Y,QAASpa,KAAKoa,QAAQ65E,iBAAiBr4E,GACvCm5E,OAAQ0C,EAAevjB,YAAYt4D,WAE/B5b,KAAKo3F,cAAczB,kBAAkB31F,KAAKoa,QAASq9E,EAAevjB,cAkBrE,gBAAM6kB,CACXl+D,EACA0R,GAEA,MAAMwrD,QAAe/3F,KAAKytC,QAAQlB,GAClC,IACE,aAAa1R,EAASk9D,GACd,cACF/3F,KAAKilB,QAAQ8yE,WCtbZiB,GAEX,WAAAp5F,CACmB04C,GAAAt4C,KAAIs4C,KAAJA,EAFnBt4C,KAAAk9B,OAAS,IAAIqF,GAYb,oBAAAm1D,CAAqB38C,EAAsB3G,EAAwB1xC,GACjE,MAAMqzF,EAAiB/1F,KAAKs4C,KAAK4Q,cAAc8C,8BAC7CjR,EACA3G,EACA1xC,eAAAA,EAASyhC,SAEL4zD,EAAS,IAAIjC,GACjB/6C,EACA/6C,KAAKs4C,KAAK+V,gBACV0nC,EACA/1F,KAAKs4C,KAAK09C,aACVh2F,KAAKs4C,KAAKw5B,eACV9xE,KAAKs4C,KAAKnuC,OAAO5I,MAAM,mBACvBmB,GAGF,OADA1C,KAAKk9B,OAAOyE,KAAK,wBAAyBo2D,EAAOh9C,WAC1Cg9C,EAGF,wBAAAkB,CACLC,EACA9kD,EACA1xC,GAEA,MAAMy2F,EAAO,IAAIvC,GAAmB,CAClCxiD,aACA+iD,aAAcn3F,KACdg2F,aAAch2F,KAAKs4C,KAAK09C,aACxBoB,cAAep3F,KAAKs4C,KAAK8+C,cACzBF,aAAcgC,EACdjD,sBAAuBvzF,aAAA,EAAAA,EAASuzF,sBAChC9rF,OAAQnK,KAAKs4C,KAAKnuC,OAAO5I,MAAM,wBAC/B6Y,QAAS1X,aAAA,EAAAA,EAAS0X,QAClBk9E,SAAU50F,aAAA,EAAAA,EAAS40F,WAGrB,OADAt3F,KAAKk9B,OAAOyE,KAAK,6BACVw3D,SCtEEC,GAKX,WAAAx5F,CACmBsrD,EACAmuC,EACAC,EACAnvF,GAHAnK,KAAKkrD,MAALA,EACAlrD,KAAWq5F,YAAXA,EACAr5F,KAAas5F,cAAbA,EACAt5F,KAAMmK,OAANA,EARZnK,KAAAqrD,kBAAoB,IAAIr2B,GAExBh1B,KAAAsrD,oBAAsB,IAAIt2B,GASjC,aAAMyJ,GACJz+B,KAAKmK,OAAO3I,MAAM,kCAElBgO,GAAKxP,KAAKkrD,MAAM/nB,gBACbpP,KACCgF,IAAUqtB,GACJA,GAAWA,EAAQvsC,UACd7Z,KAAKq5F,YAAYE,QAAQnzC,EAAQvsC,WAEjC4e,QAIZrF,UAAU,CACTvT,KAAOwd,GAAUr9B,KAAKqrD,kBAAkBxrC,KAAKwd,GAC7C17B,MAAQ2N,GAAQtP,KAAKqrD,kBAAkB1pD,MAAM2N,GAC7C6iB,SAAU,IAAMnyB,KAAKmK,OAAO3I,MAAM,oCAGtCgO,GAAKxP,KAAKkrD,MAAMjoB,kBACblP,KACCgF,IAAU+tB,GACJA,GAAaA,EAAUztC,YAClBrZ,KAAKs5F,cAAcC,QAAQzyC,EAAUztC,aAErCof,QAIZrF,UAAU,CACTvT,KAAOwd,GAAUr9B,KAAKsrD,oBAAoBzrC,KAAKwd,GAC/C17B,MAAQ2N,GAAQtP,KAAKsrD,oBAAoB3pD,MAAM2N,GAC/C6iB,SAAU,IAAMnyB,KAAKmK,OAAO3I,MAAM,sCAGtCxB,KAAKmK,OAAO3I,MAAM,iCAGpB,UAAAoY,CAAW4K,GACT,OAAOxkB,KAAKq5F,YAAYE,QAAQ/0E,GAGlC,YAAApL,CAAaoL,GACX,OAAOxkB,KAAKs5F,cAAcC,QAAQ/0E,GAGpC,mBAAM7J,CAAcyrC,EAAkBhS,EAAwB6R,GAC5D,IAME,aALMjmD,KAAKkrD,MAAM/mB,QAAQxpB,cAAcyrC,EAAQ5hC,GAAI,CACjD0jC,oBAAqBjC,EACrBjrC,aAAco5B,EAAW5vB,KAGpBxkB,KAAKq5F,YAAYE,QAAQnzC,EAAQ5hC,IACxC,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,6BAA6BlnD,IAC7B+mD,GAAiB8D,wBACjBtW,EACAgS,EAAQpvC,WAKd,mBAAM4D,CAAcwrC,EAAkB14C,GACpC,IAOE,aANM1N,KAAKkrD,MAAM/mB,QAAQvpB,cAAcwrC,EAAQ5hC,GAAI,CACjD6lC,gBAAiB,cACjBnC,oBAAqB,OACrBroD,QAAS6N,IAGJ1N,KAAKq5F,YAAYE,QAAQnzC,EAAQ5hC,IACxC,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,6BAA6BlnD,IAC7B+mD,GAAiB+D,4BACjBv5C,EACAg1C,EAAQpvC,WAKd,qBAAMyD,CAAgBqsC,EAAsB1S,EAAwB6R,GAClE,IAME,aALMjmD,KAAKkrD,MAAM/mB,QAAQ1pB,gBAAgBqsC,EAAUtiC,GAAI,CACrD0jC,oBAAqBjC,EACrBjrC,aAAco5B,EAAW5vB,KAGpBxkB,KAAKs5F,cAAcC,QAAQzyC,EAAUtiC,IAC5C,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,gCAAgClnD,IAChC+mD,GAAiBwD,0BACjBhW,EACA0S,EAAU9vC,WAKhB,qBAAM0D,CAAgBosC,GACpB,IASE,OAAO9mD,KAAKs5F,cAAcC,QAAQzyC,EAAUtiC,IAC5C,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,gCAAgClnD,IAChC+mD,GAAiB2D,8BACjBn5C,EACA01C,EAAU9vC,SACVrV,IAKN,mBAAMoZ,CAAcyJ,GAClB,IACE,MAAMkjB,QAAc1nC,KAAKkrD,MAAM/mB,QAAQppB,cAAcyJ,GACrD,OAAO,IAAIgiC,GAAW9e,GACtB,MAAO/lC,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,kCAAkClnD,IAClC+mD,GAAiB4yC,8BACjBpoF,OACAA,EACAzP,IAKN,sBAAMkZ,CAAiBpL,GACrB,IACE,MAAQwjB,SAAUklB,SAAkBn4C,KAAKkrD,MAAMj4B,SAAShW,cAElDu3B,EAAM,IAAIjwC,KAEVmjC,QAAc1nC,KAAKkrD,MAAM/mB,QAAQtpB,iBAAiB,CACtD4rC,YAAah3C,EAAO+7C,OAAOhlD,WAC3B4gC,gBAAiB33B,EAAO23B,gBACxB+Q,UACArQ,UAAW0M,EAAIxX,cACf1oB,QAAS,IAAI/P,MAAMiwC,EAA6B,IAAvB/kC,EAAO4jC,eAAsBrW,cACtDgrB,aAAa,EACbrB,gBAAiB,GACjBD,YAAa,GACb1rC,aAAc,GACdy+E,QAAShqF,EAAOgqF,UAGlBz5F,KAAKmK,OAAO3I,MACV,cAAckmC,EAAM1sB,6CAA6Cm9B,4BAAkC1oC,EAAO23B,mBAK5G,OAFmB,IAAIof,GAAW9e,GAGlC,MAAO/lC,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,oCAAoClnD,IACpC+mD,GAAiB4yC,8BACjBpoF,OACAA,EACAzP,IAKN,uBAAMuZ,CAAkBk5B,WACtB,IACE,OAAOp0C,KAAKkrD,MAAM/mB,QAAQjpB,kBAAkBk5B,EAAW5vB,IACvD,MAAO7iB,GACP,MAAM,IAAIolD,GACR,kCAAuD,QAAtBp3B,EAAgB,QAAhB/kB,EAAAjJ,EAAMkK,gBAAU,IAAAjB,OAAA,EAAAA,EAAAi0B,YAAM,IAAAlP,OAAA,EAAAA,EAAA9vB,UAAW8B,IAClEilD,GAAiB8yC,wBACjBtlD,OACAhjC,EACAzP,WC9KKg4F,GACX,WAAA/5F,CACmBqrD,EACA2uC,EACAC,EACAC,EACA3vF,GAJAnK,KAAQirD,SAARA,EACAjrD,KAAa45F,cAAbA,EACA55F,KAAY65F,aAAZA,EACA75F,KAAU85F,WAAVA,EACA95F,KAAMmK,OAANA,EAGnB,gCAAM6vC,CAA2B+/C,GAC/B,MAAMC,QAAkBh6F,KAAKirD,SAASjnB,OAAO/tB,gBAAgBjW,KAAKi6F,uBAAuBF,EAAKj8E,YAE9F,GAAyB,iBAAdk8E,EACT,MAAM,IAAIr6F,MAAM,kCAAkCq6F,EAAUn6F,WAG9D,MAAMyoC,EAAS,IAAIjB,GAAO2yD,EAAWD,GAGrC,OAFA/5F,KAAK85F,WAAWvpE,IAAI+X,GAEbA,EAGT,qBAAM8R,CAAgB9R,GACpB,MAAM/1B,QAAevS,KAAKirD,SAASjnB,OAAO9tB,kBAAkBoyB,EAAO9jB,IAEnE,GAAIjS,aAAM,EAANA,EAAQ1S,QACV,MAAM,IAAIF,MAAM,sCAAsC4S,EAAO1S,WAIjE,2BAAA06C,CAA4BjS,GAC1B,OAAO,IAAInV,IAAYsR,IACrB,IAAIr3B,GAAc,EAElB,MAAM8sF,EAAW9pF,UACf,IAAIhD,EAAJ,CAIA,IACE,IAAK,MAAMiwB,WAAer9B,KAAKirD,SAASjnB,OAAO7tB,cAAcmyB,EAAO9jB,IAAK,CACvE,MAAMsjB,EAAY,IAAIvjC,KAAKA,KAAKpB,MAAMk6B,EAAMC,YAE5C,OAAQD,EAAMX,WACZ,IAAK,gBAED,IAEE,MAAMie,EAAgB,IAAItS,GAAchL,EAAMkN,SAAUjC,GACxDtoC,KAAK65F,aAAatpE,IAAIoqB,GACtBlW,EAAS5kB,KAAK,CACZld,KAAM,mBACN4nC,SAAUoQ,EACV7S,cAEF,MAAOx4B,GACPm1B,EAAS9iC,MAAM2N,GACftP,KAAKmK,OAAOxI,MAAM,iDAAkD,CAAE2N,MAAK+tB,QAAOiL,WAGtF,MACF,IAAK,wBAAyB,CAE5B,MAAM3zB,WAAEA,EAAUjH,OAAEA,GAAW2vB,EAEzB88D,EAAiBn6F,KAAK65F,aAAaN,QAAQ5kF,GAE7CwlF,GAAkBn6F,KAAKo6F,uBAAuBD,GAChD11D,EAAS5kB,KAAK,CACZld,KAAM,mBACNk4C,gBAAiBs/C,EACjBzsF,OAAQA,EAAO7N,QACfioC,cAGF9nC,KAAKmK,OAAOxI,MACV,yGACA,CACE07B,UAIN,MAEF,IAAK,qBACHoH,EAAS5kB,KAAK,CACZld,KAAM,wBACNmlC,cAEF,MACF,QACE9nC,KAAKmK,OAAOzI,KAAK,wCAAyC,CAAE27B,YAGlE,MAAO17B,GAEP,GAAI,WAAYA,GAA0B,MAAjBA,EAAMoK,OAC7B,OAGF/L,KAAKmK,OAAOxI,MAAM,iDAAkDA,GACpE8iC,EAAS9iC,MAAMA,GAGZu4F,IAAU,EAKjB,OAFKA,IAEE,KACL9sF,GAAc,CAAI,CACnB,IAIL,qBAAMytC,CAAgBw/C,EAAiC/xD,GACrD,MAAMgyD,EAAYC,gBAAgBv6F,KAAKi6F,uBAAuB3xD,EAAOxqB,YAErEw8E,EAAUzyD,WAAW,qCAAuCS,EAAOlB,gBAEnE,MAAMozD,QAAmBx6F,KAAKirD,SAASjnB,OAAO1tB,sBAC5C+jF,EAAiB/xD,OAAO9jB,GACxB61E,EAAiB71E,GACjB81E,GAIF,GAFAt6F,KAAKmK,OAAO3I,MAAM,qCAAsC,CAAE+Q,OAAQioF,IAExC,iBAAfA,EACT,MAAM,IAAIp6F,EAAmB,2BAA2Bo6F,EAAW36F,WAGrE,MAAM46F,QAAYz6F,KAAKirD,SAASjnB,OAAO3tB,iBAAiBgkF,EAAiB/xD,OAAO9jB,GAAIg2E,GAE9E3/C,EAAkB,IAAI5M,GAAqBwsD,GAEjD,OADAz6F,KAAK65F,aAAatpE,IAAIsqB,GACfA,EAGT,oBAAM6/C,CAAeL,EAAiC3sF,GACpD,IACE,MAAM6E,QAAevS,KAAKirD,SAASjnB,OAAOztB,oBAAoB8jF,EAAiB/xD,OAAO9jB,GAAI61E,EAAiB71E,GAAI,CAC7G3kB,QAAS6N,IAGX1N,KAAKmK,OAAO3I,MAAM,uCAAwC,CAAEqK,SAAU0G,IACtE,MAAO5Q,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6lC,GACR,8BAA8B3nC,IAC9B0nC,GAAgBozD,wBAChBh5F,IAKE,sBAAAs4F,CAAuBW,WAC7B,IAAIhpD,EAG0CA,GADlB,QAAvBhnC,EAAAgwF,EAAYhpD,mBAAW,IAAAhnC,OAAA,EAAAA,EAAEhI,QACa,GAAlCg4F,EAAYhpD,YAAYhvC,OAA2Bg4F,EAAYhpD,YAAY,GACjE,KAAKgpD,EAAYhpD,YAAY5qC,KAAK,WAFD,MAIpD,MAAM6gC,EAAkD,CAAE,EAG1D,OAFwB,QAAxBlY,EAAAirE,EAAY/yD,kBAAY,IAAAlY,GAAAA,EAAA7nB,SAASuiC,GAAUxC,EAAWwC,EAAKtiC,KAAOsiC,EAAK9+B,QAEhE,CAAEqmC,cAAa/J,cAGjB,wCAAMyM,CAAmCt5B,GAC9C,OAAOhb,KAAKirD,SAAS9mB,QAAQ/oB,qBAAqB,CAACJ,IAGrD,sBAAMtE,CAAiBqkC,EAAsBr4C,GAC3C,IAUE,OAPA1C,KAAKmK,OAAO3I,MAAM,oCAAqC,CAAE2T,YAAa4lC,EAAUv2B,WAC1ExkB,KAAKirD,SAASjnB,OAAOttB,iBAAiBqkC,EAAUv2B,GAAIxkB,KAAKirD,SAASl2C,cACxE/U,KAAKmK,OAAO3I,MAAM,6CAA8C,CAAE2T,YAAa4lC,EAAUv2B,WACnFxkB,KAAKirD,SAASjnB,OAAOrtB,gBAAgBokC,EAAUv2B,IAAI9hB,aAAA,EAAAA,EAASm4F,+BAAgC,IAClG76F,KAAKmK,OAAO3I,MAAM,iCAAkC,CAAE2T,YAAa4lC,EAAUv2B,KAGtExkB,KAAK45F,cAAcL,QAAQx+C,EAAUv2B,IAC5C,MAAO7iB,GACP,MAAM,IAAI6lC,GACR,4CACAD,GAAgBuzD,wBAChBn5F,IAKN,qBAAM6U,CAAgB+zB,EAAyB7nC,GAC7C,MAAM2wC,GAAgB3wC,aAAA,EAAAA,EAAS2wC,gBAAiB,KAEhD,IACE,MAAM0nD,EAA2B,CAC/BpmF,WAAY41B,EAAS/lB,GACrBw2E,QAAS,IAAIz2F,MAAM,IAAIA,KAAyB,IAAhB8uC,GAAsBrW,eAGlD7nB,QAAoBkhE,GAAYr2E,KAAKirD,SAASjnB,OAAOxtB,gBAAgBukF,GAA2B,KAEtG,GAA2B,iBAAhB5lF,EACT,MAAM,IAAIqyB,GACR,+DACAD,GAAgBowD,8BAIpB,MAAM58C,QAAkB/6C,KAAK45F,cAAcL,QAAQpkF,GAQnD,OANAnV,KAAKmK,OAAO3I,MAAM,oBAAqB,CACrCu5C,YACApmC,WAAY41B,EAAS/lB,GACrB61B,SAAU9P,EAASjC,OAAO9jB,KAGrBu2B,EACP,MAAOp5C,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6lC,GACR,8BAA8B3nC,IAC9B0nC,GAAgBowD,6BAChBh2F,IAKN,sBAAMm5C,CAAiBvQ,EAAyB7nC,GAC9C,MAAMq4C,QAAkB/6C,KAAKwW,gBAAgB+zB,EAAU7nC,GACjDu4F,QAAkBj7F,KAAK0W,iBAAiBqkC,GACxCpuC,EAAQsuF,EAAUn+C,WAExB,GAAc,aAAVnwC,EACF,MAAM,IAAI66B,GACR,aAAauT,EAAUv2B,yCAAyC7X,IAChE46B,GAAgBuzD,yBAMpB,OAFA96F,KAAKmK,OAAO3I,MAAM,wBAAyBu5C,GAEpCkgD,EAGT,YAAA/lF,CAAasP,GACX,OAAOxkB,KAAK45F,cAAcL,QAAQ/0E,GAGpC,uBAAM02E,CAAkB12E,GAEtB,aADoBxkB,KAAK45F,cAAcL,QAAQ/0E,IAClCs4B,WAGf,wBAAMtnC,CAAmBulC,EAAsBrtC,EAAiB,YAC9D,IAEE,MAAM+3B,QAAgBzlC,KAAK45F,cAAcL,QAAQx+C,EAAUv2B,IAE3D,GAA2B,eAAvBihB,EAAQqX,WACV,MAAM,IAAI78C,EAAe,gEAY3B,aATMo2E,GACJr2E,KAAKirD,SAASjnB,OAAOxuB,mBAAmBiwB,EAAQjhB,GAAI,CAClD3kB,QAAS6N,IAEX,KAGF1N,KAAKmK,OAAO3I,MAAM,uBAAwB,CAAEgjB,GAAIu2B,EAAUv2B,GAAI9W,WAEvD1N,KAAK45F,cAAcL,QAAQx+C,EAAUv2B,IAC5C,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6lC,GACR,iCAAiCuT,EAAUv2B,OAAO3kB,IAClD0nC,GAAgB+wD,gCAChB32F,IAKC,sBAAAyT,GACL,OAAOpV,KAAKirD,SAAS5nB,iBAAiBtP,KACpCoH,IACGkC,GACC,IAAIlK,IAA4BsR,IAC9B,IACEzkC,KAAKmK,OAAO3I,MAAM,8CAA+C,CAAE67B,UAEnE,MAAMyK,EAAY,IAAIvjC,KAAKA,KAAKpB,MAAMk6B,EAAMC,YAGtCZ,EAAYW,EAAMX,WAAaW,EAAM89D,UAE3Cn7F,KAAKkV,aAAamoB,EAAMloB,aACrBrH,MAAMitC,IACL,OAAQre,GACN,IAAK,yBACH+H,EAAS5kB,KAAK,CACZld,KAAM,oBACNo4C,YACAjT,cAEF,MACF,IAAK,2BACHrD,EAAS5kB,KAAK,CACZld,KAAM,sBACNo4C,YAEA0B,aAAcpf,EAAM+9D,WAEpB1tF,OAAQ2vB,EAAM3vB,OAAO7N,QACrBioC,cAEF,MACF,IAAK,yBACHrD,EAAS5kB,KAAK,CACZld,KAAM,oBACNo4C,YAEArtC,OAAQ2vB,EAAM3vB,OAAO7N,QACrBioC,cAEF,MACF,IAAK,0BACHrD,EAAS5kB,KAAK,CACZld,KAAM,qBACNo4C,YACAjT,cAEF,MACF,QACE9nC,KAAKmK,OAAOzI,KAAK,6CAA8C,CAAE27B,cAItEpvB,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,2BAA4B,CAAEwT,YAAakoB,EAAMloB,YAAa7F,UAClG,MAAOA,GACP,MAAM2qC,EAAmB,IAAIzS,GAC3B,oDACAD,GAAgB8zD,cAChB/rF,GAEFtP,KAAKmK,OAAOxI,MAAMs4C,EAAiBp6C,QAAS,CAAEw9B,QAAO/tB,QACrDm1B,EAAS9iC,MAAM2N,UAOnB,sBAAA8qF,CAAuB7vD,GAC7B,MAA2B,cAApBA,EAAShC,OAGX,IAAAoU,CAAKo9C,GACV,MAAM9B,EAAK,IAAIxmF,gBACf,OAAO,IAAI0hB,IAAYsR,IACrBzkC,KAAKirD,SAASjnB,OACXpuB,UAAU,CACTjT,KAAM,WACH3C,KAAKi6F,uBAAuBF,KAEhCjsF,MAAMsf,IACL,GAAwB,iBAAbA,EACT,MAAM,IAAIztB,MAAM,iDAAiDytB,EAASvtB,WAE5E,OAAOutB,CAAQ,IAEhBtf,MAAKsC,MAAOgd,IACX,MAAMkuE,EAAkB,IAAMt7F,KAAKirD,SAASjnB,OAAOjuB,QAAQqX,GAE3D,GAAI6qE,EAAGtmF,OAAOwqB,QAEZ,kBADMm/D,IAIR,MAAM52D,EAAc,IAAI7G,GACtB,GAAG79B,KAAKirD,SAASjnB,OAAOjwB,YAAYtI,OAAO4H,aAAa+Z,WACxD,CACEpc,QAAS,CACPC,OAAQ,oBACR4yB,cAAe,UAAU7jC,KAAKirD,SAAStnB,aAAaJ,YAK1DmB,EAAYhC,iBAAiB,SAAUrF,IACrC,IACE,MAAMq1B,EAASjvD,KAAKN,MAAMk6B,EAAMwB,MAChC4F,EAAS5kB,KAAK,IAAI23B,GAAakb,IAC/B,MAAO/wD,GACP8iC,EAAS9iC,MAAMA,OAGnB+iC,EAAYhC,iBAAiB,SAAU/gC,GAAU8iC,EAAS9iC,MAAMA,KAEhEs2F,EAAGtmF,OAAO4pF,QAAUnrF,UAClBs0B,EAAYpE,cACNg7D,GAAiB,CACxB,IAEFrtF,OAAOtM,IACN,MAAM9B,EAAUipD,GAAuBnnD,GACvC8iC,EAAS9iC,MACP,IAAI6lC,GAAiB,oCAAoC3nC,IAAW0nC,GAAgBi0D,WAAY75F,GACjG,IAEE,KACLs2F,EAAGnmF,OAAO,YClcL2pF,GACX,WAAA77F,CACmBqkC,EACAH,GADA9jC,KAAaikC,cAAbA,EACAjkC,KAAY8jC,aAAZA,EAGnB,aAAMy1D,CAAQ/0E,GACZ,IAAIkjB,EACAqT,EACJ,IACErT,QAAc1nC,KAAKikC,cAAcrqB,WAAW4K,GAC5C,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,6BAA6BlnD,IAC7B+mD,GAAiB80C,wBACjBtqF,OACAA,EACAzP,GAIJ,IACEo5C,QAAkB/6C,KAAK8jC,aAAa5uB,aAAawyB,EAAMvyB,aACvD,MAAOxT,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6lC,GACR,wCAAwC3nC,IACxC0nC,GAAgBo0D,qBAChBh6F,GAGJ,MAAMokD,EAAe,CACnBvhC,GAAIkjB,EAAMuC,SACVC,cAAexC,EAAMyV,UACrBj8C,KAAM65C,EAAUgC,MAAMlV,WAAW,uBAGnC,OAAO,IAAIie,GAAQpe,EAAOqe,UCtCjB61C,GACX,WAAAh8F,CACmBqkC,EACAH,GADA9jC,KAAaikC,cAAbA,EACAjkC,KAAY8jC,aAAZA,EAGnB,aAAMy1D,CAAQ/0E,GACZ,IAAIkjB,EACAqT,EACJ,IACErT,QAAc1nC,KAAKikC,cAAc7qB,aAAaoL,GAC9C,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAIolD,GACR,6BAA6BlnD,IAC7B+mD,GAAiBi1C,0BACjBzqF,OACAA,EACAzP,GAIJ,IACEo5C,QAAkB/6C,KAAK8jC,aAAa5uB,aAAawyB,EAAMvyB,aACvD,MAAOxT,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6lC,GACR,2CAA2C3nC,IAC3C0nC,GAAgBo0D,qBAChBh6F,GAIJ,MAAMokD,EAAe,CACnBvhC,GAAIkjB,EAAMuC,SACVC,cAAexC,EAAMyV,UACrBj8C,KAAM65C,EAAUgC,MAAMlV,WAAW,uBAGnC,OAAO,IAAIwe,GAAU3e,EAAOqe,UCnCnB+1C,GACX,WAAAl8F,CACmB+M,EACA43B,EACAvhC,EACA+4F,GAHA/7F,KAAK2M,MAALA,EACA3M,KAAOukC,QAAPA,EACAvkC,KAAIgD,KAAJA,EACAhD,KAAY+7F,aAAZA,EAGnB,WAAAtrB,CAAYjsD,GACV,OAAOxkB,KAAK+7F,aAAaxC,QAAQ/0E,GAGnC,oBAAMrM,CAAe4iC,GACnB,IACE,MAAMihD,QAAwBh8F,KAAKukC,QAAQpsB,eAAe,CACxDhD,YAAa4lC,EAAUv2B,KAGzB,GAA+B,iBAApBw3E,KAAkC,eAAgBA,GAE3D,MAAM,IAAIr8F,MAAMq8F,GAGlB,OAAOh8F,KAAK+7F,aAAaxC,QAAQyC,EAAgBpkF,YACjD,MAAOjW,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI0uE,GACR,8BAA8BxwE,IAC9BuwE,GAAc6rB,uBACdlhD,OACA3pC,EACA2pC,EAAU/jC,WAKhB,qBAAMwB,CAAgB8rB,GACpB,IAEE,aADMtkC,KAAKukC,QAAQ/rB,gBAAgB8rB,EAAS9f,GAAI,IACzCxkB,KAAK+7F,aAAaxC,QAAQj1D,EAAS9f,IAC1C,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI0uE,GACR,+BAA+BxwE,IAC/BuwE,GAAc8rB,yBACd53D,EAASyW,UACTzW,EACAA,EAASyW,UAAU/jC,WAKzB,sBAAMc,CAAiB0M,GACrB,OAAOxkB,KAAK+7F,aAAaI,mBAAmB33E,GAG9C,mBAAM60D,CAAc/0C,EAAoBqsC,GACtC,IACE,aAAa3wE,KAAKukC,QAAQvhC,KAAKshC,EAAS9f,GAAImsD,GAC5C,MAAOhvE,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI0uE,GACR,6BAA6BxwE,IAC7BuwE,GAAcsB,sBACdptC,EAASyW,UACTzW,EACAA,EAASyW,UAAU/jC,WAKzB,yBAAMqB,CACJisB,EACAhsB,EACAC,EACAjE,GAEA,IAEE,aADsBtU,KAAKukC,QAAQlsB,oBAAoBisB,EAAS9f,GAAIlM,EAASC,EAAcjE,IAC5ExN,KAAK6B,GAAM,IAAI8jD,GAAO9jD,KACrC,MAAOhH,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI0uE,GACR,qCAAqCxwE,IACrCuwE,GAAcgC,8BACd9tC,EAASyW,UACTzW,EACAA,EAASttB,SACTrV,IAKN,kBAAAw4E,CACE71C,EACAhsB,GAGA,OAAOtY,KAAKgD,KAAKwhC,wBAAwBF,EAAS9f,GAAIlM,UC5G7C8jF,GAAb,WAAAx8F,GACmBI,KAAAwI,QAAU,IAAIiX,IAExB,GAAAxZ,CAAI8B,EAAawD,GAGtB,OAFAvL,KAAKwI,QAAQvC,IAAI8B,EAAKwD,GAEfA,EAGF,GAAAxF,CAAIgC,GACT,OAAO/H,KAAKwI,QAAQzC,IAAIgC,GAGnB,OAAOA,GACZ,OAAO/H,KAAKwI,QAAQkX,OAAO3X,GAGtB,GAAAgF,CAAIhF,GACT,OAAO/H,KAAKwI,QAAQuE,IAAIhF,GAGnB,MAAAs0F,GACL,MAAO,IAAIr8F,KAAKwI,QAAQkf,UAGnB,QAAA40E,GACL,OAAOt8F,KAAKwI,QAAQulC,eCnBXwuD,GAGX,WAAA38F,CACmB+M,EACAitF,GADA55F,KAAK2M,MAALA,EACA3M,KAAa45F,cAAbA,EAJX55F,KAAAw8F,WAA8C,IAAIJ,GAO1D,aAAM7C,CAAQ/0E,SACZ,IACE,MAAMrP,QAAoBnV,KAAK2M,MAAMgL,qBAAqB6M,GACpDu2B,QAAkB/6C,KAAK45F,cAAcL,QAAQpkF,GAC7Ck3C,EAAuC,QAAvBzhD,EAAA5K,KAAKw8F,WAAWz2F,IAAIye,UAAG,IAAA5Z,EAAAA,EAAIqhD,GAAkBG,IAC7Dz/C,QAAc3M,KAAKm8F,mBAAmB33E,GACtC+nC,QAAcvsD,KAAK2M,MAAMqL,iBAAiBwM,GAEhD,OAAO,IAAI0nC,GAAS1nC,EAAIu2B,EAAWpuC,QAAAA,EAASs/C,GAAkBK,QAASD,EAAeE,GACtF,MAAO5qD,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI0uE,GACR,2BAA2BxwE,IAC3BuwE,GAAcmE,+BACdnjE,OACAA,OACAA,EACAzP,IAKN,wBAAMw6F,CAAmB33E,GACvB,IACE,MAAMi4E,QAA2Bz8F,KAAK2M,MAAMmL,iBAAiB0M,GAC7D,IAAKi4E,GAAsD,OAAhCA,EAAmB9vF,MAAM,GAClD,OAAOs/C,GAAkBK,QAG3B,MAAM3/C,EAAQs/C,GAAkBwwC,EAAmB9vF,MAAM,IAEzD,OADA3M,KAAKw8F,WAAWv2F,IAAIue,EAAI7X,GACjBA,EACP,MAAOhL,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI0uE,GACR,iCAAiCxwE,IACjCuwE,GAAcmE,+BACdnjE,OACAA,OACAA,EACAzP,WChDK+6F,GACX,WAAA98F,CACmBwnD,EACA0yC,GADA95F,KAAGonD,IAAHA,EACApnD,KAAU85F,WAAVA,EAGnB,aAAMP,CAAQ/0E,GACZ,IAAIi2E,EACJ,IACEA,QAAYz6F,KAAKonD,IAAIlyC,aAAasP,GAClC,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6lC,GAAiB,4BAA4B3nC,IAAW0nC,GAAgBo0D,qBAAsBh6F,GAE1G,MAAM04C,SAAEA,GAAaogD,EAAInyD,OACnBA,EAAStoC,KAAK85F,WAAWP,QAAQl/C,GAEvC,IAAK/R,EACH,MAAM,IAAIloC,EAAmB,yCAAyCi6C,kBAAyB71B,KAGjG,OADkB,IAAIq4B,GAAUr4B,EAAIi2E,EAAKnyD,UCpBhCq0D,GACX,WAAA/8F,CACmBg9F,EACAC,EACAl2E,GAFA3mB,KAAa48F,cAAbA,EACA58F,KAAe68F,gBAAfA,EACA78F,KAAK2mB,MAALA,EAGnB,GAAA4J,CAAIga,GAEF,OADAvqC,KAAK2mB,MAAM1gB,IAAIskC,EAAS/lB,GAAI+lB,GACrBA,EAGT,OAAAgvD,CAAQ/0E,GACN,OAAOxkB,KAAK2mB,MAAM5gB,IAAIye,GAGxB,sBAAMs4E,CAAiBx0D,EAAgB9jB,GACrC,IACE,MAAMi2E,QAAYz6F,KAAK48F,cAAcvmF,iBAAiBiyB,EAAO9jB,GAAIA,GAC3DyO,QAAiBjzB,KAAK68F,gBAAgB5/E,cAG5C,OAF4BgW,EAASA,WAAawnE,EAAIxwD,SAAW,YAAc,YAElD,IAAIgE,GAAqBwsD,GAAO,IAAIpyD,GAAcoyD,EAAKnyD,GACpF,MAAO3mC,GACP,MAAM9B,EAAU8B,EAAM9B,QACtB,MAAM,IAAI2nC,GAAiB,2BAA2B3nC,IAAW0nC,GAAgBw1D,oBAAqBp7F,WC5B/Fq7F,GACX,WAAAp9F,CACmBwnD,EACAzgC,GADA3mB,KAAGonD,IAAHA,EACApnD,KAAK2mB,MAALA,EAGnB,OAAA4yE,CAAQ/0E,GACN,OAAOxkB,KAAK2mB,MAAM5gB,IAAIye,GAGxB,GAAA+L,CAAI+X,GAEF,OADAtoC,KAAK2mB,MAAM1gB,IAAIqiC,EAAO9jB,GAAI8jB,GACnBA,EAGT,MAAA+zD,GACE,OAAOr8F,KAAK2mB,MAAM01E,UCVtB,MAAMY,GAGJ,WAAAr9F,CAA6B4I,GAAAxI,KAAOwI,QAAPA,EAFrBxI,KAAAk9F,UAAY,IAAIz9E,IAIxB,iBAAMg6B,CAAYH,GAChB,IAAKt5C,KAAKwI,QAAQslC,UAChB,MAAM,IAAI1tC,EAAmB,kEAG/B,IAAKmvD,GAAGyH,WAAW1d,IAAeiW,GAAG4tC,UAAU7jD,GAAY8jD,cACzD,MAAM,IAAIj9F,EAAiB,QAAQm5C,qCAGrC,MAGM+jD,EAAQ,CACZ3jD,cAJoB15C,KAAKwI,QAAQixC,YAAYH,GAK7CK,eAJqB35C,KAAKs9F,kBAAkBhkD,IAS9C,OAFAt5C,KAAKk9F,UAAUj3F,IAAIqzC,EAAY+jD,GAExBA,EAGF,SAAAE,GACL,OAA+B,IAAxBv9F,KAAKk9F,UAAUv9E,KAGxB,cAAA65B,CAAeF,GACb,OAAOt5C,KAAKk9F,UAAUn3F,IAAIuzC,GAG5B,eAAAkkD,CAAgBlkD,GACd,OAAOt5C,KAAKk9F,UAAUnwF,IAAIusC,GAGpB,uBAAMgkD,CAAkBG,GAC9B,MAAMC,EAAanuC,GAAGouC,iBAAiBF,GACjCz1F,EAAO41F,GAAOC,SAASzgF,SAE7B,OAAO,IAAI7d,SAAQ,CAACC,EAAS+N,KAC3BmwF,EAAWj9D,GAAG,QAASM,GAAkB/4B,EAAKygE,OAAO1nC,KACrD28D,EAAWj9D,GAAG,OAAO,IAAMjhC,EAAQwI,EAAKsiE,SACxCozB,EAAWj9D,GAAG,SAAUnxB,GAAQ/B,EAAO,IAAInN,EAAmB,gCAAgCkP,IAAOA,KAAM,WCpDpGwuF,GACX,WAAAl+F,CAA6BqrD,GAAAjrD,KAAQirD,SAARA,EAE7B,mBAAMlvC,CAAcrZ,GAClB,IACE,MAAM8hB,GAAEA,EAAE5I,GAAEA,EAAEw3D,KAAEA,EAAIugB,QAAEA,SAAkB3zF,KAAKirD,SAASpmB,IAAI9oB,cAAcrZ,GACxE,OAAO,IAAIgxF,GAAQlvE,EAAI5I,EAAIw3D,EAAMugB,GACjC,MAAOhyF,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6xF,GACR,6BAA6B3zF,IAC7BszF,GAAiBsC,2BACjBrkF,EACAzP,IAIN,mBAAMsa,CAAc7B,GAClB,UACQpa,KAAKirD,SAASpmB,IAAI5oB,cAAc7B,EAAQoK,IAC9C,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6xF,GACR,6BAA6B3zF,IAC7BszF,GAAiB4K,qBACjB3jF,EAAQ65E,iBACRtyF,IAIN,uBAAM4zF,CAAkBn7E,EAAkBmC,EAAgBw4E,GACxD,UACQ/0F,KAAKirD,SAASpmB,IAAIxoB,QAAQjC,EAAQoK,GAAI,CAAEA,GAAIjI,EAAQX,GAAIm5E,IAQ9D,OAPoB,IAAIF,GACtBt4E,EACAw4E,EACA36E,EAAQ65E,eAAep1E,KAAKzE,GAC5Bpa,KAAKirD,SAASpmB,IAAI9wB,YAAYtI,OAAO4H,MAIvC,MAAO1R,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6xF,GACR,kCAAkC3zF,IAClCszF,GAAiB6K,iBACjB5jF,EAAQ65E,iBACRtyF,IAIN,uBAAMg0F,CAAkBv7E,EAAkBrZ,GACxC,UACQf,KAAKirD,SAASpmB,IAAIvoB,WAAWlC,EAAQoK,GAAIzjB,EAAKyjB,IACpD,MAAO7iB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6xF,GACR,kCAAkC3zF,IAClCszF,GAAiBmB,kBACjBl6E,EAAQ65E,iBACRtyF,IAKN,iBAAMsb,GACJ,IACE,aAAajd,KAAKirD,SAASh4B,SAAShW,cAAcnP,MAAM+xB,GAAQA,EAAI5M,WACpE,MAAOtxB,GACP,MAAM9B,EAAUipD,GAAuBnnD,GACvC,MAAM,IAAI6xF,GACR,qCAAqC3zF,IACrCszF,GAAiB8K,2BACjB7sF,EACAzP,KCzBR,SAASu8F,GAKPC,EACAC,GAEA,OAAIA,EACsB,mBAAbA,EACF,IAAIj6F,IAAS,IAAIi6F,KAAYj6F,GAE/B,IAAMi6F,EAER,IAAIj6F,IAAS,IAAIg6F,KAAkBh6F,EAC5C,OA2Iak6F,GAkCX,WAAAz+F,CAAY8C,EAAwC,sCAjCpC1C,KAAAk9B,OAAS,IAAIqF,GAmBrBviC,KAAas+F,eAAG,EAEhBt+F,KAAAqsC,gBAAkB,IAAI56B,gBAQtBzR,KAAYu+F,aAAmC,GAE/Cv+F,KAAiBw+F,kBAA8B,GAOrDx+F,KAAK0C,QAAU,CAHb+7F,qBAAsB,QAKnB/7F,GAGL1C,KAAKmK,OAAuB,QAAdS,EAAAlI,EAAQyH,cAAM,IAAAS,EAAAA,EAAIhB,EAAc,iBAE9C5J,KAAKmK,OAAO3I,MAAM,+CAAgD,CAAEkB,QAAS1C,KAAK0C,UAElF,IACE1C,KAAKkrD,eACHv7B,EAAAjtB,EAAQ07F,+BAAUlzC,QAClB,IAAIloB,GAAS,CACX74B,OAAQnK,KAAKmK,OACbo5B,iBAAQvjC,KAAK0C,QAAQ0kD,0BAAKr/C,IAC1B07B,mBAAUzjC,KAAK0C,QAAQ0kD,0BAAKt7C,MAGhC9L,KAAKquD,iBAAkC,UAAhB3rD,EAAQ07F,gBAAQ,IAAAroD,OAAA,EAAAA,EAAEsY,kBAAmBruD,KAAK0+F,wBAEjE,MAAMC,EAAc,IAAIvC,GAClBwC,EAAgB,IAAIxC,GAEpByC,EAAmB,IAAI7B,GAAiBh9F,KAAKkrD,MAAMlnB,OAAQ26D,GAC3DG,EAAqB,IAAInC,GAAmB38F,KAAKkrD,MAAMlnB,OAAQhkC,KAAKkrD,MAAMj4B,SAAU2rE,GACpFG,EAAsB,IAAIrC,GAAoB18F,KAAKkrD,MAAMlnB,OAAQ66D,GAEvE7+F,KAAKsuE,SAAW,CACdnkE,OAAQnK,KAAKmK,OACb+gD,MAAOlrD,KAAKkrD,MACZmD,gBAAiBruD,KAAKquD,gBACtBwwC,mBACAD,gBACAE,qBACA3zC,YACuB,QAArBrV,EAAA91C,KAAK0C,QAAQ07F,gBAAQ,IAAAtoD,OAAA,EAAAA,EAAEqV,aACvB,IAAIiuC,GACFp5F,KAAKkrD,MACL,IAAIuwC,GAAkBz7F,KAAKkrD,MAAM/mB,QAASnkC,KAAKkrD,MAAMlnB,QACrD,IAAI43D,GAAoB57F,KAAKkrD,MAAM/mB,QAASnkC,KAAKkrD,MAAMlnB,QACvDhkC,KAAKmK,QAET+vE,aACuB,QAArBjkC,EAAAj2C,KAAK0C,QAAQ07F,gBAAQ,IAAAnoD,OAAA,EAAAA,EAAEikC,cACvB,IAAI4hB,GACF97F,KAAKkrD,MAAM5mB,SAAS33B,MACpB3M,KAAKkrD,MAAM5mB,SAASC,QACpBvkC,KAAKkrD,MAAM5mB,SAASthC,KACpB,IAAIu5F,GAAmBv8F,KAAKkrD,MAAM5mB,SAAS33B,MAAOoyF,IAEtDxmD,WACuB,QAArBvC,EAAAh2C,KAAK0C,QAAQ07F,gBAAQ,IAAApoD,OAAA,EAAAA,EAAEuC,YACvB,IAAIohD,GAAiB35F,KAAKkrD,MAAO6zC,EAAqBD,EAAoBD,EAAkB7+F,KAAKmK,QACnG+qF,YAAmC,QAAvBlb,EAAAh6E,KAAK0C,QAAQ07F,gBAAU,IAAApkB,OAAA,EAAAA,EAAAkb,aAAc,IAAI4I,GAAkB99F,KAAKkrD,OAC5E1S,YAAmC,QAAvBtC,EAAAl2C,KAAK0C,QAAQ07F,gBAAU,IAAAloD,OAAA,EAAAA,EAAAsC,aAAc,IAAIykD,GAAqBj9F,KAAKquD,kBAEjFruD,KAAKoa,QAAU8jF,GAAWjJ,aAAmBj1F,KAAK0C,QAAQ07F,+BAAUhkF,QAArD8jF,CAA8Dl+F,KAAKsuE,UAClFtuE,KAAKgkC,OAASk6D,GAAW7lD,GAAyC,QAAvBjC,EAAAp2C,KAAK0C,QAAQ07F,gBAAU,IAAAhoD,OAAA,EAAAA,EAAApS,OAApDk6D,CACZ,IACKl+F,KAAKsuE,SACR8oB,cAAep3F,KAAKoa,SAEtBpa,KAAK0C,QAAQshC,QAEfhkC,KAAKmkC,QAAU+5D,GAAWnzC,GAA0C,QAAvB1U,EAAAr2C,KAAK0C,QAAQ07F,gBAAU,IAAA/nD,OAAA,EAAAA,EAAAlS,QAArD+5D,CAA8Dl+F,KAAKsuE,SAAUtuE,KAAK0C,QAAQyhC,SACzGnkC,KAAKskC,SAAW45D,GAAWjkB,aAAoBj6E,KAAK0C,QAAQ07F,+BAAU95D,SAAtD45D,CAAgEl+F,KAAKsuE,UACrFtuE,KAAK+3F,OAASmG,GACZlF,GACuB,QAAvBviD,EAAAz2C,KAAK0C,QAAQ07F,gBAAU,IAAA3nD,OAAA,EAAAA,EAAAshD,OAFXmG,CAGZ,CACApsB,eAAgB9xE,KAAKskC,SACrB4kB,cAAelpD,KAAKmkC,QACpB6xD,aAAch2F,KAAKgkC,OACnBozD,cAAep3F,KAAKoa,QACpBjQ,OAAQnK,KAAKmK,OACbkkD,gBAAiBruD,KAAKquD,kBAExB,MAAO/+C,GAEP,MADAtP,KAAKk9B,OAAOyE,KAAK,QAASryB,GACpBA,GASV,aAAMmvB,GACJ,UACQz+B,KAAKkrD,MAAMzsB,gBACXz+B,KAAKsuE,SAASnjB,WAAW1sB,gBACzBz+B,KAAKquD,gBAAgBloD,aACrBnG,KAAKg/F,iBACXh/F,KAAKk9B,OAAOyE,KAAK,aACjB3hC,KAAKs+F,eAAgB,EACrB,MAAOhvF,GAEP,MADAtP,KAAKk9B,OAAOyE,KAAK,QAASryB,GACpBA,GAIF,qBAAM2vF,GACZ,IACEj/F,KAAKqsC,gBAAgBv6B,MAAM,wCACrBvS,QAAQomC,WAAW3lC,KAAKu+F,aAAaz3F,KAAKo4F,GAASA,OACzDl/F,KAAKu+F,aAAe,SACdv+F,KAAKquD,gBACR/tB,QACAryB,OAAOqB,GAAQtP,KAAKmK,OAAOzI,KAAK,sEAAuE4N,WACpGtP,KAAKkrD,MACR3lB,aACAt3B,OAAOqB,GACNtP,KAAKmK,OAAOzI,KAAK,4EAA6E4N,KAElGtP,KAAKsuE,SAASswB,cAActC,WAC5Bt8F,KAAKqsC,gBAAkB,IAAI56B,gBAC3B,MAAOnC,GAEP,MADAtP,KAAKmK,OAAOxI,MAAM,4BAA6B2N,GACzCA,EACE,QACRtP,KAAKk9B,OAAOyE,KAAK,gBACjB3hC,KAAKs+F,eAAgB,GASzB,gBAAM/4D,GACJ,OAAIvlC,KAAKm/F,oBAITn/F,KAAKm/F,kBAAoBn/F,KAAKi/F,kBAAkB9wF,SAAQ,KACtDnO,KAAKm/F,uBAAoB/tF,CAAS,KAJ3BpR,KAAKm/F,kBAUR,4BAAMC,EAAuBnjD,MACnCA,EAAKC,cACLA,UAKA,KAAoB,QAAftxC,EAAAqxC,EAAM9X,eAAS,IAAAv5B,OAAA,EAAAA,EAAAwpC,YAAY,CAC9B,MAAMoX,EAASxrD,KAAKgkC,OAAOgY,eAAe,CAAEC,QAAOC,kBAU7CmjD,EAA4B,GAElC,OAAOr/F,KAAKmkC,QAAQtpB,iBAAiB,CACnC2wC,SACAnY,cAAe9wC,KAAKC,MAAMy5C,EAAMjY,OAAO8F,WAAa,GAAKu1D,GAA6B,MAI1F,MAAwC,iBAA7BpjD,EAAM9X,QAAQiQ,WAChBp0C,KAAKmkC,QAAQppB,cAAckhC,EAAM9X,QAAQiQ,YAG3C6H,EAAM9X,QAAQiQ,WAwBvB,WAAMkrD,EAAMrjD,MAAEA,EAAKu4B,MAAEA,EAAKhkD,SAAEA,EAAQ+b,gBAAEA,EAAe2pC,QAAEA,IACrDl2E,KAAKu/F,iBAAiB,CACpBtjD,QACAi6B,YAGF,MAAMvkE,OAAEA,EAAQ80B,QAAS+4D,GAAwBp5D,GAC/CH,GAA6BsG,GAC7BvsC,KAAKqsC,gBAAgB16B,QAGvB,IAAIyiC,EACAqrD,EACA1H,EACA7jB,EAEJ,MAAMztC,EAAUr2B,gBACdovF,IAEIC,GACFA,EAAqBjwE,cAInBuoE,SACIA,EAAO1B,kBAAkBpoF,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,gCAAiC2N,KAE/F2sC,EAAM7hC,SAAW85D,SACbl0E,KAAKoa,QACRu7E,kBAAkB15C,EAAM7hC,QAAS85D,GACjCjmE,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,oCAAqC2N,OAGxD,QAAf1E,EAAAqxC,EAAM9X,eAAS,IAAAv5B,OAAA,EAAAA,EAAAwpC,aAAeA,SAG5Bp0C,KAAKmkC,QACRjpB,kBAAkBk5B,GAClBnmC,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,mCAAoC2N,IAAK,EAG/E,IACE,MAAM4nF,EAAe,IAAIlqD,GAAuB,CAC9C7iC,OAAQnK,KAAKmK,OACbkjC,sBAAuB4O,EAAMjY,OAAO07D,oBACpCvyD,oBAAqB8O,EAAMjY,OAAO27D,wBAGpCvrD,QAAmBp0C,KAAKo/F,uBAAuB,CAAEnjD,QAAOC,cAAe,IACvEvqC,EAAO66B,iBAEP,MAAMqN,QAA4B75C,KAAKgkC,OAAO2U,mBAAmBsD,EAAM3T,OAAQ2T,EAAMjY,OAAQoQ,GACvFwrD,EAAiB5/F,KAAKgkC,OAAOgX,2BAA2B,CAC5DnB,sBACArR,QAASyT,EAAMjY,OAAOwE,QACtBt4B,OAAQ+rC,EAAMjY,OAAO07D,sBAGvBD,EAAuBvI,EAAalpD,SAAS4xD,GAC7C,MAAM7kD,QAAkB/6C,KAAKgkC,OAAOuX,sBAClC27C,EACA,CACE7jD,cAAe9wC,KAAKC,MAA+B,GAAzBy5C,EAAMjY,OAAO8F,UAAiB,KAE1Dn4B,GAmBF,OAhBAuiE,EAAcj4B,EAAM7hC,cACVpa,KAAKoa,QAAQm7E,kBAAkBt5C,EAAM7hC,QAAS2gC,EAAU/jC,SAASwN,SACvEpT,EAEJ2mF,EAAS/3F,KAAK+3F,OAAOL,qBAAqB38C,EAAW3G,EAAY,CAC/DjQ,QAAS8X,EAAM9X,QACfG,SAAU2X,EAAM3X,SAChB4vC,cACAyiB,QAAS,CAAEniB,QAAOhkD,WAAU0lD,aAI9BupB,EAAqBjwE,cAErBxvB,KAAKu+F,aAAaj3F,KAAKm/B,GAEhBsxD,EACP,MAAOzoF,GAKP,MAJAtP,KAAKmK,OAAOxI,MAAM,8BAA+B2N,SAG3Cm3B,IACAn3B,GA6CH,YAAMuwF,EAAOvI,SAAEA,EAAQr7C,MAAEA,EAAKu4B,MAAEA,EAAKhkD,SAAEA,EAAQ0lD,QAAEA,YACtDl2E,KAAKu/F,iBAAiB,CACpBtjD,QACAi6B,YAGF,MAAMvkE,EAAS3R,KAAKqsC,gBAAgB16B,OACpC,IAAIyiC,EACA0rD,EACA/jD,EAEJ,MAAMtV,EAAUr2B,gBACV2rC,GACFA,EAAavsB,cAIXswE,SACIA,EACHpH,gBACAzqF,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,4CAA6C2N,OAGhE,QAAf1E,EAAAqxC,EAAM9X,eAAS,IAAAv5B,OAAA,EAAAA,EAAAwpC,aAAeA,SAG5Bp0C,KAAKmkC,QACRjpB,kBAAkBk5B,GAClBnmC,OAAOqB,GAAQtP,KAAKmK,OAAOxI,MAAM,mCAAoC2N,IAAK,EAG/E,IACE,MAAM4nF,EAAe,IAAIlqD,GAAuB,CAC9C7iC,OAAQnK,KAAKmK,OACbkjC,sBAAuB4O,EAAMjY,OAAO07D,oBACpCvyD,oBAAqB8O,EAAMjY,OAAO27D,wBAG9BzjD,EAAoC,iBAAbo7C,EAAwBA,EAA8C,kBAAlC1sF,EAAA0sF,aAAA,EAAAA,EAAU93E,mBAAO83E,aAAQ,EAARA,EAAUp4C,WAAO,IAAAvvB,EAAAA,EAAA,EACnGykB,QAAmBp0C,KAAKo/F,uBAAuB,CAAEnjD,QAAOC,kBACxDvqC,EAAO66B,iBAEP,MAAMqN,QAA4B75C,KAAKgkC,OAAO2U,mBAAmBsD,EAAM3T,OAAQ2T,EAAMjY,OAAQoQ,GAEvFwrD,EAAiB5/F,KAAKgkC,OAAOgX,2BAA2B,CAC5DnB,sBACArR,QAASyT,EAAMjY,OAAOwE,QACtBt4B,OAAQ+rC,EAAMjY,OAAO07D,sBAEvB3jD,EAAem7C,EAAalpD,SAAS4xD,GAErC,MAAM51D,EAAcznC,KAAKC,MAA+B,GAAzBy5C,EAAMjY,OAAO8F,UAAiB,IAiB7D,OAfAg2D,EAAqB9/F,KAAK+3F,OAAOkB,yBAAyB/B,EAAc9iD,EAAY,CAClFkjD,WACAl9E,QAAS6hC,EAAM7hC,QACf67E,sBAAuB,CACrB3xD,SAAU2X,EAAM3X,SAChBH,QAAS8X,EAAM9X,QACfwyD,QAAS,CAAEniB,QAAOhkD,WAAU0lD,YAE9Bz6B,iBAAkB,CAChBpI,cAAerJ,KAInBhqC,KAAKu+F,aAAaj3F,KAAKm/B,GAEhBq5D,EACP,MAAOxwF,GAKP,MAJAtP,KAAKmK,OAAOxI,MAAM,mCAAoC2N,SAGhDm3B,IACAn3B,GAIV,WAAAywF,GACE,OAAO//F,KAAKs+F,cAWd,mBAAMviF,CAAcrZ,GAClB,aAAa1C,KAAKoa,QAAQ2B,cAAcrZ,GAO1C,oBAAMs9F,CAAe5lF,GACnB,aAAapa,KAAKoa,QAAQ6B,cAAc7B,GAQnC,GAAA6lF,CACLC,EACAC,GAEAngG,KAAKw+F,kBAAkBl3F,KAAK,CAC1B84F,YAAaF,EACbx9F,QAASy9F,IAIL,qBAAAzB,GACN,GAAiD,iBAAtC1+F,KAAK0C,QAAQ+7F,qBAajB,YAA0CrtF,IAAtCpR,KAAK0C,QAAQ+7F,qBACfz+F,KAAK0C,QAAQ+7F,qBAEb,IAAIxmC,GAfX,OAAQj4D,KAAK0C,QAAQ+7F,sBACnB,IAAK,OACH,OAAO,IAAItoC,GAAoBn2D,KAAKmK,QACtC,IAAK,KACH,OAAO,IAAIkkE,GAAyBruE,KAAKkrD,MAAO,CAC9C/gD,OAAQnK,KAAKmK,SAEjB,QACE,MAAM,IAAIhK,EACR,sCAAsCH,KAAK0C,QAAQ+7F,kEAUrD,oBAAMO,GACZh/F,KAAKmK,OAAO3I,MAAM,iCAClB,IAAK,MAAM6+F,KAAUrgG,KAAKw+F,kBAAmB,CAC3C,MAAM/3D,QAAgB45D,EAAOD,YAAYpgG,KAAMqgG,EAAO39F,SAClD+jC,GACFzmC,KAAKu+F,aAAaj3F,KAAKm/B,GAG3BzmC,KAAKmK,OAAO3I,MAAM,kCAQZ,gBAAA+9F,CAAiBe,WAEvB,GAAIA,EAASpqB,cAA6D9kE,KAApB,QAA9BxG,EAAA01F,EAASrkD,MAAM3T,OAAOsN,gBAAQ,IAAAhrC,OAAA,EAAAA,EAAEmoC,eAA6B,CACnF,MAAMwtD,EAAuBh+F,KAAKid,OAAO7Z,OAAO+hB,OAAO44E,EAASpqB,SAASpvE,KAAKizF,GAASA,EAAK3jB,WAC5F,GAAIkqB,EAASrkD,MAAM3T,OAAOsN,SAAS7C,cAAgBwtD,EACjD,MAAM,IAAItgG,EAAe,8EAI7B,GAAIqgG,EAASpqB,cAA6D9kE,KAApB,QAA9Bue,EAAA2wE,EAASrkD,MAAM3T,OAAOsN,gBAAQ,IAAAjmB,OAAA,EAAAA,EAAEojB,eACtD,MAAM,IAAI9yC,EAAe","x_google_ignoreList":[4,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,165,170,177,181,196,213,214,215,216,217,218,219,220,221,222,223,224,225,228,229,230,231,232,233,234,235,236,237,238,239,248,249,250,251,253,255,256,257,258,259,260,261,262,263,264,265,268]} \ No newline at end of file diff --git a/dist/golem-js.mjs b/dist/golem-js.mjs new file mode 100644 index 000000000..14fe0c036 --- /dev/null +++ b/dist/golem-js.mjs @@ -0,0 +1,115 @@ +import { G as GolemInternalError, W as WebSocketStorageProvider } from './shared-BES5zO0i.mjs'; +export { v as Activity, y as ActivityModuleImpl, w as ActivityStateEnum, A as Agreement, k as Allocation, B as BasicDemandDirector, C as Batch, j as DebitNote, af as DebitNoteRepository, D as Demand, d as DemandSpecification, g as DraftOfferProposalPool, a0 as EnvUtils, ah as EventReader, z as ExeUnit, E as ExecutionConfig, ai as GftpStorageProvider, Q as GolemAbortError, U as GolemConfigError, K as GolemError, e as GolemMarketError, Y as GolemModuleError, a as GolemNetwork, u as GolemNetworkError, m as GolemPaymentError, V as GolemPlatformError, X as GolemTimeoutError, L as GolemUserError, H as GolemWorkError, I as Invoice, o as InvoiceProcessor, ae as InvoiceRepository, ag as MIN_SUPPORTED_YAGNA, ad as MarketApiAdapter, M as MarketErrorCode, h as MarketModuleImpl, q as Network, t as NetworkErrorCode, s as NetworkModuleImpl, r as NetworkNode, N as NetworkState, aj as NullStorageProvider, O as OfferProposal, ac as PaymentApiAdapter, P as PaymentDemandDirector, n as PaymentErrorCode, p as PaymentModuleImpl, l as RejectionReason, F as RemoteProcess, c as RentalModuleImpl, R as ResourceRental, b as ResourceRentalPool, x as Result, S as ScanDirector, i as ScannedOffer, T as TcpProxy, J as WorkErrorCode, f as WorkloadDemandDirector, a1 as YagnaApi, a7 as anyAbortSignal, a5 as checkAndThrowUnsupportedInBrowserError, a6 as createAbortSignalFromTimeout, $ as defaultLogger, a2 as isBrowser, a3 as isNode, a4 as isWebWorker, a9 as mergeUntilFirstComplete, _ as nullLogger, a8 as runOnNextEventLoopIteration, Z as sleep, ab as waitAndCall, aa as waitFor } from './shared-BES5zO0i.mjs'; +import Decimal from 'decimal.js-light'; +import 'debug'; +import 'ya-ts-client'; +import 'uuid'; +import 'semver/functions/satisfies.js'; +import 'semver/functions/coerce.js'; +import 'rxjs'; +import 'eventsource'; +import 'eventemitter3'; +import 'async-lock'; +import 'path'; +import 'fs'; +import 'cross-spawn'; +import 'flatbuffers/js/flexbuffers.js'; +import 'js-sha3'; +import 'ws'; +import 'net'; +import 'buffer'; +import 'async-retry'; +import 'ip-num'; + +/** Default Proposal filter that accept all proposal coming from the market */ +const acceptAll = () => () => true; +/** Proposal filter blocking every offer coming from a provider whose id is in the array */ +const disallowProvidersById = (providerIds) => (proposal) => !providerIds.includes(proposal.provider.id); +/** Proposal filter blocking every offer coming from a provider whose name is in the array */ +const disallowProvidersByName = (providerNames) => (proposal) => !providerNames.includes(proposal.provider.name); +/** Proposal filter blocking every offer coming from a provider whose name match to the regexp */ +const disallowProvidersByNameRegex = (regexp) => (proposal) => !proposal.provider.name.match(regexp); +/** Proposal filter that only allows offers from a provider whose id is in the array */ +const allowProvidersById = (providerIds) => (proposal) => providerIds.includes(proposal.provider.id); +/** Proposal filter that only allows offers from a provider whose name is in the array */ +const allowProvidersByName = (providerNames) => (proposal) => providerNames.includes(proposal.provider.name); +/** Proposal filter that only allows offers from a provider whose name match to the regexp */ +const allowProvidersByNameRegex = (regexp) => (proposal) => !!proposal.provider.name.match(regexp); +/** + * Proposal filter only allowing offers that do not exceed the defined usage + * + * @param priceLimits.start The maximum start price in GLM + * @param priceLimits.cpuPerSec The maximum price for CPU usage in GLM/s + * @param priceLimits.envPerSec The maximum price for the duration of the activity in GLM/s + */ +const limitPriceFilter = (priceLimits) => (proposal) => { + return (proposal.pricing.cpuSec <= priceLimits.cpuPerSec && + proposal.pricing.envSec <= priceLimits.envPerSec && + proposal.pricing.start <= priceLimits.start); +}; + +var strategy$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + acceptAll: acceptAll, + allowProvidersById: allowProvidersById, + allowProvidersByName: allowProvidersByName, + allowProvidersByNameRegex: allowProvidersByNameRegex, + disallowProvidersById: disallowProvidersById, + disallowProvidersByName: disallowProvidersByName, + disallowProvidersByNameRegex: disallowProvidersByNameRegex, + limitPriceFilter: limitPriceFilter +}); + +/** + * Helps to obtain a whitelist of providers which were health-tested. + * + * Important: This helper requires internet access to function properly. + * + * @return An array with Golem Node IDs of the whitelisted providers. + */ +async function getHealthyProvidersWhiteList() { + try { + const response = await fetch("https://reputation.golem.network/v1/provider-whitelist"); + if (response.ok) { + return response.json(); + } + else { + const body = await response.text(); + throw new GolemInternalError(`Request to download healthy provider whitelist failed: ${body}`); + } + } + catch (err) { + throw new GolemInternalError(`Failed to download healthy provider whitelist due to an error: ${err}`, err); + } +} + +var helpers = /*#__PURE__*/Object.freeze({ + __proto__: null, + getHealthyProvidersWhiteList: getHealthyProvidersWhiteList +}); + +/** Default DebitNotes filter that accept all debit notes without any validation */ +const acceptAllDebitNotesFilter = () => async () => true; +/** Default Invoices filter that accept all invoices without any validation */ +const acceptAllInvoicesFilter = () => async () => true; +/** A custom filter that only accepts debit notes below a given value */ +const acceptMaxAmountDebitNoteFilter = (maxAmount) => async (debitNote) => new Decimal(debitNote.totalAmountDue).lte(maxAmount); +/** A custom filter that only accepts invoices below a given value */ +const acceptMaxAmountInvoiceFilter = (maxAmount) => async (invoice) => new Decimal(invoice.amount).lte(maxAmount); + +var strategy = /*#__PURE__*/Object.freeze({ + __proto__: null, + acceptAllDebitNotesFilter: acceptAllDebitNotesFilter, + acceptAllInvoicesFilter: acceptAllInvoicesFilter, + acceptMaxAmountDebitNoteFilter: acceptMaxAmountDebitNoteFilter, + acceptMaxAmountInvoiceFilter: acceptMaxAmountInvoiceFilter +}); + +function createDefaultStorageProvider(yagnaApi, logger) { + return new WebSocketStorageProvider(yagnaApi, { + logger: logger === null || logger === void 0 ? void 0 : logger.child("storage"), + }); +} + +export { GolemInternalError, helpers as MarketHelpers, strategy$1 as OfferProposalFilterFactory, strategy as PaymentFilters, WebSocketStorageProvider, createDefaultStorageProvider }; +//# sourceMappingURL=golem-js.mjs.map diff --git a/dist/golem-js.mjs.map b/dist/golem-js.mjs.map new file mode 100644 index 000000000..e9fc7f0eb --- /dev/null +++ b/dist/golem-js.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"golem-js.mjs","sources":["../src/market/strategy.ts","../src/market/helpers.ts","../src/payment/strategy.ts","../src/shared/storage/default.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA;AACO,MAAM,SAAS,GAAG,MAAM,MAAM,IAAI;AAEzC;AACO,MAAM,qBAAqB,GAAG,CAAC,WAAqB,KAAK,CAAC,QAAuB,KACtF,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAE7C;AACO,MAAM,uBAAuB,GAAG,CAAC,aAAuB,KAAK,CAAC,QAAuB,KAC1F,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEjD;AACO,MAAM,4BAA4B,GAAG,CAAC,MAAc,KAAK,CAAC,QAAuB,KACtF,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAEvC;AACO,MAAM,kBAAkB,GAAG,CAAC,WAAqB,KAAK,CAAC,QAAuB,KACnF,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAE5C;AACO,MAAM,oBAAoB,GAAG,CAAC,aAAuB,KAAK,CAAC,QAAuB,KACvF,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEhD;AACO,MAAM,yBAAyB,GAAG,CAAC,MAAc,KAAK,CAAC,QAAuB,KACnF,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAQxC;;;;;;AAMG;AACI,MAAM,gBAAgB,GAAG,CAAC,WAAwB,KAAK,CAAC,QAAuB,KAAI;IACxF,QACE,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,SAAS;AAChD,QAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,SAAS;QAChD,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK;AAE/C,CAAC;;;;;;;;;;;;;;AC9CD;;;;;;AAMG;AACI,eAAe,4BAA4B,GAAA;AAChD,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,wDAAwD,CAAC;AAEtF,QAAA,IAAI,QAAQ,CAAC,EAAE,EAAE;AACf,YAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;;aACjB;AACL,YAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAElC,YAAA,MAAM,IAAI,kBAAkB,CAAC,0DAA0D,IAAI,CAAA,CAAE,CAAC;;;IAEhG,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,kBAAkB,CAAC,CAAA,+DAAA,EAAkE,GAAG,CAAE,CAAA,EAAE,GAAG,CAAC;;AAE9G;;;;;;;ACnBA;AACO,MAAM,yBAAyB,GAAG,MAAM,YAAY,IAAI;AAE/D;AACO,MAAM,uBAAuB,GAAG,MAAM,YAAY,IAAI;AAE7D;AACO,MAAM,8BAA8B,GAAG,CAAC,SAAiB,KAAK,OAAO,SAAoB,KAC9F,IAAI,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;AAEtD;AACO,MAAM,4BAA4B,GAAG,CAAC,SAAiB,KAAK,OAAO,OAAgB,KACxF,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;;;;;;;;;;ACb5B,SAAA,4BAA4B,CAAC,QAAkB,EAAE,MAAe,EAAA;AAC9E,IAAA,OAAO,IAAI,wBAAwB,CAAC,QAAQ,EAAE;QAC5C,MAAM,EAAE,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,KAAK,CAAC,SAAS,CAAC;AACjC,KAAA,CAAC;AACJ;;;;"} \ No newline at end of file diff --git a/dist/golem-network/golem-network.d.ts b/dist/golem-network/golem-network.d.ts new file mode 100644 index 000000000..2b20551cb --- /dev/null +++ b/dist/golem-network/golem-network.d.ts @@ -0,0 +1,269 @@ +import { Logger, YagnaApi } from "../shared/utils"; +import { IMarketApi, MarketModule, MarketModuleOptions, OfferProposal, OrderMarketOptions } from "../market"; +import { Allocation, IPaymentApi, PaymentModule, PaymentModuleOptions } from "../payment"; +import { ActivityModule, ExeUnitOptions, IActivityApi, IFileServer } from "../activity"; +import { INetworkApi, Network, NetworkModule, NetworkOptions } from "../network"; +import { EventEmitter } from "eventemitter3"; +import { PoolSize, RentalModule, ResourceRental, ResourceRentalOptions, ResourceRentalPool } from "../resource-rental"; +import { CacheService } from "../shared/cache/CacheService"; +import { IDemandRepository, OrderDemandOptions } from "../market/demand"; +import { StorageProvider } from "../shared/storage"; +import { DataTransferProtocol } from "../shared/types"; +import { IProposalRepository } from "../market/proposal"; +import { GolemPluginInitializer, GolemPluginOptions } from "./plugin"; +/** + * Instance of an object or a factory function that you can call `new` on. + * Optionally you can provide constructor arguments. + */ +export type InstanceOrFactory = TargetInterface | { + new (...args: ConstructorArgs): TargetInterface; +}; +export interface GolemNetworkOptions { + /** + * Logger instance to use for logging. + * If no logger is provided you can view debug logs by setting the + * `DEBUG` environment variable to `golem-js:*`. + */ + logger?: Logger; + /** + * Set the API key and URL for the Yagna API. + */ + api?: { + key?: string; + url?: string; + }; + /** + * Set payment-related options. + * + * This is where you can specify the network, payment driver and more. + * By default, the network is set to the `holesky` test network. + */ + payment?: Partial; + /** + * Set market related options. + * + * This is where you can globally specify several options that determine how the SDK will + * interact with the market. + */ + market?: Partial; + /** + * Set the data transfer protocol to use for file transfers. + * Default is `ws`. + */ + dataTransferProtocol?: DataTransferProtocol; + /** + * Override some of the services used by the GolemNetwork instance. + * This is useful for testing or when you want to provide your own implementation of some services. + * Only set this if you know what you are doing. + * To override a module you can pass either an instance of an object or a factory function (that we can call `new` on). + */ + override?: Partial; + payment: InstanceOrFactory; + activity: InstanceOrFactory; + network: InstanceOrFactory; + rental: InstanceOrFactory; + }>; +} +type AllocationOptions = { + /** + * Optionally pass an existing allocation to use or an ID of an allocation that already exists in yagna. + * If this is not provided, a new allocation will be created based on an estimated budget. + */ + allocation?: Allocation | string; +}; +/** + * Represents the order specifications which will result in access to ResourceRental. + */ +export interface MarketOrderSpec { + demand: OrderDemandOptions; + market: OrderMarketOptions; + activity?: ResourceRentalOptions["activity"]; + payment?: ResourceRentalOptions["payment"] & AllocationOptions; + /** The network that should be used for communication between the resources rented as part of this order */ + network?: Network; +} +export interface GolemNetworkEvents { + /** Fires when all startup operations related to GN are completed */ + connected: () => void; + /** Fires when an error will be encountered */ + error: (error: Error) => void; + /** Fires when all shutdown operations related to GN are completed */ + disconnected: () => void; +} +export interface OneOfOptions { + order: MarketOrderSpec; + signalOrTimeout?: number | AbortSignal; + setup?: ExeUnitOptions["setup"]; + teardown?: ExeUnitOptions["teardown"]; + /** + * Define additional volumes ot be mounted when the activity is deployed + * + * @experimental The Provider has to run yagna 0.17.x or newer and offer `vm` runtime 0.5.x or newer + */ + volumes?: ExeUnitOptions["volumes"]; +} +export interface ManyOfOptions { + order: MarketOrderSpec; + poolSize: PoolSize; + setup?: ExeUnitOptions["setup"]; + teardown?: ExeUnitOptions["teardown"]; + /** + * Define additional volumes ot be mounted when the activity is deployed + * + * @experimental The Provider has to run yagna 0.17.x or newer and offer `vm` runtime 0.5.x or newer + */ + volumes?: ExeUnitOptions["volumes"]; +} +/** + * Dependency Container + */ +export type GolemServices = { + yagna: YagnaApi; + logger: Logger; + paymentApi: IPaymentApi; + activityApi: IActivityApi; + marketApi: IMarketApi; + networkApi: INetworkApi; + proposalCache: CacheService; + proposalRepository: IProposalRepository; + demandRepository: IDemandRepository; + fileServer: IFileServer; + storageProvider: StorageProvider; +}; +/** + * General purpose and high-level API for the Golem Network + * + * This class is the main entry-point for developers that would like to build on Golem Network + * using `@golem-sdk/golem-js`. It is supposed to provide an easy access API for use 80% of use cases. + */ +export declare class GolemNetwork { + readonly events: EventEmitter; + readonly options: GolemNetworkOptions; + private readonly logger; + private readonly yagna; + readonly market: MarketModule; + readonly payment: PaymentModule; + readonly activity: ActivityModule; + readonly network: NetworkModule; + readonly rental: RentalModule; + /** + * Dependency Container + */ + readonly services: GolemServices; + private hasConnection; + private disconnectPromise; + private abortController; + private readonly storageProvider; + /** + * List af additional tasks that should be executed when the network is being shut down + * (for example finalizing resource rental created with `oneOf`) + */ + private cleanupTasks; + private registeredPlugins; + constructor(options?: Partial); + /** + * "Connects" to the network by initializing the underlying components required to perform operations on Golem Network + * + * @return Resolves when all initialization steps are completed + */ + connect(): Promise; + private startDisconnect; + /** + * "Disconnects" from the Golem Network + * + * @return Resolves when all shutdown steps are completed + */ + disconnect(): Promise; + private getAllocationFromOrder; + /** + * Define your computational resource demand and access a single instance + * + * Use Case: Get a single instance of a resource from the market to execute operations on + * + * @example + * ```ts + * const rental = await glm.oneOf({ order }); + * await rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem! 👋")) + * .then((res) => console.log(res.stdout)); + * await rental.stopAndFinalize(); + * ``` + * + * @param {Object} options + * @param options.order - represents the order specifications which will result in access to ResourceRental. + * @param options.signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + * @param options.setup - an optional function that is called as soon as the exe unit is ready + * @param options.teardown - an optional function that is called before the exe unit is destroyed + */ + oneOf({ order, setup, teardown, signalOrTimeout, volumes }: OneOfOptions): Promise; + /** + * Define your computational resource demand and access a pool of instances. + * The pool will grow up to the specified poolSize. + * + * @example + * ```ts + * // create a pool that can grow up to 3 rentals at the same time + * const pool = await glm.manyOf({ + * poolSize: 3, + * demand + * }); + * await Promise.allSettled([ + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the first machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the second machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the third machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * ]); + * ``` + * + * @param {Object} options + * @param options.order - represents the order specifications which will result in access to LeaseProcess. + * @param options.poolSize {Object | number} - can be defined as a number or an object with min and max fields, if defined as a number it will be treated as a min parameter. + * @param options.poolSize.min - the minimum pool size to achieve ready state (default = 0) + * @param options.poolSize.max - the maximum pool size, if reached, the next pool element will only be available if the borrowed resource is released or destroyed (dafault = 100) + * @param options.setup - an optional function that is called as soon as the exe unit is ready + * @param options.teardown - an optional function that is called before the exe unit is destroyed + */ + manyOf({ poolSize, order, setup, teardown, volumes }: ManyOfOptions): Promise; + isConnected(): boolean; + /** + * Creates a new logical network within the Golem VPN infrastructure. + * Allows communication between network nodes using standard network mechanisms, + * but requires specific implementation in the ExeUnit/runtime, + * which must be capable of providing a standard Unix-socket interface to their payloads + * and marshaling the logical network traffic through the Golem Net transport layer + * @param options + */ + createNetwork(options?: NetworkOptions): Promise; + /** + * Removes an existing network from the Golem VPN infrastructure. + * @param network + */ + destroyNetwork(network: Network): Promise; + use(pluginCallback: GolemPluginInitializer): void; + use(pluginCallback: GolemPluginInitializer, pluginOptions: TPOptions): void; + private createStorageProvider; + private connectPlugins; + /** + * A helper method used to check if the user provided settings and settings are reasonable + * @param settings + * @private + */ + private validateSettings; +} +export {}; diff --git a/dist/golem-network/index.d.ts b/dist/golem-network/index.d.ts new file mode 100644 index 000000000..13cf43d54 --- /dev/null +++ b/dist/golem-network/index.d.ts @@ -0,0 +1,2 @@ +export * from "./golem-network"; +export { GolemPluginInitializer, GolemPluginOptions, GolemPluginDisconnect } from "./plugin"; diff --git a/dist/golem-network/plugin.d.ts b/dist/golem-network/plugin.d.ts new file mode 100644 index 000000000..62bdd91c3 --- /dev/null +++ b/dist/golem-network/plugin.d.ts @@ -0,0 +1,29 @@ +import { GolemNetwork } from "./golem-network"; +/** + * Represents a generic cleanup task function that will be executed when the plugin lifetime reaches its end + */ +export type GolemPluginDisconnect = () => Promise | void; +/** + * Generic type for plugin options + * + * Plugin options are optional by design and plugin developers should use this type when they + * want to enforce type safety on their plugin usage + */ +export type GolemPluginOptions = Record | undefined; +/** + * A generic plugin registration/connect function + * + * Golem plugins are initialized during {@link GolemNetwork.connect} + * + * A plugin initializer may return a cleanup function which will be called during {@link GolemNetwork.disconnect} + */ +export type GolemPluginInitializer = (glm: GolemNetwork, options: T) => void | GolemPluginDisconnect | Promise; +/** + * Internal data structure that allows deferring plugin initialization to the `connect` call + */ +export type GolemPluginRegistration = { + /** Plugin initialization function */ + initializer: GolemPluginInitializer; + /** Options to pass to the initialization function when it's executed */ + options?: T; +}; diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 000000000..15c27736d --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,11 @@ +export * from "./golem-network"; +export * from "./resource-rental"; +export * from "./market"; +export * from "./payment"; +export * from "./network"; +export * from "./activity"; +export * from "./shared/error/golem-error"; +export * from "./network/tcp-proxy"; +export * from "./shared/utils"; +export * from "./shared/yagna"; +export * from "./shared/storage"; diff --git a/dist/market/agreement/agreement-event.d.ts b/dist/market/agreement/agreement-event.d.ts new file mode 100644 index 000000000..428c25684 --- /dev/null +++ b/dist/market/agreement/agreement-event.d.ts @@ -0,0 +1,25 @@ +import { Agreement } from "./agreement"; +export type AgreementApproved = { + type: "AgreementApproved"; + agreement: Agreement; + timestamp: Date; +}; +export type AgreementTerminatedEvent = { + type: "AgreementTerminated"; + terminatedBy: "Provider" | "Requestor"; + reason: string; + agreement: Agreement; + timestamp: Date; +}; +export type AgreementRejectedEvent = { + type: "AgreementRejected"; + agreement: Agreement; + reason: string; + timestamp: Date; +}; +export type AgreementCancelledEvent = { + type: "AgreementCancelled"; + agreement: Agreement; + timestamp: Date; +}; +export type AgreementEvent = AgreementApproved | AgreementTerminatedEvent | AgreementRejectedEvent | AgreementCancelledEvent; diff --git a/dist/market/agreement/agreement.d.ts b/dist/market/agreement/agreement.d.ts new file mode 100644 index 000000000..8b7e31270 --- /dev/null +++ b/dist/market/agreement/agreement.d.ts @@ -0,0 +1,51 @@ +import { MarketApi } from "ya-ts-client"; +import { Demand } from "../demand"; +/** + * * `Proposal` - newly created by a Requestor (draft based on Proposal) + * * `Pending` - confirmed by a Requestor and send to Provider for approval + * * `Cancelled` by a Requestor + * * `Rejected` by a Provider + * * `Approved` by both sides + * * `Expired` - not approved, rejected nor cancelled within validity period + * * `Terminated` - finished after approval. + * + */ +export type AgreementState = "Proposal" | "Pending" | "Cancelled" | "Rejected" | "Approved" | "Expired" | "Terminated"; +export interface ProviderInfo { + name: string; + id: string; + walletAddress: string; +} +export interface AgreementOptions { + expirationSec?: number; + waitingForApprovalTimeoutSec?: number; +} +export interface IAgreementRepository { + getById(id: string): Promise; +} +/** + * Agreement module - an object representing the contract between the requestor and the provider. + */ +export declare class Agreement { + readonly id: string; + private readonly model; + readonly demand: Demand; + /** + * @param id + * @param model + * @param demand + */ + constructor(id: string, model: MarketApi.AgreementDTO, demand: Demand); + /** + * Return agreement state + * @return state + */ + getState(): "Proposal" | "Pending" | "Cancelled" | "Rejected" | "Approved" | "Expired" | "Terminated"; + get provider(): ProviderInfo; + /** + * Returns flag if the agreement is in the final state + * @description if the final state is true, agreement will not change state further anymore + * @return boolean + */ + isFinalState(): boolean; +} diff --git a/dist/market/agreement/index.d.ts b/dist/market/agreement/index.d.ts new file mode 100644 index 000000000..6823933fe --- /dev/null +++ b/dist/market/agreement/index.d.ts @@ -0,0 +1,2 @@ +export { Agreement, ProviderInfo, AgreementState } from "./agreement"; +export * from "./agreement-event"; diff --git a/dist/market/api.d.ts b/dist/market/api.d.ts new file mode 100644 index 000000000..b111cdbc2 --- /dev/null +++ b/dist/market/api.d.ts @@ -0,0 +1,149 @@ +import { Observable } from "rxjs"; +import { Demand, DemandBodyPrototype, DemandSpecification } from "./demand"; +import { MarketProposalEvent, OfferCounterProposal, OfferProposal } from "./proposal"; +import { Agreement, AgreementEvent, AgreementState } from "./agreement"; +import { AgreementOptions } from "./agreement/agreement"; +import { ScanSpecification, ScannedOffer } from "./scan"; +export type MarketEvents = { + demandSubscriptionStarted: (event: { + demand: Demand; + }) => void; + demandSubscriptionRefreshed: (event: { + demand: Demand; + }) => void; + demandSubscriptionStopped: (event: { + demand: Demand; + }) => void; + /** Emitted when offer proposal from the Provider is received */ + offerProposalReceived: (event: { + offerProposal: OfferProposal; + }) => void; + offerCounterProposalSent: (event: { + offerProposal: OfferProposal; + counterProposal: OfferCounterProposal; + }) => void; + errorSendingCounterProposal: (event: { + offerProposal: OfferProposal; + error: Error; + }) => void; + /** Emitted when the Provider rejects the counter-proposal that the Requestor sent */ + offerCounterProposalRejected: (event: { + counterProposal: OfferCounterProposal; + reason: string; + }) => void; + /** Not implemented */ + offerPropertyQueryReceived: () => void; + offerProposalRejectedByProposalFilter: (event: { + offerProposal: OfferProposal; + reason?: string; + }) => void; + /** Emitted when proposal price does not meet user criteria */ + offerProposalRejectedByPriceFilter: (event: { + offerProposal: OfferProposal; + reason?: string; + }) => void; + agreementApproved: (event: { + agreement: Agreement; + }) => void; + agreementRejected: (event: { + agreement: Agreement; + reason: string; + }) => void; + agreementTerminated: (event: { + agreement: Agreement; + reason: string; + terminatedBy: "Provider" | "Requestor"; + }) => void; + agreementCancelled: (event: { + agreement: Agreement; + }) => void; +}; +export interface IMarketApi { + /** + * Creates a new demand based on the given specification and publishes + * it to the market. + * Keep in mind that the demand lasts for a limited time and needs to be + * refreshed periodically (see `refreshDemand` method). + * Use `unpublishDemand` to remove the demand from the market. + */ + publishDemandSpecification(specification: DemandSpecification): Promise; + /** + * Remove the given demand from the market. + */ + unpublishDemand(demand: Demand): Promise; + /** + * "Publishes" the demand on the network and stats to listen (event polling) for the events representing the feedback + * + * The feedback can fall into four categories: + * + * - (Initial) We will receive initial offer proposals that were matched by the yagna node which we're using + * - (Negotiations) We will receive responses from providers with draft offer proposals if we decided to counter the initial proposal + * - (Negotiations) We will receive an event representing rejection of our counter-proposal by the provider + * - (Negotiations) We will receive a question from the provider about a certain property as part of the negotiation process (_protocol piece not by yagna 0.15_) + * + * @param demand + * + * @returns A complex object that allows subscribing to these categories of feedback mentioned above + */ + collectMarketProposalEvents(demand: Demand): Observable; + /** + * Start looking at the Agreement related events + */ + collectAgreementEvents(): Observable; + /** + * Sends a counter-proposal to the given proposal. Returns the newly created counter-proposal. + */ + counterProposal(receivedProposal: OfferProposal, specification: DemandSpecification): Promise; + /** + * Sends a "reject" response for the proposal that was received from the Provider as part of the negotiation process + * + * On the protocol level this means that no further counter-proposals will be generated by the Requestor + * + * @param receivedProposal The proposal from the provider + * @param reason User readable reason that should be presented to the Provider + */ + rejectProposal(receivedProposal: OfferProposal, reason: string): Promise; + /** + * Fetches payment related decorations, based on the given allocation ID. + * + * @param allocationId The ID of the allocation that will be used to pay for computations related to the demand + * + */ + getPaymentRelatedDemandDecorations(allocationId: string): Promise; + /** + * Retrieves an agreement based on the provided ID. + */ + getAgreement(id: string): Promise; + /** + * Request creating an agreement from the provided proposal + * + * Use this method if you want to decide what should happen with the agreement after it is created + * + * @return An agreement that's in a "Proposal" state (not yet usable for activity creation) + */ + createAgreement(proposal: OfferProposal, options?: AgreementOptions): Promise; + /** + * Request creating an agreement from the provided proposal, send it to the Provider and wait for approval + * + * Use this method when you want to quickly finalize the deal with the Provider, but be ready for a rejection + * + * @return An agreement that's already in an "Approved" state and can be used to create activities on the Provider + */ + proposeAgreement(proposal: OfferProposal, options?: AgreementOptions): Promise; + /** + * Confirms the agreement with the provider + */ + confirmAgreement(agreement: Agreement, options?: AgreementOptions): Promise; + /** + * Terminates an agreement. + */ + terminateAgreement(agreement: Agreement, reason?: string): Promise; + /** + * Retrieves the state of an agreement based on the provided agreement ID. + */ + getAgreementState(id: string): Promise; + /** + * Scan the market for offers that match the given specification. + */ + scan(scanSpecification: ScanSpecification): Observable; +} diff --git a/dist/market/demand/demand-body-builder.d.ts b/dist/market/demand/demand-body-builder.d.ts new file mode 100644 index 000000000..ceb055d55 --- /dev/null +++ b/dist/market/demand/demand-body-builder.d.ts @@ -0,0 +1,52 @@ +/** + * Defines what kind of value data types one can expect in the raw Demand Properties + */ +export type DemandPropertyValue = string | number | boolean | string[] | number[]; +/** + * Represents a single property/attribute that can be set on a Demand to specify Requestor needs + * + * Demand properties should be understood as values for various parameters of the agreement between Provider and Requestor. + * By defining properties on the demand, and negotiating them, the parties settle on the Terms & Conditions of the collaboration. + */ +export type DemandProperty = { + key: string; + value: DemandPropertyValue; +}; +/** + * Data structure that represents details of the body for a demand subscription request + * + * This type belongs to our domain (use case layer), and will later be "serialized" to the body that's sent to + * Yagna. You should consider this as a "draft of the demand", that can be finalized by one of the {@link market/api.IMarketApi} + * implementations. + */ +export type DemandBodyPrototype = { + properties: DemandProperty[]; + constraints: string[]; +}; +export declare enum ComparisonOperator { + Eq = "=", + Lt = "<", + Gt = ">", + GtEq = ">=", + LtEq = "<=" +} +/** + * A helper class assisting in building the Golem Demand object + * + * Various directors should use the builder to add properties and constraints before the final product is received + * from the builder and sent to yagna to subscribe for matched offers (proposals). + * + * The main purpose of the builder is to accept different requirements (properties and constraints) from different + * directors who know what kind of properties and constraints are needed. Then it helps to merge these requirements. + * + * Demand -> DemandSpecification -> DemandPrototype -> DemandDTO + */ +export declare class DemandBodyBuilder { + private properties; + private constraints; + addProperty(key: string, value: DemandPropertyValue): this; + addConstraint(key: string, value: string | number, comparisonOperator?: ComparisonOperator): this; + getProduct(): DemandBodyPrototype; + mergePrototype(prototype: DemandBodyPrototype): this; + private parseConstraint; +} diff --git a/dist/market/demand/demand.d.ts b/dist/market/demand/demand.d.ts new file mode 100644 index 000000000..13965592e --- /dev/null +++ b/dist/market/demand/demand.d.ts @@ -0,0 +1,105 @@ +import { WorkloadDemandDirectorConfigOptions } from "./options"; +import { BasicDemandDirectorConfigOptions } from "./directors/basic-demand-director-config"; +import { PaymentDemandDirectorConfigOptions } from "./directors/payment-demand-director-config"; +import { DemandBodyPrototype } from "./demand-body-builder"; +/** + * This type represents a set of *parameters* that the SDK can set to particular *properties* and *constraints* + * of the demand that's used to subscribe for offers via Yagna + */ +export interface BasicDemandPropertyConfig { + /** + * Specify the name of a subnet of Golem Network that should be considered for offers + * + * Providers and Requestors can agree to a subnet tag, that they can put on their Offer and Demands + * so that they can create "segments" within the network for ease of finding themselves. + * + * Please note that this subnetTag is public and visible to everyone. + */ + subnetTag?: string; + /** + * Determines the expiration time of the offer and the resulting activity in milliseconds. + * + * The value of this field is used to define how long the demand is valid for yagna to match against. + * In addition, it will determine how long the resulting activity will be active. + * + * For example: if `expirationSec` is set to 10 minutes, the demand was created and starting an activity + * required 2 minutes, this means that the activity will be running for 8 more minutes, and then will get terminated. + * + * **IMPORTANT** + * + * It is possible that a provider will reject engaging with that demand if it's configured without using a deadline. + * + * **GUIDE** + * + * If your activity is about to operate for 5-30 min, {@link expirationSec} is sufficient. + * + * If your activity is about to operate for 30min-10h, {@link debitNotesAcceptanceTimeoutSec} should be set as well. + * + * If your activity is about to operate longer than 10h, you need set both {@link debitNotesAcceptanceTimeoutSec} and {@link midAgreementPaymentTimeoutSec}. + */ + expirationSec: number; + /** + * Maximum time for allowed provider-sent debit note acceptance (in seconds) + * + * Accepting debit notes from the provider is used as a health-check of the agreement between these parties. + * Failing to accept several debit notes in a row will be considered as a valida reason to terminate the agreement earlier + * than {@link expirationSec} defines. + * + * _Accepting debit notes during a long activity is considered a good practice in Golem Network._ + * The SDK will accept debit notes each 2 minutes by default. + */ + debitNotesAcceptanceTimeoutSec: number; + /** + * The interval between provider sent debit notes to negotiate. + * + * If it would not be defined, the activities created for your demand would + * probably live only 30 minutes, as that's the default value that the providers use to control engagements + * that are not using mid-agreement payments. + * + * As a requestor, you don't have to specify it, as the provider will propose a value that the SDK will simply + * accept without negotiations. + * + * _Accepting payable debit notes during a long activity is considered a good practice in Golem Network._ + * The SDK will accept debit notes each 2 minutes by default. + */ + midAgreementDebitNoteIntervalSec: number; + /** + * Maximum time to receive payment for any debit note. At the same time, the minimum interval between mid-agreement payments. + * + * Setting this is relevant in case activities which are running for a long time (like 10 hours and more). Providers control + * the threshold activity duration for which they would like to enforce mid-agreement payments. This value depends on the + * provider configuration. Checking proposal rejections from providers in yagna's logs can give you a hint about the + * market expectations. + * + * _Paying in regular intervals for the computation resources is considered a good practice in Golem Network._ + * The SDK will issue payments each 12h by default, and you can control this with this setting. + */ + midAgreementPaymentTimeoutSec: number; +} +export type OrderDemandOptions = Partial<{ + /** Demand properties related to the activities that will be executed on providers */ + workload: Partial; + /** Demand properties that determine payment related terms & conditions of the agreement */ + payment: Partial; +}> & +/** Demand properties that determine most common paramters of the agreement (based on golemsp implementation */ +Partial; +export interface IDemandRepository { + getById(id: string): Demand | undefined; + add(demand: Demand): Demand; + getAll(): Demand[]; +} +export declare class DemandSpecification { + /** Represents the low level demand request body that will be used to subscribe for offers matching our "computational resource needs" */ + readonly prototype: DemandBodyPrototype; + readonly paymentPlatform: string; + constructor( + /** Represents the low level demand request body that will be used to subscribe for offers matching our "computational resource needs" */ + prototype: DemandBodyPrototype, paymentPlatform: string); +} +export declare class Demand { + readonly id: string; + readonly details: DemandSpecification; + constructor(id: string, details: DemandSpecification); + get paymentPlatform(): string; +} diff --git a/dist/market/demand/directors/base-config.d.ts b/dist/market/demand/directors/base-config.d.ts new file mode 100644 index 000000000..553c86e77 --- /dev/null +++ b/dist/market/demand/directors/base-config.d.ts @@ -0,0 +1,8 @@ +/** + * Basic config utility class + * + * Helps in building more specific config classes + */ +export declare class BaseConfig { + protected isPositiveInt(value: number): boolean; +} diff --git a/dist/market/demand/directors/basic-demand-director-config.d.ts b/dist/market/demand/directors/basic-demand-director-config.d.ts new file mode 100644 index 000000000..407441393 --- /dev/null +++ b/dist/market/demand/directors/basic-demand-director-config.d.ts @@ -0,0 +1,9 @@ +import { BaseConfig } from "./base-config"; +export interface BasicDemandDirectorConfigOptions { + /** Determines which subnet tag should be used for the offer/demand matching */ + subnetTag: string; +} +export declare class BasicDemandDirectorConfig extends BaseConfig implements BasicDemandDirectorConfigOptions { + readonly subnetTag: string; + constructor(options?: Partial); +} diff --git a/dist/market/demand/directors/basic-demand-director.d.ts b/dist/market/demand/directors/basic-demand-director.d.ts new file mode 100644 index 000000000..485d27969 --- /dev/null +++ b/dist/market/demand/directors/basic-demand-director.d.ts @@ -0,0 +1,8 @@ +import { DemandBodyBuilder } from "../demand-body-builder"; +import { IDemandDirector } from "../../market.module"; +import { BasicDemandDirectorConfig } from "./basic-demand-director-config"; +export declare class BasicDemandDirector implements IDemandDirector { + private config; + constructor(config?: BasicDemandDirectorConfig); + apply(builder: DemandBodyBuilder): void; +} diff --git a/dist/market/demand/directors/payment-demand-director-config.d.ts b/dist/market/demand/directors/payment-demand-director-config.d.ts new file mode 100644 index 000000000..1b8fa6657 --- /dev/null +++ b/dist/market/demand/directors/payment-demand-director-config.d.ts @@ -0,0 +1,12 @@ +import { BaseConfig } from "./base-config"; +export interface PaymentDemandDirectorConfigOptions { + midAgreementDebitNoteIntervalSec: number; + midAgreementPaymentTimeoutSec: number; + debitNotesAcceptanceTimeoutSec: number; +} +export declare class PaymentDemandDirectorConfig extends BaseConfig implements PaymentDemandDirectorConfigOptions { + readonly debitNotesAcceptanceTimeoutSec: number; + readonly midAgreementDebitNoteIntervalSec: number; + readonly midAgreementPaymentTimeoutSec: number; + constructor(options?: Partial); +} diff --git a/dist/market/demand/directors/payment-demand-director.d.ts b/dist/market/demand/directors/payment-demand-director.d.ts new file mode 100644 index 000000000..d7d6ee2d2 --- /dev/null +++ b/dist/market/demand/directors/payment-demand-director.d.ts @@ -0,0 +1,12 @@ +import { DemandBodyBuilder } from "../demand-body-builder"; +import { IDemandDirector } from "../../market.module"; +import { PaymentDemandDirectorConfig } from "./payment-demand-director-config"; +import { Allocation } from "../../../payment"; +import { IMarketApi } from "../../api"; +export declare class PaymentDemandDirector implements IDemandDirector { + private allocation; + private marketApiAdapter; + private config; + constructor(allocation: Allocation, marketApiAdapter: IMarketApi, config?: PaymentDemandDirectorConfig); + apply(builder: DemandBodyBuilder): Promise; +} diff --git a/dist/market/demand/directors/workload-demand-director-config.d.ts b/dist/market/demand/directors/workload-demand-director-config.d.ts new file mode 100644 index 000000000..129592ffd --- /dev/null +++ b/dist/market/demand/directors/workload-demand-director-config.d.ts @@ -0,0 +1,33 @@ +import { WorkloadDemandDirectorConfigOptions } from "../options"; +import { BaseConfig } from "./base-config"; +export declare enum PackageFormat { + GVMKitSquash = "gvmkit-squash" +} +type RequiredWorkloadDemandConfigOptions = { + /** Number of seconds after which the agreement resulting from this demand will no longer be valid */ + expirationSec: number; +}; +export declare class WorkloadDemandDirectorConfig extends BaseConfig { + readonly packageFormat: string; + readonly engine: string; + readonly runtime: { + name: string; + version: undefined; + }; + readonly minMemGib: number; + readonly minStorageGib: number; + readonly minCpuThreads: number; + readonly minCpuCores: number; + readonly capabilities: string[]; + readonly expirationSec: number; + readonly manifest?: string; + readonly manifestSig?: string; + readonly manifestSigAlgorithm?: string; + readonly manifestCert?: string; + readonly useHttps?: boolean; + readonly imageHash?: string; + readonly imageTag?: string; + readonly imageUrl?: string; + constructor(options: Partial & RequiredWorkloadDemandConfigOptions); +} +export {}; diff --git a/dist/market/demand/directors/workload-demand-director.d.ts b/dist/market/demand/directors/workload-demand-director.d.ts new file mode 100644 index 000000000..6479063da --- /dev/null +++ b/dist/market/demand/directors/workload-demand-director.d.ts @@ -0,0 +1,11 @@ +import { WorkloadDemandDirectorConfig } from "./workload-demand-director-config"; +import { DemandBodyBuilder } from "../demand-body-builder"; +import { IDemandDirector } from "../../market.module"; +export declare class WorkloadDemandDirector implements IDemandDirector { + private config; + constructor(config: WorkloadDemandDirectorConfig); + apply(builder: DemandBodyBuilder): Promise; + private resolveTaskPackageFromCustomUrl; + private resolveTaskPackageUrl; + private addManifestDecorations; +} diff --git a/dist/market/demand/index.d.ts b/dist/market/demand/index.d.ts new file mode 100644 index 000000000..b8afde293 --- /dev/null +++ b/dist/market/demand/index.d.ts @@ -0,0 +1,2 @@ +export * from "./demand"; +export * from "./demand-body-builder"; diff --git a/dist/market/demand/options.d.ts b/dist/market/demand/options.d.ts new file mode 100644 index 000000000..70dfc976e --- /dev/null +++ b/dist/market/demand/options.d.ts @@ -0,0 +1,71 @@ +import { RequireAtLeastOne } from "../../shared/utils/types"; +/** + * Specifies a set of options related to computation resources that will be used to form the demand + */ +export type ResourceDemandOptions = { + /** Minimum required memory to execute application GB */ + minMemGib: number; + /** Minimum required disk storage to execute tasks in GB */ + minStorageGib: number; + /** Minimum required CPU threads */ + minCpuThreads: number; + /** Minimum required CPU cores */ + minCpuCores: number; +}; +/** + * Specifies a set of options related to runtime configuration that will be used to form the demand + */ +export type RuntimeDemandOptions = { + /** Type of engine required: vm, wasm, vm-nvidia, etc... + * @deprecated This field is deprecated and will be removed in future versions. Please use the 'runtime.name' instead. + */ + engine: string; + runtime: Partial<{ + /** + * Name of the runtime supported by the provider: vm, wasm, vm-nvidia, etc... + * @default vm + * */ + name: string; + /** + * Runtime version supported by provider + * @default 0.3.0 + */ + version: string; + }>; + /** Required providers capabilities to run application: example: ["vpn"] */ + capabilities: string[]; +}; +/** + * Specifies a set of options related to computation manifest that can be used to form the demand + */ +export type ManifestDemandOptions = { + manifest: string; + /** Signature of base64 encoded Computation Payload Manifest **/ + manifestSig: string; + /** Algorithm of manifest signature, e.g. "sha256" **/ + manifestSigAlgorithm: string; + /** Certificate - base64 encoded public certificate (DER or PEM) matching key used to generate signature **/ + manifestCert: string; +}; +/** + * Specifies a set of options related to the Golem VM Image (GVMI) that will be used to form the demand + */ +export type ImageDemandOptions = { + /** + * If you want a provider to download the image from your local filesystem or + * a different registry than the default one, you can provide the image url here. + * Note that to use this option you need to also provide the image SHA3-224 hash. + */ + imageUrl?: string; + /** finds package by its contents hash */ + imageHash?: string; + /** finds package by registry tag */ + imageTag?: string; + /** + * Force the image download url that will be passed to the provider to use HTTPS. + * This option is only relevant when you use `imageHash` or `imageTag` options. + * Default is false + */ + useHttps?: boolean; +}; +export type WorkloadDemandDirectorConfigOptions = RuntimeDemandOptions & ResourceDemandOptions & RequireAtLeastOne; diff --git a/dist/market/draft-offer-proposal-pool.d.ts b/dist/market/draft-offer-proposal-pool.d.ts new file mode 100644 index 000000000..a575f40c0 --- /dev/null +++ b/dist/market/draft-offer-proposal-pool.d.ts @@ -0,0 +1,110 @@ +import { OfferProposal, OfferProposalFilter } from "./proposal"; +import { EventEmitter } from "eventemitter3"; +import { Logger } from "../shared/utils"; +import { Observable, Subscription } from "rxjs"; +export type OfferProposalSelector = (proposals: OfferProposal[]) => OfferProposal; +export interface ProposalPoolOptions { + /** + * A user-defined function that will be used by {@link DraftOfferProposalPool.acquire} to pick the best fitting offer proposal from available ones + */ + selectOfferProposal?: OfferProposalSelector; + /** + * User defined filter function which will determine if the offer proposal is valid for use. + * + * Offer proposals are validated before being handled to the caller of {@link DraftOfferProposalPool.acquire} + */ + validateOfferProposal?: OfferProposalFilter; + /** + * Min number of proposals in pool so that it can be considered as ready to use + * + * @default 0 + */ + minCount?: number; + logger?: Logger; +} +export interface ProposalPoolEvents { + added: (event: { + proposal: OfferProposal; + }) => void; + removed: (event: { + proposal: OfferProposal; + }) => void; + acquired: (event: { + proposal: OfferProposal; + }) => void; + released: (event: { + proposal: OfferProposal; + }) => void; + cleared: () => void; +} +/** + * Pool of draft offer proposals that are ready to be promoted to agreements with Providers + * + * Reaching this pool means that the related initial proposal which was delivered by Yagna in response + * to the subscription with the Demand has been fully negotiated between the Provider and Requestor. + * + * This pool should contain only offer proposals that can be used to pursue the final Agreement between the + * parties. + * + * Technically, the "market" part of you application should populate this pool with such offer proposals. + */ +export declare class DraftOfferProposalPool { + private options?; + readonly events: EventEmitter; + private logger; + private acquireQueue; + /** {@link ProposalPoolOptions.minCount} */ + private readonly minCount; + /** {@link ProposalPoolOptions.selectOfferProposal} */ + private readonly selectOfferProposal; + /** {@link ProposalPoolOptions.validateOfferProposal} */ + private readonly validateOfferProposal; + /** + * The proposals that were not yet leased to anyone and are available for lease + */ + private available; + /** + * The proposal that were already leased to someone and shouldn't be leased again + */ + private leased; + constructor(options?: ProposalPoolOptions | undefined); + /** + * Pushes the provided proposal to the list of proposals available for lease + */ + add(proposal: OfferProposal): void; + /** + * Attempts to obtain a single proposal from the pool + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the acquiring + */ + acquire(signalOrTimeout?: number | AbortSignal): Promise; + /** + * Releases the proposal back to the pool + * + * Validates if the proposal is still usable before putting it back to the list of available ones + * @param proposal + */ + release(proposal: OfferProposal): void; + remove(proposal: OfferProposal): void; + /** + * Returns the number of all items in the pool (available + leased out) + */ + count(): number; + /** + * Returns the number of items that are possible to lease from the pool + */ + availableCount(): number; + /** + * Returns the number of items that were leased out of the pool + */ + leasedCount(): number; + /** + * Tells if the pool is ready to take items from + */ + isReady(): boolean; + /** + * Clears the pool entirely + */ + clear(): Promise; + protected removeFromAvailable(proposal: OfferProposal): void; + readFrom(source: Observable): Subscription; +} diff --git a/dist/market/error.d.ts b/dist/market/error.d.ts new file mode 100644 index 000000000..527dca484 --- /dev/null +++ b/dist/market/error.d.ts @@ -0,0 +1,23 @@ +import { GolemModuleError } from "../shared/error/golem-error"; +export declare enum MarketErrorCode { + CouldNotGetAgreement = "CouldNotGetAgreement", + CouldNotGetProposal = "CouldNotGetProposal", + ServiceNotInitialized = "ServiceNotInitialized", + MissingAllocation = "MissingAllocation", + SubscriptionFailed = "SubscriptionFailed", + InvalidProposal = "InvalidProposal", + ProposalResponseFailed = "ProposalResponseFailed", + ProposalRejectionFailed = "ProposalRejectionFailed", + DemandExpired = "DemandExpired", + ResourceRentalTerminationFailed = "ResourceRentalTerminationFailed", + ResourceRentalCreationFailed = "ResourceRentalCreationFailed", + AgreementApprovalFailed = "AgreementApprovalFailed", + NoProposalAvailable = "NoProposalAvailable", + InternalError = "InternalError", + ScanFailed = "ScanFailed" +} +export declare class GolemMarketError extends GolemModuleError { + code: MarketErrorCode; + previous?: Error | undefined; + constructor(message: string, code: MarketErrorCode, previous?: Error | undefined); +} diff --git a/dist/market/helpers.d.ts b/dist/market/helpers.d.ts new file mode 100644 index 000000000..da03da1cd --- /dev/null +++ b/dist/market/helpers.d.ts @@ -0,0 +1,8 @@ +/** + * Helps to obtain a whitelist of providers which were health-tested. + * + * Important: This helper requires internet access to function properly. + * + * @return An array with Golem Node IDs of the whitelisted providers. + */ +export declare function getHealthyProvidersWhiteList(): Promise; diff --git a/dist/market/index.d.ts b/dist/market/index.d.ts new file mode 100644 index 000000000..61cbc3585 --- /dev/null +++ b/dist/market/index.d.ts @@ -0,0 +1,15 @@ +export { OfferProposalFilter } from "./proposal/offer-proposal"; +export { Demand, BasicDemandPropertyConfig, DemandSpecification } from "./demand/demand"; +export { OfferProposal, ProposalDTO } from "./proposal/offer-proposal"; +export * as OfferProposalFilterFactory from "./strategy"; +export { GolemMarketError, MarketErrorCode } from "./error"; +export * as MarketHelpers from "./helpers"; +export * from "./draft-offer-proposal-pool"; +export * from "./market.module"; +export * from "./api"; +export * from "./agreement"; +export { BasicDemandDirector } from "./demand/directors/basic-demand-director"; +export { PaymentDemandDirector } from "./demand/directors/payment-demand-director"; +export { WorkloadDemandDirector } from "./demand/directors/workload-demand-director"; +export * from "./proposal/market-proposal-event"; +export * from "./scan"; diff --git a/dist/market/market.module.d.ts b/dist/market/market.module.d.ts new file mode 100644 index 000000000..f5a27b35c --- /dev/null +++ b/dist/market/market.module.d.ts @@ -0,0 +1,234 @@ +import { EventEmitter } from "eventemitter3"; +import { Agreement } from "./agreement"; +import { Demand, DraftOfferProposalPool, IMarketApi, MarketEvents, MarketProposalEvent, OfferProposalSelector } from "./index"; +import { Logger, YagnaApi } from "../shared/utils"; +import { Allocation, IPaymentApi } from "../payment"; +import { Observable } from "rxjs"; +import { OfferCounterProposal, OfferProposal, OfferProposalFilter } from "./proposal"; +import { DemandBodyBuilder, DemandSpecification, OrderDemandOptions } from "./demand"; +import { IActivityApi, IFileServer } from "../activity"; +import { StorageProvider } from "../shared/storage"; +import { MarketOrderSpec } from "../golem-network"; +import { INetworkApi, NetworkModule } from "../network"; +import { AgreementOptions } from "./agreement/agreement"; +import { ScanOptions, ScanSpecification, ScannedOffer } from "./scan"; +export type DemandEngine = "vm" | "vm-nvidia" | "wasmtime"; +export type PricingOptions = { + model: "linear"; + maxStartPrice: number; + maxCpuPerHourPrice: number; + maxEnvPerHourPrice: number; +} | { + model: "burn-rate"; + avgGlmPerHour: number; +}; +export interface OrderMarketOptions { + /** How long you want to rent the resources in hours */ + rentHours: number; + /** Pricing strategy that will be used to filter the offers from the market */ + pricing: PricingOptions; + /** A user-defined filter function which will determine if the offer proposal is valid for use. */ + offerProposalFilter?: OfferProposalFilter; + /** A user-defined function that will be used to pick the best fitting offer proposal from available ones */ + offerProposalSelector?: OfferProposalSelector; +} +export interface MarketModuleOptions { + /** + * Number of seconds after which the demand will be un-subscribed and subscribed again to get fresh + * offers from the market + * + * @default 30 minutes + */ + demandRefreshIntervalSec: number; +} +export interface MarketModule { + events: EventEmitter; + /** + * Build a DemandSpecification based on the given options and allocation. + * You can obtain an allocation using the payment module. + * The method returns a DemandSpecification that can be used to publish the demand to the market, + * for example using the `publishDemand` method. + */ + buildDemandDetails(demandOptions: OrderDemandOptions, orderOptions: OrderMarketOptions, allocation: Allocation): Promise; + /** + * Build a ScanSpecification that can be used to scan the market for offers. + * The difference between this method and `buildDemandDetails` is that this method does not require an + * allocation, doesn't inherit payment properties from `GolemNetwork` settings and doesn't provide any defaults. + * If you wish to set the payment platform, you need to specify it in the ScanOptions. + */ + buildScanSpecification(options: ScanOptions): ScanSpecification; + /** + * Publishes the demand to the market and handles refreshing it when needed. + * Each time the demand is refreshed, a new demand is emitted by the observable. + * Keep in mind that since this method returns an observable, nothing will happen until you subscribe to it. + * Unsubscribing will remove the demand from the market. + */ + publishAndRefreshDemand(demandSpec: DemandSpecification): Observable; + /** + * Return an observable that will emit values representing various events related to this demand + */ + collectMarketProposalEvents(demand: Demand): Observable; + /** + * Subscribes to the proposals for the given demand. + * If an error occurs, the observable will emit an error and complete. + * Keep in mind that since this method returns an observable, nothing will happen until you subscribe to it. + * + * This method will just yield all the proposals that will be found for that demand without any additional logic. + * + * The {@link collectDraftOfferProposals} is a more specialized variant of offer collection, which includes negotiations + * and demand re-subscription logic + */ + collectAllOfferProposals(demand: Demand): Observable; + /** + * Sends a counter-offer to the provider. Note that to get the provider's response to your + * counter you should listen to events returned by `collectDemandOfferEvents`. + * + * @returns The counter-proposal that the requestor made to the Provider + */ + negotiateProposal(receivedProposal: OfferProposal, counterDemandSpec: DemandSpecification): Promise; + /** + * Internally + * + * - ya-ts-client createAgreement + * - ya-ts-client approveAgreement + * - ya-ts-client "wait for approval" + * + * @param proposal + * + * @return Returns when the provider accepts the agreement, rejects otherwise. The resulting agreement is ready to create activities from. + */ + proposeAgreement(proposal: OfferProposal): Promise; + /** + * @return The Agreement that has been terminated via Yagna + */ + terminateAgreement(agreement: Agreement, reason?: string): Promise; + /** + * Acquire a proposal from the pool and sign an agreement with the provider. If signing the agreement fails, + * destroy the proposal and try again with another one. The method returns an agreement that's ready to be used. + * Optionally, you can provide a timeout in milliseconds or an AbortSignal that can be used to cancel the operation + * early. If the operation is cancelled, the method will throw an error. + * Note that this method will respect the acquire timeout set in the pool and will throw an error if no proposal + * is available within the specified time. + * + * @example + * ```ts + * const agreement = await marketModule.signAgreementFromPool(draftProposalPool, 10_000); // throws TimeoutError if the operation takes longer than 10 seconds + * ``` + * @example + * ```ts + * const signal = AbortSignal.timeout(10_000); + * const agreement = await marketModule.signAgreementFromPool(draftProposalPool, signal); // throws TimeoutError if the operation takes longer than 10 seconds + * ``` + * @param draftProposalPool - The pool of draft proposals to acquire from + * @param agreementOptions - options used to sign the agreement such as expiration or waitingForApprovalTimeout + * @param signalOrTimeout - The timeout in milliseconds or an AbortSignal that will be used to cancel the operation + */ + signAgreementFromPool(draftProposalPool: DraftOfferProposalPool, agreementOptions?: AgreementOptions, signalOrTimeout?: number | AbortSignal): Promise; + /** + * Creates a demand for the given package and allocation and starts collecting, filtering and negotiating proposals. + * The method returns an observable that emits a batch of draft proposals every time the buffer is full. + * The method will automatically negotiate the proposals until they are moved to the `Draft` state. + * Keep in mind that since this method returns an observable, nothing will happen until you subscribe to it. + * Unsubscribing from the observable will stop the process and remove the demand from the market. + */ + collectDraftOfferProposals(options: { + demandSpecification: DemandSpecification; + pricing: PricingOptions; + filter?: OfferProposalFilter; + minProposalsBatchSize?: number; + proposalsBatchReleaseTimeoutMs?: number; + }): Observable; + /** + * Estimate the budget for the given order and maximum numbers of agreemnets. + * Keep in mind that this is just an estimate and the actual cost may vary. + * The method returns the estimated budget in GLM. + * @param params + */ + estimateBudget({ maxAgreements, order }: { + maxAgreements: number; + order: MarketOrderSpec; + }): number; + /** + * Fetch the most up-to-date agreement details from the yagna + */ + fetchAgreement(agreementId: string): Promise; + /** + * Scan the market for offers that match the given demand specification. + */ + scan(scanSpecification: ScanSpecification): Observable; +} +/** + * Represents a director that can instruct DemandDetailsBuilder + * + * Demand is a complex concept in Golem. Requestors can place arbitrary properties and constraints on such + * market entity. While the demand request on the Golem Protocol level is a flat list of properties (key, value) and constraints, + * from the Requestor side they form logical groups that make sense together. + * + * The idea behind Directors is that you can encapsulate this grouping knowledge along with validation logic etc to prepare + * all the final demand request body properties in a more controlled and organized manner. + */ +export interface IDemandDirector { + apply(builder: DemandBodyBuilder): Promise | void; +} +export declare class MarketModuleImpl implements MarketModule { + private readonly deps; + events: EventEmitter; + private readonly logger; + private readonly marketApi; + private fileServer; + private options; + constructor(deps: { + logger: Logger; + yagna: YagnaApi; + paymentApi: IPaymentApi; + activityApi: IActivityApi; + marketApi: IMarketApi; + networkApi: INetworkApi; + networkModule: NetworkModule; + fileServer: IFileServer; + storageProvider: StorageProvider; + }, options?: Partial); + buildDemandDetails(demandOptions: OrderDemandOptions, orderOptions: OrderMarketOptions, allocation: Allocation): Promise; + buildScanSpecification(options: ScanOptions): ScanSpecification; + /** + * Augments the user-provided options with additional logic + * + * Use Case: serve the GVMI from the requestor and avoid registry + */ + private applyLocalGVMIServeSupport; + /** + * Publishes the specified demand and re-publishes it based on demandSpecification.expirationSec interval + */ + publishAndRefreshDemand(demandSpecification: DemandSpecification): Observable; + collectMarketProposalEvents(demand: Demand): Observable; + collectAllOfferProposals(demand: Demand): Observable; + negotiateProposal(offerProposal: OfferProposal, counterDemand: DemandSpecification): Promise; + proposeAgreement(proposal: OfferProposal, options?: AgreementOptions): Promise; + terminateAgreement(agreement: Agreement, reason?: string): Promise; + collectDraftOfferProposals(options: { + demandSpecification: DemandSpecification; + pricing: PricingOptions; + filter?: OfferProposalFilter; + minProposalsBatchSize?: number; + proposalsBatchReleaseTimeoutMs?: number; + }): Observable; + private emitMarketProposalEvents; + signAgreementFromPool(draftProposalPool: DraftOfferProposalPool, agreementOptions?: AgreementOptions, signalOrTimeout?: number | AbortSignal): Promise; + /** + * Reduce initial proposals to a set grouped by the provider's key to avoid duplicate offers + */ + private reduceInitialProposalsByProviderKey; + estimateBudget({ order, maxAgreements }: { + order: MarketOrderSpec; + maxAgreements: number; + }): number; + fetchAgreement(agreementId: string): Promise; + /** + * Subscribes to an observable that maps yagna events into our domain events + * and emits these domain events via EventEmitter + */ + private collectAndEmitAgreementEvents; + private filterProposalsByUserFilter; + private filterProposalsByPricingOptions; + scan(scanSpecification: ScanSpecification): Observable; +} diff --git a/dist/market/proposal/index.d.ts b/dist/market/proposal/index.d.ts new file mode 100644 index 000000000..8e26abaa9 --- /dev/null +++ b/dist/market/proposal/index.d.ts @@ -0,0 +1,6 @@ +export * from "./market-proposal-event"; +export * from "./market-proposal"; +export * from "./offer-proposal"; +export * from "./offer-counter-proposal"; +export * from "./proposals_batch"; +export * from "./proposal-properties"; diff --git a/dist/market/proposal/market-proposal-event.d.ts b/dist/market/proposal/market-proposal-event.d.ts new file mode 100644 index 000000000..6e3b262a1 --- /dev/null +++ b/dist/market/proposal/market-proposal-event.d.ts @@ -0,0 +1,18 @@ +import { OfferProposal } from "./offer-proposal"; +import { OfferCounterProposal } from "./offer-counter-proposal"; +export type OfferProposalReceivedEvent = { + type: "ProposalReceived"; + proposal: OfferProposal; + timestamp: Date; +}; +export type OfferCounterProposalRejectedEvent = { + type: "ProposalRejected"; + counterProposal: OfferCounterProposal; + reason: string; + timestamp: Date; +}; +export type OfferPropertyQueryReceivedEvent = { + type: "PropertyQueryReceived"; + timestamp: Date; +}; +export type MarketProposalEvent = OfferProposalReceivedEvent | OfferCounterProposalRejectedEvent | OfferPropertyQueryReceivedEvent; diff --git a/dist/market/proposal/market-proposal.d.ts b/dist/market/proposal/market-proposal.d.ts new file mode 100644 index 000000000..93963a9b2 --- /dev/null +++ b/dist/market/proposal/market-proposal.d.ts @@ -0,0 +1,34 @@ +import { ProposalProperties } from "./proposal-properties"; +import { MarketApi } from "ya-ts-client"; +import { ProposalState } from "./offer-proposal"; +import { Demand } from "../demand"; +export interface IProposalRepository { + add(proposal: MarketProposal): MarketProposal; + getById(id: string): MarketProposal | undefined; + getByDemandAndId(demand: Demand, id: string): Promise; +} +/** + * Base representation of a market proposal that can be issued either by the Provider (offer proposal) + * or Requestor (counter-proposal) + */ +export declare abstract class MarketProposal { + protected readonly model: MarketApi.ProposalDTO; + readonly id: string; + /** + * Reference to the previous proposal in the "negotiation chain" + * + * If null, this means that was the initial offer that the negotiations started from + */ + readonly previousProposalId: string | null; + abstract readonly issuer: "Provider" | "Requestor"; + readonly properties: ProposalProperties; + protected constructor(model: MarketApi.ProposalDTO); + get state(): ProposalState; + get timestamp(): Date; + isInitial(): boolean; + isDraft(): boolean; + isExpired(): boolean; + isRejected(): boolean; + isValid(): boolean; + protected abstract validate(): void | never; +} diff --git a/dist/market/proposal/offer-counter-proposal.d.ts b/dist/market/proposal/offer-counter-proposal.d.ts new file mode 100644 index 000000000..f959600c5 --- /dev/null +++ b/dist/market/proposal/offer-counter-proposal.d.ts @@ -0,0 +1,7 @@ +import { MarketProposal } from "./market-proposal"; +import { MarketApi } from "ya-ts-client"; +export declare class OfferCounterProposal extends MarketProposal { + readonly issuer = "Requestor"; + constructor(model: MarketApi.ProposalDTO); + protected validate(): void; +} diff --git a/dist/market/proposal/offer-proposal.d.ts b/dist/market/proposal/offer-proposal.d.ts new file mode 100644 index 000000000..1e1b115e5 --- /dev/null +++ b/dist/market/proposal/offer-proposal.d.ts @@ -0,0 +1,56 @@ +import { MarketApi } from "ya-ts-client"; +import { ProviderInfo } from "../agreement"; +import { Demand } from "../demand"; +import { MarketProposal } from "./market-proposal"; +export type OfferProposalFilter = (proposal: OfferProposal) => boolean; +export type PricingInfo = { + cpuSec: number; + envSec: number; + start: number; +}; +export type ProposalState = "Initial" | "Draft" | "Rejected" | "Accepted" | "Expired"; +export type ProposalDTO = { + transferProtocol: string[]; + cpuBrand: string; + cpuCapabilities: string[]; + cpuCores: number; + cpuThreads: number; + memory: number; + storage: number; + runtimeCapabilities: string[]; + runtimeName: string; + runtimeVersion: string; + state: ProposalState; + /** Non-standardised property, we can't assume it will be always there */ + publicNet?: boolean; +}; +/** + * Entity representing the offer presented by the Provider to the Requestor + * + * Issue: The final proposal that gets promoted to an agreement comes from the provider + * Right now the last time I can access it directly is when I receive the counter from the provider, + * later it's impossible for me to get it via the API `{"message":"Path deserialize error: Id [2cb0b2820c6142fab5af7a8e90da09f0] has invalid owner type."}` + * + * FIXME #yagna should allow obtaining proposals via the API even if I'm not the owner! + */ +export declare class OfferProposal extends MarketProposal { + readonly demand: Demand; + readonly issuer = "Provider"; + constructor(model: MarketApi.ProposalDTO, demand: Demand); + get pricing(): PricingInfo; + getDto(): ProposalDTO; + /** + * Cost estimation based on CPU/h, ENV/h and start prices + * + * @param rentHours Number of hours of rental to use for the estimation + */ + getEstimatedCost(rentHours?: number): number; + get provider(): ProviderInfo; + /** + * Validates if the proposal satisfies basic business rules, is complete and thus safe to interact with + * + * Use this method before executing any important logic, to ensure that you're working with correct, complete data + */ + protected validate(): void | never; + private getProviderPaymentPlatforms; +} diff --git a/dist/market/proposal/proposal-properties.d.ts b/dist/market/proposal/proposal-properties.d.ts new file mode 100644 index 000000000..bd7fee2e0 --- /dev/null +++ b/dist/market/proposal/proposal-properties.d.ts @@ -0,0 +1,111 @@ +/** + * Describes the type representing properties from the perspective of Golem Market Protocol + * + * Golem Protocol defines "properties" as a flat list of key/value pairs. + * + * The protocol itself does not dictate what properties should or shouldn't be defined. Such details + * are left for the Provider and Requestor to agree upon outside the protocol. + * + * The mentioned agreements can be done in a P2P manner between the involved entities, or both parties + * can decide to adhere to a specific "standard" which determines which properties are "mandatory". + * + * Specific property definitions and requirements were provided in Golem _standards_ and _architecture proposals_. + * + * @link https://github.com/golemfactory/golem-architecture/tree/master/standards Golem standards + * @link https://github.com/golemfactory/golem-architecture/tree/master/gaps Golem Architecture Proposals + */ +export type GenericGolemProtocolPropertyType = Record; +/** + * Properties defined by GAP-3 + * + * @link https://github.com/golemfactory/golem-architecture/blob/master/gaps/gap-3_mid_agreement_payments/gap-3_mid_agreement_payments.md + */ +export type Gap3MidAgreementPaymentProps = Partial<{ + "golem.com.scheme.payu.debit-note.interval-sec?": number; + "golem.com.scheme.payu.payment-timeout-sec?": number; +}>; +/** + * Properties defined by GAP-35 + * + * @link https://github.com/golemfactory/golem-architecture/blob/master/gaps/gap-35_gpu_pci_capability/gap-35_gpu_pci_capability.md + */ +export type Gap35GpuSupportProps = Partial<{ + "golem.!exp.gap-35.v1.inf.gpu.model": string; + "golem.!exp.gap-35.v1.inf.gpu.clocks.graphics.mhz": number; + "golem.!exp.gap-35.v1.inf.gpu.clocks.memory.mhz": number; + "golem.!exp.gap-35.v1.inf.gpu.clocks.sm.mhz": number; + "golem.!exp.gap-35.v1.inf.gpu.clocks.video.mhz": number; + "golem.!exp.gap-35.v1.inf.gpu.cuda.cores": number; + "golem.!exp.gap-35.v1.inf.gpu.cuda.enabled": boolean; + "golem.!exp.gap-35.v1.inf.gpu.cuda.version": string; + "golem.!exp.gap-35.v1.inf.gpu.memory.bandwidth.gib": number; + "golem.!exp.gap-35.v1.inf.gpu.memory.total.gib": number; +}>; +/** + * @link https://github.com/golemfactory/golem-architecture/tree/master/standards/0-commons + */ +export type StandardCommonProps = { + "golem.activity.caps.transfer.protocol": ("http" | "https" | "gftp")[]; + "golem.inf.cpu.architecture": string; + "golem.inf.cpu.brand": string; + "golem.inf.cpu.capabilities": string[]; + "golem.inf.cpu.cores": number; + "golem.inf.cpu.model": string; + "golem.inf.cpu.threads": number; + "golem.inf.cpu.vendor": string; + "golem.inf.mem.gib": number; + "golem.inf.storage.gib": number; + "golem.runtime.capabilities": string[]; + "golem.runtime.name": string; + "golem.runtime.version": string; +}; +/** + * https://github.com/golemfactory/golem-architecture/blob/master/standards/2-service/srv.md + */ +export type StandardNodeProps = { + "golem.node.id.name": string; + /** @deprecated Do not rely on this, it's mentioned in the standard, but not implemented FIXME #yagna */ + "golem.node.geo.country_code"?: string; +}; +/** + * @link https://github.com/golemfactory/golem-architecture/blob/master/standards/3-commercial/com.md + */ +export type StandardCommercialProps = { + "golem.com.payment.debit-notes.accept-timeout?": number; + /** @example "erc20-polygon-glm" */ + "golem.com.payment.chosen-platform": string; + "golem.com.payment.platform.erc20-polygon-glm.address"?: string; + "golem.com.payment.platform.erc20-holesky-tglm.address"?: string; + "golem.com.payment.platform.erc20-mumbai-tglm.address"?: string; + "golem.com.payment.protocol.version": number; + /** @example payu */ + "golem.com.scheme": string; + /** @deprecated replaced by `golem.com.scheme.payu.debit-note.interval-sec?` in GAP-3 */ + "golem.com.scheme.payu.interval_sec"?: number; + "golem.com.pricing.model": "linear"; + "golem.com.pricing.model.linear.coeffs": number[]; + "golem.com.usage.vector": string[]; +}; +/** + * @link https://github.com/golemfactory/golem-architecture/blob/master/standards/2-service/srv.md + */ +export type StandardServiceProps = { + "golem.srv.caps.multi-activity": boolean; +}; +/** + * @link https://github.com/golemfactory/golem-architecture/blob/master/standards/2-service/srv/comp.md + */ +export type StandardComputationPlatformProps = { + "golem.srv.comp.expiration": number; + "golem.srv.comp.task_package": string; +}; +export type ProposalProperties = GenericGolemProtocolPropertyType & StandardCommonProps & StandardNodeProps & StandardCommercialProps & StandardServiceProps & StandardComputationPlatformProps & Gap3MidAgreementPaymentProps & Gap35GpuSupportProps & +/** + * These are around byt not really specified in any standard + * FIXME #yagna - Standardize? + */ +Partial<{ + "golem.node.debug.subnet": string; + "golem.node.net.is-public": boolean; + "golem.srv.caps.payload-manifest": boolean; +}>; diff --git a/dist/market/proposal/proposals_batch.d.ts b/dist/market/proposal/proposals_batch.d.ts new file mode 100644 index 000000000..031e07045 --- /dev/null +++ b/dist/market/proposal/proposals_batch.d.ts @@ -0,0 +1,43 @@ +import { OfferProposal } from "./offer-proposal"; +export type ProposalsBatchOptions = { + /** The minimum number of proposals after which it will be possible to return the collection */ + minBatchSize?: number; + /** The maximum waiting time for collecting proposals after which it will be possible to return the collection */ + releaseTimeoutMs?: number; +}; +/** + * Proposals Batch aggregates initial proposals and returns a set grouped by the provider's key + * to avoid duplicate offers issued by the provider. + */ +export declare class ProposalsBatch { + /** Batch of proposals mapped by provider key and related set of initial proposals */ + private batch; + /** Lock used to synchronize adding and getting proposals from the batch */ + private lock; + private config; + constructor(options?: ProposalsBatchOptions); + /** + * Add proposal to the batch grouped by provider key + * which consist of providerId, cores, threads, mem and storage + */ + addProposal(proposal: OfferProposal): Promise; + /** + * Returns the batched proposals from the internal buffer and empties it + */ + getProposals(): Promise; + /** + * Waits for the max amount time for batching or max batch size to be reached before it makes sense to process events + * + * Used to flow-control the consumption of the proposal events from the batch. + * The returned promise resolves when it is time to process the buffered proposal events. + */ + waitForProposals(): Promise; + /** + * Selects the best proposal from the set according to the lowest price and the youngest proposal age + */ + private getBestProposal; + /** + * Provider key used to group proposals so that they can be distinguished based on ID and hardware configuration + */ + private getProviderKey; +} diff --git a/dist/market/scan/index.d.ts b/dist/market/scan/index.d.ts new file mode 100644 index 000000000..852270e48 --- /dev/null +++ b/dist/market/scan/index.d.ts @@ -0,0 +1,3 @@ +export * from "./types"; +export * from "./scan-director"; +export * from "./scanned-offer"; diff --git a/dist/market/scan/scan-director.d.ts b/dist/market/scan/scan-director.d.ts new file mode 100644 index 000000000..817ad7c37 --- /dev/null +++ b/dist/market/scan/scan-director.d.ts @@ -0,0 +1,10 @@ +import { DemandBodyBuilder } from "../demand"; +import { ScanOptions } from "./types"; +export declare class ScanDirector { + private options; + constructor(options: ScanOptions); + apply(builder: DemandBodyBuilder): Promise; + private addPaymentDecorations; + private addWorkloadDecorations; + private addGenericDecorations; +} diff --git a/dist/market/scan/scanned-offer.d.ts b/dist/market/scan/scanned-offer.d.ts new file mode 100644 index 000000000..9c7077356 --- /dev/null +++ b/dist/market/scan/scanned-offer.d.ts @@ -0,0 +1,66 @@ +import { PricingInfo, ProposalProperties } from "../proposal"; +import type { MarketApi } from "ya-ts-client"; +type ScannedOfferDTO = MarketApi.OfferDTO; +type PaymentPlatformAddressSet = { + /** The payment platform and address map */ + [paymentPlatform: string]: string | undefined; +}; +export declare class ScannedOffer { + private readonly model; + constructor(model: ScannedOfferDTO); + get properties(): ProposalProperties; + get constraints(): string; + get pricing(): PricingInfo; + get provider(): { + id: string; + name: string; + }; + get transferProtocol(): ("http" | "https" | "gftp")[]; + get cpuBrand(): string; + get cpuVendor(): string; + get cpuCapabilities(): string[]; + get cpuCores(): number; + get cpuThreads(): number; + get gpuBrand(): string | undefined; + /** @deprecated Use {@link memoryGib} instead */ + get memory(): number; + get memoryGib(): number; + /** @deprecated Use {@link storageGib} instead */ + get storage(): number; + get storageGib(): number; + get publicNet(): boolean | undefined; + get runtimeCapabilities(): string[]; + get runtimeName(): string; + get runtimeVersion(): string; + /** + * Get the ID of the offer published by the Provider + * + * Note: + * - this ID will change after the provider refreshes the offer (usually after 1h) + * - this ID will remain unchanged for the same published offer between different scans + */ + get offerId(): string; + /** + * The timestamp at which the offer was generated by the Provider + */ + get offerCreateAt(): string; + /** + * Lists down payment addresses on different payment platforms + * + * @example Example return value + * ```json + * { + * "erc20-polygon-glm": "0x8737beea5668595fda9d50e85cae9cad10b4c980", + * "erc20-holesky-tglm:" "0x8737beea5668595fda9d50e85cae9cad10b4c980", + * } + * ``` + */ + get paymentPlatformAddresses(): PaymentPlatformAddressSet; + /** + * Cost estimation based on CPU/h, ENV/h and start prices + * + * @param rentHours Number of hours of rental to use for the estimation + */ + getEstimatedCost(rentHours?: number): number; +} +export {}; diff --git a/dist/market/scan/types.d.ts b/dist/market/scan/types.d.ts new file mode 100644 index 000000000..267bffbe7 --- /dev/null +++ b/dist/market/scan/types.d.ts @@ -0,0 +1,32 @@ +export type ScanOptions = { + workload?: { + /** + * @deprecated This param is deprecated and will be removed in future versions. Please use the 'runtime.name' instead. + */ + engine?: string; + runtime?: { + name?: string; + version?: string; + }; + capabilities?: string[]; + minMemGib?: number; + maxMemGib?: number; + minStorageGib?: number; + maxStorageGib?: number; + minCpuThreads?: number; + maxCpuThreads?: number; + minCpuCores?: number; + maxCpuCores?: number; + }; + subnetTag?: string; + payment?: { + network: string; + /** @default erc20 */ + driver?: string; + /** @default "glm" if network is mainnet or polygon, "tglm" otherwise */ + token?: string; + }; +}; +export type ScanSpecification = { + constraints: string[]; +}; diff --git a/dist/market/strategy.d.ts b/dist/market/strategy.d.ts new file mode 100644 index 000000000..44bfb4ccd --- /dev/null +++ b/dist/market/strategy.d.ts @@ -0,0 +1,28 @@ +import { OfferProposal } from "./proposal/offer-proposal"; +/** Default Proposal filter that accept all proposal coming from the market */ +export declare const acceptAll: () => () => boolean; +/** Proposal filter blocking every offer coming from a provider whose id is in the array */ +export declare const disallowProvidersById: (providerIds: string[]) => (proposal: OfferProposal) => boolean; +/** Proposal filter blocking every offer coming from a provider whose name is in the array */ +export declare const disallowProvidersByName: (providerNames: string[]) => (proposal: OfferProposal) => boolean; +/** Proposal filter blocking every offer coming from a provider whose name match to the regexp */ +export declare const disallowProvidersByNameRegex: (regexp: RegExp) => (proposal: OfferProposal) => boolean; +/** Proposal filter that only allows offers from a provider whose id is in the array */ +export declare const allowProvidersById: (providerIds: string[]) => (proposal: OfferProposal) => boolean; +/** Proposal filter that only allows offers from a provider whose name is in the array */ +export declare const allowProvidersByName: (providerNames: string[]) => (proposal: OfferProposal) => boolean; +/** Proposal filter that only allows offers from a provider whose name match to the regexp */ +export declare const allowProvidersByNameRegex: (regexp: RegExp) => (proposal: OfferProposal) => boolean; +export type PriceLimits = { + start: number; + cpuPerSec: number; + envPerSec: number; +}; +/** + * Proposal filter only allowing offers that do not exceed the defined usage + * + * @param priceLimits.start The maximum start price in GLM + * @param priceLimits.cpuPerSec The maximum price for CPU usage in GLM/s + * @param priceLimits.envPerSec The maximum price for the duration of the activity in GLM/s + */ +export declare const limitPriceFilter: (priceLimits: PriceLimits) => (proposal: OfferProposal) => boolean; diff --git a/dist/network/api.d.ts b/dist/network/api.d.ts new file mode 100644 index 000000000..f384d3d10 --- /dev/null +++ b/dist/network/api.d.ts @@ -0,0 +1,64 @@ +import { Network } from "./network"; +import { NetworkNode } from "./node"; +import { NetworkOptions } from "./network.module"; +export interface NetworkEvents { + networkCreated: (event: { + network: Network; + }) => void; + errorCreatingNetwork: (event: { + error: Error; + }) => void; + networkRemoved: (event: { + network: Network; + }) => void; + errorRemovingNetwork: (event: { + network: Network; + error: Error; + }) => void; + nodeCreated: (event: { + network: Network; + node: NetworkNode; + }) => void; + errorCreatingNode: (event: { + network: Network; + error: Error; + }) => void; + nodeRemoved: (event: { + network: Network; + node: NetworkNode; + }) => void; + errorRemovingNode: (event: { + network: Network; + node: NetworkNode; + error: Error; + }) => void; +} +export interface INetworkApi { + /** + * Creates a new network with the specified options. + * @param options NetworkOptions + */ + createNetwork(options: NetworkOptions): Promise; + /** + * Removes an existing network. + * @param network - The network to be removed. + */ + removeNetwork(network: Network): Promise; + /** + * Creates a new node within a specified network. + * @param network - The network to which the node will be added. + * @param nodeId - The ID of the node to be created. + * @param nodeIp - Optional IP address for the node. If not provided, the first available IP address will be assigned. + */ + createNetworkNode(network: Network, nodeId: string, nodeIp?: string): Promise; + /** + * Removes an existing node from a specified network. + * @param network - The network from which the node will be removed. + * @param node - The node to be removed. + */ + removeNetworkNode(network: Network, node: NetworkNode): Promise; + /** + * Returns the identifier of the requesor + */ + getIdentity(): Promise; +} diff --git a/dist/network/error.d.ts b/dist/network/error.d.ts new file mode 100644 index 000000000..dc82e46c6 --- /dev/null +++ b/dist/network/error.d.ts @@ -0,0 +1,22 @@ +import { GolemModuleError } from "../shared/error/golem-error"; +import { NetworkInfo } from "./network"; +export declare enum NetworkErrorCode { + ServiceNotInitialized = "ServiceNotInitialized", + NetworkSetupMissing = "NetworkSetupMissing", + NetworkCreationFailed = "NetworkCreationFailed", + NoAddressesAvailable = "NoAddressesAvailable", + AddressOutOfRange = "AddressOutOfRange", + AddressAlreadyAssigned = "AddressAlreadyAssigned", + NodeAddingFailed = "NodeAddingFailed", + NodeRemovalFailed = "NodeRemovalFailed", + NetworkRemovalFailed = "NetworkRemovalFailed", + GettingIdentityFailed = "GettingIdentityFailed", + NetworkRemoved = "NetworkRemoved" +} +export declare class GolemNetworkError extends GolemModuleError { + #private; + code: NetworkErrorCode; + previous?: Error | undefined; + constructor(message: string, code: NetworkErrorCode, network?: NetworkInfo, previous?: Error | undefined); + getNetwork(): NetworkInfo | undefined; +} diff --git a/dist/network/index.d.ts b/dist/network/index.d.ts new file mode 100644 index 000000000..1c0844695 --- /dev/null +++ b/dist/network/index.d.ts @@ -0,0 +1,5 @@ +export * from "./network"; +export * from "./node"; +export * from "./network.module"; +export * from "./error"; +export * from "./api"; diff --git a/dist/network/network.d.ts b/dist/network/network.d.ts new file mode 100644 index 000000000..97b99650c --- /dev/null +++ b/dist/network/network.d.ts @@ -0,0 +1,65 @@ +import { IPv4 } from "ip-num"; +import { NetworkNode } from "./node"; +export interface NetworkInfo { + id: string; + ip: string; + mask: string; + gateway?: string; + nodes: { + [ip: string]: string; + }; +} +export declare enum NetworkState { + Active = "Active", + Removed = "Removed" +} +export declare class Network { + readonly id: string; + private readonly ip; + private readonly ipRange; + private ipIterator; + private mask; + private gateway?; + private nodes; + private state; + constructor(id: string, ip: string, mask?: string, gateway?: string); + /** + * Returns information about the network. + */ + getNetworkInfo(): NetworkInfo; + /** + * Adds a node to the network. + * @param node - The network node to be added. + */ + addNode(node: NetworkNode): void; + /** + * Checks whether the node belongs to the network. + * @param node - The network node to check. + */ + hasNode(node: NetworkNode): boolean; + /** + * Removes a node from the network. + * @param node - The network node to be removed. + */ + removeNode(node: NetworkNode): void; + markAsRemoved(): void; + /** + * Returns the first available IP address in the network. + */ + getFirstAvailableIpAddress(): IPv4; + /** + * Checks if a given IP address is within the network range. + * @param ip - The IPv4 address to check. + */ + isIpInNetwork(ip: IPv4): boolean; + /** + * Checks if a given node ID is unique within the network. + * @param id - The node ID to check. + */ + isNodeIdUnique(id: string): boolean; + /** + * Checks if a given IP address is unique within the network. + */ + isNodeIpUnique(ip: IPv4): boolean; + isRemoved(): boolean; +} diff --git a/dist/network/network.module.d.ts b/dist/network/network.module.d.ts new file mode 100644 index 000000000..ccf5aaf2f --- /dev/null +++ b/dist/network/network.module.d.ts @@ -0,0 +1,69 @@ +import { EventEmitter } from "eventemitter3"; +import { Network } from "./network"; +import { Logger } from "../shared/utils"; +import { INetworkApi, NetworkEvents } from "./api"; +import { NetworkNode } from "./node"; +export interface NetworkOptions { + /** + * The IP address of the network. May contain netmask, e.g. "192.168.0.0/24". + * This field can include the netmask directly in CIDR notation. + * @default "192.168.0.0" + */ + ip?: string; + /** + * The desired IP address of the requestor node within the newly-created network. + * This field is optional and if not provided, the first available IP address will be assigned. + */ + ownerIp?: string; + /** + * Optional network mask given in dotted decimal notation. + * If the ip address was provided in Cidr notation this mask will override the mask from the Cidr notation + */ + mask?: string; + /** + * Optional gateway address for the network. + * This field can be used to specify a gateway IP address for the network. + */ + gateway?: string; +} +export interface NetworkModule { + events: EventEmitter; + /** + * Creates a new network with the specified options. + * @param options NetworkOptions + */ + createNetwork(options?: NetworkOptions): Promise; + /** + * Removes an existing network. + * @param network - The network to be removed. + */ + removeNetwork(network: Network): Promise; + /** + * Creates a new node within a specified network. + * @param network - The network to which the node will be added. + * @param nodeId - The ID of the node to be created. + * @param nodeIp - Optional IP address for the node. If not provided, the first available IP address will be assigned. + */ + createNetworkNode(network: Network, nodeId: string, nodeIp?: string): Promise; + /** + * Removes an existing node from a specified network. + * @param network - The network from which the node will be removed. + * @param node - The node to be removed. + */ + removeNetworkNode(network: Network, node: NetworkNode): Promise; +} +export declare class NetworkModuleImpl implements NetworkModule { + events: EventEmitter; + private readonly networkApi; + private readonly logger; + private lock; + constructor(deps: { + logger?: Logger; + networkApi: INetworkApi; + }); + createNetwork(options?: NetworkOptions): Promise; + removeNetwork(network: Network): Promise; + createNetworkNode(network: Network, nodeId: string, nodeIp?: string): Promise; + removeNetworkNode(network: Network, node: NetworkNode): Promise; + private getFreeIpInNetwork; +} diff --git a/dist/network/node.d.ts b/dist/network/node.d.ts new file mode 100644 index 000000000..0b53a1b15 --- /dev/null +++ b/dist/network/node.d.ts @@ -0,0 +1,19 @@ +import { NetworkInfo } from "./network"; +import { DeployArgs } from "../activity/script/command"; +/** + * Describes a node in a VPN, mapping a Golem node id to an IP address + */ +export declare class NetworkNode { + readonly id: string; + readonly ip: string; + getNetworkInfo: () => NetworkInfo; + yagnaBaseUri: string; + constructor(id: string, ip: string, getNetworkInfo: () => NetworkInfo, yagnaBaseUri: string); + /** + * Generate a dictionary of arguments that are required for the appropriate + *`Deploy` command of an exe-script in order to pass the network configuration to the runtime + * on the provider's end. + */ + getNetworkDeploymentArg(): Pick; + getWebsocketUri(port: number): string; +} diff --git a/dist/network/tcp-proxy.d.ts b/dist/network/tcp-proxy.d.ts new file mode 100644 index 000000000..74632666c --- /dev/null +++ b/dist/network/tcp-proxy.d.ts @@ -0,0 +1,78 @@ +import { EventEmitter } from "eventemitter3"; +import { Logger } from "../shared/utils"; +export interface TcpProxyEvents { + /** Raised when the proxy encounters any sort of error */ + error: (err: unknown) => void; +} +/** + * Configuration required by the TcpProxy to work properly + */ +export interface TcpProxyOptions { + /** + * The logger instance to use for logging + */ + logger: Logger; + /** + * Number of seconds to wait between heart-beating the WS connection ot yagna + * + * @default 10 + */ + heartBeatSec: number; +} +/** + * Allows proxying of TCP traffic to a service running in an activity on a provider via the requestor + * + * **IMPORTANT** + * + * This feature is supported only in the Node.js environment. In has no effect in browsers. + * + * General solution description: + * + * - Open a TCP server and listen to connections + * - When a new connection arrives, establish a WS connection with yagna + * - Pass any incoming data from the client TCP socket to the WS, buffer it when the socket is not ready yet + * - Pass any returning data from the WS to the client TCP socket, but don't do it if the client socket already disconnected + * - When the WS will be closed, then close the client socket as well + * - When the client TCP socket will be closed, close the WS as well + * - Handle teardown of the TCP-WS bridge by clearing communication buffers to avoid memory leaks + */ +export declare class TcpProxy { + /** + * The URL to the WebSocket implementing the communication transport layer + */ + private readonly wsUrl; + /** + * The yagna app-key used to authenticate the WebSocket connection + */ + private readonly appKey; + private server; + readonly events: EventEmitter; + private readonly logger; + private readonly heartBeatSec; + constructor( + /** + * The URL to the WebSocket implementing the communication transport layer + */ + wsUrl: string, + /** + * The yagna app-key used to authenticate the WebSocket connection + */ + appKey: string, + /** + * Additional options of the proxy + */ + options?: Partial); + /** + * Start the proxy in listening mode + * + * @param port The port number to use on the requestor + * @param abort The abort controller to use in order to control cancelling requests + */ + listen(port: number, abort?: AbortController): Promise; + /** + * Gracefully close the proxy + */ + close(): Promise; + private notifyOfError; + private attachDebugLogsToServer; +} diff --git a/dist/payment/BaseDocument.d.ts b/dist/payment/BaseDocument.d.ts new file mode 100644 index 000000000..79792069b --- /dev/null +++ b/dist/payment/BaseDocument.d.ts @@ -0,0 +1,32 @@ +import { PaymentApi } from "ya-ts-client"; +import { ProviderInfo } from "../market/agreement"; +export interface BaseModel { + issuerId: string; + recipientId: string; + payeeAddr: string; + payerAddr: string; + paymentPlatform: string; + agreementId: string; + paymentDueDate?: string; + status: PaymentApi.InvoiceDTO["status"]; +} +/** + * Common properties and methods for payment related documents - Invoices and DebitNotes + */ +export declare abstract class BaseDocument { + readonly id: string; + protected model: ModelType; + readonly provider: ProviderInfo; + readonly recipientId: string; + readonly payeeAddr: string; + readonly requestorWalletAddress: string; + readonly paymentPlatform: string; + readonly agreementId: string; + readonly paymentDueDate?: string; + protected status: PaymentApi.InvoiceDTO["status"]; + protected constructor(id: string, model: ModelType, provider: ProviderInfo); + /** + * Tells what's the current status of the document + */ + getStatus(): "ISSUED" | "RECEIVED" | "ACCEPTED" | "REJECTED" | "FAILED" | "SETTLED" | "CANCELLED"; +} diff --git a/dist/payment/InvoiceProcessor.d.ts b/dist/payment/InvoiceProcessor.d.ts new file mode 100644 index 000000000..d9e260e35 --- /dev/null +++ b/dist/payment/InvoiceProcessor.d.ts @@ -0,0 +1,101 @@ +import { PaymentApi } from "ya-ts-client"; +import { YagnaApi } from "../shared/utils"; +import { Numeric } from "decimal.js-light"; +export type InvoiceAcceptResult = { + invoiceId: string; + allocation: PaymentApi.AllocationDTO; + success: true; + amount: string; + dryRun: boolean; +} | { + invoiceId: string; + allocation: PaymentApi.AllocationDTO; + success: false; + amount: string; + reason: unknown; + dryRun: boolean; +}; +/** + * A class that provides methods for working with invoices. It interacts with the Yagna API directly. + */ +export declare class InvoiceProcessor { + private readonly api; + /** + * Use `InvoiceProcessor.create()` to create an instance of this class. + */ + constructor(api: YagnaApi); + /** + * Collects invoices from the Yagna API until the limit is reached or there are no more invoices. + * @param {Object} options - The parameters for collecting invoices. + * @param options.after Only collect invoices that were created after this date. + * @param options.limit Maximum number of invoices to collect. + * @param options.statuses Only collect invoices with these statuses. + * @param options.providerIds Only collect invoices from these providers. + * @param options.minAmount Only collect invoices with an amount greater than or equal to this. + * @param options.maxAmount Only collect invoices with an amount less than or equal to this. + * @param options.providerWallets Only collect invoices from these provider wallets. + * @param options.paymentPlatforms Only collect invoices from these payment platforms. + * + * @example + * ```typescript + * const invoices = await invoiceProcessor.collectInvoices({ + * after: new Date(Date.now() - 24 * 60 * 60 * 1000), // only collect invoices that were created in the last 24 hours + * limit: 100, // only collect 100 invoices max + * statuses: ["RECEIVED"], // only collect unpaid invoices + * providerIds: ["0x1234"], // only collect invoices from this provider + * minAmount: "0.1", // only collect invoices with an amount greater than or equal to 0.1 GLM + * maxAmount: "1", // only collect invoices with an amount less than or equal to 1 GLM + * providerWallets: ["0x1234"], // only collect invoices from this provider wallet + * paymentPlatforms: ["erc20-polygon-glm"], // only collect invoices from this payment platform + * }); + * ``` + */ + collectInvoices({ after, limit, statuses, providerIds, minAmount, maxAmount, providerWallets, paymentPlatforms, }?: { + after?: Date; + limit?: number; + statuses?: string[]; + providerIds?: string[]; + minAmount?: Numeric; + maxAmount?: Numeric; + providerWallets?: string[]; + paymentPlatforms?: string[]; + }): Promise<{ + readonly invoiceId: string; + readonly issuerId: string; + readonly recipientId: string; + readonly payeeAddr: string; + readonly payerAddr: string; + readonly paymentPlatform: string; + readonly timestamp: string; + agreementId: string; + activityIds?: string[] | undefined; + amount: string; + paymentDueDate: string; + readonly status: "ISSUED" | "RECEIVED" | "ACCEPTED" | "REJECTED" | "FAILED" | "SETTLED" | "CANCELLED"; + }[]>; + /** + * Fetches a single invoice from the Yagna API. + */ + fetchSingleInvoice(invoiceId: string): Promise; + /** + * Creates an allocation for the exact amount of the invoice and accepts the invoice. + * If `dryRun` is `true`, no allocation will be created and the invoice will not be accepted. + */ + acceptInvoice({ invoice, dryRun, }: { + invoice: PaymentApi.InvoiceDTO; + dryRun?: boolean; + }): Promise; + /** + * Creates an allocation for the exact amount of the invoices and accepts the invoices. + * Since the invoices can be from different payment platforms and payer addresses, + * multiple allocations might be created. + * If `dryRun` is `true`, no allocation will be created and the invoices will not be accepted. + * Please keep in mind that this method is not atomic, so if one of the invoices fails + * to be accepted, the others will still be accepted. This is a limitation of the Yagna API. + * Use the returned `InvoiceAcceptResult` to check which invoices were accepted successfully. + */ + acceptManyInvoices({ invoices, dryRun, }: { + invoices: PaymentApi.InvoiceDTO[]; + dryRun?: boolean; + }): Promise; +} diff --git a/dist/payment/PayerDetails.d.ts b/dist/payment/PayerDetails.d.ts new file mode 100644 index 000000000..8479c7ce6 --- /dev/null +++ b/dist/payment/PayerDetails.d.ts @@ -0,0 +1,8 @@ +export declare class PayerDetails { + readonly network: string; + readonly driver: string; + readonly address: string; + readonly token: "glm" | "tglm" | (string & {}); + constructor(network: string, driver: string, address: string, token: "glm" | "tglm" | (string & {})); + getPaymentPlatform(): string; +} diff --git a/dist/payment/agreement_payment_process.d.ts b/dist/payment/agreement_payment_process.d.ts new file mode 100644 index 000000000..8b637d3e4 --- /dev/null +++ b/dist/payment/agreement_payment_process.d.ts @@ -0,0 +1,64 @@ +import { Agreement } from "../market"; +import { Invoice } from "./invoice"; +import { DebitNote } from "./debit_note"; +import { Allocation } from "./allocation"; +import { Logger } from "../shared/utils"; +import { Demand } from "../market"; +import { PaymentModule } from "./payment.module"; +export type DebitNoteFilter = (debitNote: DebitNote, context: { + agreement: Agreement; + allocation: Allocation; + demand: Demand; +}) => Promise | boolean; +export type InvoiceFilter = (invoice: Invoice, context: { + agreement: Agreement; + allocation: Allocation; + demand: Demand; +}) => Promise | boolean; +export interface PaymentProcessOptions { + invoiceFilter: InvoiceFilter; + debitNoteFilter: DebitNoteFilter; +} +/** + * Process manager that controls the logic behind processing payments for an agreement (debit notes and invoices). + * The process is started automatically and ends when the final invoice is received. + * You can stop the process earlier by calling the `stop` method. You cannot restart the process after stopping it. + */ +export declare class AgreementPaymentProcess { + readonly agreement: Agreement; + readonly allocation: Allocation; + readonly paymentModule: PaymentModule; + private invoice; + private debitNotes; + /** + * Lock used to synchronize callers and enforce important business rules + * + * Example of a rule: you shouldn't accept a debit note if an invoice is already in place + */ + private lock; + private options; + readonly logger: Logger; + private readonly cleanupSubscriptions; + constructor(agreement: Agreement, allocation: Allocation, paymentModule: PaymentModule, options?: Partial, logger?: Logger); + /** + * Adds the debit note to the process avoiding race conditions + */ + addDebitNote(debitNote: DebitNote): Promise; + /** + * Adds the invoice to the process avoiding race conditions + */ + addInvoice(invoice: Invoice): Promise; + /** + * Tells if the process reached a point in which we can consider it as "finished" + */ + isFinished(): boolean; + private applyDebitNote; + private hasProcessedDebitNote; + private rejectDebitNote; + private finalize; + private applyInvoice; + private rejectInvoice; + private hasReceivedInvoice; + isStarted(): boolean; + stop(): void; +} diff --git a/dist/payment/allocation.d.ts b/dist/payment/allocation.d.ts new file mode 100644 index 000000000..9a5974e7c --- /dev/null +++ b/dist/payment/allocation.d.ts @@ -0,0 +1,32 @@ +import { PaymentApi } from "ya-ts-client"; +import { BasePaymentOptions } from "./config"; +export interface AllocationOptions extends BasePaymentOptions { + account: { + address: string; + platform: string; + }; + expirationSec?: number; +} +/** + * Represents a designated sum of money reserved for the purpose of making some particular payments. Allocations are currently purely virtual objects. An Allocation is connected to a payment account (wallet) specified by address and payment platform field. + */ +export declare class Allocation { + private readonly model; + /** Allocation ID */ + readonly id: string; + /** Timestamp of creation */ + readonly timestamp: string; + /** Timeout */ + readonly timeout?: string; + /** Address of requestor */ + readonly address: string; + /** Payment platform */ + readonly paymentPlatform: string; + /** Total allocation Amount */ + readonly totalAmount: string; + /** The amount that has been already spent */ + readonly spentAmount: string; + /** The amount left for spending */ + readonly remainingAmount: string; + constructor(model: PaymentApi.AllocationDTO); +} diff --git a/dist/payment/api.d.ts b/dist/payment/api.d.ts new file mode 100644 index 000000000..c5284d948 --- /dev/null +++ b/dist/payment/api.d.ts @@ -0,0 +1,108 @@ +import { Subject } from "rxjs"; +import { Invoice } from "./invoice"; +import { DebitNote } from "./debit_note"; +import { Allocation } from "./allocation"; +export type PaymentEvents = { + allocationCreated: (event: { + allocation: Allocation; + }) => void; + errorCreatingAllocation: (event: { + error: Error; + }) => void; + allocationReleased: (event: { + allocation: Allocation; + }) => void; + errorReleasingAllocation: (event: { + allocation: Allocation; + error: Error; + }) => void; + allocationAmended: (event: { + allocation: Allocation; + }) => void; + errorAmendingAllocation: (event: { + allocation: Allocation; + error: Error; + }) => void; + invoiceReceived: (event: { + invoice: Invoice; + }) => void; + debitNoteReceived: (event: { + debitNote: DebitNote; + }) => void; + invoiceAccepted: (event: { + invoice: Invoice; + }) => void; + invoiceRejected: (event: { + invoice: Invoice; + }) => void; + errorAcceptingInvoice: (event: { + invoice: Invoice; + error: Error; + }) => void; + errorRejectingInvoice: (event: { + invoice: Invoice; + error: Error; + }) => void; + debitNoteAccepted: (event: { + debitNote: DebitNote; + }) => void; + debitNoteRejected: (event: { + debitNote: DebitNote; + }) => void; + errorAcceptingDebitNote: (event: { + debitNote: DebitNote; + error: Error; + }) => void; + errorRejectingDebitNote: (event: { + debitNote: DebitNote; + error: Error; + }) => void; +}; +export interface IPaymentApi { + receivedInvoices$: Subject; + receivedDebitNotes$: Subject; + /** Starts the reader logic */ + connect(): Promise; + getInvoice(id: string): Promise; + acceptInvoice(invoice: Invoice, allocation: Allocation, amount: string): Promise; + rejectInvoice(invoice: Invoice, reason: string): Promise; + getDebitNote(id: string): Promise; + acceptDebitNote(debitNote: DebitNote, allocation: Allocation, amount: string): Promise; + rejectDebitNote(debitNote: DebitNote, reason: string): Promise; + getAllocation(id: string): Promise; + createAllocation(params: CreateAllocationParams): Promise; + releaseAllocation(allocation: Allocation): Promise; +} +export type CreateAllocationParams = { + /** + * How much to allocate + */ + budget: number; + /** + * How long the allocation should be valid + */ + expirationSec: number; + /** + * Optionally override the payment platform to use for this allocation + */ + paymentPlatform?: string; + /** + * Optionally provide a deposit to be used for the allocation, instead of using funds from the yagna wallet. + * Deposit is a way to pay for the computation using someone else's funds. The other party has to + * call the `createDeposit` method on the `LockPayment` smart contract and provide the deposit ID. + * + * @deprecated NOT IMPLEMENTED BY YAGNA + * This is a feature that's not yet released in Yagna. + * The deprecation note will be removed once the feature will be supported by the network. + */ + deposit?: { + /** + * Address of the smart contract that holds the deposit. + */ + contract: string; + /** + * ID of the deposit, obtained by calling the `createDeposit` method on the smart contract. + */ + id: string; + }; +}; diff --git a/dist/payment/config.d.ts b/dist/payment/config.d.ts new file mode 100644 index 000000000..32ca955d1 --- /dev/null +++ b/dist/payment/config.d.ts @@ -0,0 +1,13 @@ +import { Logger, YagnaOptions } from "../shared/utils"; +export interface BasePaymentOptions { + yagnaOptions?: YagnaOptions; + budget?: number; + payment?: { + driver?: string; + network?: string; + }; + paymentTimeout?: number; + paymentRequestTimeout?: number; + unsubscribeTimeoutMs?: number; + logger?: Logger; +} diff --git a/dist/payment/debit_note.d.ts b/dist/payment/debit_note.d.ts new file mode 100644 index 000000000..b65eddff4 --- /dev/null +++ b/dist/payment/debit_note.d.ts @@ -0,0 +1,26 @@ +import { PaymentApi } from "ya-ts-client"; +import { ProviderInfo } from "../market/agreement"; +import { BaseDocument } from "./BaseDocument"; +import Decimal from "decimal.js-light"; +export interface IDebitNoteRepository { + getById(id: string): Promise; +} +/** + * A Debit Note is an artifact issued by the Provider to the Requestor, in the context of a specific Activity. It is a notification of Total Amount Due incurred by the Activity until the moment the Debit Note is issued. This is expected to be used as trigger for payment in upfront-payment or pay-as-you-go scenarios. NOTE: Only Debit Notes with non-null paymentDueDate are expected to trigger payments. NOTE: Debit Notes flag the current Total Amount Due, which is accumulated from the start of Activity. Debit Notes are expected to trigger payments, therefore payment amount for the newly received Debit Note is expected to be determined by difference of Total Payments for the Agreement vs Total Amount Due. + */ +export declare class DebitNote extends BaseDocument { + protected model: PaymentApi.DebitNoteDTO; + readonly id: string; + readonly previousDebitNoteId?: string; + readonly timestamp: string; + readonly activityId: string; + readonly totalAmountDue: string; + readonly usageCounterVector?: object; + /** + * + * @param model + * @param providerInfo + */ + constructor(model: PaymentApi.DebitNoteDTO, providerInfo: ProviderInfo); + getPreciseAmount(): Decimal; +} diff --git a/dist/payment/error.d.ts b/dist/payment/error.d.ts new file mode 100644 index 000000000..90c75496e --- /dev/null +++ b/dist/payment/error.d.ts @@ -0,0 +1,26 @@ +import { GolemModuleError } from "../shared/error/golem-error"; +import { Allocation } from "./allocation"; +import { ProviderInfo } from "../market/agreement"; +export declare enum PaymentErrorCode { + AllocationCreationFailed = "AllocationCreationFailed", + MissingAllocation = "MissingAllocation", + PaymentProcessNotInitialized = "PaymentProcessNotInitialized", + AllocationReleaseFailed = "AllocationReleaseFailed", + InvoiceAcceptanceFailed = "InvoiceAcceptanceFailed", + DebitNoteAcceptanceFailed = "DebitNoteAcceptanceFailed", + InvoiceRejectionFailed = "InvoiceRejectionFailed", + DebitNoteRejectionFailed = "DebitNoteRejectionFailed", + CouldNotGetDebitNote = "CouldNotGetDebitNote", + CouldNotGetInvoice = "CouldNotGetInvoice", + PaymentStatusQueryFailed = "PaymentStatusQueryFailed", + AgreementAlreadyPaid = "AgreementAlreadyPaid", + InvoiceAlreadyReceived = "InvoiceAlreadyReceived" +} +export declare class GolemPaymentError extends GolemModuleError { + #private; + code: PaymentErrorCode; + previous?: Error | undefined; + constructor(message: string, code: PaymentErrorCode, allocation?: Allocation, provider?: ProviderInfo, previous?: Error | undefined); + getAllocation(): Allocation | undefined; + getProvider(): ProviderInfo | undefined; +} diff --git a/dist/payment/index.d.ts b/dist/payment/index.d.ts new file mode 100644 index 000000000..16e8fd4f3 --- /dev/null +++ b/dist/payment/index.d.ts @@ -0,0 +1,10 @@ +export { Invoice } from "./invoice"; +export { DebitNote } from "./debit_note"; +export { Allocation } from "./allocation"; +export { Rejection, RejectionReason } from "./rejection"; +export * as PaymentFilters from "./strategy"; +export { GolemPaymentError, PaymentErrorCode } from "./error"; +export { InvoiceProcessor, InvoiceAcceptResult } from "./InvoiceProcessor"; +export * from "./payment.module"; +export * from "./api"; +export { InvoiceFilter, DebitNoteFilter } from "./agreement_payment_process"; diff --git a/dist/payment/invoice.d.ts b/dist/payment/invoice.d.ts new file mode 100644 index 000000000..56a992913 --- /dev/null +++ b/dist/payment/invoice.d.ts @@ -0,0 +1,33 @@ +import { BasePaymentOptions } from "./config"; +import { PaymentApi } from "ya-ts-client"; +import { ProviderInfo } from "../market/agreement"; +import { BaseDocument } from "./BaseDocument"; +import Decimal from "decimal.js-light"; +export type InvoiceOptions = BasePaymentOptions; +export interface IInvoiceRepository { + getById(id: string): Promise; +} +/** + * An Invoice is an artifact issued by the Provider to the Requestor, in the context of a specific Agreement. It indicates the total Amount owed by the Requestor in this Agreement. No further Debit Notes shall be issued after the Invoice is issued. The issue of Invoice signals the Termination of the Agreement (if it hasn't been terminated already). No Activity execution is allowed after the Invoice is issued. + */ +export declare class Invoice extends BaseDocument { + protected model: PaymentApi.InvoiceDTO; + /** Activities IDs covered by this Invoice */ + readonly activityIds?: string[]; + /** Amount in the invoice */ + readonly amount: string; + /** Invoice creation timestamp */ + readonly timestamp: string; + /** Recipient ID */ + readonly recipientId: string; + /** + * @param model + * @param providerInfo + */ + constructor(model: PaymentApi.InvoiceDTO, providerInfo: ProviderInfo); + getPreciseAmount(): Decimal; + /** + * Compares two invoices together and tells if they are the same thing + */ + isSameAs(invoice: Invoice): boolean; +} diff --git a/dist/payment/payment.module.d.ts b/dist/payment/payment.module.d.ts new file mode 100644 index 000000000..3d3a3f6e7 --- /dev/null +++ b/dist/payment/payment.module.d.ts @@ -0,0 +1,72 @@ +import { EventEmitter } from "eventemitter3"; +import { Allocation, CreateAllocationParams, DebitNote, Invoice, InvoiceProcessor, PaymentEvents } from "./index"; +import { Observable } from "rxjs"; +import { GolemServices } from "../golem-network"; +import { PayerDetails } from "./PayerDetails"; +import { AgreementPaymentProcess, PaymentProcessOptions } from "./agreement_payment_process"; +import { Agreement } from "../market"; +export interface PaymentModuleOptions { + /** + * Network used to facilitate the payment. + * (for example: "mainnet", "holesky") + * @default holesky + */ + network?: string; + /** + * Payment driver used to facilitate the payment. + * (for example: "erc20") + * @default erc20 + */ + driver?: "erc20" | (string & {}); + /** + * Token used to facilitate the payment. + * If unset, it will be inferred from the network. + * (for example: "glm", "tglm") + */ + token?: "glm" | "tglm" | (string & {}); +} +export interface PaymentModule { + events: EventEmitter; + observeDebitNotes(): Observable; + observeInvoices(): Observable; + createAllocation(params: CreateAllocationParams): Promise; + releaseAllocation(allocation: Allocation): Promise; + amendAllocation(allocation: Allocation, params: CreateAllocationParams): Promise; + getAllocation(id: string): Promise; + acceptInvoice(invoice: Invoice, allocation: Allocation, amount: string): Promise; + rejectInvoice(invoice: Invoice, reason: string): Promise; + acceptDebitNote(debitNote: DebitNote, allocation: Allocation, amount: string): Promise; + rejectDebitNote(debitNote: DebitNote, reason: string): Promise; + createInvoiceProcessor(): InvoiceProcessor; + createAgreementPaymentProcess(agreement: Agreement, allocation: Allocation, options?: Partial): AgreementPaymentProcess; + /** + * Get the payment platform and wallet address of the payer. + */ + getPayerDetails(): Promise; +} +export declare class PaymentModuleImpl implements PaymentModule { + events: EventEmitter; + private readonly yagnaApi; + private readonly paymentApi; + private readonly logger; + private readonly options; + constructor(deps: GolemServices, options?: PaymentModuleOptions); + private startEmittingPaymentEvents; + private getPaymentPlatform; + getPayerDetails(): Promise; + observeDebitNotes(): Observable; + observeInvoices(): Observable; + createAllocation(params: CreateAllocationParams): Promise; + releaseAllocation(allocation: Allocation): Promise; + getAllocation(id: string): Promise; + amendAllocation(allocation: Allocation, _newOpts: CreateAllocationParams): Promise; + acceptInvoice(invoice: Invoice, allocation: Allocation, amount: string): Promise; + rejectInvoice(invoice: Invoice, reason: string): Promise; + acceptDebitNote(debitNote: DebitNote, allocation: Allocation, amount: string): Promise; + rejectDebitNote(debitNote: DebitNote, reason: string): Promise; + /** + * Creates an instance of utility class InvoiceProcessor that deals with invoice related use-cases + */ + createInvoiceProcessor(): InvoiceProcessor; + createAgreementPaymentProcess(agreement: Agreement, allocation: Allocation, options?: Partial): AgreementPaymentProcess; +} diff --git a/dist/payment/rejection.d.ts b/dist/payment/rejection.d.ts new file mode 100644 index 000000000..c92d9a539 --- /dev/null +++ b/dist/payment/rejection.d.ts @@ -0,0 +1,17 @@ +export declare enum RejectionReason { + UnsolicitedService = "UNSOLICITED_SERVICE", + BadService = "BAD_SERVICE", + IncorrectAmount = "INCORRECT_AMOUNT", + RejectedByRequestorFilter = "REJECTED_BY_REQUESTOR_FILTER", + /** + * Use it when you're processing an event after the agreement reached it's "final state" + * + * By final state we mean: we got an invoice for that agreement + */ + AgreementFinalized = "AGREEMENT_FINALIZED" +} +export interface Rejection { + rejectionReason: RejectionReason; + totalAmountAccepted: string; + message?: string; +} diff --git a/dist/payment/service.d.ts b/dist/payment/service.d.ts new file mode 100644 index 000000000..b043dda9f --- /dev/null +++ b/dist/payment/service.d.ts @@ -0,0 +1,16 @@ +import { BasePaymentOptions } from "./config"; +import { DebitNoteFilter, InvoiceFilter } from "./agreement_payment_process"; +export interface PaymentOptions extends BasePaymentOptions { + /** Interval for checking new invoices */ + invoiceFetchingInterval?: number; + /** Interval for checking new debit notes */ + debitNotesFetchingInterval?: number; + /** Maximum number of invoice events per one fetching */ + maxInvoiceEvents?: number; + /** Maximum number of debit notes events per one fetching */ + maxDebitNotesEvents?: number; + /** A custom filter that checks every debit notes coming from providers */ + debitNotesFilter?: DebitNoteFilter; + /** A custom filter that checks every invoices coming from providers */ + invoiceFilter?: InvoiceFilter; +} diff --git a/dist/payment/strategy.d.ts b/dist/payment/strategy.d.ts new file mode 100644 index 000000000..0539046b0 --- /dev/null +++ b/dist/payment/strategy.d.ts @@ -0,0 +1,10 @@ +import { DebitNote } from "./debit_note"; +import { Invoice } from "./invoice"; +/** Default DebitNotes filter that accept all debit notes without any validation */ +export declare const acceptAllDebitNotesFilter: () => () => Promise; +/** Default Invoices filter that accept all invoices without any validation */ +export declare const acceptAllInvoicesFilter: () => () => Promise; +/** A custom filter that only accepts debit notes below a given value */ +export declare const acceptMaxAmountDebitNoteFilter: (maxAmount: number) => (debitNote: DebitNote) => Promise; +/** A custom filter that only accepts invoices below a given value */ +export declare const acceptMaxAmountInvoiceFilter: (maxAmount: number) => (invoice: Invoice) => Promise; diff --git a/dist/resource-rental/index.d.ts b/dist/resource-rental/index.d.ts new file mode 100644 index 000000000..22e852149 --- /dev/null +++ b/dist/resource-rental/index.d.ts @@ -0,0 +1,3 @@ +export * from "./resource-rental"; +export * from "./resource-rental-pool"; +export * from "./rental.module"; diff --git a/dist/resource-rental/rental.module.d.ts b/dist/resource-rental/rental.module.d.ts new file mode 100644 index 000000000..f9825f490 --- /dev/null +++ b/dist/resource-rental/rental.module.d.ts @@ -0,0 +1,42 @@ +import { ActivityModule } from "../activity"; +import { Agreement, DraftOfferProposalPool, MarketModule } from "../market"; +import { NetworkModule } from "../network"; +import { Allocation, PaymentModule } from "../payment"; +import { StorageProvider } from "../shared/storage"; +import { Logger } from "../shared/utils"; +import { ResourceRental, ResourceRentalOptions } from "./resource-rental"; +import { ResourceRentalPool, ResourceRentalPoolOptions } from "./resource-rental-pool"; +import { EventEmitter } from "eventemitter3"; +export interface ResourceRentalModuleEvents { + /** Emitted when ResourceRenatl is successfully created */ + resourceRentalCreated: (agreement: Agreement) => void; + /** Emitted when ResourceRenatlPool is successfully created */ + resourceRentalPoolCreated: () => void; +} +export interface RentalModule { + events: EventEmitter; + /** + * Factory that creates a new resource rental that's fully configured. + * This method will also create the payment process for the agreement. + * + */ + createResourceRental(agreement: Agreement, allocation: Allocation, options?: ResourceRentalOptions): ResourceRental; + /** + * Factory that creates new resource rental pool that's fully configured + */ + createResourceRentalPool(draftPool: DraftOfferProposalPool, allocation: Allocation, options: ResourceRentalPoolOptions): ResourceRentalPool; +} +export declare class RentalModuleImpl implements RentalModule { + private readonly deps; + events: EventEmitter; + constructor(deps: { + marketModule: MarketModule; + paymentModule: PaymentModule; + activityModule: ActivityModule; + networkModule: NetworkModule; + storageProvider: StorageProvider; + logger: Logger; + }); + createResourceRental(agreement: Agreement, allocation: Allocation, options?: ResourceRentalOptions): ResourceRental; + createResourceRentalPool(draftPool: DraftOfferProposalPool, allocation: Allocation, options?: ResourceRentalPoolOptions): ResourceRentalPool; +} diff --git a/dist/resource-rental/resource-rental-pool.d.ts b/dist/resource-rental/resource-rental-pool.d.ts new file mode 100644 index 000000000..7f7346840 --- /dev/null +++ b/dist/resource-rental/resource-rental-pool.d.ts @@ -0,0 +1,176 @@ +import type { Agreement, DraftOfferProposalPool, MarketModule } from "../market"; +import { GolemMarketError } from "../market"; +import type { Logger } from "../shared/utils"; +import { EventEmitter } from "eventemitter3"; +import type { RequireAtLeastOne } from "../shared/utils/types"; +import type { Allocation } from "../payment"; +import type { ResourceRental, ResourceRentalOptions } from "./resource-rental"; +import { Network, NetworkModule } from "../network"; +import { RentalModule } from "./rental.module"; +import { AgreementOptions } from "../market/agreement/agreement"; +export interface ResourceRentalPoolDependencies { + allocation: Allocation; + proposalPool: DraftOfferProposalPool; + marketModule: MarketModule; + networkModule: NetworkModule; + rentalModule: RentalModule; + logger: Logger; +} +export type PoolSize = number | RequireAtLeastOne<{ + min: number; + max: number; +}>; +export interface ResourceRentalPoolOptions { + poolSize?: PoolSize; + network?: Network; + resourceRentalOptions?: ResourceRentalOptions; + agreementOptions?: AgreementOptions; +} +export interface ResourceRentalPoolEvents { + /** Triggered when the pool has the minimal number of rentals prepared for operations */ + ready: () => void; + /** Triggered when the pool is emptied from all rentals */ + end: () => void; + acquired: (event: { + agreement: Agreement; + }) => void; + released: (event: { + agreement: Agreement; + }) => void; + created: (event: { + agreement: Agreement; + }) => void; + errorDestroyingRental: (event: { + agreement: Agreement; + error: GolemMarketError; + }) => void; + destroyed: (event: { + agreement: Agreement; + }) => void; + errorCreatingRental: (event: { + error: GolemMarketError; + }) => void; + /** Triggered when the pool enters the "draining" state */ + draining: () => void; +} +/** + * Pool of resource rentals that can be borrowed, released or destroyed. + */ +export declare class ResourceRentalPool { + readonly events: EventEmitter; + /** + * Pool of resource rentals that do not have an activity + */ + private lowPriority; + /** + * Pool of resource rentals that have an activity + */ + private highPriority; + private borrowed; + /** + * Queue of functions that are waiting for a lease process to be available + */ + private acquireQueue; + private logger; + private drainPromise?; + private abortController; + private allocation; + private network?; + private proposalPool; + private marketModule; + private networkModule; + private rentalModule; + private readonly minPoolSize; + private readonly maxPoolSize; + private readonly resourceRentalOptions?; + private readonly agreementOptions?; + private asyncLock; + /** + * Number of resource rentals that are currently being signed. + * This is used to prevent creating more resource rentals than the pool size allows. + */ + private rentalsBeingSigned; + constructor(options: ResourceRentalPoolOptions & ResourceRentalPoolDependencies); + private createNewResourceRental; + private validate; + private canCreateMoreResourceRentals; + /** + * Take the first valid resource rental from the pool + * If there is no valid resource rental, return null + */ + private takeValidResourceRental; + private enqueueAcquire; + /** + * Sign a new resource rental or wait for one to become available in the pool, + * whichever comes first. + */ + private raceNewRentalWithAcquireQueue; + /** + * Borrow a resource rental from the pool. + * If there is no valid resource rental a new one will be created. + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + */ + acquire(signalOrTimeout?: number | AbortSignal): Promise; + /** + * If there are any acquires waiting in the queue, the resource rental will be passed to the first one. + * Otherwise, the resource rental will be added to the queue. + */ + private passResourceRentalToWaitingAcquireOrBackToPool; + release(resourceRental: ResourceRental): Promise; + destroy(resourceRental: ResourceRental): Promise; + private get isDraining(); + private startDrain; + /** + * Sets the pool into draining mode and then clears it + * + * When set to drain mode, no new acquires will be possible. At the same time, all agreements in the pool will be terminated with the Providers. + * + * @return Resolves when all agreements are terminated + */ + drainAndClear(): Promise; + /** + * Total size (available + borrowed) + */ + getSize(): number; + /** + * Available size (how many resource rental are ready to be borrowed) + */ + getAvailableSize(): number; + /** + * Borrowed size (how many resource rental are currently out of the pool) + */ + getBorrowedSize(): number; + /** + * Wait till the pool is ready to use (min number of items in pool are usable). + * If an error occurs while creating new resource rentals, it will be retried until the pool is ready + * (potentially indefinitely). To stop this process if it fails to reach the desired state in a given time, + * you can pass either a timeout in milliseconds or an AbortSignal. + * + * @example + * ```typescript + * await pool.ready(10_000); // If the pool is not ready in 10 seconds, an error will be thrown + * ``` + * @example + * ```typescript + * await pool.ready(AbortSignal.timeout(10_000)); // If the pool is not ready in 10 seconds, an error will be thrown + * ``` + */ + ready(timeoutMs?: number): Promise; + ready(abortSignal?: AbortSignal): Promise; + private removeNetworkNode; + /** + * Acquire a resource rental from the pool and release it after the callback is done + * @example + * ```typescript + * const result = await pool.withRental(async (rental) => { + * // Do something with the rented resources + * return result; + * // pool.release(rental) is called automatically + * // even if an error is thrown in the callback + * }); + * ``` + * @param callback - a function that takes a `rental` object as its argument. The rental is automatically released after the callback is executed, regardless of whether it completes successfully or throws an error. + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + */ + withRental(callback: (rental: ResourceRental) => Promise, signalOrTimeout?: number | AbortSignal): Promise; +} diff --git a/dist/resource-rental/resource-rental.d.ts b/dist/resource-rental/resource-rental.d.ts new file mode 100644 index 000000000..b143f1aec --- /dev/null +++ b/dist/resource-rental/resource-rental.d.ts @@ -0,0 +1,68 @@ +import { Agreement, MarketModule } from "../market"; +import { AgreementPaymentProcess, PaymentProcessOptions } from "../payment/agreement_payment_process"; +import { Logger } from "../shared/utils"; +import { Activity, ActivityModule, ExeUnit, ExeUnitOptions } from "../activity"; +import { StorageProvider } from "../shared/storage"; +import { EventEmitter } from "eventemitter3"; +import { NetworkNode } from "../network"; +import { ExecutionOptions } from "../activity/exe-script-executor"; +export interface ResourceRentalEvents { + /** Emitted when the rental process is fully finalized */ + finalized: () => void; + /** Emitted when ExeUnit is successfully created and initialised */ + exeUnitCreated: (activity: Activity) => void; + /** Emitted when the ExeUnit is successfully destroyed */ + exeUnitDestroyed: (activity: Activity) => void; + /** Emitted when there is an error while creating or destroying the ExeUnit */ + error: (error: Error) => void; +} +export interface ResourceRentalOptions { + exeUnit?: Pick; + activity?: ExecutionOptions; + payment?: Partial; + networkNode?: NetworkNode; +} +/** + * Combines an agreement, activity, exe unit and payment process into a single high-level abstraction. + */ +export declare class ResourceRental { + readonly agreement: Agreement; + private readonly storageProvider; + private readonly paymentProcess; + private readonly marketModule; + private readonly activityModule; + private readonly logger; + private readonly resourceRentalOptions?; + readonly events: EventEmitter; + readonly networkNode?: NetworkNode; + private currentExeUnit; + private abortController; + private finalizePromise?; + private exeUnitPromise?; + constructor(agreement: Agreement, storageProvider: StorageProvider, paymentProcess: AgreementPaymentProcess, marketModule: MarketModule, activityModule: ActivityModule, logger: Logger, resourceRentalOptions?: ResourceRentalOptions | undefined); + private startStopAndFinalize; + /** + * Terminates the activity and agreement (stopping any ongoing work) and finalizes the payment process. + * Resolves when the rental will be fully terminated and all pending business operations finalized. + * If the rental is already finalized, it will resolve immediately with the last finalization result. + * @param signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the finalization process, especially the payment process. + * Please note that canceling the payment process may fail to comply with the terms of the agreement. + * If this method is called multiple times, it will return the same promise, ignoring the signal or timeout. + */ + stopAndFinalize(signalOrTimeout?: number | AbortSignal): Promise; + hasActivity(): boolean; + /** + * Creates an activity on the Provider, and returns a exe-unit that can be used to operate within the activity + * @param signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the exe-unit request, + * especially when the exe-unit is in the process of starting, deploying and preparing the environment (including setup function) + */ + getExeUnit(signalOrTimeout?: number | AbortSignal): Promise; + /** + * Destroy previously created exe-unit. + * Please note that if ResourceRental is left without ExeUnit for some time (default 90s) + * the provider will terminate the Agreement and ResourceRental will be unuseble + */ + destroyExeUnit(): Promise; + fetchAgreementState(): Promise<"Proposal" | "Pending" | "Cancelled" | "Rejected" | "Approved" | "Expired" | "Terminated">; + private createExeUnit; +} diff --git a/dist/shared-BES5zO0i.mjs b/dist/shared-BES5zO0i.mjs new file mode 100644 index 000000000..171a3ba26 --- /dev/null +++ b/dist/shared-BES5zO0i.mjs @@ -0,0 +1,6747 @@ +import debugLogger from 'debug'; +import * as YaTsClient from 'ya-ts-client'; +import { v4 } from 'uuid'; +import semverSatisfies from 'semver/functions/satisfies.js'; +import semverCoerce from 'semver/functions/coerce.js'; +import { Subject, Observable, takeUntil, finalize, mergeWith, tap, filter, map, switchMap, lastValueFrom, toArray, catchError, takeWhile, from, mergeMap, of } from 'rxjs'; +import EventSource from 'eventsource'; +import { EventEmitter } from 'eventemitter3'; +import AsyncLock from 'async-lock'; +import Decimal from 'decimal.js-light'; +import path from 'path'; +import * as fs from 'fs'; +import fs__default from 'fs'; +import spawn from 'cross-spawn'; +import { toObject, encode } from 'flatbuffers/js/flexbuffers.js'; +import * as jsSha3 from 'js-sha3'; +import jsSha3__default from 'js-sha3'; +import NodeWebSocket, { WebSocket as WebSocket$1 } from 'ws'; +import net from 'net'; +import { Buffer as Buffer$1 } from 'buffer'; +import retry from 'async-retry'; +import { IPv4CidrRange, IPv4Mask, IPv4, IPv4Prefix } from 'ip-num'; + +/** + * @param time + * @param inMs + * @ignore + */ +const sleep = (time, inMs = false) => new Promise((resolve) => setTimeout(resolve, time * (inMs ? 1 : 1000))); + +/** + * Base class for all errors directly thrown by Golem SDK. + */ +class GolemError extends Error { + constructor(message, + /** + * The previous error, if any, that led to this error. + */ + previous) { + super(message); + this.previous = previous; + } +} +/** + * User-caused errors in the Golem SDK containing logic errors. + * @example you cannot create an activity for an agreement that already expired + */ +class GolemUserError extends GolemError { +} +/** + * Represents errors related to the user choosing to abort or stop running activities. + * @example CTRL+C abort error + */ +class GolemAbortError extends GolemUserError { +} +/** + * Represents configuration errors. + * @example Api key not defined + */ +class GolemConfigError extends GolemUserError { +} +/** + * Represents errors when the SDK encountered an internal error that wasn't handled correctly. + * @example JSON.parse(undefined) -> Error: Unexpected token u in JSON at position 0 + */ +class GolemInternalError extends GolemError { +} +/** + * Represents errors resulting from yagna’s errors or provider failure + * @examples: + * - yagna results with a HTTP 500-error + * - the provider failed to deploy the activity - permission denied when creating the activity on the provider system itself + */ +class GolemPlatformError extends GolemError { +} +/** + * SDK timeout errors + * @examples: + * - Not receiving any offers within the configured time. + * - The activity not starting within the configured time. + * - The request (task) timing out (started on an activity but didn't finish on time). + * - The request start timing out (the task didn't start within the configured amount of time). + */ +class GolemTimeoutError extends GolemError { +} +/** + * Module specific errors - Market, Work, Payment. + * Each of the major modules will have its own domain specific root error type, + * additionally containing an error code specific to a given subdomain + */ +class GolemModuleError extends GolemError { + constructor(message, code, previous) { + super(message, previous); + this.code = code; + } +} + +/** + * @ignore + */ +const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined"; +const isNode = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +/** + * @ignore + */ +const isWebWorker = typeof self === "object" && self.constructor && self.constructor.name === "DedicatedWorkerGlobalScope"; +/** + * @ignore + */ +function checkAndThrowUnsupportedInBrowserError(feature) { + if (isBrowser) + throw new GolemInternalError(`Feature ${feature} is unsupported in the browser.`); +} + +function nullLogger() { + const nullFunc = () => { + // Do nothing. + }; + return { + child: () => nullLogger(), + debug: nullFunc, + info: nullFunc, + warn: nullFunc, + error: nullFunc, + }; +} + +function getNamespace(namespace, disablePrefix) { + if (disablePrefix) { + return namespace; + } + else { + return namespace.startsWith("golem-js:") ? namespace : `golem-js:${namespace}`; + } +} +/** + * Creates a logger that uses the debug library. This logger is used by default by all entities in the SDK. + * + * If the namespace is not prefixed with `golem-js:`, it will be prefixed automatically - this can be controlled by `disableAutoPrefix` options. + */ +function defaultLogger(namespace, opts = { + disableAutoPrefix: false, +}) { + const namespaceWithBase = getNamespace(namespace, opts.disableAutoPrefix); + const logger = debugLogger(namespaceWithBase); + function log(level, msg, ctx) { + if (ctx) { + logger(`[${level}] ${msg} %o`, ctx); + } + else { + logger(`[${level}] ${msg}`); + } + } + function debug(msg, ctx) { + log("DEBUG", msg, ctx); + } + function info(msg, ctx) { + log("INFO", msg, ctx); + } + function warn(msg, ctx) { + log("WARN", msg, ctx); + } + function error(msg, ctx) { + log("ERROR", msg, ctx); + } + return { + child: (childNamespace) => defaultLogger(`${namespaceWithBase}:${childNamespace}`, opts), + info, + error, + warn, + debug, + }; +} + +function getYagnaApiUrl() { + return (isNode ? process === null || process === void 0 ? void 0 : process.env.YAGNA_API_URL : "") || "http://127.0.0.1:7465"; +} +function getYagnaAppKey() { + var _a; + return isNode ? ((_a = process === null || process === void 0 ? void 0 : process.env.YAGNA_APPKEY) !== null && _a !== void 0 ? _a : "") : ""; +} +function getYagnaSubnet() { + var _a; + return isNode ? ((_a = process === null || process === void 0 ? void 0 : process.env.YAGNA_SUBNET) !== null && _a !== void 0 ? _a : "public") : "public"; +} +function getRepoUrl() { + var _a; + return isNode + ? ((_a = process === null || process === void 0 ? void 0 : process.env.GOLEM_REGISTRY_URL) !== null && _a !== void 0 ? _a : "https://registry.golem.network") + : "https://registry.golem.network"; +} +function getPaymentNetwork() { + var _a; + return isNode ? ((_a = process.env.PAYMENT_NETWORK) !== null && _a !== void 0 ? _a : "holesky") : "holesky"; +} +function isDevMode() { + return isNode ? (process === null || process === void 0 ? void 0 : process.env.GOLEM_DEV_MODE) === "true" : false; +} + +var env = /*#__PURE__*/Object.freeze({ + __proto__: null, + getPaymentNetwork: getPaymentNetwork, + getRepoUrl: getRepoUrl, + getYagnaApiUrl: getYagnaApiUrl, + getYagnaAppKey: getYagnaAppKey, + getYagnaSubnet: getYagnaSubnet, + isDevMode: isDevMode +}); + +/** + * Utility function that helps to block the execution until a condition is met (check returns true) or the timeout happens. + * + * @param {function} check - The function checking if the condition is met. + * @param {Object} [opts] - Options controlling the timeout and check interval in seconds. + * @param {AbortSignal} [opts.abortSignal] - AbortSignal to respect when waiting for the condition to be met + * @param {number} [opts.intervalSeconds=1] - The interval between condition checks in seconds. + * + * @return {Promise} - Resolves when the condition is met or rejects with a timeout error if it wasn't met on time. + */ +function waitFor(check, opts) { + var _a; + const intervalSeconds = (_a = opts === null || opts === void 0 ? void 0 : opts.intervalSeconds) !== null && _a !== void 0 ? _a : 1; + let verifyInterval; + const verify = new Promise((resolve, reject) => { + verifyInterval = setInterval(async () => { + var _a; + if ((_a = opts === null || opts === void 0 ? void 0 : opts.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) { + reject(new GolemAbortError("Waiting for a condition has been aborted", opts.abortSignal.reason)); + } + if (await check()) { + resolve(); + } + }, intervalSeconds * 1000); + }); + return verify.finally(() => { + clearInterval(verifyInterval); + }); +} +/** + * Simple utility that allows you to wait n-seconds and then call the provided function + */ +function waitAndCall(fn, waitSeconds) { + return new Promise((resolve, reject) => { + setTimeout(async () => { + try { + const val = await fn(); + resolve(val); + } + catch (err) { + reject(err); + } + }, waitSeconds * 1000); + }); +} + +class EventReader { + constructor(logger) { + this.logger = logger; + } + async pollToSubject(generator, subject) { + for await (const value of generator) { + subject.next(value); + } + subject.complete(); + } + createReader(eventType, eventsFetcher) { + let isFinished = false; + let keepReading = true; + let currentPoll = null; + let lastTimestamp = new Date().toISOString(); + const logger = this.logger; + return { + eventType, + isFinished, + pollValues: async function* () { + while (keepReading) { + try { + currentPoll = eventsFetcher(lastTimestamp); + const events = await currentPoll; + logger.debug("Polled events from Yagna", { + eventType, + count: events.length, + lastEventTimestamp: lastTimestamp, + }); + for (const event of events) { + yield event; + lastTimestamp = event.eventDate; + } + } + catch (error) { + if (typeof error === "object" && error.name === "CancelError") { + logger.debug("Polling was cancelled", { eventType }); + continue; + } + logger.error("Error fetching events from Yagna", { eventType, error }); + } + } + logger.debug("Stopped reading events", { eventType }); + isFinished = true; + }, + cancel: async function () { + keepReading = false; + if (currentPoll) { + currentPoll.cancel(); + } + await waitFor(() => isFinished, { intervalSeconds: 0 }); + logger.debug("Cancelled reading the events", { eventType }); + }, + }; + } +} + +const MIN_SUPPORTED_YAGNA = "0.15.2"; +/** + * Utility class that groups various Yagna APIs under a single wrapper + * + * This class has the following responsibilities: + * + * - selectively exposes services from ya-ts-client in a more user-friendly manner + * - implements an event reader that collects events from Yagna endpoints and allows subscribing to them as Observables + * for agreements, debit notes and invoices. These observables emit ya-ts-client types on outputs + * + * End users of the SDK should not use this class and make use of {@link golem-network/golem-network.GolemNetwork} instead. This class is designed for + * SDK developers to use. + */ +class YagnaApi { + constructor(options) { + this.debitNoteEvents$ = new Subject(); + this.debitNoteEventsPoll = null; + this.invoiceEvents$ = new Subject(); + this.invoiceEventPoll = null; + this.agreementEvents$ = new Subject(); + this.agreementEventsPoll = null; + const apiKey = (options === null || options === void 0 ? void 0 : options.apiKey) || getYagnaAppKey(); + this.basePath = (options === null || options === void 0 ? void 0 : options.basePath) || getYagnaApiUrl(); + const yagnaOptions = { + apiKey: apiKey, + basePath: this.basePath, + }; + if (!yagnaOptions.apiKey) { + throw new GolemConfigError("Yagna API key not defined"); + } + const commonHeaders = { + Authorization: `Bearer ${apiKey}`, + }; + const marketClient = new YaTsClient.MarketApi.Client({ + BASE: `${this.basePath}/market-api/v1`, + HEADERS: commonHeaders, + }); + this.market = marketClient.requestor; + const paymentClient = new YaTsClient.PaymentApi.Client({ + BASE: `${this.basePath}/payment-api/v1`, + HEADERS: commonHeaders, + }); + this.payment = paymentClient.requestor; + const activityApiClient = new YaTsClient.ActivityApi.Client({ + BASE: `${this.basePath}/activity-api/v1`, + HEADERS: commonHeaders, + }); + this.activity = { + control: activityApiClient.requestorControl, + state: activityApiClient.requestorState, + exec: { + observeBatchExecResults: (activityId, batchId) => { + return new Observable((observer) => { + const eventSource = new EventSource(`${this.basePath}/activity-api/v1/activity/${activityId}/exec/${batchId}`, { + headers: { + Accept: "text/event-stream", + Authorization: `Bearer ${apiKey}`, + }, + }); + eventSource.addEventListener("runtime", (event) => observer.next(JSON.parse(event.data))); + eventSource.addEventListener("error", (error) => observer.error(error)); + return () => eventSource.close(); + }); + }, + }, + }; + const netClient = new YaTsClient.NetApi.Client({ + BASE: `${this.basePath}/net-api/v1`, + HEADERS: commonHeaders, + }); + this.net = netClient.requestor; + const gsbClient = new YaTsClient.GsbApi.Client({ + BASE: `${this.basePath}/gsb-api/v1`, + HEADERS: commonHeaders, + }); + this.gsb = gsbClient.requestor; + this.logger = (options === null || options === void 0 ? void 0 : options.logger) ? options.logger.child("yagna") : defaultLogger("yagna"); + const identityClient = new YaTsClient.IdentityApi.Client({ + BASE: this.basePath, + HEADERS: commonHeaders, + }); + this.identity = identityClient.default; + const versionClient = new YaTsClient.VersionApi.Client({ + BASE: this.basePath, + }); + this.version = versionClient.default; + this.yagnaOptions = yagnaOptions; + this.appSessionId = v4(); + this.reader = new EventReader(this.logger); + } + /** + * Effectively starts the Yagna API client including subscribing to events exposed via rxjs subjects + */ + async connect() { + this.logger.debug("Connecting to Yagna"); + const version = await this.assertSupportedVersion(); + const identity = await this.identity.getIdentity(); + this.startPollingEvents(); + this.logger.info("Connected to Yagna", { version, identity: identity.identity }); + return identity; + } + /** + * Terminates the Yagna API related activities + */ + async disconnect() { + this.logger.debug("Disconnecting from Yagna"); + await this.stopPollingEvents(); + this.logger.info("Disconnected from Yagna"); + } + async getVersion() { + try { + const res = await this.version.getVersion(); + return res.current.version; + } + catch (err) { + throw new GolemPlatformError(`Failed to establish yagna version due to: ${err}`, err); + } + } + startPollingEvents() { + this.logger.debug("Starting to poll for events from Yagna", { appSessionId: this.appSessionId }); + const pollIntervalSec = 5; + const maxEvents = 100; + this.agreementEventsPoll = this.reader.createReader("AgreementEvents", (lastEventTimestamp) => this.market.collectAgreementEvents(pollIntervalSec, lastEventTimestamp, maxEvents, this.appSessionId)); + this.debitNoteEventsPoll = this.reader.createReader("DebitNoteEvents", (lastEventTimestamp) => { + return this.payment.getDebitNoteEvents(pollIntervalSec, lastEventTimestamp, maxEvents, this.appSessionId); + }); + this.invoiceEventPoll = this.reader.createReader("InvoiceEvents", (lastEventTimestamp) => this.payment.getInvoiceEvents(pollIntervalSec, lastEventTimestamp, maxEvents, this.appSessionId)); + // Run the readers and don't block execution + this.reader + .pollToSubject(this.agreementEventsPoll.pollValues(), this.agreementEvents$) + .then(() => this.logger.debug("Finished polling agreement events from Yagna")) + .catch((err) => this.logger.error("Error while polling agreement events from Yagna", err)); + this.reader + .pollToSubject(this.debitNoteEventsPoll.pollValues(), this.debitNoteEvents$) + .then(() => this.logger.debug("Finished polling debit note events from Yagna")) + .catch((err) => this.logger.error("Error while polling debit note events from Yagna", err)); + this.reader + .pollToSubject(this.invoiceEventPoll.pollValues(), this.invoiceEvents$) + .then(() => this.logger.debug("Finished polling invoice events from Yagna")) + .catch((err) => this.logger.error("Error while polling invoice events from Yagna", err)); + } + async stopPollingEvents() { + this.logger.debug("Stopping polling events from Yagna"); + const promises = []; + if (this.invoiceEventPoll) { + promises.push(this.invoiceEventPoll.cancel()); + } + if (this.debitNoteEventsPoll) { + promises.push(this.debitNoteEventsPoll.cancel()); + } + if (this.agreementEventsPoll) { + promises.push(this.agreementEventsPoll.cancel()); + } + await Promise.allSettled(promises); + this.logger.debug("Stopped polling events from Yagna"); + } + async assertSupportedVersion() { + const version = await this.getVersion(); + const normVersion = semverCoerce(version); + this.logger.debug("Checking Yagna version support", { + userInstalled: normVersion === null || normVersion === void 0 ? void 0 : normVersion.raw, + minSupported: MIN_SUPPORTED_YAGNA, + }); + if (!normVersion) { + throw new GolemPlatformError(`Unreadable yagna version '${version}'. Can't proceed without checking yagna version support status.`); + } + if (!semverSatisfies(normVersion, `>=${MIN_SUPPORTED_YAGNA}`)) { + throw new GolemPlatformError(`You run yagna in version ${version} and the minimal version supported by the SDK is ${MIN_SUPPORTED_YAGNA}. ` + + `Please consult the golem-js README to find matching SDK version or upgrade your yagna installation.`); + } + return normVersion.version; + } +} + +/** + * If provided an AbortSignal, returns it. + * If provided a number, returns an AbortSignal that will be aborted after the specified number of milliseconds. + * If provided undefined, returns an AbortSignal that will never be aborted. + */ +function createAbortSignalFromTimeout(timeoutOrSignal) { + if (timeoutOrSignal instanceof AbortSignal) { + return timeoutOrSignal; + } + if (typeof timeoutOrSignal === "number") { + return AbortSignal.timeout(timeoutOrSignal); + } + return new AbortController().signal; +} +/** + * Combine multiple AbortSignals into a single signal that will be aborted if any + * of the input signals are aborted. If any of the input signals are already aborted, + * the returned signal will be aborted immediately. + * + * Polyfill for AbortSignal.any(), since it's only available starting in Node 20 + * https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static + * + * The function returns a signal and a cleanup function that allows you + * to remove listeners when they are no longer needed. + */ +function anyAbortSignal(...signals) { + const controller = new AbortController(); + const onAbort = (ev) => { + if (controller.signal.aborted) + return; + const reason = ev.target.reason; + controller.abort(reason); + }; + for (const signal of signals) { + if (signal.aborted) { + controller.abort(signal.reason); + break; + } + signal.addEventListener("abort", onAbort); + } + const cleanup = () => { + for (const signal of signals) { + signal.removeEventListener("abort", onAbort); + } + }; + return { signal: controller.signal, cleanup }; +} + +/** + * Run a callback on the next event loop iteration ("promote" a microtask to a task using setTimeout). + * Note that this is not guaranteed to run on the very next iteration, but it will run as soon as possible. + * This function is designed to avoid the problem of microtasks queueing other microtasks in an infinite loop. + * See the example below for a common pitfall that this function can help avoid. + * Learn more about microtasks and their relation to async/await here: + * https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide/In_depth + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#control_flow_effects_of_await + * @param cb The callback to run on the next event loop iteration. + * @example + * ```ts + * const signal = AbortSignal.timeout(1_000); + * // This loop will run for 1 second, then stop. + * while (!signal.aborted) { + * await runOnNextEventLoopIteration(() => Promise.resolve()); + * } + * + * const signal = AbortSignal.timeout(1_000); + * // This loop will run indefinitely. + * // Each while loop iteration queues a microtask, which itself queues another microtask, and so on. + * while (!signal.aborted) { + * await Promise.resolve(); + * } + * ``` + */ +function runOnNextEventLoopIteration(cb) { + return new Promise((resolve, reject) => { + setTimeout(() => cb().then(resolve).catch(reject)); + }); +} + +/** + * Merges two observables until the first one completes (or errors). + * The difference between this and `merge` is that this will complete when the first observable completes, + * while `merge` would only complete when _all_ observables complete. + */ +function mergeUntilFirstComplete(observable1, observable2) { + const completionSubject = new Subject(); + const observable1WithCompletion = observable1.pipe(takeUntil(completionSubject), finalize(() => completionSubject.next())); + const observable2WithCompletion = observable2.pipe(takeUntil(completionSubject), finalize(() => completionSubject.next())); + return observable1WithCompletion.pipe(mergeWith(observable2WithCompletion)); +} + +class DemandSpecification { + constructor( + /** Represents the low level demand request body that will be used to subscribe for offers matching our "computational resource needs" */ + prototype, paymentPlatform) { + this.prototype = prototype; + this.paymentPlatform = paymentPlatform; + } +} +class Demand { + constructor(id, details) { + this.id = id; + this.details = details; + } + get paymentPlatform() { + return this.details.paymentPlatform; + } +} + +var MarketErrorCode; +(function (MarketErrorCode) { + MarketErrorCode["CouldNotGetAgreement"] = "CouldNotGetAgreement"; + MarketErrorCode["CouldNotGetProposal"] = "CouldNotGetProposal"; + MarketErrorCode["ServiceNotInitialized"] = "ServiceNotInitialized"; + MarketErrorCode["MissingAllocation"] = "MissingAllocation"; + MarketErrorCode["SubscriptionFailed"] = "SubscriptionFailed"; + MarketErrorCode["InvalidProposal"] = "InvalidProposal"; + MarketErrorCode["ProposalResponseFailed"] = "ProposalResponseFailed"; + MarketErrorCode["ProposalRejectionFailed"] = "ProposalRejectionFailed"; + MarketErrorCode["DemandExpired"] = "DemandExpired"; + MarketErrorCode["ResourceRentalTerminationFailed"] = "ResourceRentalTerminationFailed"; + MarketErrorCode["ResourceRentalCreationFailed"] = "ResourceRentalCreationFailed"; + MarketErrorCode["AgreementApprovalFailed"] = "AgreementApprovalFailed"; + MarketErrorCode["NoProposalAvailable"] = "NoProposalAvailable"; + MarketErrorCode["InternalError"] = "InternalError"; + MarketErrorCode["ScanFailed"] = "ScanFailed"; +})(MarketErrorCode || (MarketErrorCode = {})); +class GolemMarketError extends GolemModuleError { + constructor(message, code, previous) { + super(message, code, previous); + this.code = code; + this.previous = previous; + } +} + +/** + * Base representation of a market proposal that can be issued either by the Provider (offer proposal) + * or Requestor (counter-proposal) + */ +class MarketProposal { + constructor(model) { + var _a; + this.model = model; + /** + * Reference to the previous proposal in the "negotiation chain" + * + * If null, this means that was the initial offer that the negotiations started from + */ + this.previousProposalId = null; + this.id = model.proposalId; + this.previousProposalId = (_a = model.prevProposalId) !== null && _a !== void 0 ? _a : null; + this.properties = model.properties; + } + get state() { + return this.model.state; + } + get timestamp() { + return new Date(Date.parse(this.model.timestamp)); + } + isInitial() { + return this.model.state === "Initial"; + } + isDraft() { + return this.model.state === "Draft"; + } + isExpired() { + return this.model.state === "Expired"; + } + isRejected() { + return this.model.state === "Rejected"; + } + isValid() { + try { + this.validate(); + return true; + } + catch (err) { + return false; + } + } +} + +/** + * Entity representing the offer presented by the Provider to the Requestor + * + * Issue: The final proposal that gets promoted to an agreement comes from the provider + * Right now the last time I can access it directly is when I receive the counter from the provider, + * later it's impossible for me to get it via the API `{"message":"Path deserialize error: Id [2cb0b2820c6142fab5af7a8e90da09f0] has invalid owner type."}` + * + * FIXME #yagna should allow obtaining proposals via the API even if I'm not the owner! + */ +class OfferProposal extends MarketProposal { + constructor(model, demand) { + super(model); + this.demand = demand; + this.issuer = "Provider"; + this.validate(); + } + get pricing() { + var _a, _b; + const usageVector = this.properties["golem.com.usage.vector"]; + const priceVector = this.properties["golem.com.pricing.model.linear.coeffs"]; + if (!usageVector) { + throw new GolemInternalError("The proposal does not contain 'golem.com.usage.vector' property. We can't estimate the costs."); + } + if (!priceVector) { + throw new GolemInternalError("The proposal does not contain 'golem.com.pricing.model.linear.coeffs' property. We can't estimate costs."); + } + const envIdx = usageVector.findIndex((ele) => ele === "golem.usage.duration_sec"); + const cpuIdx = usageVector.findIndex((ele) => ele === "golem.usage.cpu_sec"); + const envSec = (_a = priceVector[envIdx]) !== null && _a !== void 0 ? _a : 0.0; + const cpuSec = (_b = priceVector[cpuIdx]) !== null && _b !== void 0 ? _b : 0.0; + const start = priceVector[priceVector.length - 1]; + return { + cpuSec, + envSec, + start, + }; + } + getDto() { + return { + transferProtocol: this.properties["golem.activity.caps.transfer.protocol"], + cpuBrand: this.properties["golem.inf.cpu.brand"], + cpuCapabilities: this.properties["golem.inf.cpu.capabilities"], + cpuCores: this.properties["golem.inf.cpu.cores"], + cpuThreads: this.properties["golem.inf.cpu.threads"], + memory: this.properties["golem.inf.mem.gib"], + storage: this.properties["golem.inf.storage.gib"], + publicNet: this.properties["golem.node.net.is-public"], + runtimeCapabilities: this.properties["golem.runtime.capabilities"], + runtimeName: this.properties["golem.runtime.name"], + runtimeVersion: this.properties["golem.runtime.version"], + state: this.state, + }; + } + /** + * Cost estimation based on CPU/h, ENV/h and start prices + * + * @param rentHours Number of hours of rental to use for the estimation + */ + getEstimatedCost(rentHours = 1) { + var _a; + const threadsNo = (_a = this.getDto().cpuThreads) !== null && _a !== void 0 ? _a : 1; + const rentSeconds = rentHours * 60 * 60; + return this.pricing.start + this.pricing.cpuSec * threadsNo * rentSeconds + this.pricing.envSec * rentSeconds; + } + get provider() { + return { + id: this.model.issuerId, + name: this.properties["golem.node.id.name"], + walletAddress: this.properties[`golem.com.payment.platform.${this.demand.paymentPlatform}.address`], + }; + } + /** + * Validates if the proposal satisfies basic business rules, is complete and thus safe to interact with + * + * Use this method before executing any important logic, to ensure that you're working with correct, complete data + */ + validate() { + const usageVector = this.properties["golem.com.usage.vector"]; + const priceVector = this.properties["golem.com.pricing.model.linear.coeffs"]; + if (!usageVector || usageVector.length === 0) { + throw new GolemMarketError("Broken proposal: the `golem.com.usage.vector` does not contain valid information about structure of the usage counters vector", MarketErrorCode.InvalidProposal); + } + if (!priceVector || priceVector.length === 0) { + throw new GolemMarketError("Broken proposal: the `golem.com.pricing.model.linear.coeffs` does not contain pricing information", MarketErrorCode.InvalidProposal); + } + if (usageVector.length < priceVector.length - 1) { + throw new GolemMarketError("Broken proposal: the `golem.com.usage.vector` has less pricing information than `golem.com.pricing.model.linear.coeffs`", MarketErrorCode.InvalidProposal); + } + if (priceVector.length < usageVector.length) { + throw new GolemMarketError("Broken proposal: the `golem.com.pricing.model.linear.coeffs` should contain 3 price values", MarketErrorCode.InvalidProposal); + } + } + getProviderPaymentPlatforms() { + return (Object.keys(this.properties) + .filter((prop) => prop.startsWith("golem.com.payment.platform.")) + .map((prop) => prop.split(".")[4]) || []); + } +} + +/** + * `Promise.withResolvers` is only available in Node 22.0.0 and later. + */ +function withResolvers() { + let resolve; + let reject; + const promise = new Promise((_resolve, _reject) => { + resolve = _resolve; + reject = _reject; + }); + return { resolve, reject, promise }; +} +/** + * A queue of acquirers waiting for an item. + * use `get` to queue up for the next available item. + * use `put` to give the item to the next acquirer. + */ +class AcquireQueue { + constructor() { + this.queue = []; + this.abortController = new AbortController(); + } + /** + * Release (reject) all acquirers. + * Essentially this is a way to reset the queue. + */ + releaseAll() { + this.abortController.abort(); + this.queue = []; + this.abortController = new AbortController(); + } + /** + * Queue up for the next available item. + */ + async get(signalOrTimeout) { + const { signal, cleanup } = anyAbortSignal(createAbortSignalFromTimeout(signalOrTimeout), this.abortController.signal); + signal.throwIfAborted(); + const { resolve, promise } = withResolvers(); + this.queue.push(resolve); + const abortPromise = new Promise((_, reject) => { + signal.addEventListener("abort", () => { + this.queue = this.queue.filter((r) => r !== resolve); + reject(signal.reason); + }); + }); + return Promise.race([promise, abortPromise]).finally(cleanup); + } + /** + * Are there any acquirers waiting for an item? + */ + hasAcquirers() { + return this.queue.length > 0; + } + /** + * Give the item to the next acquirer. + * If there are no acquirers, throw an error. You should check `hasAcquirers` before calling this method. + */ + put(item) { + if (!this.hasAcquirers()) { + throw new GolemInternalError("No acquirers waiting for the item"); + } + const resolve = this.queue.shift(); + resolve(item); + } + size() { + return this.queue.length; + } +} + +/** + * Pool of draft offer proposals that are ready to be promoted to agreements with Providers + * + * Reaching this pool means that the related initial proposal which was delivered by Yagna in response + * to the subscription with the Demand has been fully negotiated between the Provider and Requestor. + * + * This pool should contain only offer proposals that can be used to pursue the final Agreement between the + * parties. + * + * Technically, the "market" part of you application should populate this pool with such offer proposals. + */ +class DraftOfferProposalPool { + constructor(options) { + this.options = options; + this.events = new EventEmitter(); + this.acquireQueue = new AcquireQueue(); + /** {@link ProposalPoolOptions.minCount} */ + this.minCount = 0; + /** {@link ProposalPoolOptions.selectOfferProposal} */ + this.selectOfferProposal = (proposals) => proposals[0]; + /** {@link ProposalPoolOptions.validateOfferProposal} */ + this.validateOfferProposal = (proposal) => proposal !== undefined; + /** + * The proposals that were not yet leased to anyone and are available for lease + */ + this.available = new Set(); + /** + * The proposal that were already leased to someone and shouldn't be leased again + */ + this.leased = new Set(); + if (options === null || options === void 0 ? void 0 : options.selectOfferProposal) { + this.selectOfferProposal = options.selectOfferProposal; + } + if (options === null || options === void 0 ? void 0 : options.validateOfferProposal) { + this.validateOfferProposal = options.validateOfferProposal; + } + if ((options === null || options === void 0 ? void 0 : options.minCount) && options.minCount >= 0) { + this.minCount = options.minCount; + } + this.logger = this.logger = (options === null || options === void 0 ? void 0 : options.logger) || defaultLogger("proposal-pool"); + } + /** + * Pushes the provided proposal to the list of proposals available for lease + */ + add(proposal) { + if (!proposal.isDraft()) { + this.logger.error("Cannot add a non-draft proposal to the pool", { proposalId: proposal.id }); + throw new GolemMarketError("Cannot add a non-draft proposal to the pool", MarketErrorCode.InvalidProposal); + } + // if someone is waiting for a proposal, give it to them + if (this.acquireQueue.hasAcquirers()) { + this.acquireQueue.put(proposal); + return; + } + this.available.add(proposal); + this.events.emit("added", { proposal }); + } + /** + * Attempts to obtain a single proposal from the pool + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the acquiring + */ + async acquire(signalOrTimeout) { + const signal = createAbortSignalFromTimeout(signalOrTimeout); + signal.throwIfAborted(); + // iterate over available proposals until we find a valid one + const tryGettingFromAvailable = async () => { + signal.throwIfAborted(); + const proposal = this.available.size > 0 ? this.selectOfferProposal([...this.available]) : null; + if (!proposal) { + // No proposal was selected, either `available` is empty or the user's proposal filter didn't select anything + // no point retrying + return; + } + if (!this.validateOfferProposal(proposal)) { + // Drop if not valid + this.removeFromAvailable(proposal); + // and try again + return runOnNextEventLoopIteration(tryGettingFromAvailable); + } + // valid proposal found + return proposal; + }; + const proposal = await tryGettingFromAvailable(); + // Try to get one + if (proposal) { + this.available.delete(proposal); + this.leased.add(proposal); + this.events.emit("acquired", { proposal }); + return proposal; + } + // if no valid proposal was found, wait for one to appear + return this.acquireQueue.get(signal); + } + /** + * Releases the proposal back to the pool + * + * Validates if the proposal is still usable before putting it back to the list of available ones + * @param proposal + */ + release(proposal) { + this.leased.delete(proposal); + if (this.validateOfferProposal(proposal)) { + this.events.emit("released", { proposal }); + // if someone is waiting for a proposal, give it to them + if (this.acquireQueue.hasAcquirers()) { + this.acquireQueue.put(proposal); + return; + } + // otherwise, put it back to the list of available proposals + this.available.add(proposal); + } + else { + this.events.emit("removed", { proposal }); + } + } + remove(proposal) { + if (this.leased.has(proposal)) { + this.leased.delete(proposal); + this.events.emit("removed", { proposal }); + } + if (this.available.has(proposal)) { + this.available.delete(proposal); + this.events.emit("removed", { proposal }); + } + } + /** + * Returns the number of all items in the pool (available + leased out) + */ + count() { + return this.availableCount() + this.leasedCount(); + } + /** + * Returns the number of items that are possible to lease from the pool + */ + availableCount() { + return this.available.size; + } + /** + * Returns the number of items that were leased out of the pool + */ + leasedCount() { + return this.leased.size; + } + /** + * Tells if the pool is ready to take items from + */ + isReady() { + return this.count() >= this.minCount; + } + /** + * Clears the pool entirely + */ + async clear() { + this.acquireQueue.releaseAll(); + for (const proposal of this.available) { + this.available.delete(proposal); + this.events.emit("removed", { proposal }); + } + for (const proposal of this.leased) { + this.leased.delete(proposal); + this.events.emit("removed", { proposal }); + } + this.available = new Set(); + this.leased = new Set(); + this.events.emit("cleared"); + } + removeFromAvailable(proposal) { + this.available.delete(proposal); + this.events.emit("removed", { proposal }); + } + readFrom(source) { + return source.subscribe({ + next: (proposal) => this.add(proposal), + error: (err) => this.logger.error("Error while collecting proposals", err), + }); + } +} + +class OfferCounterProposal extends MarketProposal { + constructor(model) { + super(model); + this.issuer = "Requestor"; + } + validate() { + return; + } +} + +const DEFAULTS$2 = { + minBatchSize: 100, + releaseTimeoutMs: 1000, +}; +/** + * Proposals Batch aggregates initial proposals and returns a set grouped by the provider's key + * to avoid duplicate offers issued by the provider. + */ +class ProposalsBatch { + constructor(options) { + var _a, _b; + /** Batch of proposals mapped by provider key and related set of initial proposals */ + this.batch = new Map(); + /** Lock used to synchronize adding and getting proposals from the batch */ + this.lock = new AsyncLock(); + this.config = { + minBatchSize: (_a = options === null || options === void 0 ? void 0 : options.minBatchSize) !== null && _a !== void 0 ? _a : DEFAULTS$2.minBatchSize, + releaseTimeoutMs: (_b = options === null || options === void 0 ? void 0 : options.releaseTimeoutMs) !== null && _b !== void 0 ? _b : DEFAULTS$2.releaseTimeoutMs, + }; + } + /** + * Add proposal to the batch grouped by provider key + * which consist of providerId, cores, threads, mem and storage + */ + async addProposal(proposal) { + const providerKey = this.getProviderKey(proposal); + await this.lock.acquire("proposals-batch", () => { + let proposals = this.batch.get(providerKey); + if (!proposals) { + proposals = new Set(); + this.batch.set(providerKey, proposals); + } + proposals.add(proposal); + }); + } + /** + * Returns the batched proposals from the internal buffer and empties it + */ + async getProposals() { + const proposals = []; + await this.lock.acquire("proposals-batch", () => { + this.batch.forEach((providersProposals) => proposals.push(this.getBestProposal(providersProposals))); + this.batch.clear(); + }); + return proposals; + } + /** + * Waits for the max amount time for batching or max batch size to be reached before it makes sense to process events + * + * Used to flow-control the consumption of the proposal events from the batch. + * The returned promise resolves when it is time to process the buffered proposal events. + */ + async waitForProposals() { + let timeoutId, intervalId; + const isTimeoutReached = new Promise((resolve) => { + timeoutId = setTimeout(resolve, this.config.releaseTimeoutMs); + }); + const isBatchSizeReached = new Promise((resolve) => { + intervalId = setInterval(() => { + if (this.batch.size >= this.config.minBatchSize) { + resolve(true); + } + }, 1000); + }); + await Promise.race([isTimeoutReached, isBatchSizeReached]); + clearTimeout(timeoutId); + clearInterval(intervalId); + } + /** + * Selects the best proposal from the set according to the lowest price and the youngest proposal age + */ + getBestProposal(proposals) { + const sortByLowerPriceAndHigherTime = (p1, p2) => { + const p1Price = p1.getEstimatedCost(); + const p2Price = p2.getEstimatedCost(); + const p1Time = p1.timestamp.valueOf(); + const p2Time = p2.timestamp.valueOf(); + return p1Price !== p2Price ? p1Price - p2Price : p2Time - p1Time; + }; + return [...proposals].sort(sortByLowerPriceAndHigherTime)[0]; + } + /** + * Provider key used to group proposals so that they can be distinguished based on ID and hardware configuration + */ + getProviderKey(proposal) { + return [ + proposal.provider.id, + proposal.properties["golem.inf.cpu.cores"], + proposal.properties["golem.inf.cpu.threads"], + proposal.properties["golem.inf.mem.gib"], + proposal.properties["golem.inf.storage.gib"], + ].join("-"); + } +} + +var ComparisonOperator; +(function (ComparisonOperator) { + ComparisonOperator["Eq"] = "="; + ComparisonOperator["Lt"] = "<"; + ComparisonOperator["Gt"] = ">"; + ComparisonOperator["GtEq"] = ">="; + ComparisonOperator["LtEq"] = "<="; +})(ComparisonOperator || (ComparisonOperator = {})); +/** + * A helper class assisting in building the Golem Demand object + * + * Various directors should use the builder to add properties and constraints before the final product is received + * from the builder and sent to yagna to subscribe for matched offers (proposals). + * + * The main purpose of the builder is to accept different requirements (properties and constraints) from different + * directors who know what kind of properties and constraints are needed. Then it helps to merge these requirements. + * + * Demand -> DemandSpecification -> DemandPrototype -> DemandDTO + */ +class DemandBodyBuilder { + constructor() { + this.properties = []; + this.constraints = []; + } + addProperty(key, value) { + const findIndex = this.properties.findIndex((prop) => prop.key === key); + if (findIndex >= 0) { + this.properties[findIndex] = { key, value }; + } + else { + this.properties.push({ key, value }); + } + return this; + } + addConstraint(key, value, comparisonOperator = ComparisonOperator.Eq) { + this.constraints.push({ key, value, comparisonOperator }); + return this; + } + getProduct() { + return { + properties: this.properties, + constraints: this.constraints.map((c) => `(${c.key + c.comparisonOperator + c.value})`), + }; + } + mergePrototype(prototype) { + if (prototype.properties) { + prototype.properties.forEach((prop) => { + this.addProperty(prop.key, prop.value); + }); + } + if (prototype.constraints) { + prototype.constraints.forEach((cons) => { + const { key, value, comparisonOperator } = { ...this.parseConstraint(cons) }; + this.addConstraint(key, value, comparisonOperator); + }); + } + return this; + } + parseConstraint(constraint) { + for (const key in ComparisonOperator) { + const value = ComparisonOperator[key]; + const parsedConstraint = constraint.slice(1, -1).split(value); + if (parsedConstraint.length === 2) { + return { + key: parsedConstraint[0], + value: parsedConstraint[1], + comparisonOperator: value, + }; + } + } + throw new GolemInternalError(`Unable to parse constraint "${constraint}"`); + } +} + +/** + * Basic config utility class + * + * Helps in building more specific config classes + */ +class BaseConfig { + isPositiveInt(value) { + return value > 0 && Number.isInteger(value); + } +} + +var PackageFormat; +(function (PackageFormat) { + PackageFormat["GVMKitSquash"] = "gvmkit-squash"; +})(PackageFormat || (PackageFormat = {})); +class WorkloadDemandDirectorConfig extends BaseConfig { + constructor(options) { + var _a; + super(); + this.packageFormat = PackageFormat.GVMKitSquash; + this.engine = "vm"; + this.runtime = { + name: "vm", + version: undefined, + }; + this.minMemGib = 0.5; + this.minStorageGib = 2; + this.minCpuThreads = 1; + this.minCpuCores = 1; + this.capabilities = []; + this.useHttps = false; + Object.assign(this, options); + if (!((_a = options.runtime) === null || _a === void 0 ? void 0 : _a.name)) { + this.runtime.name = this.engine; + } + this.expirationSec = options.expirationSec; + if (!this.imageHash && !this.manifest && !this.imageTag && !this.imageUrl) { + throw new GolemConfigError("You must define a package or manifest option"); + } + if (this.imageUrl && !this.imageHash) { + throw new GolemConfigError("If you provide an imageUrl, you must also provide it's SHA3-224 hash in imageHash"); + } + if (!this.isPositiveInt(this.expirationSec)) { + throw new GolemConfigError(`The expirationSec param has to be a positive integer, received: ${this.expirationSec}`); + } + if (options.engine && options.runtime) { + throw new GolemConfigError("The engine parameter is deprecated and cannot be used with the runtime parameter. Use the runtime option only"); + } + } +} + +class BasicDemandDirectorConfig extends BaseConfig { + constructor(options) { + super(); + this.subnetTag = getYagnaSubnet(); + if (options === null || options === void 0 ? void 0 : options.subnetTag) { + this.subnetTag = options.subnetTag; + } + } +} + +class BasicDemandDirector { + constructor(config = new BasicDemandDirectorConfig()) { + this.config = config; + } + apply(builder) { + builder + .addProperty("golem.srv.caps.multi-activity", true) + .addProperty("golem.node.debug.subnet", this.config.subnetTag); + builder + .addConstraint("golem.com.pricing.model", "linear") + .addConstraint("golem.node.debug.subnet", this.config.subnetTag); + } +} + +class PaymentDemandDirectorConfig extends BaseConfig { + constructor(options) { + super(); + this.debitNotesAcceptanceTimeoutSec = 2 * 60; // 2 minutes + this.midAgreementDebitNoteIntervalSec = 2 * 60; // 2 minutes + this.midAgreementPaymentTimeoutSec = 12 * 60 * 60; // 12 hours + if (options) { + Object.assign(this, options); + } + if (!this.isPositiveInt(this.debitNotesAcceptanceTimeoutSec)) { + throw new GolemConfigError("The debit note acceptance timeout time has to be a positive integer"); + } + if (!this.isPositiveInt(this.midAgreementDebitNoteIntervalSec)) { + throw new GolemConfigError("The debit note interval time has to be a positive integer"); + } + if (!this.isPositiveInt(this.midAgreementPaymentTimeoutSec)) { + throw new GolemConfigError("The mid-agreement payment timeout time has to be a positive integer"); + } + } +} + +class PaymentDemandDirector { + constructor(allocation, marketApiAdapter, config = new PaymentDemandDirectorConfig()) { + this.allocation = allocation; + this.marketApiAdapter = marketApiAdapter; + this.config = config; + } + async apply(builder) { + // Configure mid-agreement payments + builder + .addProperty("golem.com.scheme.payu.debit-note.interval-sec?", this.config.midAgreementDebitNoteIntervalSec) + .addProperty("golem.com.scheme.payu.payment-timeout-sec?", this.config.midAgreementPaymentTimeoutSec) + .addProperty("golem.com.payment.debit-notes.accept-timeout?", this.config.debitNotesAcceptanceTimeoutSec); + // Configure payment platform + const { constraints, properties } = await this.marketApiAdapter.getPaymentRelatedDemandDecorations(this.allocation.id); + builder.mergePrototype({ constraints, properties }); + } +} + +class WorkloadDemandDirector { + constructor(config) { + this.config = config; + } + async apply(builder) { + builder.addProperty("golem.srv.comp.expiration", Date.now() + this.config.expirationSec * 1000); + builder + .addProperty("golem.srv.comp.vm.package_format", this.config.packageFormat) + .addConstraint("golem.runtime.name", this.config.runtime.name); + if (this.config.runtime.version) { + builder.addConstraint("golem.runtime.version", this.config.runtime.version); + } + if (this.config.capabilities.length) + this.config.capabilities.forEach((cap) => builder.addConstraint("golem.runtime.capabilities", cap)); + builder + .addConstraint("golem.inf.mem.gib", this.config.minMemGib, ComparisonOperator.GtEq) + .addConstraint("golem.inf.storage.gib", this.config.minStorageGib, ComparisonOperator.GtEq) + .addConstraint("golem.inf.cpu.cores", this.config.minCpuCores, ComparisonOperator.GtEq) + .addConstraint("golem.inf.cpu.threads", this.config.minCpuThreads, ComparisonOperator.GtEq); + if (this.config.imageUrl) { + const taskPackage = await this.resolveTaskPackageFromCustomUrl(); + builder.addProperty("golem.srv.comp.task_package", taskPackage); + } + else if (this.config.imageHash || this.config.imageTag) { + const taskPackage = await this.resolveTaskPackageUrl(); + builder.addProperty("golem.srv.comp.task_package", taskPackage); + } + this.addManifestDecorations(builder); + } + async resolveTaskPackageFromCustomUrl() { + if (!this.config.imageUrl) { + throw new GolemPlatformError("Tried to resolve task package from custom url, but no url was provided"); + } + if (!this.config.imageHash) { + throw new GolemPlatformError("Tried to resolve task package from custom url, but no hash was provided. Please calculate the SHA3-224 hash of the image and provide it as `imageHash`"); + } + return `hash:sha3:${this.config.imageHash}:${this.config.imageUrl}`; + } + async resolveTaskPackageUrl() { + const repoUrl = getRepoUrl(); + const useHttps = this.config.useHttps; + const isDev = isDevMode(); + let hash = this.config.imageHash; + const tag = this.config.imageTag; + const url = `${repoUrl}/v1/image/info?${isDev ? "dev=true" : "count=true"}&${tag ? `tag=${tag}` : `hash=${hash}`}`; + try { + const response = await fetch(url); + if (!response.ok) { + throw new GolemPlatformError(`Unable to get image ${await response.text()}`); + } + const data = await response.json(); + const imageUrl = useHttps ? data.https : data.http; + hash = data.sha3; + return `hash:sha3:${hash}:${imageUrl}`; + } + catch (error) { + if (error instanceof GolemError) + throw error; + throw new GolemPlatformError(`Failed to fetch image: ${error}`); + } + } + addManifestDecorations(builder) { + if (!this.config.manifest) + return; + builder.addProperty("golem.srv.comp.payload", this.config.manifest); + if (this.config.manifestSig) + builder.addProperty("golem.srv.comp.payload.sig", this.config.manifestSig); + if (this.config.manifestSigAlgorithm) + builder.addProperty("golem.srv.comp.payload.sig.algorithm", this.config.manifestSigAlgorithm); + if (this.config.manifestCert) + builder.addProperty("golem.srv.comp.payload.cert", this.config.manifestCert); + } +} + +class ScanDirector { + constructor(options) { + this.options = options; + } + async apply(builder) { + this.addWorkloadDecorations(builder); + this.addGenericDecorations(builder); + this.addPaymentDecorations(builder); + } + addPaymentDecorations(builder) { + if (!this.options.payment) + return; + const network = this.options.payment.network; + const driver = this.options.payment.driver || "erc20"; + const token = this.options.payment.token || ["mainnet", "polygon"].includes(network) ? "glm" : "tglm"; + builder.addConstraint(`golem.com.payment.platform.${driver}-${network}-${token}.address`, "*"); + } + addWorkloadDecorations(builder) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1; + if (((_a = this.options.workload) === null || _a === void 0 ? void 0 : _a.engine) && ((_b = this.options.workload) === null || _b === void 0 ? void 0 : _b.runtime)) { + throw new GolemConfigError("The engine parameter is deprecated and cannot be used with the runtime parameter. Use the runtime parameter only"); + } + /** @deprecated */ + if ((_c = this.options.workload) === null || _c === void 0 ? void 0 : _c.engine) { + builder.addConstraint("golem.runtime.name", (_d = this.options.workload) === null || _d === void 0 ? void 0 : _d.engine); + } + if ((_f = (_e = this.options.workload) === null || _e === void 0 ? void 0 : _e.runtime) === null || _f === void 0 ? void 0 : _f.name) { + builder.addConstraint("golem.runtime.name", this.options.workload.runtime.name); + } + if ((_h = (_g = this.options.workload) === null || _g === void 0 ? void 0 : _g.runtime) === null || _h === void 0 ? void 0 : _h.version) { + builder.addConstraint("golem.runtime.version", this.options.workload.runtime.version); + } + if ((_j = this.options.workload) === null || _j === void 0 ? void 0 : _j.capabilities) + (_k = this.options.workload) === null || _k === void 0 ? void 0 : _k.capabilities.forEach((cap) => builder.addConstraint("golem.runtime.capabilities", cap)); + if ((_l = this.options.workload) === null || _l === void 0 ? void 0 : _l.minMemGib) { + builder.addConstraint("golem.inf.mem.gib", (_m = this.options.workload) === null || _m === void 0 ? void 0 : _m.minMemGib, ComparisonOperator.GtEq); + } + if ((_o = this.options.workload) === null || _o === void 0 ? void 0 : _o.maxMemGib) { + builder.addConstraint("golem.inf.mem.gib", (_p = this.options.workload) === null || _p === void 0 ? void 0 : _p.maxMemGib, ComparisonOperator.LtEq); + } + if ((_q = this.options.workload) === null || _q === void 0 ? void 0 : _q.minStorageGib) { + builder.addConstraint("golem.inf.storage.gib", (_r = this.options.workload) === null || _r === void 0 ? void 0 : _r.minStorageGib, ComparisonOperator.GtEq); + } + if ((_s = this.options.workload) === null || _s === void 0 ? void 0 : _s.maxStorageGib) { + builder.addConstraint("golem.inf.storage.gib", (_t = this.options.workload) === null || _t === void 0 ? void 0 : _t.maxStorageGib, ComparisonOperator.LtEq); + } + if ((_u = this.options.workload) === null || _u === void 0 ? void 0 : _u.minCpuThreads) { + builder.addConstraint("golem.inf.cpu.threads", (_v = this.options.workload) === null || _v === void 0 ? void 0 : _v.minCpuThreads, ComparisonOperator.GtEq); + } + if ((_w = this.options.workload) === null || _w === void 0 ? void 0 : _w.maxCpuThreads) { + builder.addConstraint("golem.inf.cpu.threads", (_x = this.options.workload) === null || _x === void 0 ? void 0 : _x.maxCpuThreads, ComparisonOperator.LtEq); + } + if ((_y = this.options.workload) === null || _y === void 0 ? void 0 : _y.minCpuCores) { + builder.addConstraint("golem.inf.cpu.cores", (_z = this.options.workload) === null || _z === void 0 ? void 0 : _z.minCpuCores, ComparisonOperator.GtEq); + } + if ((_0 = this.options.workload) === null || _0 === void 0 ? void 0 : _0.maxCpuCores) { + builder.addConstraint("golem.inf.cpu.cores", (_1 = this.options.workload) === null || _1 === void 0 ? void 0 : _1.maxCpuCores, ComparisonOperator.LtEq); + } + } + addGenericDecorations(builder) { + if (this.options.subnetTag) { + builder.addConstraint("golem.node.debug.subnet", this.options.subnetTag); + } + } +} + +class ScannedOffer { + constructor(model) { + this.model = model; + } + get properties() { + return this.model.properties; + } + get constraints() { + return this.model.constraints; + } + get pricing() { + var _a, _b; + const usageVector = this.properties["golem.com.usage.vector"]; + const priceVector = this.properties["golem.com.pricing.model.linear.coeffs"]; + if (!usageVector) { + throw new GolemInternalError("The proposal does not contain 'golem.com.usage.vector' property. We can't estimate the costs."); + } + if (!priceVector) { + throw new GolemInternalError("The proposal does not contain 'golem.com.pricing.model.linear.coeffs' property. We can't estimate costs."); + } + const envIdx = usageVector.findIndex((ele) => ele === "golem.usage.duration_sec"); + const cpuIdx = usageVector.findIndex((ele) => ele === "golem.usage.cpu_sec"); + const envSec = (_a = priceVector[envIdx]) !== null && _a !== void 0 ? _a : 0.0; + const cpuSec = (_b = priceVector[cpuIdx]) !== null && _b !== void 0 ? _b : 0.0; + const start = priceVector[priceVector.length - 1]; + return { + cpuSec, + envSec, + start, + }; + } + get provider() { + return { + id: this.model.providerId, + name: this.properties["golem.node.id.name"] || "", + }; + } + get transferProtocol() { + return this.properties["golem.activity.caps.transfer.protocol"]; + } + get cpuBrand() { + return this.properties["golem.inf.cpu.brand"]; + } + get cpuVendor() { + return this.properties["golem.inf.cpu.vendor"]; + } + get cpuCapabilities() { + return this.properties["golem.inf.cpu.capabilities"]; + } + get cpuCores() { + return this.properties["golem.inf.cpu.cores"]; + } + get cpuThreads() { + return this.properties["golem.inf.cpu.threads"]; + } + get gpuBrand() { + return this.properties["golem.!exp.gap-35.v1.inf.gpu.model"]; + } + /** @deprecated Use {@link memoryGib} instead */ + get memory() { + return this.memoryGib; + } + get memoryGib() { + return this.properties["golem.inf.mem.gib"]; + } + /** @deprecated Use {@link storageGib} instead */ + get storage() { + return this.storageGib; + } + get storageGib() { + return this.properties["golem.inf.storage.gib"]; + } + get publicNet() { + return this.properties["golem.node.net.is-public"]; + } + get runtimeCapabilities() { + return this.properties["golem.runtime.capabilities"]; + } + get runtimeName() { + return this.properties["golem.runtime.name"]; + } + get runtimeVersion() { + return this.properties["golem.runtime.version"]; + } + /** + * Get the ID of the offer published by the Provider + * + * Note: + * - this ID will change after the provider refreshes the offer (usually after 1h) + * - this ID will remain unchanged for the same published offer between different scans + */ + get offerId() { + return this.model.offerId; + } + /** + * The timestamp at which the offer was generated by the Provider + */ + get offerCreateAt() { + return this.model.timestamp; + } + /** + * Lists down payment addresses on different payment platforms + * + * @example Example return value + * ```json + * { + * "erc20-polygon-glm": "0x8737beea5668595fda9d50e85cae9cad10b4c980", + * "erc20-holesky-tglm:" "0x8737beea5668595fda9d50e85cae9cad10b4c980", + * } + * ``` + */ + get paymentPlatformAddresses() { + const propRegex = /golem\.com\.payment\.platform\.([a-z0-9-]+)\.address/; + const platformAddress = Object.entries(this.model.properties) + .map(([key, address]) => { + const match = key.match(propRegex); + return [match ? match[1] : "", address]; + }) + .filter(([key]) => !!key); + return Object.fromEntries(platformAddress); + } + /** + * Cost estimation based on CPU/h, ENV/h and start prices + * + * @param rentHours Number of hours of rental to use for the estimation + */ + getEstimatedCost(rentHours = 1) { + const threadsNo = this.cpuThreads; + const rentSeconds = rentHours * 60 * 60; + return this.pricing.start + this.pricing.cpuSec * threadsNo * rentSeconds + this.pricing.envSec * rentSeconds; + } +} + +class MarketModuleImpl { + constructor(deps, options) { + this.deps = deps; + this.events = new EventEmitter(); + this.logger = defaultLogger("market"); + this.logger = deps.logger; + this.marketApi = deps.marketApi; + this.fileServer = deps.fileServer; + this.options = { + ...{ demandRefreshIntervalSec: 30 * 60 }, + ...options, + }; + this.collectAndEmitAgreementEvents(); + } + async buildDemandDetails(demandOptions, orderOptions, allocation) { + const builder = new DemandBodyBuilder(); + // Instruct the builder what's required + const basicConfig = new BasicDemandDirectorConfig({ + subnetTag: demandOptions.subnetTag, + }); + const basicDirector = new BasicDemandDirector(basicConfig); + basicDirector.apply(builder); + const workloadOptions = demandOptions.workload + ? await this.applyLocalGVMIServeSupport(demandOptions.workload) + : demandOptions.workload; + const expirationSec = Math.round(orderOptions.rentHours * 60 * 60); + /** + * Default value on providers for MIN_AGREEMENT_EXPIRATION = 5min. + * This means that if the user declares a rentHours time of less than 5 min, + * offers will be rejected during negotiations with these providers. + */ + const MIN_EXPIRATION_SEC_WARN = 5 * 60; + if (expirationSec < MIN_EXPIRATION_SEC_WARN) { + this.logger.warn("The declared value of rentHours is less than 5 min. This may cause offers to be rejected during negotiations."); + } + const workloadConfig = new WorkloadDemandDirectorConfig({ + ...workloadOptions, + expirationSec, + }); + const workloadDirector = new WorkloadDemandDirector(workloadConfig); + await workloadDirector.apply(builder); + const paymentConfig = new PaymentDemandDirectorConfig(demandOptions.payment); + const paymentDirector = new PaymentDemandDirector(allocation, this.deps.marketApi, paymentConfig); + await paymentDirector.apply(builder); + return new DemandSpecification(builder.getProduct(), allocation.paymentPlatform); + } + buildScanSpecification(options) { + const builder = new DemandBodyBuilder(); + const director = new ScanDirector(options); + director.apply(builder); + return builder.getProduct(); + } + /** + * Augments the user-provided options with additional logic + * + * Use Case: serve the GVMI from the requestor and avoid registry + */ + async applyLocalGVMIServeSupport(options) { + var _a, _b, _c; + if ((_a = options.imageUrl) === null || _a === void 0 ? void 0 : _a.startsWith("file://")) { + const sourcePath = (_b = options.imageUrl) === null || _b === void 0 ? void 0 : _b.replace("file://", ""); + const publishInfo = (_c = this.fileServer.getPublishInfo(sourcePath)) !== null && _c !== void 0 ? _c : (await this.fileServer.publishFile(sourcePath)); + const { fileUrl: imageUrl, fileHash: imageHash } = publishInfo; + this.logger.debug("Applied local GVMI serve support", { + sourcePath, + publishInfo, + }); + return { + ...options, + imageUrl, + imageHash, + }; + } + return options; + } + /** + * Publishes the specified demand and re-publishes it based on demandSpecification.expirationSec interval + */ + publishAndRefreshDemand(demandSpecification) { + return new Observable((subscriber) => { + let currentDemand; + const subscribeToOfferProposals = async () => { + try { + currentDemand = await this.deps.marketApi.publishDemandSpecification(demandSpecification); + subscriber.next(currentDemand); + this.events.emit("demandSubscriptionStarted", { + demand: currentDemand, + }); + this.logger.debug("Subscribing for proposals matched with the demand", { demand: currentDemand }); + return currentDemand; + } + catch (err) { + const golemMarketError = new GolemMarketError(`Could not publish demand on the market`, MarketErrorCode.SubscriptionFailed, err); + subscriber.error(golemMarketError); + } + }; + const unsubscribeFromOfferProposals = async (demand) => { + try { + await this.deps.marketApi.unpublishDemand(demand); + this.logger.info("Unpublished demand", { demandId: demand.id }); + this.logger.debug("Unpublished demand", demand); + this.events.emit("demandSubscriptionStopped", { + demand, + }); + } + catch (err) { + const golemMarketError = new GolemMarketError(`Could not publish demand on the market`, MarketErrorCode.SubscriptionFailed, err); + subscriber.error(golemMarketError); + } + }; + void subscribeToOfferProposals(); + const interval = setInterval(() => { + Promise.all([unsubscribeFromOfferProposals(currentDemand), subscribeToOfferProposals()]) + .then(([, demand]) => { + if (demand) { + this.events.emit("demandSubscriptionRefreshed", { + demand, + }); + this.logger.info("Refreshed subscription for offer proposals with the new demand", { demand }); + } + }) + .catch((err) => { + this.logger.error("Error while re-publishing demand for offers", err); + subscriber.error(err); + }); + }, this.options.demandRefreshIntervalSec * 1000); + return () => { + clearInterval(interval); + if (currentDemand) { + void unsubscribeFromOfferProposals(currentDemand); + } + }; + }); + } + collectMarketProposalEvents(demand) { + return this.deps.marketApi.collectMarketProposalEvents(demand).pipe(tap((event) => this.logger.debug("Received demand offer event from yagna", { event })), tap((event) => this.emitMarketProposalEvents(event))); + } + collectAllOfferProposals(demand) { + return this.collectMarketProposalEvents(demand).pipe(filter((event) => event.type === "ProposalReceived"), map((event) => event.proposal)); + } + async negotiateProposal(offerProposal, counterDemand) { + try { + const counterProposal = await this.deps.marketApi.counterProposal(offerProposal, counterDemand); + this.logger.debug("Counter proposal sent", counterProposal); + this.events.emit("offerCounterProposalSent", { + offerProposal, + counterProposal, + }); + return counterProposal; + } + catch (error) { + this.events.emit("errorSendingCounterProposal", { + offerProposal, + error, + }); + throw error; + } + } + async proposeAgreement(proposal, options) { + const agreement = await this.marketApi.proposeAgreement(proposal, options); + this.logger.info("Proposed and got approval for agreement", { + agreementId: agreement.id, + provider: agreement.provider, + }); + return agreement; + } + async terminateAgreement(agreement, reason) { + await this.marketApi.terminateAgreement(agreement, reason); + this.logger.info("Terminated agreement", { + agreementId: agreement.id, + provider: agreement.provider, + reason, + }); + return agreement; + } + collectDraftOfferProposals(options) { + return this.publishAndRefreshDemand(options.demandSpecification).pipe( + // For each fresh demand, start to watch the related market conversation events + switchMap((freshDemand) => this.collectMarketProposalEvents(freshDemand)), + // Select only events for proposal received + filter((event) => event.type === "ProposalReceived"), + // Convert event to proposal + map((event) => event.proposal), + // We are interested only in Initial and Draft proposals, that are valid + filter((proposal) => (proposal.isInitial() || proposal.isDraft()) && proposal.isValid()), + // If they are accepted by the pricing criteria + filter((proposal) => this.filterProposalsByPricingOptions(options.pricing, proposal)), + // If they are accepted by the user filter + filter((proposal) => ((options === null || options === void 0 ? void 0 : options.filter) ? this.filterProposalsByUserFilter(options.filter, proposal) : true)), + // Batch initial proposals and deduplicate them by provider key, pass-though proposals in other states + this.reduceInitialProposalsByProviderKey({ + minProposalsBatchSize: options === null || options === void 0 ? void 0 : options.minProposalsBatchSize, + proposalsBatchReleaseTimeoutMs: options === null || options === void 0 ? void 0 : options.proposalsBatchReleaseTimeoutMs, + }), + // Tap-in negotiator logic and negotiate initial proposals + tap((proposal) => { + if (proposal.isInitial()) { + this.negotiateProposal(proposal, options.demandSpecification).catch((err) => this.logger.error("Failed to negotiate the proposal", err)); + } + }), + // Continue only with drafts + filter((proposal) => proposal.isDraft())); + } + emitMarketProposalEvents(event) { + const { type } = event; + switch (type) { + case "ProposalReceived": + this.events.emit("offerProposalReceived", { + offerProposal: event.proposal, + }); + break; + case "ProposalRejected": + this.events.emit("offerCounterProposalRejected", { + counterProposal: event.counterProposal, + reason: event.reason, + }); + break; + case "PropertyQueryReceived": + this.events.emit("offerPropertyQueryReceived"); + break; + default: + this.logger.warn("Unsupported event type in event", { event }); + break; + } + } + async signAgreementFromPool(draftProposalPool, agreementOptions, signalOrTimeout) { + this.logger.info("Trying to sign an agreement..."); + const signal = createAbortSignalFromTimeout(signalOrTimeout); + const getProposal = async () => { + try { + signal.throwIfAborted(); + this.logger.debug("Acquiring proposal from draft proposal pool", { + draftPoolCounters: { + total: draftProposalPool.count(), + available: draftProposalPool.availableCount(), + }, + }); + const proposal = await draftProposalPool.acquire(signal); + this.logger.debug("Acquired proposal from the pool", { proposal }); + if (signal.aborted) { + draftProposalPool.release(proposal); + signal.throwIfAborted(); + } + return proposal; + } + catch (error) { + if (signal.aborted) { + throw signal.reason.name === "TimeoutError" + ? new GolemTimeoutError("Could not sign any agreement in time") + : new GolemAbortError("The signing of the agreement has been aborted", error); + } + throw error; + } + }; + const tryProposing = async () => { + const proposal = await getProposal(); + try { + const agreement = await this.proposeAgreement(proposal, agreementOptions); + // agreement is valid, proposal can be destroyed + draftProposalPool.remove(proposal); + return agreement; + } + catch (error) { + this.logger.debug("Failed to propose agreement, retrying", { error }); + // We failed to propose the agreement, destroy the proposal and try again with another one + draftProposalPool.remove(proposal); + return runOnNextEventLoopIteration(tryProposing); + } + }; + return tryProposing(); + } + /** + * Reduce initial proposals to a set grouped by the provider's key to avoid duplicate offers + */ + reduceInitialProposalsByProviderKey(options) { + return (input) => new Observable((observer) => { + let isCancelled = false; + const proposalsBatch = new ProposalsBatch({ + minBatchSize: options === null || options === void 0 ? void 0 : options.minProposalsBatchSize, + releaseTimeoutMs: options === null || options === void 0 ? void 0 : options.proposalsBatchReleaseTimeoutMs, + }); + const subscription = input.subscribe((proposal) => { + if (proposal.isInitial()) { + proposalsBatch + .addProposal(proposal) + .catch((err) => this.logger.error("Failed to add the initial proposal to the batch", err)); + } + else { + observer.next(proposal); + } + }); + const batch = async () => { + if (isCancelled) { + return; + } + try { + await proposalsBatch.waitForProposals(); + const proposals = await proposalsBatch.getProposals(); + if (proposals.length > 0) { + this.logger.debug("Received batch of proposals", { count: proposals.length }); + proposals.forEach((proposal) => observer.next(proposal)); + } + } + catch (error) { + observer.error(error); + } + batch(); + }; + batch(); + return () => { + isCancelled = true; + subscription.unsubscribe(); + }; + }); + } + estimateBudget({ order, maxAgreements }) { + var _a, _b; + const pricingModel = order.market.pricing.model; + // TODO: Don't assume for the user, at least not on pure golem-js level + const minCpuThreads = (_b = (_a = order.demand.workload) === null || _a === void 0 ? void 0 : _a.minCpuThreads) !== null && _b !== void 0 ? _b : 1; + const { rentHours } = order.market; + switch (pricingModel) { + case "linear": { + const { maxCpuPerHourPrice, maxStartPrice, maxEnvPerHourPrice } = order.market.pricing; + const threadCost = maxAgreements * rentHours * minCpuThreads * maxCpuPerHourPrice; + const startCost = maxAgreements * maxStartPrice; + const envCost = maxAgreements * rentHours * maxEnvPerHourPrice; + return startCost + envCost + threadCost; + } + case "burn-rate": + return maxAgreements * rentHours * order.market.pricing.avgGlmPerHour; + default: + throw new GolemUserError(`Unsupported pricing model ${pricingModel}`); + } + } + async fetchAgreement(agreementId) { + return this.marketApi.getAgreement(agreementId); + } + /** + * Subscribes to an observable that maps yagna events into our domain events + * and emits these domain events via EventEmitter + */ + collectAndEmitAgreementEvents() { + this.marketApi.collectAgreementEvents().subscribe((event) => { + switch (event.type) { + case "AgreementApproved": + this.events.emit("agreementApproved", { + agreement: event.agreement, + }); + break; + case "AgreementCancelled": + this.events.emit("agreementCancelled", { + agreement: event.agreement, + }); + break; + case "AgreementTerminated": + this.events.emit("agreementTerminated", { + agreement: event.agreement, + reason: event.reason, + terminatedBy: event.terminatedBy, + }); + break; + case "AgreementRejected": + this.events.emit("agreementRejected", { + agreement: event.agreement, + reason: event.reason, + }); + break; + } + }); + } + filterProposalsByUserFilter(filter, proposal) { + try { + const result = filter(proposal); + if (!result) { + this.events.emit("offerProposalRejectedByProposalFilter", { + offerProposal: proposal, + }); + this.logger.debug("The offer was rejected by the user filter", { id: proposal.id }); + } + return result; + } + catch (err) { + this.logger.error("Executing user provided proposal filter resulted with an error", err); + throw err; + } + } + filterProposalsByPricingOptions(pricing, proposal) { + let isPriceValid = true; + if (pricing.model === "linear") { + isPriceValid = + proposal.pricing.cpuSec <= pricing.maxCpuPerHourPrice / 3600 && + proposal.pricing.envSec <= pricing.maxEnvPerHourPrice / 3600 && + proposal.pricing.start <= pricing.maxStartPrice; + } + else if (pricing.model === "burn-rate") { + isPriceValid = + proposal.pricing.start + proposal.pricing.envSec * 3600 + proposal.pricing.cpuSec * 3600 <= + pricing.avgGlmPerHour; + } + if (!isPriceValid) { + this.events.emit("offerProposalRejectedByPriceFilter", { + offerProposal: proposal, + }); + this.logger.debug("The offer was ignored because the price was too high", { + id: proposal.id, + pricing: proposal.pricing, + }); + } + return isPriceValid; + } + scan(scanSpecification) { + return this.deps.marketApi.scan(scanSpecification); + } +} + +/** + * Agreement module - an object representing the contract between the requestor and the provider. + */ +class Agreement { + /** + * @param id + * @param model + * @param demand + */ + constructor(id, model, demand) { + this.id = id; + this.model = model; + this.demand = demand; + } + /** + * Return agreement state + * @return state + */ + getState() { + return this.model.state; + } + get provider() { + return { + id: this.model.offer.providerId, + name: this.model.offer.properties["golem.node.id.name"], + walletAddress: this.model.offer.properties[`golem.com.payment.platform.${this.demand.paymentPlatform}.address`], + }; + } + /** + * Returns flag if the agreement is in the final state + * @description if the final state is true, agreement will not change state further anymore + * @return boolean + */ + isFinalState() { + const state = this.getState(); + return state !== "Pending" && state !== "Proposal"; + } +} + +/** + * Common properties and methods for payment related documents - Invoices and DebitNotes + */ +class BaseDocument { + constructor(id, model, provider) { + this.id = id; + this.model = model; + this.provider = provider; + this.recipientId = model.recipientId; + this.payeeAddr = model.payeeAddr; + this.requestorWalletAddress = model.payerAddr; + this.paymentPlatform = model.paymentPlatform; + this.agreementId = model.agreementId; + this.paymentDueDate = model.paymentDueDate; + this.status = model.status; + } + /** + * Tells what's the current status of the document + */ + getStatus() { + return this.status; + } +} + +/** + * An Invoice is an artifact issued by the Provider to the Requestor, in the context of a specific Agreement. It indicates the total Amount owed by the Requestor in this Agreement. No further Debit Notes shall be issued after the Invoice is issued. The issue of Invoice signals the Termination of the Agreement (if it hasn't been terminated already). No Activity execution is allowed after the Invoice is issued. + */ +class Invoice extends BaseDocument { + /** + * @param model + * @param providerInfo + */ + constructor(model, providerInfo) { + super(model.invoiceId, model, providerInfo); + this.model = model; + this.activityIds = model.activityIds; + this.amount = model.amount; + this.timestamp = model.timestamp; + this.recipientId = model.recipientId; + } + getPreciseAmount() { + return new Decimal(this.amount); + } + /** + * Compares two invoices together and tells if they are the same thing + */ + isSameAs(invoice) { + return this.id === invoice.id && this.amount === invoice.amount && this.agreementId === invoice.agreementId; + } +} + +/** + * A Debit Note is an artifact issued by the Provider to the Requestor, in the context of a specific Activity. It is a notification of Total Amount Due incurred by the Activity until the moment the Debit Note is issued. This is expected to be used as trigger for payment in upfront-payment or pay-as-you-go scenarios. NOTE: Only Debit Notes with non-null paymentDueDate are expected to trigger payments. NOTE: Debit Notes flag the current Total Amount Due, which is accumulated from the start of Activity. Debit Notes are expected to trigger payments, therefore payment amount for the newly received Debit Note is expected to be determined by difference of Total Payments for the Agreement vs Total Amount Due. + */ +class DebitNote extends BaseDocument { + /** + * + * @param model + * @param providerInfo + */ + constructor(model, providerInfo) { + super(model.debitNoteId, model, providerInfo); + this.model = model; + this.id = model.debitNoteId; + this.timestamp = model.timestamp; + this.activityId = model.activityId; + this.totalAmountDue = model.totalAmountDue; + this.usageCounterVector = model.usageCounterVector; + } + getPreciseAmount() { + return new Decimal(this.totalAmountDue); + } +} + +/** + * Represents a designated sum of money reserved for the purpose of making some particular payments. Allocations are currently purely virtual objects. An Allocation is connected to a payment account (wallet) specified by address and payment platform field. + */ +class Allocation { + constructor(model) { + this.model = model; + this.id = model.allocationId; + this.timeout = model.timeout; + this.timestamp = model.timestamp; + this.totalAmount = model.totalAmount; + this.spentAmount = model.spentAmount; + this.remainingAmount = model.remainingAmount; + if (!model.address || !model.paymentPlatform) { + throw new GolemConfigError("Account address and payment platform are required"); + } + this.address = model.address; + this.paymentPlatform = model.paymentPlatform; + } +} + +var RejectionReason; +(function (RejectionReason) { + RejectionReason["UnsolicitedService"] = "UNSOLICITED_SERVICE"; + RejectionReason["BadService"] = "BAD_SERVICE"; + RejectionReason["IncorrectAmount"] = "INCORRECT_AMOUNT"; + RejectionReason["RejectedByRequestorFilter"] = "REJECTED_BY_REQUESTOR_FILTER"; + /** + * Use it when you're processing an event after the agreement reached it's "final state" + * + * By final state we mean: we got an invoice for that agreement + */ + RejectionReason["AgreementFinalized"] = "AGREEMENT_FINALIZED"; +})(RejectionReason || (RejectionReason = {})); + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ + + +function __classPrivateFieldGet(receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +} + +function __classPrivateFieldSet(receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +} + +typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +var _GolemPaymentError_allocation, _GolemPaymentError_provider; +var PaymentErrorCode; +(function (PaymentErrorCode) { + PaymentErrorCode["AllocationCreationFailed"] = "AllocationCreationFailed"; + PaymentErrorCode["MissingAllocation"] = "MissingAllocation"; + PaymentErrorCode["PaymentProcessNotInitialized"] = "PaymentProcessNotInitialized"; + PaymentErrorCode["AllocationReleaseFailed"] = "AllocationReleaseFailed"; + PaymentErrorCode["InvoiceAcceptanceFailed"] = "InvoiceAcceptanceFailed"; + PaymentErrorCode["DebitNoteAcceptanceFailed"] = "DebitNoteAcceptanceFailed"; + PaymentErrorCode["InvoiceRejectionFailed"] = "InvoiceRejectionFailed"; + PaymentErrorCode["DebitNoteRejectionFailed"] = "DebitNoteRejectionFailed"; + PaymentErrorCode["CouldNotGetDebitNote"] = "CouldNotGetDebitNote"; + PaymentErrorCode["CouldNotGetInvoice"] = "CouldNotGetInvoice"; + PaymentErrorCode["PaymentStatusQueryFailed"] = "PaymentStatusQueryFailed"; + PaymentErrorCode["AgreementAlreadyPaid"] = "AgreementAlreadyPaid"; + PaymentErrorCode["InvoiceAlreadyReceived"] = "InvoiceAlreadyReceived"; +})(PaymentErrorCode || (PaymentErrorCode = {})); +class GolemPaymentError extends GolemModuleError { + constructor(message, code, allocation, provider, previous) { + super(message, code, previous); + this.code = code; + this.previous = previous; + _GolemPaymentError_allocation.set(this, void 0); + _GolemPaymentError_provider.set(this, void 0); + __classPrivateFieldSet(this, _GolemPaymentError_allocation, allocation, "f"); + __classPrivateFieldSet(this, _GolemPaymentError_provider, provider, "f"); + } + getAllocation() { + return __classPrivateFieldGet(this, _GolemPaymentError_allocation, "f"); + } + getProvider() { + return __classPrivateFieldGet(this, _GolemPaymentError_provider, "f"); + } +} +_GolemPaymentError_allocation = new WeakMap(), _GolemPaymentError_provider = new WeakMap(); + +/** + * A class that provides methods for working with invoices. It interacts with the Yagna API directly. + */ +class InvoiceProcessor { + /** + * Use `InvoiceProcessor.create()` to create an instance of this class. + */ + constructor(api) { + this.api = api; + } + /** + * Collects invoices from the Yagna API until the limit is reached or there are no more invoices. + * @param {Object} options - The parameters for collecting invoices. + * @param options.after Only collect invoices that were created after this date. + * @param options.limit Maximum number of invoices to collect. + * @param options.statuses Only collect invoices with these statuses. + * @param options.providerIds Only collect invoices from these providers. + * @param options.minAmount Only collect invoices with an amount greater than or equal to this. + * @param options.maxAmount Only collect invoices with an amount less than or equal to this. + * @param options.providerWallets Only collect invoices from these provider wallets. + * @param options.paymentPlatforms Only collect invoices from these payment platforms. + * + * @example + * ```typescript + * const invoices = await invoiceProcessor.collectInvoices({ + * after: new Date(Date.now() - 24 * 60 * 60 * 1000), // only collect invoices that were created in the last 24 hours + * limit: 100, // only collect 100 invoices max + * statuses: ["RECEIVED"], // only collect unpaid invoices + * providerIds: ["0x1234"], // only collect invoices from this provider + * minAmount: "0.1", // only collect invoices with an amount greater than or equal to 0.1 GLM + * maxAmount: "1", // only collect invoices with an amount less than or equal to 1 GLM + * providerWallets: ["0x1234"], // only collect invoices from this provider wallet + * paymentPlatforms: ["erc20-polygon-glm"], // only collect invoices from this payment platform + * }); + * ``` + */ + async collectInvoices({ after = new Date(0), limit = 50, statuses, providerIds, minAmount, maxAmount, providerWallets, paymentPlatforms, } = {}) { + // yagna api doesn't sort invoices by timestamp, so we have to fetch all invoices and sort them ourselves + // this is not very efficient, but it's the only way to get invoices sorted by timestamp + // otherwise yagna returns the invoices in seemingly random order + // FIXME: move to batched requests once yagna api supports it + const invoices = await this.api.payment.getInvoices(after === null || after === void 0 ? void 0 : after.toISOString()); + const filteredInvoices = invoices.filter((invoice) => { + if (statuses && !statuses.includes(invoice.status)) { + return false; + } + if (providerIds && !providerIds.includes(invoice.issuerId)) { + return false; + } + if (minAmount !== undefined && new Decimal(invoice.amount).lt(minAmount)) { + return false; + } + if (maxAmount !== undefined && new Decimal(invoice.amount).gt(maxAmount)) { + return false; + } + if (providerWallets && !providerWallets.includes(invoice.payeeAddr)) { + return false; + } + if (paymentPlatforms && !paymentPlatforms.includes(invoice.paymentPlatform)) { + return false; + } + return true; + }); + filteredInvoices.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()); + return filteredInvoices.slice(0, limit); + } + /** + * Fetches a single invoice from the Yagna API. + */ + async fetchSingleInvoice(invoiceId) { + return this.api.payment.getInvoice(invoiceId); + } + /** + * Creates an allocation for the exact amount of the invoice and accepts the invoice. + * If `dryRun` is `true`, no allocation will be created and the invoice will not be accepted. + */ + async acceptInvoice({ invoice, dryRun = false, }) { + let allocation = { + totalAmount: invoice.amount, + paymentPlatform: invoice.paymentPlatform, + address: invoice.payerAddr, + timestamp: new Date().toISOString(), + timeout: new Date(Date.now() + 60000).toISOString(), + makeDeposit: false, + remainingAmount: "", + spentAmount: "", + allocationId: "", + }; + if (dryRun) { + return { + allocation, + amount: invoice.amount, + invoiceId: invoice.invoiceId, + success: true, + dryRun, + }; + } + try { + allocation = await this.api.payment.createAllocation(allocation); + await this.api.payment.acceptInvoice(invoice.invoiceId, { + allocationId: allocation.allocationId, + totalAmountAccepted: invoice.amount, + }); + return { + success: true, + allocation, + amount: invoice.amount, + invoiceId: invoice.invoiceId, + dryRun, + }; + } + catch (e) { + return { + success: false, + allocation, + amount: invoice.amount, + invoiceId: invoice.invoiceId, + reason: e, + dryRun, + }; + } + } + /** + * Creates an allocation for the exact amount of the invoices and accepts the invoices. + * Since the invoices can be from different payment platforms and payer addresses, + * multiple allocations might be created. + * If `dryRun` is `true`, no allocation will be created and the invoices will not be accepted. + * Please keep in mind that this method is not atomic, so if one of the invoices fails + * to be accepted, the others will still be accepted. This is a limitation of the Yagna API. + * Use the returned `InvoiceAcceptResult` to check which invoices were accepted successfully. + */ + async acceptManyInvoices({ invoices, dryRun = false, }) { + /** + * Allocations are created per payment platform and payer address. + * So it's necessary to group invoices by payment platform and payer address + * and create an allocation for each group. + */ + const groupByPaymentPlatform = (invoiceDetails) => { + return invoiceDetails.reduce((acc, curr) => { + acc[curr.paymentPlatform] = acc[curr.paymentPlatform] || []; + acc[curr.paymentPlatform].push(curr); + return acc; + }, {}); + }; + const groupByPayerAddress = (invoiceDetails) => { + return invoiceDetails.reduce((acc, curr) => { + acc[curr.payerAddr] = acc[curr.payerAddr] || []; + acc[curr.payerAddr].push(curr); + return acc; + }, {}); + }; + const results = []; + const groupedByPaymentPlatform = groupByPaymentPlatform(invoices); + for (const [paymentPlatform, invoices] of Object.entries(groupedByPaymentPlatform)) { + const groupedByPayerAddress = groupByPayerAddress(invoices); + for (const [payerAddress, invoices] of Object.entries(groupedByPayerAddress)) { + const sum = invoices.reduce((acc, curr) => acc.plus(curr.amount), new Decimal(0)); + let allocation = { + totalAmount: sum.toFixed(18), + paymentPlatform, + address: payerAddress, + timestamp: new Date().toISOString(), + timeout: new Date(Date.now() + 60000).toISOString(), + makeDeposit: false, + remainingAmount: "", + spentAmount: "", + allocationId: "", + }; + if (!dryRun) { + allocation = await this.api.payment.createAllocation(allocation); + } + for (const invoice of invoices) { + if (dryRun) { + results.push({ + invoiceId: invoice.invoiceId, + allocation, + success: true, + amount: invoice.amount, + dryRun, + }); + continue; + } + try { + await this.api.payment.acceptInvoice(invoice.invoiceId, { + allocationId: allocation.allocationId, + totalAmountAccepted: invoice.amount, + }); + results.push({ + invoiceId: invoice.invoiceId, + allocation, + success: true, + amount: invoice.amount, + dryRun, + }); + } + catch (e) { + results.push({ + invoiceId: invoice.invoiceId, + allocation, + success: false, + amount: invoice.amount, + reason: e, + dryRun, + }); + } + } + } + } + return results; + } +} + +class PayerDetails { + constructor(network, driver, address, + // eslint-disable-next-line @typescript-eslint/ban-types -- keep the autocomplete for "glm" and "tglm" but allow any string + token) { + this.network = network; + this.driver = driver; + this.address = address; + this.token = token; + } + getPaymentPlatform() { + return `${this.driver}-${this.network}-${this.token}`; + } +} + +function isApiError(error) { + return typeof error == "object" && error !== null && "name" in error && error.name === "ApiError"; +} +/** + * Try to extract a message from a yagna API error. + * If the error is not an instance of `ApiError`, return the error message. + */ +function getMessageFromApiError(error) { + if (!(error instanceof Error)) { + return String(error); + } + if (isApiError(error)) { + try { + return JSON.stringify(error.body, null, 2); + } + catch (_jsonParseError) { + return error.message; + } + } + return error.message; +} + +/** + * Process manager that controls the logic behind processing payments for an agreement (debit notes and invoices). + * The process is started automatically and ends when the final invoice is received. + * You can stop the process earlier by calling the `stop` method. You cannot restart the process after stopping it. + */ +class AgreementPaymentProcess { + constructor(agreement, allocation, paymentModule, options, logger) { + this.agreement = agreement; + this.allocation = allocation; + this.paymentModule = paymentModule; + this.invoice = null; + this.debitNotes = new Map(); + /** + * Lock used to synchronize callers and enforce important business rules + * + * Example of a rule: you shouldn't accept a debit note if an invoice is already in place + */ + this.lock = new AsyncLock(); + this.logger = logger || defaultLogger("payment"); + this.options = { + invoiceFilter: (options === null || options === void 0 ? void 0 : options.invoiceFilter) || (() => true), + debitNoteFilter: (options === null || options === void 0 ? void 0 : options.debitNoteFilter) || (() => true), + }; + const invoiceSubscription = this.paymentModule + .observeInvoices() + .pipe(filter((invoice) => invoice.agreementId === this.agreement.id)) + .subscribe((invoice) => this.addInvoice(invoice)); + const debitNoteSubscription = this.paymentModule + .observeDebitNotes() + .pipe(filter((debitNote) => debitNote.agreementId === this.agreement.id)) + .subscribe((debitNote) => this.addDebitNote(debitNote)); + this.cleanupSubscriptions = () => { + invoiceSubscription.unsubscribe(); + debitNoteSubscription.unsubscribe(); + }; + } + /** + * Adds the debit note to the process avoiding race conditions + */ + addDebitNote(debitNote) { + return this.lock.acquire(`app-${debitNote.agreementId}`, () => this.applyDebitNote(debitNote)); + } + /** + * Adds the invoice to the process avoiding race conditions + */ + addInvoice(invoice) { + return this.lock.acquire(`app-${invoice.agreementId}`, () => this.applyInvoice(invoice)); + } + /** + * Tells if the process reached a point in which we can consider it as "finished" + */ + isFinished() { + return this.invoice !== null; + } + async applyDebitNote(debitNote) { + const isAlreadyFinalized = this.hasReceivedInvoice(); + if (isAlreadyFinalized) { + await this.rejectDebitNote(debitNote, RejectionReason.AgreementFinalized, `DebitNote ${debitNote.id} rejected because the agreement ${debitNote.agreementId} is already covered ` + + `with a final invoice that should be paid instead of the debit note`); + return false; + } + if (this.debitNotes.has(debitNote.id)) { + const isAlreadyProcessed = await this.hasProcessedDebitNote(debitNote); + if (isAlreadyProcessed) { + this.logger.warn(`We received a duplicate debit note - the previous one was already accepted, so this one gets ignored`, { + debitNoteId: debitNote.id, + agreementId: debitNote.agreementId, + }); + return false; + } + } + this.debitNotes.set(debitNote.id, debitNote); + let acceptedByFilter = false; + try { + acceptedByFilter = await this.options.debitNoteFilter(debitNote, { + agreement: this.agreement, + allocation: this.allocation, + demand: this.agreement.demand, + }); + } + catch (error) { + throw new GolemUserError("An error occurred in the debit note filter", error); + } + if (!acceptedByFilter) { + await this.rejectDebitNote(debitNote, RejectionReason.RejectedByRequestorFilter, `DebitNote ${debitNote.id} for agreement ${debitNote.agreementId} rejected by DebitNote Filter`); + return false; + } + try { + await this.paymentModule.acceptDebitNote(debitNote, this.allocation, debitNote.totalAmountDue); + this.logger.debug(`DebitNote accepted`, { + debitNoteId: debitNote.id, + agreementId: debitNote.agreementId, + }); + return true; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Unable to accept debit note ${debitNote.id}. ${message}`, PaymentErrorCode.DebitNoteAcceptanceFailed, undefined, debitNote.provider, error); + } + } + async hasProcessedDebitNote(debitNote) { + const status = await debitNote.getStatus(); + return status !== "RECEIVED"; + } + async rejectDebitNote(debitNote, rejectionReason, rejectMessage) { + try { + await this.paymentModule.rejectDebitNote(debitNote, rejectMessage); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Unable to reject debit note ${debitNote.id}. ${message}`, PaymentErrorCode.DebitNoteRejectionFailed, undefined, debitNote.provider, error); + } + } + finalize(invoice) { + this.invoice = invoice; + this.cleanupSubscriptions(); + } + async applyInvoice(invoice) { + this.logger.debug("Applying invoice for agreement", { + invoiceId: invoice.id, + agreementId: invoice.agreementId, + provider: invoice.provider, + }); + if (this.invoice) { + // Protects from possible fraud: someone sends a second, different invoice for the same agreement + throw new GolemPaymentError(`Agreement ${this.agreement.id} is already covered with an invoice: ${this.invoice.id}`, PaymentErrorCode.AgreementAlreadyPaid, this.allocation, this.invoice.provider); + } + if (invoice.getStatus() !== "RECEIVED") { + throw new GolemPaymentError(`The invoice ${invoice.id} for agreement ${invoice.agreementId} has status ${invoice.getStatus()}, ` + + `but we can accept only the ones with status RECEIVED`, PaymentErrorCode.InvoiceAlreadyReceived, this.allocation, invoice.provider); + } + this.finalize(invoice); + let acceptedByFilter = false; + try { + acceptedByFilter = await this.options.invoiceFilter(invoice, { + agreement: this.agreement, + allocation: this.allocation, + demand: this.agreement.demand, + }); + } + catch (error) { + throw new GolemUserError("An error occurred in the invoice filter", error); + } + if (!acceptedByFilter) { + const rejectionReason = RejectionReason.RejectedByRequestorFilter; + const message = `Invoice ${invoice.id} for agreement ${invoice.agreementId} rejected by Invoice Filter`; + await this.rejectInvoice(invoice, rejectionReason, message); + return false; + } + try { + await this.paymentModule.acceptInvoice(invoice, this.allocation, invoice.amount); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Unable to accept invoice ${invoice.id} ${message}`, PaymentErrorCode.InvoiceAcceptanceFailed, undefined, invoice.provider, error); + } + return true; + } + async rejectInvoice(invoice, rejectionReason, message) { + try { + await this.paymentModule.rejectInvoice(invoice, message); + this.logger.warn(`Invoice rejected`, { reason: message }); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Unable to reject invoice ${invoice.id} ${message}`, PaymentErrorCode.InvoiceRejectionFailed, undefined, invoice.provider, error); + } + } + hasReceivedInvoice() { + return this.invoice !== null; + } + isStarted() { + return this.cleanupSubscriptions !== null; + } + stop() { + this.cleanupSubscriptions(); + } +} + +const MAINNETS = Object.freeze(["mainnet", "polygon"]); +class PaymentModuleImpl { + constructor(deps, options) { + var _a, _b, _c; + this.events = new EventEmitter(); + this.logger = defaultLogger("payment"); + this.options = { + driver: "erc20", + network: getPaymentNetwork(), + token: "tglm", + }; + const network = (_a = options === null || options === void 0 ? void 0 : options.network) !== null && _a !== void 0 ? _a : this.options.network; + const driver = (_b = options === null || options === void 0 ? void 0 : options.driver) !== null && _b !== void 0 ? _b : this.options.driver; + const token = (_c = options === null || options === void 0 ? void 0 : options.token) !== null && _c !== void 0 ? _c : (MAINNETS.includes(network) ? "glm" : "tglm"); + this.options = { network, driver, token }; + this.logger = deps.logger; + this.yagnaApi = deps.yagna; + this.paymentApi = deps.paymentApi; + this.startEmittingPaymentEvents(); + } + startEmittingPaymentEvents() { + this.paymentApi.receivedInvoices$.subscribe((invoice) => { + this.events.emit("invoiceReceived", { + invoice, + }); + }); + this.paymentApi.receivedDebitNotes$.subscribe((debitNote) => { + this.events.emit("debitNoteReceived", { debitNote }); + }); + } + getPaymentPlatform() { + return `${this.options.driver}-${this.options.network}-${this.options.token}`; + } + async getPayerDetails() { + const { identity: address } = await this.yagnaApi.identity.getIdentity(); + return new PayerDetails(this.options.network, this.options.driver, address, this.options.token); + } + observeDebitNotes() { + return this.paymentApi.receivedDebitNotes$; + } + observeInvoices() { + return this.paymentApi.receivedInvoices$; + } + async createAllocation(params) { + this.logger.debug("Creating allocation", { params: params }); + try { + const allocation = await this.paymentApi.createAllocation({ + paymentPlatform: this.getPaymentPlatform(), + ...params, + }); + this.events.emit("allocationCreated", { allocation }); + this.logger.info("Created allocation", { + allocationId: allocation.id, + budget: allocation.totalAmount, + platform: this.getPaymentPlatform(), + }); + this.logger.debug("Created allocation", allocation); + return allocation; + } + catch (error) { + this.events.emit("errorCreatingAllocation", error); + throw error; + } + } + async releaseAllocation(allocation) { + this.logger.debug("Releasing allocation", allocation); + try { + const lastKnownAllocationState = await this.getAllocation(allocation.id).catch(() => { + this.logger.warn("Failed to fetch allocation before releasing", { id: allocation.id }); + return allocation; + }); + await this.paymentApi.releaseAllocation(allocation); + this.events.emit("allocationReleased", { + allocation: lastKnownAllocationState, + }); + this.logger.info("Released allocation", { + allocationId: lastKnownAllocationState.id, + totalAmount: lastKnownAllocationState.totalAmount, + spentAmount: lastKnownAllocationState.spentAmount, + }); + } + catch (error) { + this.events.emit("errorReleasingAllocation", { + allocation: await this.paymentApi.getAllocation(allocation.id).catch(() => { + this.logger.warn("Failed to fetch allocation after failed release attempt", { id: allocation.id }); + return allocation; + }), + error, + }); + throw error; + } + } + getAllocation(id) { + this.logger.debug("Fetching allocation by id", { id }); + return this.paymentApi.getAllocation(id); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + amendAllocation(allocation, _newOpts) { + const err = Error("Amending allocation is not supported yet"); + this.events.emit("errorAmendingAllocation", { + allocation, + error: err, + }); + throw err; + } + async acceptInvoice(invoice, allocation, amount) { + this.logger.debug("Accepting invoice", invoice); + try { + const acceptedInvoice = await this.paymentApi.acceptInvoice(invoice, allocation, amount); + this.events.emit("invoiceAccepted", { + invoice: acceptedInvoice, + }); + this.logger.info("Accepted invoice", { + id: invoice.id, + allocationId: allocation.id, + agreementId: invoice.agreementId, + provider: invoice.provider, + amount, + }); + return acceptedInvoice; + } + catch (error) { + this.events.emit("errorAcceptingInvoice", { invoice, error }); + this.logger.error(`Failed to accept invoice. ${error}`, { + id: invoice.id, + allocationId: allocation.id, + agreementId: invoice.agreementId, + provider: invoice.provider, + amount, + }); + throw error; + } + } + async rejectInvoice(invoice, reason) { + this.logger.debug("Rejecting invoice", { id: invoice.id, reason }); + try { + const rejectedInvoice = await this.paymentApi.rejectInvoice(invoice, reason); + this.events.emit("invoiceRejected", { + invoice: rejectedInvoice, + }); + this.logger.warn("Rejeced invoice", { id: invoice.id, reason }); + return rejectedInvoice; + } + catch (error) { + this.events.emit("errorRejectingInvoice", { invoice, error }); + this.logger.error(`Failed to reject invoice. ${error}`, { id: invoice.id, reason }); + throw error; + } + } + async acceptDebitNote(debitNote, allocation, amount) { + this.logger.debug("Accepting debit note", debitNote); + try { + const acceptedDebitNote = await this.paymentApi.acceptDebitNote(debitNote, allocation, amount); + this.events.emit("debitNoteAccepted", { + debitNote: acceptedDebitNote, + }); + this.logger.debug("Accepted debit note", { + id: debitNote.id, + allocationId: allocation.id, + activityId: debitNote.activityId, + provider: debitNote.provider, + amount, + }); + return acceptedDebitNote; + } + catch (error) { + this.events.emit("errorAcceptingDebitNote", { debitNote, error }); + this.logger.error(`Failed to accept debitNote. ${error}`, { + id: debitNote.id, + allocationId: allocation.id, + activityId: debitNote.activityId, + provider: debitNote.provider, + amount, + }); + throw error; + } + } + async rejectDebitNote(debitNote, reason) { + this.logger.info("Rejecting debit note", { id: debitNote.id, reason }); + // TODO: this is not supported by PaymnetAdapter + const message = "Unable to send debitNote rejection to provider. This feature is not yet supported."; + this.logger.warn(message); + this.events.emit("errorRejectingDebitNote", { debitNote, error: new GolemInternalError(message) }); + return debitNote; + // this.logger.debug("Rejecting debit note", { id: debitNote.id, reason }); + // try { + // const rejectedDebitNote = await this.paymentApi.rejectDebitNote(debitNote, reason); + // this.events.emit("debitNoteRejected", rejectedDebitNote); + // return rejectedDebitNote; + // } catch (error) { + // this.events.emit("errorRejectingDebitNote", debitNote, error); + // throw error; + // } + } + /** + * Creates an instance of utility class InvoiceProcessor that deals with invoice related use-cases + */ + createInvoiceProcessor() { + return new InvoiceProcessor(this.yagnaApi); + } + createAgreementPaymentProcess(agreement, allocation, options) { + return new AgreementPaymentProcess(agreement, allocation, this, options, this.logger.child("agreement-payment-process")); + } +} + +var ActivityStateEnum; +(function (ActivityStateEnum) { + ActivityStateEnum["New"] = "New"; + ActivityStateEnum["Initialized"] = "Initialized"; + ActivityStateEnum["Deployed"] = "Deployed"; + ActivityStateEnum["Ready"] = "Ready"; + ActivityStateEnum["Unresponsive"] = "Unresponsive"; + ActivityStateEnum["Terminated"] = "Terminated"; + /** In case when we couldn't establish the in on yagna */ + ActivityStateEnum["Unknown"] = "Unknown"; +})(ActivityStateEnum || (ActivityStateEnum = {})); +/** + * Activity module - an object representing the runtime environment on the provider in accordance with the `Package` specification. + * As part of a given activity, it is possible to execute exe script commands and capture their results. + */ +class Activity { + /** + * @param id The ID of the activity in Yagna + * @param agreement The agreement that's related to this activity + * @param currentState The current state as it was obtained from yagna + * @param previousState The previous state (or New if this is the first time we're creating the activity) + * @param usage Current resource usage vector information + */ + constructor(id, agreement, currentState = ActivityStateEnum.New, previousState = ActivityStateEnum.Unknown, usage) { + this.id = id; + this.agreement = agreement; + this.currentState = currentState; + this.previousState = previousState; + this.usage = usage; + } + get provider() { + return this.agreement.provider; + } + getState() { + return this.currentState; + } + getPreviousState() { + return this.previousState; + } +} + +// FIXME: Make the `data` field Uint8Array and update the rest of the code +// eslint-disable-next-line +class Result { + constructor(props) { + this.index = props.index; + this.eventDate = props.eventDate; + this.result = props.result; + this.stdout = props.stdout; + this.stderr = props.stderr; + this.message = props.message; + this.isBatchFinished = props.isBatchFinished; + this.data = props.data; + } + /** + * Helper method making JSON-like output results more accessible + */ + getOutputAsJson() { + if (!this.stdout) { + throw new GolemInternalError("Can't convert Result output to JSON, because the output is missing!"); + } + try { + return JSON.parse(this.stdout.toString().trim()); + } + catch (err) { + throw new GolemInternalError(`Failed to parse output to JSON! Output: "${this.stdout.toString()}". Error: ${err}`); + } + } +} + +const DEFAULTS$1 = { + activityExeBatchResultPollIntervalSeconds: 5, + activityExeBatchResultMaxRetries: 20, +}; +/** + * @internal + */ +class ExecutionConfig { + constructor(options) { + this.activityExeBatchResultMaxRetries = + (options === null || options === void 0 ? void 0 : options.activityExeBatchResultMaxRetries) || DEFAULTS$1.activityExeBatchResultMaxRetries; + this.activityExeBatchResultPollIntervalSeconds = + (options === null || options === void 0 ? void 0 : options.activityExeBatchResultPollIntervalSeconds) || DEFAULTS$1.activityExeBatchResultPollIntervalSeconds; + } +} + +/** + * Represents a series of Commands that can be sent to exe-unit via yagna's API + */ +class Script { + constructor(commands = []) { + this.commands = commands; + } + static create(commands) { + return new Script(commands); + } + add(command) { + this.commands.push(command); + } + async before() { + await Promise.all(this.commands.map((cmd) => cmd.before())); + } + async after(results) { + // Call after() for each command mapping its result. + return Promise.all(this.commands.map((command, i) => command.after(results[i]))); + } + getExeScriptRequest() { + if (!this.commands.length) { + throw new GolemInternalError("There are no commands in the script"); + } + return { text: JSON.stringify(this.commands.map((cmd) => cmd.toJson())) }; + } +} + +const EMPTY_ERROR_RESULT = new Result({ + result: "Error", + eventDate: new Date().toISOString(), + index: -1, + message: "No result due to error", +}); +/** + * Generic command that can be send to an exe-unit via yagna's API + */ +class Command { + constructor(commandName, args) { + this.commandName = commandName; + this.args = args || {}; + } + /** + * Serializes the command to a JSON representation + */ + toJson() { + return { + [this.commandName]: this.args, + }; + } + /** + * Converts the command into + */ + toExeScriptRequest() { + return { text: JSON.stringify([this.toJson()]) }; + } + /** + * Setup local environment for executing this command. + */ + async before() { } + /** + * Cleanup local setup that was needed for the command to run. + * + * It is called after the command was sent to the activity, and the command was processed. + * + * When run within scripts or batch commands, after() might be called without any results, as one of the previous + * commands might have failed. In this case, the command should still cleanup its local setup and return an empty + * error result. + * + * @param result + */ + async after(result) { + return result !== null && result !== void 0 ? result : EMPTY_ERROR_RESULT; + } +} +class Deploy extends Command { + constructor(args) { + super("deploy", args); + } +} +class Start extends Command { + constructor(args) { + super("start", args); + } +} +class Run extends Command { + constructor(cmd, args, env, capture) { + const captureOpt = capture || { + stdout: { atEnd: { format: "string" } }, + stderr: { atEnd: { format: "string" } }, + }; + super("run", { + entry_point: cmd, + args, + env, + capture: captureOpt, + }); + } +} +class Transfer extends Command { + constructor(from, to, args) { + super("transfer", { from, to, args }); + this.from = from; + this.to = to; + } +} +class UploadFile extends Transfer { + constructor(storageProvider, src, dstPath) { + super(); + this.storageProvider = storageProvider; + this.src = src; + this.dstPath = dstPath; + this.args["to"] = `container:${dstPath}`; + } + async before() { + this.args["from"] = await this.storageProvider.publishFile(this.src); + } + async after(result) { + await this.storageProvider.release([this.args["from"]]); + return result; + } +} +class UploadData extends Transfer { + constructor(storageProvider, src, dstPath) { + super(); + this.storageProvider = storageProvider; + this.src = src; + this.dstPath = dstPath; + this.args["to"] = `container:${dstPath}`; + } + async before() { + this.args["from"] = await this.storageProvider.publishData(this.src); + } + async after(result) { + await this.storageProvider.release([this.args["from"]]); + return result; + } +} +class DownloadFile extends Transfer { + constructor(storageProvider, srcPath, dstPath) { + super(); + this.storageProvider = storageProvider; + this.srcPath = srcPath; + this.dstPath = dstPath; + this.args = { from: `container:${srcPath}` }; + } + async before() { + this.args["to"] = await this.storageProvider.receiveFile(this.dstPath); + } + async after(result) { + await this.storageProvider.release([this.args["to"]]); + return result; + } +} +class DownloadData extends Transfer { + constructor(storageProvider, srcPath) { + super(); + this.storageProvider = storageProvider; + this.srcPath = srcPath; + this.chunks = []; + this.args = { from: `container:${srcPath}` }; + } + async before() { + this.args["to"] = await this.storageProvider.receiveData((data) => { + // NOTE: this assumes in-order delivery. For not it should work with websocket provider and local file polyfill. + this.chunks.push(data); + }); + } + async after(result) { + await this.storageProvider.release([this.args["to"]]); + if (result.result === "Ok") { + return new Result({ + ...result, + data: this.combineChunks(), + }); + } + return new Result({ + ...result, + result: "Error", + data: undefined, + }); + } + combineChunks() { + const data = new Uint8Array(this.chunks.reduce((acc, chunk) => acc + chunk.length, 0)); + let offset = 0; + for (const chunk of this.chunks) { + data.set(chunk, offset); + offset += chunk.length; + } + // Release memory. + this.chunks = []; + return data; + } +} + +/** + * @deprecated Use WebSocketStorageProvider instead. This will be removed in the next major version. + * + * Storage provider that spawns a GFTP process and uses it to serve files. + */ +class GftpStorageProvider { + constructor(logger) { + /** + * All published URLs to be release on close(). + * @private + */ + this.publishedUrls = new Set(); + this.isInitialized = false; + /** + * lock against parallel writing to stdin in gftp process + * @private + */ + this.lock = new AsyncLock(); + if (isBrowser) { + throw new GolemUserError(`File transfer by GFTP module is unsupported in the browser context.`); + } + this.logger = logger || defaultLogger("storage"); + } + async init() { + if (this.isInitialized) { + this.logger.warn("GFTP init attempted even though it was already ready - check the logic of your application"); + return; + } + await this.startGftpServer(); + this.logger.info(`GFTP Version: ${await this.jsonRpc("version")}`); + } + startGftpServer() { + return new Promise((resolve, reject) => { + var _a, _b, _c, _d, _e, _f; + this.logger.debug("Starting GFTP server"); + this.gftpServerProcess = spawn("gftp", ["server"]); + this.gftpServerProcess.on("spawn", () => { + this.logger.info("GFTP server spawned"); + this.isInitialized = true; + resolve(); + }); + this.gftpServerProcess.on("error", (error) => { + this.logger.error("Error while spawning GFTP server", error); + reject(error); + }); + this.gftpServerProcess.on("close", (code, signal) => { + this.logger.info("GFTP server closed", { code, signal }); + this.isInitialized = false; + }); + (_b = (_a = this.gftpServerProcess) === null || _a === void 0 ? void 0 : _a.stdout) === null || _b === void 0 ? void 0 : _b.setEncoding("utf-8"); + (_d = (_c = this.gftpServerProcess) === null || _c === void 0 ? void 0 : _c.stderr) === null || _d === void 0 ? void 0 : _d.setEncoding("utf-8"); + this.reader = (_f = (_e = this.gftpServerProcess) === null || _e === void 0 ? void 0 : _e.stdout) === null || _f === void 0 ? void 0 : _f.iterator(); + }); + } + async generateTempFileName() { + const { randomUUID } = await import('crypto'); + const tmp = await import('tmp'); + const fileName = path.join(tmp.dirSync().name, randomUUID().toString()); + if (fs__default.existsSync(fileName)) + fs__default.unlinkSync(fileName); + return fileName; + } + async receiveFile(path) { + const { url } = await this.jsonRpc("receive", { output_file: path }); + return url; + } + receiveData() { + throw new GolemUserError("receiveData is not implemented in GftpStorageProvider"); + } + async publishFile(src) { + const url = await this.uploadFile(src); + this.publishedUrls.add(url); + return url; + } + async publishData(src) { + let url; + if (Buffer.isBuffer(src)) { + url = await this.uploadBytes(src); + } + else { + url = await this.uploadBytes(Buffer.from(src)); + } + this.publishedUrls.add(url); + return url; + } + release() { + // NOTE: Due to GFTP's handling of file Ids (hashes), all files with same content will share IDs, so releasing + // one might break transfer of another one. Therefore, we release all files on close(). + return Promise.resolve(undefined); + } + async releaseAll() { + const urls = Array.from(this.publishedUrls).filter((url) => !!url); + if (urls.length) { + await this.jsonRpc("close", { urls }); + } + } + async close() { + var _a; + if (this.isInitialized) { + await this.releaseAll(); + (_a = this.gftpServerProcess) === null || _a === void 0 ? void 0 : _a.kill(); + } + } + async jsonRpc(method, params = {}) { + return this.lock.acquire("gftp-io", async () => { + var _a, _b, _c, _d; + if (!this.isInitialized) { + throw new GolemInternalError(`GFTP was not initialized when calling JSON-RPC ${method} with ${JSON.stringify(params)}`); + } + const callId = v4(); + const request = { + jsonrpc: "2.0", + id: callId, + method: method, + params: params, + }; + const query = `${JSON.stringify(request)}\n`; + this.logger.debug("Sending GFTP command", { request }); + (_b = (_a = this.gftpServerProcess) === null || _a === void 0 ? void 0 : _a.stdin) === null || _b === void 0 ? void 0 : _b.write(query); + const value = (_d = (await ((_c = this.reader) === null || _c === void 0 ? void 0 : _c.next()))) === null || _d === void 0 ? void 0 : _d.value; + if (!value) { + throw new GolemInternalError("Unable to get GFTP command result"); + } + const { result } = JSON.parse(value); + if (result === undefined) { + throw new GolemInternalError(value); + } + return result; + }); + } + async uploadStream(stream) { + var _a; + // FIXME: temp file is never deleted. + const fileName = await this.generateTempFileName(); + const wStream = fs__default.createWriteStream(fileName, { + encoding: "binary", + }); + // eslint-disable-next-line no-async-promise-executor + await new Promise(async (fulfill) => { + wStream.once("finish", fulfill); + for await (const chunk of stream) { + wStream.write(chunk); + } + wStream.end(); + }); + const links = await this.jsonRpc("publish", { files: [fileName.toString()] }); + if (links.length !== 1) + throw "invalid gftp publish response"; + return (_a = links[0]) === null || _a === void 0 ? void 0 : _a.url; + } + async uploadBytes(data) { + return await this.uploadStream((async function* () { + yield data; + })()); + } + async uploadFile(file) { + var _a; + const links = await this.jsonRpc("publish", { files: [file.toString()] }); + return (_a = links[0]) === null || _a === void 0 ? void 0 : _a.url; + } + isReady() { + return this.isInitialized; + } +} + +/** + * Null Storage Provider. + * + * Blocks all storage operations. Any attempt to use storage will result in an error. + * + * This will be the default storage provider if no default storage provider is available + * for the platform the SDK is running on. + * + * @category mid-level + */ +class NullStorageProvider { + close() { + return Promise.resolve(undefined); + } + init() { + return Promise.resolve(undefined); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + publishData(src) { + return Promise.reject(new GolemInternalError("NullStorageProvider does not support upload data")); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + publishFile(src) { + return Promise.reject(new GolemInternalError("NullStorageProvider does not support upload files")); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + receiveFile(path) { + return Promise.reject(new GolemInternalError("NullStorageProvider does not support download files")); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + receiveData(callback) { + return Promise.reject(new GolemInternalError("NullStorageProvider does not support download data")); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + release(urls) { + return Promise.resolve(undefined); + } + isReady() { + return true; + } +} + +const fsPromises = fs.promises; +/** + * Storage provider that uses GFTP over WebSockets. + */ +class WebSocketStorageProvider { + constructor(yagnaApi, options) { + var _a; + this.yagnaApi = yagnaApi; + /** + * Map of open services (IDs) indexed by GFTP url. + */ + this.services = new Map(); + this.ready = false; + this.openHandles = new Set(); + this.logger = ((_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child("storage")) || defaultLogger("storage"); + } + async close() { + this.ready = false; + await Promise.allSettled(Array.from(this.openHandles).map((handle) => handle.close())); + return this.release(Array.from(this.services.keys())); + } + init() { + this.ready = true; + return Promise.resolve(undefined); + } + async publishData(data) { + const fileInfo = await this.createFileInfo(); + const ws = await this.createSocket(fileInfo, ["GetMetadata", "GetChunk"]); + ws.addEventListener("message", (event) => { + if (!(event.data instanceof ArrayBuffer)) { + this.logger.error("Received non-ArrayBuffer data from the socket", { data: event.data }); + return; + } + const req = toObject(event.data); + this.logger.debug("Received GFTP request for publishData", req); + if (req.component === "GetMetadata") { + this.respond(ws, req.id, { fileSize: data.byteLength }); + } + else if (req.component === "GetChunk") { + this.respond(ws, req.id, { + content: data.slice(req.payload.offset, req.payload.offset + req.payload.size), + offset: req.payload.offset, + }); + } + else { + this.logger.error(`Unsupported message in publishData(): ${req.component}`); + } + }); + return fileInfo.url; + } + async publishFile(src) { + if (isBrowser) { + throw new GolemUserError("Cannot publish files in browser context, did you mean to use `publishData()`?"); + } + this.logger.info("Preparing file upload", { sourcePath: src }); + const fileInfo = await this.createFileInfo(); + const ws = await this.createSocket(fileInfo, ["GetMetadata", "GetChunk"]); + const fileStats = await fsPromises.stat(src); + const fileSize = fileStats.size; + const fileHandle = await fsPromises.open(src, "r"); + this.openHandles.add(fileHandle); + ws.addEventListener("message", async (event) => { + if (!(event.data instanceof ArrayBuffer)) { + this.logger.error("Received non-ArrayBuffer data from the socket", { data: event.data }); + return; + } + const req = toObject(event.data); + this.logger.debug("Received GFTP request for publishFile", req); + if (req.component === "GetMetadata") { + this.respond(ws, req.id, { fileSize }); + } + else if (req.component === "GetChunk") { + const { offset, size } = req.payload; + const chunkSize = Math.min(size, fileSize - offset); + const chunk = Buffer.alloc(chunkSize); + try { + await fileHandle.read(chunk, 0, chunkSize, offset); + this.respond(ws, req.id, { + content: chunk, + offset, + }); + } + catch (error) { + this.logger.error("Something went wrong while sending the file chunk", { error }); + } + } + else { + this.logger.error(`Unsupported message in publishFile(): ${req.component}`); + } + }); + return fileInfo.url; + } + async receiveData(callback) { + const data = []; + const fileInfo = await this.createFileInfo(); + const ws = await this.createSocket(fileInfo, ["UploadChunk", "UploadFinished"]); + ws.addEventListener("message", (event) => { + if (!(event.data instanceof ArrayBuffer)) { + this.logger.error("Received non-ArrayBuffer data from the socket", { data: event.data }); + return; + } + const req = toObject(event.data); + this.logger.debug("Received GFTP request for receiveData", req); + if (req.component === "UploadChunk") { + data.push(req.payload.chunk); + this.respond(ws, req.id, null); + } + else if (req.component === "UploadFinished") { + this.respond(ws, req.id, null); + const result = this.completeReceive(req.payload.hash, data); + callback(result); + } + else { + this.logger.error(`Unsupported message in receiveData(): ${req.component}`); + } + }); + return fileInfo.url; + } + async receiveFile(path) { + if (isBrowser) { + throw new GolemUserError("Cannot receive files in browser context, did you mean to use `receiveData()`?"); + } + this.logger.info("Preparing file download", { destination: path }); + const fileInfo = await this.createFileInfo(); + const fileHandle = await fsPromises.open(path, "w"); + this.openHandles.add(fileHandle); + const ws = await this.createSocket(fileInfo, ["UploadChunk", "UploadFinished"]); + ws.addEventListener("message", async (event) => { + if (!(event.data instanceof ArrayBuffer)) { + this.logger.error("Received non-ArrayBuffer data from the socket", { data: event.data }); + return; + } + const req = toObject(event.data); + this.logger.debug("Received GFTP request for receiveFile", req); + if (req.component === "UploadChunk") { + await fileHandle.write(req.payload.chunk.content); + this.respond(ws, req.id, null); + } + else if (req.component === "UploadFinished") { + this.respond(ws, req.id, null); + await fileHandle.close(); + this.openHandles.delete(fileHandle); + } + else { + this.logger.error(`Unsupported message in receiveFile(): ${req.component}`); + } + }); + return fileInfo.url; + } + async release(urls) { + urls.forEach((url) => { + const serviceId = this.services.get(url); + if (serviceId) { + this.deleteService(serviceId).catch((error) => this.logger.warn(`Failed to delete service`, { serviceId, error })); + } + this.services.delete(url); + }); + } + isReady() { + return this.ready; + } + async createFileInfo() { + const id = v4(); + const data = await this.yagnaApi.identity.getIdentity(); + const me = data.identity; + return { + id, + url: `gftp://${me}/${id}`, + }; + } + getWsConstructor() { + if (isBrowser) { + return WebSocket; + } + return NodeWebSocket; + } + async createSocket(fileInfo, components) { + const service = await this.createService(fileInfo, components); + const ws = new (this.getWsConstructor())(service.url, ["gsb+flexbuffers"]); + ws.addEventListener("error", () => { + this.logger.error(`Socket Error (${fileInfo.id})`); + }); + ws.binaryType = "arraybuffer"; + return ws; + } + async createService(fileInfo, components) { + const resp = (await this.yagnaApi.gsb.bindServices({ + listen: { + on: `/public/gftp/${fileInfo.id}`, + components, + }, + // FIXME: not present in ya-client for some reason + })); + const servicesId = resp.servicesId; + const messageEndpoint = `/gsb-api/v1/services/${servicesId}?authToken=${this.yagnaApi.yagnaOptions.apiKey}`; + const url = new URL(messageEndpoint, this.yagnaApi.yagnaOptions.basePath); + url.protocol = "ws:"; + this.services.set(fileInfo.url, servicesId); + return { url, serviceId: servicesId }; + } + async deleteService(id) { + await this.yagnaApi.gsb.unbindServices(id); + } + respond(ws, id, payload) { + ws.send(encode({ + id, + payload, + })); + } + completeReceive(hash, data) { + data.sort((a, b) => a.offset - b.offset); + const size = data.reduce((acc, cur) => acc + cur.content.byteLength, 0); + const buf = new Uint8Array(size); + data.forEach((chunk) => { + buf.set(chunk.content, chunk.offset); + }); + // FIXME: Use digest.update and async, as it can only handle 14MB/s on my machine, which is way to slow to do synchronously. + const hashHex = jsSha3.sha3_256(buf); + if (hash !== hashHex) { + throw new GolemInternalError(`File corrupted, expected hash ${hash}, got ${hashHex}`); + } + else { + return buf; + } + } +} + +var _GolemWorkError_agreement, _GolemWorkError_activity, _GolemWorkError_provider; +var WorkErrorCode; +(function (WorkErrorCode) { + WorkErrorCode["ServiceNotInitialized"] = "ServiceNotInitialized"; + WorkErrorCode["ScriptExecutionFailed"] = "ScriptExecutionFailed"; + WorkErrorCode["ActivityDestroyingFailed"] = "ActivityDestroyingFailed"; + WorkErrorCode["ActivityResultsFetchingFailed"] = "ActivityResultsFetchingFailed"; + WorkErrorCode["ActivityCreationFailed"] = "ActivityCreationFailed"; + WorkErrorCode["NetworkSetupMissing"] = "NetworkSetupMissing"; + WorkErrorCode["ScriptInitializationFailed"] = "ScriptInitializationFailed"; + WorkErrorCode["ActivityDeploymentFailed"] = "ActivityDeploymentFailed"; + WorkErrorCode["ActivityStatusQueryFailed"] = "ActivityStatusQueryFailed"; + WorkErrorCode["ActivityResetFailed"] = "ActivityResetFailed"; +})(WorkErrorCode || (WorkErrorCode = {})); +class GolemWorkError extends GolemModuleError { + constructor(message, code, agreement, activity, provider, previous) { + super(message, code, previous); + this.code = code; + this.previous = previous; + _GolemWorkError_agreement.set(this, void 0); + _GolemWorkError_activity.set(this, void 0); + _GolemWorkError_provider.set(this, void 0); + __classPrivateFieldSet(this, _GolemWorkError_agreement, agreement, "f"); + __classPrivateFieldSet(this, _GolemWorkError_activity, activity, "f"); + __classPrivateFieldSet(this, _GolemWorkError_provider, provider, "f"); + } + getAgreement() { + return __classPrivateFieldGet(this, _GolemWorkError_agreement, "f"); + } + getActivity() { + return __classPrivateFieldGet(this, _GolemWorkError_activity, "f"); + } + getProvider() { + return __classPrivateFieldGet(this, _GolemWorkError_provider, "f"); + } +} +_GolemWorkError_agreement = new WeakMap(), _GolemWorkError_activity = new WeakMap(), _GolemWorkError_provider = new WeakMap(); + +class Batch { + constructor(executor, storageProvider, logger) { + this.executor = executor; + this.storageProvider = storageProvider; + this.logger = logger; + this.script = new Script([]); + } + run(executableOrCommand, executableArgs) { + if (executableArgs) { + this.script.add(new Run(executableOrCommand, executableArgs)); + } + else { + this.script.add(new Run("/bin/sh", ["-c", executableOrCommand])); + } + return this; + } + transfer(from, to) { + this.script.add(new Transfer(from, to)); + return this; + } + uploadFile(src, dst) { + this.script.add(new UploadFile(this.storageProvider, src, dst)); + return this; + } + uploadJson(json, dst) { + const src = new TextEncoder().encode(JSON.stringify(json)); + this.script.add(new UploadData(this.storageProvider, src, dst)); + return this; + } + uploadData(data, dst) { + this.script.add(new UploadData(this.storageProvider, data, dst)); + return this; + } + downloadFile(src, dst) { + this.script.add(new DownloadFile(this.storageProvider, src, dst)); + return this; + } + /** + * Executes the batch of commands added via {@link run} returning result for each of the steps. + */ + async end() { + await this.script.before(); + try { + const allResults = []; + const script = this.script.getExeScriptRequest(); + this.logger.debug(`Sending exec script request to the exe-unit on provider:`, { script }); + const executionMetadata = await this.executor.execute(script); + const result$ = this.executor.getResultsObservable(executionMetadata); + return new Promise((resolve, reject) => { + this.logger.debug("Reading the results of the batch script"); + result$.subscribe({ + next: (res) => { + this.logger.debug(`Received data for batch script execution`, { res }); + allResults.push(res); + }, + complete: () => { + this.logger.debug("End of batch script execution"); + this.script + .after(allResults) + .then((results) => resolve(results)) + .catch((error) => reject(error)); + }, + error: (error) => { + const golemError = error instanceof GolemWorkError + ? error + : new GolemWorkError(`Unable to execute script ${error}`, WorkErrorCode.ScriptExecutionFailed, this.executor.activity.agreement, this.executor.activity, this.executor.activity.agreement.provider, error); + this.logger.debug("Error in batch script execution", { error }); + this.script + .after(allResults) + .then(() => reject(golemError)) + .catch(() => reject(golemError)); // Return original error, as it might be more important. + }, + }); + }); + } + catch (error) { + this.logger.error(`Failed to send the exec script to the exe-unit on provider`, { error }); + // NOTE: This is called only to ensure that each of the commands in the original script will be populated with at least `EmptyErrorResult`. + // That's actually a FIXME, as the command could start with an empty result, which eventually will get replaced with an actual one. + await this.script.after([]); + if (error instanceof GolemWorkError) { + throw error; + } + throw new GolemWorkError(`Unable to execute script ${error}`, WorkErrorCode.ScriptExecutionFailed, this.executor.activity.agreement, this.executor.activity, this.executor.activity.agreement.provider, error); + } + } + async endStream() { + const script = this.script; + await script.before(); + let executionMetadata; + try { + executionMetadata = await this.executor.execute(this.script.getExeScriptRequest()); + } + catch (error) { + // the original error is more important than the one from after() + await script.after([]); + if (error instanceof GolemWorkError) { + throw error; + } + throw new GolemWorkError(`Unable to execute script ${error}`, WorkErrorCode.ScriptExecutionFailed, this.executor.activity.agreement, this.executor.activity, this.executor.activity.agreement.provider, error); + } + const decodedResults = []; + const { activity } = this.executor; + const result$ = this.executor.getResultsObservable(executionMetadata); + return result$.pipe(map((chunk) => { + if (chunk.result !== "Error") { + return chunk; + } + throw new GolemWorkError(`${chunk === null || chunk === void 0 ? void 0 : chunk.message}. Stdout: ${String(chunk === null || chunk === void 0 ? void 0 : chunk.stdout).trim()}. Stderr: ${String(chunk === null || chunk === void 0 ? void 0 : chunk.stderr).trim()}`, WorkErrorCode.ScriptExecutionFailed, activity.agreement, activity, activity.provider); + }), tap((chunk) => { + decodedResults.push(chunk); + }), finalize(() => script.after(decodedResults).catch((error) => this.logger.error("Failed to cleanup script", { error })))); + } +} + +const DEFAULTS = { + exitWaitingTimeout: 20000, +}; +/** + * RemoteProcess class representing the process spawned on the provider by {@link ExeUnit.runAndStream} + */ +class RemoteProcess { + constructor(activityModule, activityResult$, activity, logger) { + this.activityModule = activityModule; + this.activity = activity; + this.logger = logger; + /** + * Stream connected to stdout from provider process + */ + this.stdout = new Subject(); + /** + * Stream connected to stderr from provider process + */ + this.stderr = new Subject(); + this.subscription = activityResult$ + .pipe(finalize(() => { + this.stdout.complete(); + this.stderr.complete(); + })) + .subscribe({ + next: (result) => { + this.lastResult = result; + if (result.stdout) + this.stdout.next(result.stdout); + if (result.stderr) + this.stderr.next(result.stderr); + }, + error: (error) => { + this.streamError = error; + }, + }); + } + /** + * Waits for the process to complete and returns the last part of the command's results as a {@link Result} object. + * If the timeout is reached, the return promise will be rejected. + * @param timeout - maximum waiting time im ms for the final result (default: 20_000) + */ + waitForExit(timeout) { + return new Promise((resolve, reject) => { + const timeoutInMs = timeout !== null && timeout !== void 0 ? timeout : DEFAULTS.exitWaitingTimeout; + const timeoutId = setTimeout(() => { + reject(new GolemWorkError(`Unable to get activity results. The waiting time (${timeoutInMs} ms) for the final result has been exceeded`, WorkErrorCode.ActivityResultsFetchingFailed, this.activity.agreement, this.activity, this.activity.provider, new GolemTimeoutError(`The waiting time (${timeoutInMs} ms) for the final result has been exceeded`))); + this.activityModule + .destroyActivity(this.activity) + .catch((err) => this.logger.error(`Error when destroying activity`, err)); + }, timeoutInMs); + const end = () => { + clearTimeout(timeoutId); + if (this.lastResult) { + resolve(this.lastResult); + } + else { + reject(new GolemWorkError(`An error occurred while retrieving the results. ${this.streamError}`, WorkErrorCode.ActivityResultsFetchingFailed, this.activity.agreement, this.activity, this.activity.provider)); + this.activityModule + .destroyActivity(this.activity) + .catch((err) => this.logger.error(`Error when destroying activity`, err)); + } + }; + this.subscription.add(() => end()); + }); + } + /** + * Checks if the exe-script batch from Yagna has completed, reflecting all work and streaming to be completed + */ + isFinished() { + return this.subscription.closed; + } +} + +/** + * Allows proxying of TCP traffic to a service running in an activity on a provider via the requestor + * + * **IMPORTANT** + * + * This feature is supported only in the Node.js environment. In has no effect in browsers. + * + * General solution description: + * + * - Open a TCP server and listen to connections + * - When a new connection arrives, establish a WS connection with yagna + * - Pass any incoming data from the client TCP socket to the WS, buffer it when the socket is not ready yet + * - Pass any returning data from the WS to the client TCP socket, but don't do it if the client socket already disconnected + * - When the WS will be closed, then close the client socket as well + * - When the client TCP socket will be closed, close the WS as well + * - Handle teardown of the TCP-WS bridge by clearing communication buffers to avoid memory leaks + */ +class TcpProxy { + constructor( + /** + * The URL to the WebSocket implementing the communication transport layer + */ + wsUrl, + /** + * The yagna app-key used to authenticate the WebSocket connection + */ + appKey, + /** + * Additional options of the proxy + */ + options = {}) { + var _a; + this.wsUrl = wsUrl; + this.appKey = appKey; + this.events = new EventEmitter(); + checkAndThrowUnsupportedInBrowserError("TCP Proxy"); + this.heartBeatSec = (_a = options.heartBeatSec) !== null && _a !== void 0 ? _a : 10; + this.logger = options.logger ? options.logger.child("tcp-proxy") : defaultLogger("tcp-proxy"); + this.server = net.createServer((client) => { + this.logger.debug("Client connected to TCP Server"); + const state = { + /** Tells if the client socket is in a usable state */ + sReady: true, + /** Buffer for chunks of data that arrived from yagna's WS and should be delivered to the client socket when it's ready */ + sBuffer: [], + /** Tells if the WS with yagna is ready for communication */ + wsReady: false, + /** Buffer for chunks of data that arrived from the client socket and should be sent to yagna's WS when it's ready */ + wsBuffer: [], + }; + const clearSocketBuffer = () => (state.sBuffer = []); + const clearWebSocketBuffer = () => (state.wsBuffer = []); + // UTILITY METHODS + const flushSocketBuffer = () => { + this.logger.debug("Flushing Socket buffer"); + if (state.sBuffer.length > 0) { + client.write(Buffer$1.concat(state.sBuffer)); + } + clearSocketBuffer(); + }; + const flushWebSocketBuffer = () => { + this.logger.debug("Flushing WebSocket buffer"); + if (state.wsBuffer.length > 0) { + ws.send(Buffer$1.concat(state.wsBuffer), { + binary: true, + mask: true, + }); + } + clearWebSocketBuffer(); + }; + const teardownBridge = () => { + ws.close(); + client.end(); + clearWebSocketBuffer(); + clearSocketBuffer(); + }; + const ws = new WebSocket$1(this.wsUrl, { headers: { authorization: `Bearer ${this.appKey}` } }); + // OPEN HANDLERS + ws.on("open", () => { + this.logger.debug("Yagna WS opened"); + state.wsReady = true; + // Push any pending data to the web-socket + flushWebSocketBuffer(); + }); + // NOTE: That's not really required in our use-case, added for completeness of the flow + client.on("connect", () => { + this.logger.debug("Client socket connected"); + state.sReady = true; + // Push any pending data to the client socket + flushSocketBuffer(); + }); + // ERROR HANDLERS + ws.on("error", (error) => { + this.notifyOfError("Yagna WS encountered an error", error); + teardownBridge(); + }); + client.on("error", (error) => { + this.notifyOfError("Server Socket encountered an error", error); + teardownBridge(); + }); + // TERMINATION HANDLERS + // When the WS socket will be closed + ws.on("close", () => { + clearInterval(heartBeatInt); + this.logger.debug("Yagna WS closed"); + client.end(); + clearWebSocketBuffer(); + clearSocketBuffer(); + }); + ws.on("end", () => { + this.logger.debug("Yagna WS end"); + client.end(); + clearWebSocketBuffer(); + clearSocketBuffer(); + }); + // When the client will disconnect + client.on("close", (error) => { + if (error) { + this.logger.error("Server Socket encountered closed with an error error"); + } + else { + this.logger.debug("Server Socket has been closed (client disconnected)"); + } + ws.close(); + clearWebSocketBuffer(); + clearSocketBuffer(); + }); + // DATA TRANSFER + // Send data to the WebSocket or buffer if it's not ready yet + client.on("data", async (chunk) => { + this.logger.debug("Server Socket received data", { length: chunk.length, wsReady: state.wsReady }); + if (!state.wsReady) { + state.wsBuffer.push(chunk); + } + else { + ws.send(chunk, { binary: true, mask: true }); + } + }); + // Send data to the client or buffer if it's not ready yet + ws.on("message", (message) => { + const length = "length" in message ? message.length : null; + this.logger.debug("Yagna WS received data", { length, socketReady: state.sReady }); + if (message instanceof Buffer$1) { + if (!state.sReady) { + state.wsBuffer.push(message); + } + else { + client.write(message); + } + } + else { + // Defensive programming + this.logger.error("Encountered unsupported type of message", typeof message); + } + }); + // WS health monitoring + ws.on("ping", () => { + this.logger.debug("Yagna WS received ping event"); + }); + // Configure pings to check the health of the WS to Yagna + let isAlive = true; + const heartBeat = () => { + if (state.wsReady) { + this.logger.debug("Yagna WS checking if the client is alive"); + if (!isAlive) { + this.notifyOfError("Yagna WS doesn't seem to be healthy, going to terminate"); + // Previous check failed, time to terminate + return ws.terminate(); + } + isAlive = false; + ws.ping(); + } + else { + this.logger.debug("Yagna WS is not ready yet, skipping heart beat"); + } + }; + const heartBeatInt = setInterval(heartBeat, this.heartBeatSec * 1000); + ws.on("pong", () => { + this.logger.debug("Yagna WS received pong event"); + isAlive = true; + }); + }); + this.attachDebugLogsToServer(); + } + /** + * Start the proxy in listening mode + * + * @param port The port number to use on the requestor + * @param abort The abort controller to use in order to control cancelling requests + */ + async listen(port, abort) { + this.logger.debug("TcpProxy listen initiated"); + // Retries if possible + this.server.listen({ + port, + signal: abort ? abort.signal : undefined, + }); + return new Promise((resolve, reject) => { + const handleError = (err) => { + this.notifyOfError("TcpProxy failed to start listening", { port, err }); + this.server.removeListener("listening", handleListen); + reject(err); + }; + const handleListen = () => { + this.logger.info("TcpProxy is listening", { port }); + this.server.removeListener("error", handleError); + resolve(); + }; + this.server.once("listening", handleListen); + this.server.once("error", handleError); + }); + } + /** + * Gracefully close the proxy + */ + close() { + this.logger.debug("TCP Server close initiated by the user"); + return new Promise((resolve, reject) => { + var _a; + if (this.server.listening) { + (_a = this.server) === null || _a === void 0 ? void 0 : _a.close((err) => { + if (err) { + this.notifyOfError("TCP Server closed with an error", err); + reject(err); + } + else { + this.logger.info("TCP server closed - was listening"); + resolve(); + } + }); + } + else { + this.logger.info("TCP Server closed - was not listening"); + resolve(); + } + }); + } + notifyOfError(message, err) { + this.logger.error(message, err); + this.events.emit("error", `${message}: ${err}`); + } + attachDebugLogsToServer() { + this.server.on("listening", () => this.logger.debug("TCP Server started to listen")); + this.server.on("close", () => this.logger.debug("TCP Server closed")); + this.server.on("connection", () => this.logger.debug("TCP Server received new connection")); + this.server.on("drop", (data) => this.logger.debug("TCP Server dropped a connection because of reaching `maxConnections`", { data })); + this.server.on("error", (err) => this.logger.error("Server event 'error'", err)); + } +} + +/** + * Groups most common operations that the requestors might need to implement their workflows + */ +class ExeUnit { + constructor(activity, activityModule, options) { + var _a, _b, _c; + this.activity = activity; + this.activityModule = activityModule; + this.options = options; + this.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) !== null && _a !== void 0 ? _a : defaultLogger("work"); + this.provider = activity.provider; + this.storageProvider = (_b = options === null || options === void 0 ? void 0 : options.storageProvider) !== null && _b !== void 0 ? _b : new NullStorageProvider(); + this.networkNode = options === null || options === void 0 ? void 0 : options.networkNode; + this.abortSignal = createAbortSignalFromTimeout(options === null || options === void 0 ? void 0 : options.signalOrTimeout); + this.executor = this.activityModule.createScriptExecutor(this.activity, { + ...(_c = this.options) === null || _c === void 0 ? void 0 : _c.executionOptions, + signalOrTimeout: this.abortSignal, + }); + } + async fetchState() { + if (this.abortSignal.aborted) { + throw new GolemAbortError("ExeUnit has been aborted"); + } + return this.activityModule + .refreshActivity(this.activity) + .then((activity) => activity.getState()) + .catch((err) => { + this.logger.error("Failed to read activity state", err); + throw new GolemWorkError("Failed to read activity state", WorkErrorCode.ActivityStatusQueryFailed, this.activity.agreement, this.activity, err); + }); + } + /** + * This function initializes the exe unit by deploying the image to the remote machine + * and preparing and running the environment. + * This process also includes running setup function if the user has defined it + */ + async setup() { + try { + let state = await this.fetchState(); + if (state === ActivityStateEnum.Ready) { + await this.setupActivity(); + return; + } + if (state === ActivityStateEnum.Initialized) { + await this.deployActivity(); + } + await sleep(1000, true); + state = await this.fetchState(); + if (state !== ActivityStateEnum.Ready) { + const currentDateTime = new Date().toISOString(); + throw new GolemWorkError(`Activity ${this.activity.id} cannot reach the Ready state at: ${currentDateTime}. Current state: ${state}`, WorkErrorCode.ActivityDeploymentFailed, this.activity.agreement, this.activity, this.activity.provider); + } + await this.setupActivity(); + } + catch (error) { + if (this.abortSignal.aborted) { + throw this.abortSignal.reason.name === "TimeoutError" + ? new GolemTimeoutError("Initializing of the exe-unit has been aborted due to a timeout", this.abortSignal.reason) + : new GolemAbortError("Initializing of the exe-unit has been aborted", this.abortSignal.reason); + } + throw error; + } + } + /** + * This function starts the teardown function if the user has defined it. + * It is run before the machine is destroyed. + */ + async teardown() { + var _a; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.teardown) { + await this.options.teardown(this); + } + } + async deployActivity() { + var _a, _b; + try { + const executionMetadata = await this.executor.execute(new Script([ + new Deploy({ + ...(_b = (_a = this.networkNode) === null || _a === void 0 ? void 0 : _a.getNetworkDeploymentArg) === null || _b === void 0 ? void 0 : _b.call(_a), + ...this.getVolumeDeploymentArg(), + }), + new Start(), + ]).getExeScriptRequest()); + const result$ = this.executor.getResultsObservable(executionMetadata); + // if any result is an error, throw an error + await lastValueFrom(result$.pipe(tap((result) => { + if (result.result === "Error") { + throw new Error(String(result.message)); + } + }))); + } + catch (error) { + throw new GolemWorkError(`Unable to deploy activity. ${error}`, WorkErrorCode.ActivityDeploymentFailed, this.activity.agreement, this.activity, this.activity.provider, error); + } + } + async setupActivity() { + var _a; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.setup) { + await this.options.setup(this); + } + } + async run(exeOrCmd, argsOrOptions, options) { + const isArray = Array.isArray(argsOrOptions); + this.logger.debug("Running command", { + command: isArray ? `${exeOrCmd} ${argsOrOptions === null || argsOrOptions === void 0 ? void 0 : argsOrOptions.join(" ")}` : exeOrCmd, + provider: this.provider.name, + }); + const run = isArray + ? new Run(exeOrCmd, argsOrOptions, options === null || options === void 0 ? void 0 : options.env, options === null || options === void 0 ? void 0 : options.capture) + : new Run("/bin/sh", ["-c", exeOrCmd], argsOrOptions === null || argsOrOptions === void 0 ? void 0 : argsOrOptions.env, argsOrOptions === null || argsOrOptions === void 0 ? void 0 : argsOrOptions.capture); + const runOptions = isArray ? options : argsOrOptions; + return this.runOneCommand(run, runOptions); + } + async runAndStream(exeOrCmd, argsOrOptions, options) { + const isArray = Array.isArray(argsOrOptions); + const capture = { + stdout: { stream: { format: "string" } }, + stderr: { stream: { format: "string" } }, + }; + const run = isArray + ? new Run(exeOrCmd, argsOrOptions, options === null || options === void 0 ? void 0 : options.env, capture) + : new Run("/bin/sh", ["-c", exeOrCmd], argsOrOptions === null || argsOrOptions === void 0 ? void 0 : argsOrOptions.env, capture); + const script = new Script([run]); + // In this case, the script consists only of one run command, + // so we skip the execution of script.before and script.after + const executionMetadata = await this.executor.execute(script.getExeScriptRequest()); + const activityResult$ = this.executor.getResultsObservable(executionMetadata, true, options === null || options === void 0 ? void 0 : options.signalOrTimeout, options === null || options === void 0 ? void 0 : options.maxRetries); + return new RemoteProcess(this.activityModule, activityResult$, this.activity, this.logger); + } + /** + * Generic transfer command, requires the user to provide a publicly readable transfer source + * + * @param from - publicly available resource for reading. Supported protocols: file, http, ftp or gftp + * @param to - file path + * @param options Additional run options. + */ + async transfer(from, to, options) { + this.logger.debug(`Transferring`, { from, to }); + return this.runOneCommand(new Transfer(from, to), options); + } + async uploadFile(src, dst, options) { + this.logger.debug(`Uploading file`, { src, dst }); + return this.runOneCommand(new UploadFile(this.storageProvider, src, dst), options); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + uploadJson(json, dst, options) { + this.logger.debug(`Uploading json`, { dst }); + const src = new TextEncoder().encode(JSON.stringify(json)); + return this.runOneCommand(new UploadData(this.storageProvider, src, dst), options); + } + uploadData(data, dst, options) { + this.logger.debug(`Uploading data`, { dst }); + return this.runOneCommand(new UploadData(this.storageProvider, data, dst), options); + } + downloadFile(src, dst, options) { + this.logger.debug(`Downloading file from`, { src, dst }); + return this.runOneCommand(new DownloadFile(this.storageProvider, src, dst), options); + } + downloadData(src, options) { + this.logger.debug(`Downloading data`, { src }); + return this.runOneCommand(new DownloadData(this.storageProvider, src), options); + } + async downloadJson(src, options) { + this.logger.debug(`Downloading json`, { src }); + const result = await this.downloadData(src, options); + if (result.result !== "Ok") { + return new Result({ + ...result, + data: undefined, + }); + } + return new Result({ + ...result, + data: JSON.parse(new TextDecoder().decode(result.data)), + }); + } + beginBatch() { + return new Batch(this.executor, this.storageProvider, this.logger); + } + /** + * Provides a WebSocket URI that allows communicating with a remote process listening on the target port + * + * @param port The port number used by the service running within an activity on the provider + */ + getWebsocketUri(port) { + if (!this.networkNode) + throw new GolemWorkError("There is no network in this exe-unit", WorkErrorCode.NetworkSetupMissing, this.activity.agreement, this.activity, this.activity.provider); + return this.networkNode.getWebsocketUri(port); + } + getIp() { + if (!this.networkNode) + throw new GolemWorkError("There is no network in this exe-unit", WorkErrorCode.NetworkSetupMissing, this.activity.agreement, this.activity, this.activity.provider); + return this.networkNode.ip; + } + /** + * Creates a new TCP proxy that will allow tunnelling the TPC traffic from the provider via the requestor + * + * @param portOnProvider The port that the service running on the provider is listening to + */ + createTcpProxy(portOnProvider) { + var _a, _b; + if (!((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.yagnaOptions) === null || _b === void 0 ? void 0 : _b.apiKey)) { + throw new GolemConfigError("You need to provide yagna API key to use the TCP Proxy functionality"); + } + return new TcpProxy(this.getWebsocketUri(portOnProvider), this.options.yagnaOptions.apiKey, { + logger: this.logger, + }); + } + getDto() { + return { + provider: this.provider, + id: this.activity.id, + agreement: this.activity.agreement, + }; + } + async runOneCommand(command, options) { + // Initialize script. + const script = new Script([command]); + await script.before().catch((e) => { + var _a, _b; + throw new GolemWorkError(`Script initialization failed for command: ${JSON.stringify(command.toJson())}. ${((_b = (_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) || (e === null || e === void 0 ? void 0 : e.message) || e}`, WorkErrorCode.ScriptInitializationFailed, this.activity.agreement, this.activity, this.activity.provider, e); + }); + await sleep(100, true); + // Send script. + const executionMetadata = await this.executor.execute(script.getExeScriptRequest()); + const result$ = this.executor.getResultsObservable(executionMetadata, false, options === null || options === void 0 ? void 0 : options.signalOrTimeout, options === null || options === void 0 ? void 0 : options.maxRetries); + // Process result. + let allResults = await lastValueFrom(result$.pipe(toArray())); + allResults = await script.after(allResults); + // Handle errors. + const commandsErrors = allResults.filter((res) => res.result === "Error"); + if (commandsErrors.length) { + const errorMessage = commandsErrors + .map((err) => { var _a, _b; return `Error: ${err.message}. Stdout: ${(_a = err.stdout) === null || _a === void 0 ? void 0 : _a.toString().trim()}. Stderr: ${(_b = err.stderr) === null || _b === void 0 ? void 0 : _b.toString().trim()}`; }) + .join(". "); + this.logger.warn(`Task error`, { + provider: this.provider.name, + error: errorMessage, + }); + } + return allResults[0]; + } + getVolumeDeploymentArg() { + var _a; + if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.volumes)) { + return {}; + } + const argument = { + volumes: {}, + }; + for (const [, volumeSpec] of Object.entries(this.options.volumes)) { + argument.volumes[volumeSpec.path] = { + storage: { size: `${volumeSpec.sizeGib}g`, errors: "panic" }, + }; + } + return argument; + } +} + +async function withTimeout(promise, timeoutMs) { + let timeoutId; + const timeout = (milliseconds) => new Promise((_, reject) => { + timeoutId = setTimeout(() => reject(new GolemTimeoutError("Timeout for the operation was reached")), milliseconds); + }); + return Promise.race([promise, timeout(timeoutMs)]).finally(() => clearTimeout(timeoutId)); +} + +const RETRYABLE_ERROR_STATUS_CODES = [408, 500]; +class ExeScriptExecutor { + constructor(activity, activityModule, logger, options) { + this.activity = activity; + this.activityModule = activityModule; + this.logger = logger; + this.options = new ExecutionConfig(options); + this.abortSignal = createAbortSignalFromTimeout(options === null || options === void 0 ? void 0 : options.signalOrTimeout); + } + /** + * Executes the provided script and returns the batch id and batch size that can be used + * to fetch it's results + * @param script + * @returns script execution metadata - batch id and batch size that can be used to fetch results using `getResultsObservable` + */ + async execute(script) { + try { + this.abortSignal.throwIfAborted(); + const batchId = await this.send(script); + const batchSize = JSON.parse(script.text).length; + this.logger.debug(`Script sent.`, { batchId, script }); + return { batchId, batchSize }; + } + catch (error) { + const message = getMessageFromApiError(error); + this.logger.error("Execution of script failed.", { + reason: message, + }); + if (this.abortSignal.aborted) { + throw new GolemAbortError("Executions of script has been aborted", this.abortSignal.reason); + } + throw new GolemWorkError(`Unable to execute script. ${message}`, WorkErrorCode.ScriptExecutionFailed, this.activity.agreement, this.activity, this.activity.provider, error); + } + } + /** + * Given a batch id and batch size collect the results from yagna. You can choose to either + * stream them as they go or poll for them. When a timeout is reached (by either the timeout provided + * as an argument here or in the constructor) the observable will emit an error. + * + * + * @param batch - batch id and batch size + * @param stream - define type of getting results from execution (polling or streaming) + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the execution + * @param maxRetries - maximum number of retries retrieving results when an error occurs, default: 10 + */ + getResultsObservable(batch, stream, signalOrTimeout, maxRetries) { + const { signal, cleanup } = anyAbortSignal(this.abortSignal, createAbortSignalFromTimeout(signalOrTimeout)); + // observable that emits when the script execution should be aborted + const abort$ = new Observable((subscriber) => { + const getError = () => new GolemAbortError("Execution of script has been aborted", signal.reason); + if (signal.aborted) { + subscriber.error(getError()); + } + signal.addEventListener("abort", () => { + subscriber.error(getError()); + }); + }); + // get an observable that will emit results of a batch execution + const results$ = stream + ? this.streamingBatch(batch.batchId, batch.batchSize) + : this.pollingBatch(batch.batchId, maxRetries); + return mergeUntilFirstComplete(abort$, results$).pipe(finalize(cleanup)); + } + async send(script) { + return withTimeout(this.activityModule.executeScript(this.activity, script), 10000); + } + pollingBatch(batchId, maxRetries) { + let isCompleted = false; + let lastIndex; + const { id: activityId, agreement } = this.activity; + const { activityExeBatchResultPollIntervalSeconds, activityExeBatchResultMaxRetries } = this.options; + const { logger, activity, activityModule } = this; + return new Observable((subscriber) => { + const pollForResults = async () => { + if (isCompleted) { + subscriber.complete(); + return; + } + logger.debug("Polling for batch script execution result"); + await retry(async (bail, attempt) => { + var _a, _b; + logger.debug(`Trying to poll for batch execution results from yagna. Attempt: ${attempt}`); + try { + if (isCompleted) { + bail(new Error("Batch is finished")); + } + const results = await activityModule.getBatchResults(activity, batchId, undefined, activityExeBatchResultPollIntervalSeconds); + const newResults = results && results.slice(lastIndex + 1); + logger.debug(`Received batch execution results`, { results: newResults, activityId }); + if (Array.isArray(newResults) && newResults.length) { + newResults.forEach((result) => { + subscriber.next(result); + isCompleted || (isCompleted = !!result.isBatchFinished); + lastIndex = result.index; + }); + } + } + catch (error) { + logger.debug(`Failed to fetch activity results. Attempt: ${attempt}. ${error}`); + const errorStatus = (_a = error === null || error === void 0 ? void 0 : error.status) !== null && _a !== void 0 ? _a : (_b = error.previous) === null || _b === void 0 ? void 0 : _b.status; + if (RETRYABLE_ERROR_STATUS_CODES.includes(errorStatus)) { + throw error; + } + else { + bail(error); + } + } + }, { + retries: maxRetries !== null && maxRetries !== void 0 ? maxRetries : activityExeBatchResultMaxRetries, + maxTimeout: 15000, + }); + return runOnNextEventLoopIteration(pollForResults); + }; + pollForResults().catch((error) => { + logger.error(`Polling for batch results failed`, error); + subscriber.error(error); + }); + return () => { + isCompleted = true; + }; + }).pipe(catchError((error) => { + if (error instanceof GolemWorkError) { + throw error; + } + throw new GolemWorkError(`Unable to get activity results. ${error}`, WorkErrorCode.ActivityResultsFetchingFailed, agreement, activity, activity.provider, error); + })); + } + streamingBatch(batchId, batchSize) { + return this.activityModule.observeStreamingBatchEvents(this.activity, batchId).pipe(map((resultEvents) => this.parseEventToResult(resultEvents, batchSize)), takeWhile((result) => !result.isBatchFinished, true), + // transform to domain error + catchError((error) => { + throw new GolemWorkError(`Unable to get activity results. ${error}`, WorkErrorCode.ActivityResultsFetchingFailed, this.activity.agreement, this.activity, this.activity.provider, error); + })); + } + parseEventToResult(event, batchSize) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j; + // StreamingBatchEvent has a slightly more extensive structure, + // including a return code that could be added to the Result entity... (?) + const result = new Result({ + index: event.index, + eventDate: event.timestamp, + result: ((_a = event === null || event === void 0 ? void 0 : event.kind) === null || _a === void 0 ? void 0 : _a.finished) + ? ((_c = (_b = event === null || event === void 0 ? void 0 : event.kind) === null || _b === void 0 ? void 0 : _b.finished) === null || _c === void 0 ? void 0 : _c.return_code) === 0 + ? "Ok" + : "Error" + : ((_d = event === null || event === void 0 ? void 0 : event.kind) === null || _d === void 0 ? void 0 : _d.stderr) + ? "Error" + : "Ok", + stdout: (_e = event === null || event === void 0 ? void 0 : event.kind) === null || _e === void 0 ? void 0 : _e.stdout, + stderr: (_f = event === null || event === void 0 ? void 0 : event.kind) === null || _f === void 0 ? void 0 : _f.stderr, + message: (_h = (_g = event === null || event === void 0 ? void 0 : event.kind) === null || _g === void 0 ? void 0 : _g.finished) === null || _h === void 0 ? void 0 : _h.message, + isBatchFinished: event.index + 1 >= batchSize && Boolean((_j = event === null || event === void 0 ? void 0 : event.kind) === null || _j === void 0 ? void 0 : _j.finished), + }); + this.logger.debug("Received stream batch execution result", { result }); + return result; + } +} + +class ActivityModuleImpl { + constructor(services) { + this.services = services; + this.events = new EventEmitter(); + this.logger = defaultLogger("activity"); + this.logger = services.logger; + this.activityApi = services.activityApi; + } + createScriptExecutor(activity, options) { + return new ExeScriptExecutor(activity, this, this.logger.child("executor"), options); + } + async executeScript(activity, script) { + this.logger.debug("Executing script on activity", { activityId: activity.id }); + try { + this.events.emit("scriptSent", { + activity, + script, + }); + const result = await this.activityApi.executeScript(activity, script); + this.events.emit("scriptExecuted", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after script execution", { activityId: activity.id }); + return activity; + }), + script, + result, + }); + return result; + } + catch (error) { + this.events.emit("errorExecutingScript", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after script execution error", { activityId: activity.id }); + return activity; + }), + script, + error, + }); + throw error; + } + } + async getBatchResults(activity, batchId, commandIndex, timeout) { + this.logger.debug("Fetching batch results", { activityId: activity.id, batchId }); + try { + const results = await this.activityApi.getExecBatchResults(activity, batchId, commandIndex, timeout); + this.events.emit("batchResultsReceived", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after batch results received", { activityId: activity.id }); + return activity; + }), + batchId, + results, + }); + return results; + } + catch (error) { + this.events.emit("errorGettingBatchResults", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after batch results error", { activityId: activity.id }); + return activity; + }), + batchId, + error, + }); + throw error; + } + } + observeStreamingBatchEvents(activity, batchId, commandIndex) { + this.logger.debug("Observing streaming batch events", { activityId: activity.id, batchId }); + return this.activityApi.getExecBatchEvents(activity, batchId, commandIndex).pipe(tap(async (event) => { + this.events.emit("batchEventsReceived", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after batch events received", { activityId: activity.id }); + return activity; + }), + batchId, + event, + }); + }), catchError(async (error) => { + this.events.emit("errorGettingBatchEvents", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after batch events error", { activityId: activity.id }); + return activity; + }), + batchId, + error, + }); + throw error; + })); + } + async createActivity(agreement) { + this.logger.debug("Creating activity", { + agreementId: agreement.id, + provider: agreement.provider, + }); + try { + const activity = await this.activityApi.createActivity(agreement); + this.events.emit("activityCreated", { activity }); + this.logger.info("Created activity", { + activityId: activity.id, + agreementId: agreement.id, + provider: agreement.provider, + }); + return activity; + } + catch (error) { + this.events.emit("errorCreatingActivity", error); + throw error; + } + } + async destroyActivity(activity) { + this.logger.debug("Destroying activity", activity); + try { + const updated = await this.activityApi.destroyActivity(activity); + this.events.emit("activityDestroyed", { + activity: updated, + }); + this.logger.info("Destroyed activity", { + activityId: updated.id, + agreementId: updated.agreement.id, + provider: updated.agreement.provider, + }); + return updated; + } + catch (error) { + this.events.emit("errorDestroyingActivity", { activity, error }); + throw error; + } + } + async refreshActivity(staleActivity) { + // logging to debug level to avoid spamming the logs because this method is called frequently + this.logger.debug("Fetching latest activity state", { + activityId: staleActivity.id, + lastState: staleActivity.getState(), + }); + try { + const freshActivity = await this.activityApi.getActivity(staleActivity.id); + if (freshActivity.getState() !== freshActivity.getPreviousState()) { + this.logger.debug("Activity state changed", { + activityId: staleActivity.id, + previousState: freshActivity.getPreviousState(), + newState: freshActivity.getState(), + }); + this.events.emit("activityStateChanged", { + activity: freshActivity, + previousState: freshActivity.getPreviousState(), + }); + } + return freshActivity; + } + catch (error) { + this.events.emit("errorRefreshingActivity", { + activity: staleActivity, + error, + }); + throw error; + } + } + async findActivityById(activityId) { + this.logger.info("Fetching activity by ID", { activityId }); + return await this.activityApi.getActivity(activityId); + } + async createExeUnit(activity, options) { + this.logger.debug("Creating exe-unit for activity", { activityId: activity.id }); + const exe = new ExeUnit(activity, this, { + yagnaOptions: this.services.yagna.yagnaOptions, + logger: this.logger.child("exe-unit"), + ...options, + }); + this.logger.debug("Initializing the exe-unit for activity", { activityId: activity.id }); + try { + await exe.setup(); + const refreshedActivity = await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after work context initialization", { activityId: activity.id }); + return activity; + }); + this.events.emit("exeUnitInitialized", { + activity: refreshedActivity, + }); + this.logger.info("Initialized exe-unit", { + activityId: activity.id, + state: refreshedActivity.getState(), + }); + return exe; + } + catch (error) { + this.events.emit("errorInitializingExeUnit", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after exe-unit initialization error", { + activityId: activity.id, + }); + return activity; + }), + error, + }); + throw error; + } + } +} + +var _GolemNetworkError_network; +var NetworkErrorCode; +(function (NetworkErrorCode) { + NetworkErrorCode["ServiceNotInitialized"] = "ServiceNotInitialized"; + NetworkErrorCode["NetworkSetupMissing"] = "NetworkSetupMissing"; + NetworkErrorCode["NetworkCreationFailed"] = "NetworkCreationFailed"; + NetworkErrorCode["NoAddressesAvailable"] = "NoAddressesAvailable"; + NetworkErrorCode["AddressOutOfRange"] = "AddressOutOfRange"; + NetworkErrorCode["AddressAlreadyAssigned"] = "AddressAlreadyAssigned"; + NetworkErrorCode["NodeAddingFailed"] = "NodeAddingFailed"; + NetworkErrorCode["NodeRemovalFailed"] = "NodeRemovalFailed"; + NetworkErrorCode["NetworkRemovalFailed"] = "NetworkRemovalFailed"; + NetworkErrorCode["GettingIdentityFailed"] = "GettingIdentityFailed"; + NetworkErrorCode["NetworkRemoved"] = "NetworkRemoved"; +})(NetworkErrorCode || (NetworkErrorCode = {})); +class GolemNetworkError extends GolemModuleError { + constructor(message, code, network, previous) { + super(message, code, previous); + this.code = code; + this.previous = previous; + _GolemNetworkError_network.set(this, void 0); + __classPrivateFieldSet(this, _GolemNetworkError_network, network, "f"); + } + getNetwork() { + return __classPrivateFieldGet(this, _GolemNetworkError_network, "f"); + } +} +_GolemNetworkError_network = new WeakMap(); + +var NetworkState; +(function (NetworkState) { + NetworkState["Active"] = "Active"; + NetworkState["Removed"] = "Removed"; +})(NetworkState || (NetworkState = {})); +class Network { + constructor(id, ip, mask, gateway) { + this.id = id; + this.nodes = new Map(); + this.state = NetworkState.Active; + this.ipRange = IPv4CidrRange.fromCidr(mask ? `${ip.split("/")[0]}/${IPv4Mask.fromDecimalDottedString(mask).prefix}` : ip); + this.ipIterator = this.ipRange[Symbol.iterator](); + this.ip = this.getFirstAvailableIpAddress(); + this.mask = this.ipRange.getPrefix().toMask(); + this.gateway = gateway ? new IPv4(gateway) : undefined; + } + /** + * Returns information about the network. + */ + getNetworkInfo() { + var _a, _b; + return { + id: this.id, + ip: this.ip.toString(), + mask: this.mask.toString(), + gateway: (_b = (_a = this.gateway) === null || _a === void 0 ? void 0 : _a.toString) === null || _b === void 0 ? void 0 : _b.call(_a), + nodes: Object.fromEntries(Array.from(this.nodes).map(([id, node]) => [node.ip, id])), + }; + } + /** + * Adds a node to the network. + * @param node - The network node to be added. + */ + addNode(node) { + if (this.isRemoved()) { + throw new GolemNetworkError(`Unable to add node ${node.id} to removed network`, NetworkErrorCode.NetworkRemoved, this.getNetworkInfo()); + } + if (this.hasNode(node)) { + throw new GolemNetworkError(`Node ${node.id} has already been added to this network`, NetworkErrorCode.AddressAlreadyAssigned); + } + this.nodes.set(node.id, node); + } + /** + * Checks whether the node belongs to the network. + * @param node - The network node to check. + */ + hasNode(node) { + return this.nodes.has(node.id); + } + /** + * Removes a node from the network. + * @param node - The network node to be removed. + */ + removeNode(node) { + if (this.isRemoved()) { + throw new GolemNetworkError(`Unable to remove node ${node.id} from removed network`, NetworkErrorCode.NetworkRemoved, this.getNetworkInfo()); + } + if (!this.hasNode(node)) { + throw new GolemNetworkError(`There is no node ${node.id} in the network`, NetworkErrorCode.NodeRemovalFailed); + } + this.nodes.delete(node.id); + } + markAsRemoved() { + if (this.state === NetworkState.Removed) { + throw new GolemNetworkError("Network already removed", NetworkErrorCode.NetworkRemoved, this.getNetworkInfo()); + } + this.state = NetworkState.Removed; + } + /** + * Returns the first available IP address in the network. + */ + getFirstAvailableIpAddress() { + const ip = this.ipIterator.next().value; + if (!ip) + throw new GolemNetworkError(`No more addresses available in ${this.ipRange.toCidrString()}`, NetworkErrorCode.NoAddressesAvailable, this.getNetworkInfo()); + return ip; + } + /** + * Checks if a given IP address is within the network range. + * @param ip - The IPv4 address to check. + */ + isIpInNetwork(ip) { + return this.ipRange.contains(new IPv4CidrRange(ip, new IPv4Prefix(BigInt(this.mask.prefix)))); + } + /** + * Checks if a given node ID is unique within the network. + * @param id - The node ID to check. + */ + isNodeIdUnique(id) { + return !this.nodes.has(id); + } + /** + * Checks if a given IP address is unique within the network. + */ + isNodeIpUnique(ip) { + for (const node of this.nodes.values()) { + if (new IPv4(node.ip).isEquals(ip)) + return false; + } + return true; + } + isRemoved() { + return this.state === NetworkState.Removed; + } +} + +/** + * Describes a node in a VPN, mapping a Golem node id to an IP address + */ +class NetworkNode { + constructor(id, ip, getNetworkInfo, yagnaBaseUri) { + this.id = id; + this.ip = ip; + this.getNetworkInfo = getNetworkInfo; + this.yagnaBaseUri = yagnaBaseUri; + } + /** + * Generate a dictionary of arguments that are required for the appropriate + *`Deploy` command of an exe-script in order to pass the network configuration to the runtime + * on the provider's end. + */ + getNetworkDeploymentArg() { + return { + net: [ + { + ...this.getNetworkInfo(), + nodeIp: this.ip, + }, + ], + }; + } + getWebsocketUri(port) { + const url = new URL(this.yagnaBaseUri); + url.protocol = "ws"; + return `${url.href}/net/${this.getNetworkInfo().id}/tcp/${this.ip}/${port}`; + } +} + +class NetworkModuleImpl { + constructor(deps) { + this.events = new EventEmitter(); + this.logger = defaultLogger("network"); + this.lock = new AsyncLock(); + this.networkApi = deps.networkApi; + if (deps.logger) { + this.logger = deps.logger; + } + } + async createNetwork(options) { + var _a, _b, _c, _d; + this.logger.debug(`Creating network`, options); + try { + const ipDecimalDottedString = ((_b = (_a = options === null || options === void 0 ? void 0 : options.ip) === null || _a === void 0 ? void 0 : _a.split("/")) === null || _b === void 0 ? void 0 : _b[0]) || "192.168.0.0"; + const maskBinaryNotation = parseInt(((_d = (_c = options === null || options === void 0 ? void 0 : options.ip) === null || _c === void 0 ? void 0 : _c.split("/")) === null || _d === void 0 ? void 0 : _d[1]) || "24"); + const maskPrefix = (options === null || options === void 0 ? void 0 : options.mask) ? IPv4Mask.fromDecimalDottedString(options.mask).prefix : maskBinaryNotation; + const ipRange = IPv4CidrRange.fromCidr(`${IPv4.fromString(ipDecimalDottedString)}/${maskPrefix}`); + const ip = ipRange.getFirst(); + const mask = ipRange.getPrefix().toMask(); + const gateway = (options === null || options === void 0 ? void 0 : options.gateway) ? new IPv4(options.gateway) : undefined; + const network = await this.networkApi.createNetwork({ + ip: ip.toString(), + mask: mask === null || mask === void 0 ? void 0 : mask.toString(), + gateway: gateway === null || gateway === void 0 ? void 0 : gateway.toString(), + }); + // add Requestor as network node + const requestorId = await this.networkApi.getIdentity(); + await this.createNetworkNode(network, requestorId, options === null || options === void 0 ? void 0 : options.ownerIp); + this.logger.info(`Created network`, network.getNetworkInfo()); + this.events.emit("networkCreated", { network }); + return network; + } + catch (err) { + const message = getMessageFromApiError(err); + const error = err instanceof GolemNetworkError + ? err + : new GolemNetworkError(`Unable to create network. ${message}`, NetworkErrorCode.NetworkCreationFailed, undefined, err); + this.events.emit("errorCreatingNetwork", { error }); + throw error; + } + } + async removeNetwork(network) { + this.logger.debug(`Removing network`, network.getNetworkInfo()); + await this.lock.acquire(`net-${network.id}`, async () => { + try { + await this.networkApi.removeNetwork(network); + network.markAsRemoved(); + this.logger.info(`Removed network`, network.getNetworkInfo()); + this.events.emit("networkRemoved", { network }); + } + catch (error) { + this.events.emit("errorRemovingNetwork", { network, error }); + throw error; + } + }); + } + async createNetworkNode(network, nodeId, nodeIp) { + this.logger.debug(`Creating network node`, { nodeId, nodeIp }); + return await this.lock.acquire(`net-${network.id}`, async () => { + try { + if (!network.isNodeIdUnique(nodeId)) { + throw new GolemNetworkError(`Network ID '${nodeId}' has already been assigned in this network.`, NetworkErrorCode.AddressAlreadyAssigned, network.getNetworkInfo()); + } + if (network.isRemoved()) { + throw new GolemNetworkError(`Unable to create network node ${nodeId}. Network has already been removed`, NetworkErrorCode.NetworkRemoved, network.getNetworkInfo()); + } + const ipv4 = this.getFreeIpInNetwork(network, nodeIp); + const node = await this.networkApi.createNetworkNode(network, nodeId, ipv4.toString()); + network.addNode(node); + this.logger.info(`Added network node`, { id: nodeId, ip: ipv4.toString() }); + this.events.emit("nodeCreated", { network, node }); + return node; + } + catch (error) { + this.events.emit("errorCreatingNode", { network, error }); + throw error; + } + }); + } + async removeNetworkNode(network, node) { + this.logger.debug(`Removing network node`, { nodeId: node.id, nodeIp: node.ip }); + return await this.lock.acquire(`net-${network.id}`, async () => { + try { + if (!network.hasNode(node)) { + throw new GolemNetworkError(`The network node ${node.id} does not belong to the network`, NetworkErrorCode.NodeRemovalFailed, network.getNetworkInfo()); + } + if (network.isRemoved()) { + this.logger.debug(`Unable to remove network node ${node.id}. Network has already been removed`, { + network, + node, + }); + return; + } + await this.networkApi.removeNetworkNode(network, node); + network.removeNode(node); + this.logger.info(`Removed network node`, { + network: network.getNetworkInfo().ip, + nodeIp: node.ip, + }); + this.events.emit("nodeRemoved", { network, node }); + } + catch (error) { + this.events.emit("errorRemovingNode", { network, node, error }); + throw error; + } + }); + } + getFreeIpInNetwork(network, targetIp) { + if (!targetIp) { + return network.getFirstAvailableIpAddress(); + } + const ipv4 = IPv4.fromString(targetIp); + if (!network.isIpInNetwork(ipv4)) { + throw new GolemNetworkError(`The given IP ('${targetIp}') address must belong to the network ('${network.getNetworkInfo().ip}').`, NetworkErrorCode.AddressOutOfRange, network.getNetworkInfo()); + } + if (!network.isNodeIpUnique(ipv4)) { + throw new GolemNetworkError(`IP '${targetIp.toString()}' has already been assigned in this network.`, NetworkErrorCode.AddressAlreadyAssigned, network.getNetworkInfo()); + } + return ipv4; + } +} + +/** + * Combines an agreement, activity, exe unit and payment process into a single high-level abstraction. + */ +class ResourceRental { + constructor(agreement, storageProvider, paymentProcess, marketModule, activityModule, logger, resourceRentalOptions) { + var _a; + this.agreement = agreement; + this.storageProvider = storageProvider; + this.paymentProcess = paymentProcess; + this.marketModule = marketModule; + this.activityModule = activityModule; + this.logger = logger; + this.resourceRentalOptions = resourceRentalOptions; + this.events = new EventEmitter(); + this.currentExeUnit = null; + this.abortController = new AbortController(); + this.networkNode = (_a = this.resourceRentalOptions) === null || _a === void 0 ? void 0 : _a.networkNode; + this.createExeUnit(this.abortController.signal).catch((error) => this.logger.debug(`Failed to automatically create the exe unit during resource rental initialization`, { error })); + // TODO: Listen to agreement events to know when it goes down due to provider closing it! + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async startStopAndFinalize(signalOrTimeout) { + var _a; + try { + if (this.currentExeUnit) { + await this.currentExeUnit.teardown(); + } + this.abortController.abort("The resource rental is finalizing"); + if ((_a = this.currentExeUnit) === null || _a === void 0 ? void 0 : _a.activity) { + await this.activityModule.destroyActivity(this.currentExeUnit.activity); + } + if ((await this.fetchAgreementState()) !== "Terminated") { + await this.marketModule.terminateAgreement(this.agreement); + } + } + catch (error) { + this.logger.error("Filed to finalize payment process", { agreementId: this.agreement.id, error }); + throw error; + } + finally { + this.events.emit("finalized"); + } + } + /** + * Terminates the activity and agreement (stopping any ongoing work) and finalizes the payment process. + * Resolves when the rental will be fully terminated and all pending business operations finalized. + * If the rental is already finalized, it will resolve immediately with the last finalization result. + * @param signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the finalization process, especially the payment process. + * Please note that canceling the payment process may fail to comply with the terms of the agreement. + * If this method is called multiple times, it will return the same promise, ignoring the signal or timeout. + */ + async stopAndFinalize(signalOrTimeout) { + if (this.finalizePromise) { + return this.finalizePromise; + } + this.finalizePromise = this.startStopAndFinalize(signalOrTimeout); + return this.finalizePromise; + } + hasActivity() { + return this.currentExeUnit !== null; + } + /** + * Creates an activity on the Provider, and returns a exe-unit that can be used to operate within the activity + * @param signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the exe-unit request, + * especially when the exe-unit is in the process of starting, deploying and preparing the environment (including setup function) + */ + async getExeUnit(signalOrTimeout) { + if (this.finalizePromise || this.abortController.signal.aborted) { + throw new GolemUserError("The resource rental is not active. It may have been aborted or finalized"); + } + if (this.currentExeUnit !== null) { + return this.currentExeUnit; + } + const abortController = new AbortController(); + this.abortController.signal.addEventListener("abort", () => abortController.abort(this.abortController.signal.reason)); + if (signalOrTimeout) { + const abortSignal = createAbortSignalFromTimeout(signalOrTimeout); + abortSignal.addEventListener("abort", () => abortController.abort(abortSignal.reason)); + if (signalOrTimeout instanceof AbortSignal && signalOrTimeout.aborted) { + abortController.abort(signalOrTimeout.reason); + } + } + return this.createExeUnit(abortController.signal); + } + /** + * Destroy previously created exe-unit. + * Please note that if ResourceRental is left without ExeUnit for some time (default 90s) + * the provider will terminate the Agreement and ResourceRental will be unuseble + */ + async destroyExeUnit() { + var _a; + try { + if (this.currentExeUnit !== null) { + await this.activityModule.destroyActivity(this.currentExeUnit.activity); + this.currentExeUnit = null; + } + else { + throw new GolemUserError(`There is no exe-unit to destroy.`); + } + } + catch (error) { + this.events.emit("error", error); + this.logger.error(`Failed to destroy exe-unit. ${error}`, { activityId: (_a = this.currentExeUnit) === null || _a === void 0 ? void 0 : _a.activity }); + throw error; + } + } + async fetchAgreementState() { + return this.marketModule.fetchAgreement(this.agreement.id).then((agreement) => agreement.getState()); + } + async createExeUnit(abortSignal) { + if (!this.exeUnitPromise) { + this.exeUnitPromise = (async () => { + var _a, _b, _c; + const activity = await this.activityModule.createActivity(this.agreement); + this.currentExeUnit = await this.activityModule.createExeUnit(activity, { + storageProvider: this.storageProvider, + networkNode: (_a = this.resourceRentalOptions) === null || _a === void 0 ? void 0 : _a.networkNode, + executionOptions: (_b = this.resourceRentalOptions) === null || _b === void 0 ? void 0 : _b.activity, + signalOrTimeout: abortSignal, + ...(_c = this.resourceRentalOptions) === null || _c === void 0 ? void 0 : _c.exeUnit, + }); + this.events.emit("exeUnitCreated", activity); + return this.currentExeUnit; + })() + .catch((error) => { + this.events.emit("error", error); + this.logger.error(`Failed to create exe-unit. ${error}`, { agreementId: this.agreement.id }); + throw error; + }) + .finally(() => { + this.exeUnitPromise = undefined; + }); + } + return this.exeUnitPromise; + } +} + +const MAX_POOL_SIZE = 100; +/** + * Pool of resource rentals that can be borrowed, released or destroyed. + */ +class ResourceRentalPool { + constructor(options) { + this.events = new EventEmitter(); + /** + * Pool of resource rentals that do not have an activity + */ + this.lowPriority = new Set(); + /** + * Pool of resource rentals that have an activity + */ + this.highPriority = new Set(); + this.borrowed = new Set(); + /** + * Queue of functions that are waiting for a lease process to be available + */ + this.acquireQueue = new AcquireQueue(); + this.asyncLock = new AsyncLock(); + /** + * Number of resource rentals that are currently being signed. + * This is used to prevent creating more resource rentals than the pool size allows. + */ + this.rentalsBeingSigned = 0; + this.allocation = options.allocation; + this.proposalPool = options.proposalPool; + this.marketModule = options.marketModule; + this.rentalModule = options.rentalModule; + this.networkModule = options.networkModule; + this.network = options.network; + this.resourceRentalOptions = options.resourceRentalOptions; + this.agreementOptions = options.agreementOptions; + this.logger = options.logger; + this.minPoolSize = + (() => { + if (typeof (options === null || options === void 0 ? void 0 : options.poolSize) === "number") { + return options === null || options === void 0 ? void 0 : options.poolSize; + } + if (typeof (options === null || options === void 0 ? void 0 : options.poolSize) === "object") { + return options === null || options === void 0 ? void 0 : options.poolSize.min; + } + })() || 0; + this.maxPoolSize = + (() => { + if (typeof (options === null || options === void 0 ? void 0 : options.poolSize) === "object") { + return options === null || options === void 0 ? void 0 : options.poolSize.max; + } + })() || MAX_POOL_SIZE; + this.abortController = new AbortController(); + } + async createNewResourceRental(signalOrTimeout) { + this.logger.debug("Creating new resource rental to add to pool"); + const { signal, cleanup } = anyAbortSignal(this.abortController.signal, createAbortSignalFromTimeout(signalOrTimeout)); + try { + this.rentalsBeingSigned++; + const agreement = await this.marketModule.signAgreementFromPool(this.proposalPool, this.agreementOptions, signal); + const networkNode = this.network + ? await this.networkModule.createNetworkNode(this.network, agreement.provider.id) + : undefined; + const resourceRental = this.rentalModule.createResourceRental(agreement, this.allocation, { + networkNode, + ...this.resourceRentalOptions, + }); + this.events.emit("created", { agreement }); + return resourceRental; + } + catch (error) { + if (signal.aborted) { + this.logger.debug("Creating resource rental was aborted", error); + throw error; + } + this.events.emit("errorCreatingRental", { + error: new GolemMarketError("Creating resource rental failed", MarketErrorCode.ResourceRentalCreationFailed, error), + }); + this.logger.error("Creating resource rental failed", error); + throw error; + } + finally { + this.rentalsBeingSigned--; + cleanup(); + } + } + async validate(resourceRental) { + try { + const state = await resourceRental.fetchAgreementState(); + const result = state === "Approved"; + this.logger.debug("Validated resource rental in the pool", { result, state }); + return result; + } + catch (err) { + this.logger.error("Something went wrong while validating resource rental, it will be destroyed", err); + return false; + } + } + canCreateMoreResourceRentals() { + return this.getSize() + this.rentalsBeingSigned < this.maxPoolSize; + } + /** + * Take the first valid resource rental from the pool + * If there is no valid resource rental, return null + */ + async takeValidResourceRental() { + let resourceRental = null; + if (this.highPriority.size > 0) { + resourceRental = this.highPriority.values().next().value; + this.highPriority.delete(resourceRental); + } + else if (this.lowPriority.size > 0) { + resourceRental = this.lowPriority.values().next().value; + this.lowPriority.delete(resourceRental); + } + if (!resourceRental) { + return null; + } + const isValid = await this.validate(resourceRental); + if (!isValid) { + await this.destroy(resourceRental); + return this.takeValidResourceRental(); + } + return resourceRental; + } + async enqueueAcquire(signalOrTimeout) { + const rental = await this.acquireQueue.get(signalOrTimeout); + this.borrowed.add(rental); + this.events.emit("acquired", { + agreement: rental.agreement, + }); + return rental; + } + /** + * Sign a new resource rental or wait for one to become available in the pool, + * whichever comes first. + */ + async raceNewRentalWithAcquireQueue(signalOrTimeout) { + const ac = new AbortController(); + const { signal, cleanup } = anyAbortSignal(ac.signal, createAbortSignalFromTimeout(signalOrTimeout), this.abortController.signal); + return Promise.any([ + this.createNewResourceRental(signal), + this.acquireQueue.get(signal).then((rental) => { + this.logger.info("A rental became available in the pool, using it instead of creating a new one"); + return rental; + }), + ]) + .catch((err) => { + // if all promises fail (i.e. the signal is aborted by the user) then + // rethrow the error produced by `createNewResourceRental` because it's more relevant + throw err.errors[0]; + }) + .finally(() => { + ac.abort(); + cleanup(); + }); + } + /** + * Borrow a resource rental from the pool. + * If there is no valid resource rental a new one will be created. + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + */ + async acquire(signalOrTimeout) { + if (this.isDraining) { + throw new GolemAbortError("The pool is in draining mode, you cannot acquire new resources"); + } + let resourceRental = await this.takeValidResourceRental(); + if (!resourceRental) { + if (!this.canCreateMoreResourceRentals()) { + return this.enqueueAcquire(signalOrTimeout); + } + resourceRental = await this.raceNewRentalWithAcquireQueue(signalOrTimeout); + } + this.borrowed.add(resourceRental); + this.events.emit("acquired", { + agreement: resourceRental.agreement, + }); + return resourceRental; + } + /** + * If there are any acquires waiting in the queue, the resource rental will be passed to the first one. + * Otherwise, the resource rental will be added to the queue. + */ + passResourceRentalToWaitingAcquireOrBackToPool(resourceRental) { + if (this.acquireQueue.hasAcquirers()) { + this.acquireQueue.put(resourceRental); + return; + } + if (resourceRental.hasActivity()) { + this.highPriority.add(resourceRental); + } + else { + this.lowPriority.add(resourceRental); + } + } + async release(resourceRental) { + return this.asyncLock.acquire("resource-rental-pool", async () => { + if (this.getAvailableSize() >= this.maxPoolSize) { + return this.destroy(resourceRental); + } + this.borrowed.delete(resourceRental); + const isValid = await this.validate(resourceRental); + if (!isValid) { + return this.destroy(resourceRental); + } + this.passResourceRentalToWaitingAcquireOrBackToPool(resourceRental); + this.events.emit("released", { + agreement: resourceRental.agreement, + }); + }); + } + async destroy(resourceRental) { + try { + this.borrowed.delete(resourceRental); + this.logger.debug("Destroying resource rental from the pool", { agreementId: resourceRental.agreement.id }); + await Promise.all([resourceRental.stopAndFinalize(), this.removeNetworkNode(resourceRental)]); + this.events.emit("destroyed", { + agreement: resourceRental.agreement, + }); + } + catch (error) { + this.events.emit("errorDestroyingRental", { + agreement: resourceRental.agreement, + error: new GolemMarketError("Destroying resource rental failed", MarketErrorCode.ResourceRentalTerminationFailed, error), + }); + this.logger.error("Destroying resource rental failed", error); + } + } + get isDraining() { + return !!this.drainPromise; + } + async startDrain() { + try { + await this.asyncLock.acquire("resource-rental-pool", async () => { + this.abortController.abort("The pool is in draining mode"); + this.events.emit("draining"); + this.acquireQueue.releaseAll(); + const allResourceRentals = Array.from(this.borrowed) + .concat(Array.from(this.lowPriority)) + .concat(Array.from(this.highPriority)); + await Promise.allSettled(allResourceRentals.map((resourceRental) => this.destroy(resourceRental))); + this.lowPriority.clear(); + this.highPriority.clear(); + this.borrowed.clear(); + this.abortController = new AbortController(); + }); + } + catch (error) { + this.logger.error("Draining the pool failed", error); + throw error; + } + finally { + this.events.emit("end"); + } + } + /** + * Sets the pool into draining mode and then clears it + * + * When set to drain mode, no new acquires will be possible. At the same time, all agreements in the pool will be terminated with the Providers. + * + * @return Resolves when all agreements are terminated + */ + async drainAndClear() { + if (this.isDraining) { + return this.drainPromise; + } + this.drainPromise = this.startDrain().finally(() => { + this.drainPromise = undefined; + }); + return this.drainPromise; + } + /** + * Total size (available + borrowed) + */ + getSize() { + return this.getAvailableSize() + this.getBorrowedSize(); + } + /** + * Available size (how many resource rental are ready to be borrowed) + */ + getAvailableSize() { + return this.lowPriority.size + this.highPriority.size; + } + /** + * Borrowed size (how many resource rental are currently out of the pool) + */ + getBorrowedSize() { + return this.borrowed.size; + } + async ready(timeoutOrAbortSignal) { + if (this.minPoolSize <= this.getAvailableSize()) { + return; + } + const { signal, cleanup } = anyAbortSignal(this.abortController.signal, createAbortSignalFromTimeout(timeoutOrAbortSignal)); + const tryCreatingMissingResourceRentals = async () => { + await Promise.allSettled(new Array(this.minPoolSize - this.getAvailableSize()).fill(0).map(() => this.createNewResourceRental(signal).then((resourceRental) => this.lowPriority.add(resourceRental), (error) => this.logger.error("Creating resource rental failed", error)))); + }; + while (this.minPoolSize > this.getAvailableSize()) { + if (signal.aborted) { + break; + } + await runOnNextEventLoopIteration(tryCreatingMissingResourceRentals); + } + cleanup(); + if (this.minPoolSize > this.getAvailableSize()) { + throw new Error("Could not create enough resource rentals to reach the minimum pool size in time"); + } + this.events.emit("ready"); + } + async removeNetworkNode(resourceRental) { + if (this.network && resourceRental.networkNode) { + this.logger.debug("Removing a node from the network", { + network: this.network.getNetworkInfo().ip, + nodeIp: resourceRental.networkNode.ip, + }); + await this.networkModule.removeNetworkNode(this.network, resourceRental.networkNode); + } + } + /** + * Acquire a resource rental from the pool and release it after the callback is done + * @example + * ```typescript + * const result = await pool.withRental(async (rental) => { + * // Do something with the rented resources + * return result; + * // pool.release(rental) is called automatically + * // even if an error is thrown in the callback + * }); + * ``` + * @param callback - a function that takes a `rental` object as its argument. The rental is automatically released after the callback is executed, regardless of whether it completes successfully or throws an error. + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + */ + async withRental(callback, signalOrTimeout) { + const rental = await this.acquire(signalOrTimeout); + try { + return await callback(rental); + } + finally { + await this.release(rental); + } + } +} + +class RentalModuleImpl { + constructor(deps) { + this.deps = deps; + this.events = new EventEmitter(); + } + createResourceRental(agreement, allocation, options) { + const paymentProcess = this.deps.paymentModule.createAgreementPaymentProcess(agreement, allocation, options === null || options === void 0 ? void 0 : options.payment); + const rental = new ResourceRental(agreement, this.deps.storageProvider, paymentProcess, this.deps.marketModule, this.deps.activityModule, this.deps.logger.child("resource-rental"), options); + this.events.emit("resourceRentalCreated", rental.agreement); + return rental; + } + createResourceRentalPool(draftPool, allocation, options) { + const pool = new ResourceRentalPool({ + allocation, + rentalModule: this, + marketModule: this.deps.marketModule, + networkModule: this.deps.networkModule, + proposalPool: draftPool, + resourceRentalOptions: options === null || options === void 0 ? void 0 : options.resourceRentalOptions, + logger: this.deps.logger.child("resource-rental-pool"), + network: options === null || options === void 0 ? void 0 : options.network, + poolSize: options === null || options === void 0 ? void 0 : options.poolSize, + }); + this.events.emit("resourceRentalPoolCreated"); + return pool; + } +} + +class PaymentApiAdapter { + constructor(yagna, invoiceRepo, debitNoteRepo, logger) { + this.yagna = yagna; + this.invoiceRepo = invoiceRepo; + this.debitNoteRepo = debitNoteRepo; + this.logger = logger; + this.receivedInvoices$ = new Subject(); + this.receivedDebitNotes$ = new Subject(); + } + async connect() { + this.logger.debug("Connecting Payment API Adapter"); + from(this.yagna.invoiceEvents$) + .pipe(mergeMap((invoice) => { + if (invoice && invoice.invoiceId) { + return this.invoiceRepo.getById(invoice.invoiceId); + } + else { + return of(); + } + })) + .subscribe({ + next: (event) => this.receivedInvoices$.next(event), + error: (err) => this.receivedInvoices$.error(err), + complete: () => this.logger.debug("Finished reading InvoiceEvents"), + }); + from(this.yagna.debitNoteEvents$) + .pipe(mergeMap((debitNote) => { + if (debitNote && debitNote.debitNoteId) { + return this.debitNoteRepo.getById(debitNote.debitNoteId); + } + else { + return of(); + } + })) + .subscribe({ + next: (event) => this.receivedDebitNotes$.next(event), + error: (err) => this.receivedDebitNotes$.error(err), + complete: () => this.logger.debug("Finished reading DebitNoteEvents"), + }); + this.logger.debug("Payment API Adapter connected"); + } + getInvoice(id) { + return this.invoiceRepo.getById(id); + } + getDebitNote(id) { + return this.debitNoteRepo.getById(id); + } + async acceptInvoice(invoice, allocation, amount) { + try { + await this.yagna.payment.acceptInvoice(invoice.id, { + totalAmountAccepted: amount, + allocationId: allocation.id, + }); + return this.invoiceRepo.getById(invoice.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not accept invoice. ${message}`, PaymentErrorCode.InvoiceAcceptanceFailed, allocation, invoice.provider); + } + } + async rejectInvoice(invoice, reason) { + try { + await this.yagna.payment.rejectInvoice(invoice.id, { + rejectionReason: "BAD_SERVICE", + totalAmountAccepted: "0.00", + message: reason, + }); + return this.invoiceRepo.getById(invoice.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not reject invoice. ${message}`, PaymentErrorCode.InvoiceRejectionFailed, undefined, invoice.provider); + } + } + async acceptDebitNote(debitNote, allocation, amount) { + try { + await this.yagna.payment.acceptDebitNote(debitNote.id, { + totalAmountAccepted: amount, + allocationId: allocation.id, + }); + return this.debitNoteRepo.getById(debitNote.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not accept debit note. ${message}`, PaymentErrorCode.DebitNoteAcceptanceFailed, allocation, debitNote.provider); + } + } + async rejectDebitNote(debitNote) { + try { + // TODO: this endpoint is not implemented in Yagna, it always responds 501:NotImplemented. + // Reported in https://github.com/golemfactory/yagna/issues/1249 + // await this.yagna.payment.rejectDebitNote(debitNote.id, { + // rejectionReason: "BAD_SERVICE", + // totalAmountAccepted: "0.00", + // message: reason, + // }); + return this.debitNoteRepo.getById(debitNote.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not reject debit note. ${message}`, PaymentErrorCode.DebitNoteRejectionFailed, undefined, debitNote.provider, error); + } + } + async getAllocation(id) { + try { + const model = await this.yagna.payment.getAllocation(id); + return new Allocation(model); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not retrieve allocation. ${message}`, PaymentErrorCode.AllocationCreationFailed, undefined, undefined, error); + } + } + async createAllocation(params) { + try { + const { identity: address } = await this.yagna.identity.getIdentity(); + const now = new Date(); + const model = await this.yagna.payment.createAllocation({ + totalAmount: params.budget.toString(), + paymentPlatform: params.paymentPlatform, + address, + timestamp: now.toISOString(), + timeout: new Date(+now + params.expirationSec * 1000).toISOString(), + makeDeposit: false, + remainingAmount: "", + spentAmount: "", + allocationId: "", + deposit: params.deposit, + }); + this.logger.debug(`Allocation ${model.allocationId} has been created for address ${address} using payment platform ${params.paymentPlatform}`); + const allocation = new Allocation(model); + return allocation; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not create new allocation. ${message}`, PaymentErrorCode.AllocationCreationFailed, undefined, undefined, error); + } + } + async releaseAllocation(allocation) { + var _a, _b; + try { + return this.yagna.payment.releaseAllocation(allocation.id); + } + catch (error) { + throw new GolemPaymentError(`Could not release allocation. ${((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) || error}`, PaymentErrorCode.AllocationReleaseFailed, allocation, undefined, error); + } + } +} + +class MarketApiAdapter { + constructor(yagnaApi, agreementRepo, proposalRepo, demandRepo, logger) { + this.yagnaApi = yagnaApi; + this.agreementRepo = agreementRepo; + this.proposalRepo = proposalRepo; + this.demandRepo = demandRepo; + this.logger = logger; + } + async publishDemandSpecification(spec) { + const idOrError = await this.yagnaApi.market.subscribeDemand(this.buildDemandRequestBody(spec.prototype)); + if (typeof idOrError !== "string") { + throw new Error(`Failed to subscribe to demand: ${idOrError.message}`); + } + const demand = new Demand(idOrError, spec); + this.demandRepo.add(demand); + return demand; + } + async unpublishDemand(demand) { + const result = await this.yagnaApi.market.unsubscribeDemand(demand.id); + if (result === null || result === void 0 ? void 0 : result.message) { + throw new Error(`Failed to unsubscribe from demand: ${result.message}`); + } + } + collectMarketProposalEvents(demand) { + return new Observable((observer) => { + let isCancelled = false; + const longPoll = async () => { + if (isCancelled) { + return; + } + try { + for (const event of await this.yagnaApi.market.collectOffers(demand.id)) { + const timestamp = new Date(Date.parse(event.eventDate)); + switch (event.eventType) { + case "ProposalEvent": + { + try { + // @ts-expect-error FIXME #ya-ts-client, #ya-client: Fix mappings and type discriminators + const offerProposal = new OfferProposal(event.proposal, demand); + this.proposalRepo.add(offerProposal); + observer.next({ + type: "ProposalReceived", + proposal: offerProposal, + timestamp, + }); + } + catch (err) { + observer.error(err); + this.logger.error("Failed to create offer proposal from the event", { err, event, demand }); + } + } + break; + case "ProposalRejectedEvent": { + // @ts-expect-error FIXME #ya-ts-client, #ya-client: Fix mappings and type discriminators + const { proposalId, reason } = event; + const marketProposal = this.proposalRepo.getById(proposalId); + if (marketProposal && this.isOfferCounterProposal(marketProposal)) { + observer.next({ + type: "ProposalRejected", + counterProposal: marketProposal, + reason: reason.message, + timestamp, + }); + } + else { + this.logger.error("Could not locate counter proposal with ID issued by the Requestor while handling ProposalRejectedEvent", { + event, + }); + } + break; + } + case "PropertyQueryEvent": + observer.next({ + type: "PropertyQueryReceived", + timestamp, + }); + break; + default: + this.logger.warn("Unsupported demand subscription event", { event }); + } + } + } + catch (error) { + // when the demand is unsubscribed the long poll will reject with a 404 + if ("status" in error && error.status === 404) { + return; + } + this.logger.error("Polling yagna for offer proposal events failed", error); + observer.error(error); + } + void longPoll(); + }; + void longPoll(); + return () => { + isCancelled = true; + }; + }); + } + async counterProposal(receivedProposal, demand) { + const bodyClone = structuredClone(this.buildDemandRequestBody(demand.prototype)); + bodyClone.properties["golem.com.payment.chosen-platform"] = demand.paymentPlatform; + const maybeNewId = await this.yagnaApi.market.counterProposalDemand(receivedProposal.demand.id, receivedProposal.id, bodyClone); + this.logger.debug("Proposal counter result from yagna", { result: maybeNewId }); + if (typeof maybeNewId !== "string") { + throw new GolemInternalError(`Counter proposal failed ${maybeNewId.message}`); + } + const dto = await this.yagnaApi.market.getProposalOffer(receivedProposal.demand.id, maybeNewId); + const counterProposal = new OfferCounterProposal(dto); + this.proposalRepo.add(counterProposal); + return counterProposal; + } + async rejectProposal(receivedProposal, reason) { + try { + const result = await this.yagnaApi.market.rejectProposalOffer(receivedProposal.demand.id, receivedProposal.id, { + message: reason, + }); + this.logger.debug("Proposal rejection result from yagna", { response: result }); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Failed to reject proposal. ${message}`, MarketErrorCode.ProposalRejectionFailed, error); + } + } + buildDemandRequestBody(decorations) { + var _a, _b; + let constraints; + if (!((_a = decorations.constraints) === null || _a === void 0 ? void 0 : _a.length)) + constraints = "(&)"; + else if (decorations.constraints.length == 1) + constraints = decorations.constraints[0]; + else + constraints = `(&${decorations.constraints.join("\n\t")})`; + const properties = {}; + (_b = decorations.properties) === null || _b === void 0 ? void 0 : _b.forEach((prop) => (properties[prop.key] = prop.value)); + return { constraints, properties }; + } + async getPaymentRelatedDemandDecorations(allocationId) { + return this.yagnaApi.payment.getDemandDecorations([allocationId]); + } + async confirmAgreement(agreement, options) { + try { + // FIXME #yagna, If we don't provide the app-session ID when confirming the agreement, we won't be able to collect invoices with that app-session-id + // it's hard to know when the appSessionId is mandatory and when it isn't + this.logger.debug("Confirming agreement by Requestor", { agreementId: agreement.id }); + await this.yagnaApi.market.confirmAgreement(agreement.id, this.yagnaApi.appSessionId); + this.logger.debug("Waiting for agreement approval by Provider", { agreementId: agreement.id }); + await this.yagnaApi.market.waitForApproval(agreement.id, (options === null || options === void 0 ? void 0 : options.waitingForApprovalTimeoutSec) || 60); + this.logger.debug(`Agreement approved by Provider`, { agreementId: agreement.id }); + // Get fresh copy + return this.agreementRepo.getById(agreement.id); + } + catch (error) { + throw new GolemMarketError(`Unable to confirm agreement with provider`, MarketErrorCode.AgreementApprovalFailed, error); + } + } + async createAgreement(proposal, options) { + const expirationSec = (options === null || options === void 0 ? void 0 : options.expirationSec) || 3600; + try { + const agreementProposalRequest = { + proposalId: proposal.id, + validTo: new Date(+new Date() + expirationSec * 1000).toISOString(), + }; + const agreementId = await withTimeout(this.yagnaApi.market.createAgreement(agreementProposalRequest), 30000); + if (typeof agreementId !== "string") { + throw new GolemMarketError(`Unable to create agreement. Invalid response from the server`, MarketErrorCode.ResourceRentalCreationFailed); + } + const agreement = await this.agreementRepo.getById(agreementId); + this.logger.debug(`Agreement created`, { + agreement, + proposalId: proposal.id, + demandId: proposal.demand.id, + }); + return agreement; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Unable to create agreement ${message}`, MarketErrorCode.ResourceRentalCreationFailed, error); + } + } + async proposeAgreement(proposal, options) { + const agreement = await this.createAgreement(proposal, options); + const confirmed = await this.confirmAgreement(agreement); + const state = confirmed.getState(); + if (state !== "Approved") { + throw new GolemMarketError(`Agreement ${agreement.id} cannot be approved. Current state: ${state}`, MarketErrorCode.AgreementApprovalFailed); + } + this.logger.debug("Established agreement", agreement); + return confirmed; + } + getAgreement(id) { + return this.agreementRepo.getById(id); + } + async getAgreementState(id) { + const entry = await this.agreementRepo.getById(id); + return entry.getState(); + } + async terminateAgreement(agreement, reason = "Finished") { + try { + // Re-fetch entity before acting to be sure that we don't terminate a terminated activity + const current = await this.agreementRepo.getById(agreement.id); + if (current.getState() === "Terminated") { + throw new GolemUserError("You can not terminate an agreement that's already terminated"); + } + await withTimeout(this.yagnaApi.market.terminateAgreement(current.id, { + message: reason, + }), 30000); + this.logger.debug(`Agreement terminated`, { id: agreement.id, reason }); + return this.agreementRepo.getById(agreement.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Unable to terminate agreement ${agreement.id}. ${message}`, MarketErrorCode.ResourceRentalTerminationFailed, error); + } + } + collectAgreementEvents() { + return this.yagnaApi.agreementEvents$.pipe(switchMap((event) => new Observable((observer) => { + try { + this.logger.debug("Market API Adapter received agreement event", { event }); + const timestamp = new Date(Date.parse(event.eventDate)); + // @ts-expect-error FIXME #yagna, wasn't this fixed? {@issue https://github.com/golemfactory/yagna/pull/3136} + const eventType = event.eventType || event.eventtype; + this.getAgreement(event.agreementId) + .then((agreement) => { + switch (eventType) { + case "AgreementApprovedEvent": + observer.next({ + type: "AgreementApproved", + agreement, + timestamp, + }); + break; + case "AgreementTerminatedEvent": + observer.next({ + type: "AgreementTerminated", + agreement, + // @ts-expect-error FIXME #ya-ts-client event type discrimination doesn't work nicely with the current generator + terminatedBy: event.terminator, + // @ts-expect-error FIXME #ya-ts-client event type discrimination doesn't work nicely with the current generator + reason: event.reason.message, + timestamp, + }); + break; + case "AgreementRejectedEvent": + observer.next({ + type: "AgreementRejected", + agreement, + // @ts-expect-error FIXME #ya-ts-client event type discrimination doesn't work nicely with the current generator + reason: event.reason.message, + timestamp, + }); + break; + case "AgreementCancelledEvent": + observer.next({ + type: "AgreementCancelled", + agreement, + timestamp, + }); + break; + default: + this.logger.warn("Unsupported agreement event type for event", { event }); + break; + } + }) + .catch((err) => this.logger.error("Failed to load agreement", { agreementId: event.agreementId, err })); + } + catch (err) { + const golemMarketError = new GolemMarketError("Error while processing agreement event from yagna", MarketErrorCode.InternalError, err); + this.logger.error(golemMarketError.message, { event, err }); + observer.error(err); + } + }))); + } + isOfferCounterProposal(proposal) { + return proposal.issuer === "Requestor"; + } + scan(spec) { + const ac = new AbortController(); + return new Observable((observer) => { + this.yagnaApi.market + .beginScan({ + type: "offer", + ...this.buildDemandRequestBody(spec), + }) + .then((iterator) => { + if (typeof iterator !== "string") { + throw new Error(`Something went wrong while starting the scan, ${iterator.message}`); + } + return iterator; + }) + .then(async (iterator) => { + const cleanupIterator = () => this.yagnaApi.market.endScan(iterator); + if (ac.signal.aborted) { + await cleanupIterator(); + return; + } + const eventSource = new EventSource(`${this.yagnaApi.market.httpRequest.config.BASE}/scan/${iterator}/events`, { + headers: { + Accept: "text/event-stream", + Authorization: `Bearer ${this.yagnaApi.yagnaOptions.apiKey}`, + }, + }); + eventSource.addEventListener("offer", (event) => { + try { + const parsed = JSON.parse(event.data); + observer.next(new ScannedOffer(parsed)); + } + catch (error) { + observer.error(error); + } + }); + eventSource.addEventListener("error", (error) => observer.error(error)); + ac.signal.onabort = async () => { + eventSource.close(); + await cleanupIterator(); + }; + }) + .catch((error) => { + const message = getMessageFromApiError(error); + observer.error(new GolemMarketError(`Error while scanning for offers. ${message}`, MarketErrorCode.ScanFailed, error)); + }); + return () => { + ac.abort(); + }; + }); + } +} + +class InvoiceRepository { + constructor(paymentClient, marketClient) { + this.paymentClient = paymentClient; + this.marketClient = marketClient; + } + async getById(id) { + let model; + let agreement; + try { + model = await this.paymentClient.getInvoice(id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Failed to get debit note: ${message}`, PaymentErrorCode.CouldNotGetInvoice, undefined, undefined, error); + } + try { + agreement = await this.marketClient.getAgreement(model.agreementId); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Failed to get agreement for invoice: ${message}`, MarketErrorCode.CouldNotGetAgreement, error); + } + const providerInfo = { + id: model.issuerId, + walletAddress: model.payeeAddr, + name: agreement.offer.properties["golem.node.id.name"], + }; + return new Invoice(model, providerInfo); + } +} + +class DebitNoteRepository { + constructor(paymentClient, marketClient) { + this.paymentClient = paymentClient; + this.marketClient = marketClient; + } + async getById(id) { + let model; + let agreement; + try { + model = await this.paymentClient.getDebitNote(id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Failed to get debit note: ${message}`, PaymentErrorCode.CouldNotGetDebitNote, undefined, undefined, error); + } + try { + agreement = await this.marketClient.getAgreement(model.agreementId); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Failed to get agreement for debit note: ${message}`, MarketErrorCode.CouldNotGetAgreement, error); + } + const providerInfo = { + id: model.issuerId, + walletAddress: model.payeeAddr, + name: agreement.offer.properties["golem.node.id.name"], + }; + return new DebitNote(model, providerInfo); + } +} + +class ActivityApiAdapter { + constructor(state, control, exec, activityRepo) { + this.state = state; + this.control = control; + this.exec = exec; + this.activityRepo = activityRepo; + } + getActivity(id) { + return this.activityRepo.getById(id); + } + async createActivity(agreement) { + try { + const activityOrError = await this.control.createActivity({ + agreementId: agreement.id, + }); + if (typeof activityOrError !== "object" || !("activityId" in activityOrError)) { + // will be caught in the catch block and converted to GolemWorkError + throw new Error(activityOrError); + } + return this.activityRepo.getById(activityOrError.activityId); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to create activity: ${message}`, WorkErrorCode.ActivityCreationFailed, agreement, undefined, agreement.provider); + } + } + async destroyActivity(activity) { + try { + await this.control.destroyActivity(activity.id, 30); + return this.activityRepo.getById(activity.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to destroy activity: ${message}`, WorkErrorCode.ActivityDestroyingFailed, activity.agreement, activity, activity.agreement.provider); + } + } + async getActivityState(id) { + return this.activityRepo.getStateOfActivity(id); + } + async executeScript(activity, script) { + try { + return await this.control.exec(activity.id, script); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to execute script. ${message}`, WorkErrorCode.ScriptExecutionFailed, activity.agreement, activity, activity.agreement.provider); + } + } + async getExecBatchResults(activity, batchId, commandIndex, timeout) { + try { + const results = await this.control.getExecBatchResults(activity.id, batchId, commandIndex, timeout); + return results.map((r) => new Result(r)); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to fetch activity results. ${message}`, WorkErrorCode.ActivityResultsFetchingFailed, activity.agreement, activity, activity.provider, error); + } + } + getExecBatchEvents(activity, batchId) { + return this.exec.observeBatchExecResults(activity.id, batchId); + } +} + +class CacheService { + constructor() { + this.storage = new Map(); + } + set(key, value) { + this.storage.set(key, value); + return value; + } + get(key) { + return this.storage.get(key); + } + delete(key) { + return this.storage.delete(key); + } + has(key) { + return this.storage.has(key); + } + getAll() { + return [...this.storage.values()]; + } + flushAll() { + return this.storage.clear(); + } +} + +class ActivityRepository { + constructor(state, agreementRepo) { + this.state = state; + this.agreementRepo = agreementRepo; + this.stateCache = new CacheService(); + } + async getById(id) { + var _a; + try { + const agreementId = await this.state.getActivityAgreement(id); + const agreement = await this.agreementRepo.getById(agreementId); + const previousState = (_a = this.stateCache.get(id)) !== null && _a !== void 0 ? _a : ActivityStateEnum.New; + const state = await this.getStateOfActivity(id); + const usage = await this.state.getActivityUsage(id); + return new Activity(id, agreement, state !== null && state !== void 0 ? state : ActivityStateEnum.Unknown, previousState, usage); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to get activity: ${message}`, WorkErrorCode.ActivityStatusQueryFailed, undefined, undefined, undefined, error); + } + } + async getStateOfActivity(id) { + try { + const yagnaStateResponse = await this.state.getActivityState(id); + if (!yagnaStateResponse || yagnaStateResponse.state[0] === null) { + return ActivityStateEnum.Unknown; + } + const state = ActivityStateEnum[yagnaStateResponse.state[0]]; + this.stateCache.set(id, state); + return state; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to get activity state: ${message}`, WorkErrorCode.ActivityStatusQueryFailed, undefined, undefined, undefined, error); + } + } +} + +class AgreementRepository { + constructor(api, demandRepo) { + this.api = api; + this.demandRepo = demandRepo; + } + async getById(id) { + let dto; + try { + dto = await this.api.getAgreement(id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Failed to get agreement: ${message}`, MarketErrorCode.CouldNotGetAgreement, error); + } + const { demandId } = dto.demand; + const demand = this.demandRepo.getById(demandId); + if (!demand) { + throw new GolemInternalError(`Could not find information for demand ${demandId} of agreement ${id}`); + } + const agreement = new Agreement(id, dto, demand); + return agreement; + } +} + +class ProposalRepository { + constructor(marketService, identityService, cache) { + this.marketService = marketService; + this.identityService = identityService; + this.cache = cache; + } + add(proposal) { + this.cache.set(proposal.id, proposal); + return proposal; + } + getById(id) { + return this.cache.get(id); + } + async getByDemandAndId(demand, id) { + try { + const dto = await this.marketService.getProposalOffer(demand.id, id); + const identity = await this.identityService.getIdentity(); + const isIssuedByRequestor = identity.identity === dto.issuerId ? "Requestor" : "Provider"; + return isIssuedByRequestor ? new OfferCounterProposal(dto) : new OfferProposal(dto, demand); + } + catch (error) { + const message = error.message; + throw new GolemMarketError(`Failed to get proposal: ${message}`, MarketErrorCode.CouldNotGetProposal, error); + } + } +} + +class DemandRepository { + constructor(api, cache) { + this.api = api; + this.cache = cache; + } + getById(id) { + return this.cache.get(id); + } + add(demand) { + this.cache.set(demand.id, demand); + return demand; + } + getAll() { + return this.cache.getAll(); + } +} + +/** + * IFileServer implementation that uses any StorageProvider to serve files. + * Make sure that the storage provider implements the `.publishFile()` method. + */ +class StorageServerAdapter { + constructor(storage) { + this.storage = storage; + this.published = new Map(); + } + async publishFile(sourcePath) { + if (!this.storage.isReady()) { + throw new GolemInternalError("The GFTP server as to be initialized before publishing a file "); + } + if (!fs__default.existsSync(sourcePath) || fs__default.lstatSync(sourcePath).isDirectory()) { + throw new GolemConfigError(`File ${sourcePath} does not exist o is a directory`); + } + const fileUrl = await this.storage.publishFile(sourcePath); + const fileHash = await this.calculateFileHash(sourcePath); + const entry = { + fileUrl, + fileHash, + }; + this.published.set(sourcePath, entry); + return entry; + } + isServing() { + return this.published.size !== 0; + } + getPublishInfo(sourcePath) { + return this.published.get(sourcePath); + } + isFilePublished(sourcePath) { + return this.published.has(sourcePath); + } + async calculateFileHash(localPath) { + const fileStream = fs__default.createReadStream(localPath); + const hash = jsSha3__default.sha3_224.create(); + return new Promise((resolve, reject) => { + fileStream.on("data", (chunk) => hash.update(chunk)); + fileStream.on("end", () => resolve(hash.hex())); + fileStream.on("error", (err) => reject(new GolemInternalError(`Error calculating file hash: ${err}`, err))); + }); + } +} + +class NetworkApiAdapter { + constructor(yagnaApi) { + this.yagnaApi = yagnaApi; + } + async createNetwork(options) { + try { + const { id, ip, mask, gateway } = await this.yagnaApi.net.createNetwork(options); + return new Network(id, ip, mask, gateway); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to create network. ${message}`, NetworkErrorCode.NetworkCreationFailed, undefined, error); + } + } + async removeNetwork(network) { + try { + await this.yagnaApi.net.removeNetwork(network.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to remove network. ${message}`, NetworkErrorCode.NetworkRemovalFailed, network.getNetworkInfo(), error); + } + } + async createNetworkNode(network, nodeId, nodeIp) { + try { + await this.yagnaApi.net.addNode(network.id, { id: nodeId, ip: nodeIp }); + const networkNode = new NetworkNode(nodeId, nodeIp, network.getNetworkInfo.bind(network), this.yagnaApi.net.httpRequest.config.BASE); + return networkNode; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to add node to network. ${message}`, NetworkErrorCode.NodeAddingFailed, network.getNetworkInfo(), error); + } + } + async removeNetworkNode(network, node) { + try { + await this.yagnaApi.net.removeNode(network.id, node.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to remove network node. ${message}`, NetworkErrorCode.NodeRemovalFailed, network.getNetworkInfo(), error); + } + } + async getIdentity() { + try { + return await this.yagnaApi.identity.getIdentity().then((res) => res.identity); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to get requestor identity. ${message}`, NetworkErrorCode.GettingIdentityFailed, undefined, error); + } + } +} + +/** + * If no override is provided, return a function that creates a new instance of the default factory. + * If override is a factory, return a function that creates a new instance of that factory. + * If override is an instance, return a function that returns that instance (ignoring the arguments). + */ +function getFactory(defaultFactory, override) { + if (override) { + if (typeof override === "function") { + return (...args) => new override(...args); + } + return () => override; + } + return (...args) => new defaultFactory(...args); +} +/** + * General purpose and high-level API for the Golem Network + * + * This class is the main entry-point for developers that would like to build on Golem Network + * using `@golem-sdk/golem-js`. It is supposed to provide an easy access API for use 80% of use cases. + */ +class GolemNetwork { + constructor(options = {}) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q; + this.events = new EventEmitter(); + this.hasConnection = false; + this.abortController = new AbortController(); + /** + * List af additional tasks that should be executed when the network is being shut down + * (for example finalizing resource rental created with `oneOf`) + */ + this.cleanupTasks = []; + this.registeredPlugins = []; + const optDefaults = { + dataTransferProtocol: "ws", + }; + this.options = { + ...optDefaults, + ...options, + }; + this.logger = (_a = options.logger) !== null && _a !== void 0 ? _a : defaultLogger("golem-network"); + this.logger.debug("Creating Golem Network instance with options", { options: this.options }); + try { + this.yagna = + ((_b = options.override) === null || _b === void 0 ? void 0 : _b.yagna) || + new YagnaApi({ + logger: this.logger, + apiKey: (_c = this.options.api) === null || _c === void 0 ? void 0 : _c.key, + basePath: (_d = this.options.api) === null || _d === void 0 ? void 0 : _d.url, + }); + this.storageProvider = ((_e = options.override) === null || _e === void 0 ? void 0 : _e.storageProvider) || this.createStorageProvider(); + const demandCache = new CacheService(); + const proposalCache = new CacheService(); + const demandRepository = new DemandRepository(this.yagna.market, demandCache); + const proposalRepository = new ProposalRepository(this.yagna.market, this.yagna.identity, proposalCache); + const agreementRepository = new AgreementRepository(this.yagna.market, demandRepository); + this.services = { + logger: this.logger, + yagna: this.yagna, + storageProvider: this.storageProvider, + demandRepository, + proposalCache, + proposalRepository, + paymentApi: ((_f = this.options.override) === null || _f === void 0 ? void 0 : _f.paymentApi) || + new PaymentApiAdapter(this.yagna, new InvoiceRepository(this.yagna.payment, this.yagna.market), new DebitNoteRepository(this.yagna.payment, this.yagna.market), this.logger), + activityApi: ((_g = this.options.override) === null || _g === void 0 ? void 0 : _g.activityApi) || + new ActivityApiAdapter(this.yagna.activity.state, this.yagna.activity.control, this.yagna.activity.exec, new ActivityRepository(this.yagna.activity.state, agreementRepository)), + marketApi: ((_h = this.options.override) === null || _h === void 0 ? void 0 : _h.marketApi) || + new MarketApiAdapter(this.yagna, agreementRepository, proposalRepository, demandRepository, this.logger), + networkApi: ((_j = this.options.override) === null || _j === void 0 ? void 0 : _j.networkApi) || new NetworkApiAdapter(this.yagna), + fileServer: ((_k = this.options.override) === null || _k === void 0 ? void 0 : _k.fileServer) || new StorageServerAdapter(this.storageProvider), + }; + this.network = getFactory(NetworkModuleImpl, (_l = this.options.override) === null || _l === void 0 ? void 0 : _l.network)(this.services); + this.market = getFactory(MarketModuleImpl, (_m = this.options.override) === null || _m === void 0 ? void 0 : _m.market)({ + ...this.services, + networkModule: this.network, + }, this.options.market); + this.payment = getFactory(PaymentModuleImpl, (_o = this.options.override) === null || _o === void 0 ? void 0 : _o.payment)(this.services, this.options.payment); + this.activity = getFactory(ActivityModuleImpl, (_p = this.options.override) === null || _p === void 0 ? void 0 : _p.activity)(this.services); + this.rental = getFactory(RentalModuleImpl, (_q = this.options.override) === null || _q === void 0 ? void 0 : _q.rental)({ + activityModule: this.activity, + paymentModule: this.payment, + marketModule: this.market, + networkModule: this.network, + logger: this.logger, + storageProvider: this.storageProvider, + }); + } + catch (err) { + this.events.emit("error", err); + throw err; + } + } + /** + * "Connects" to the network by initializing the underlying components required to perform operations on Golem Network + * + * @return Resolves when all initialization steps are completed + */ + async connect() { + try { + await this.yagna.connect(); + await this.services.paymentApi.connect(); + await this.storageProvider.init(); + await this.connectPlugins(); + this.events.emit("connected"); + this.hasConnection = true; + } + catch (err) { + this.events.emit("error", err); + throw err; + } + } + async startDisconnect() { + try { + this.abortController.abort("Golem Network is disconnecting"); + await Promise.allSettled(this.cleanupTasks.map((task) => task())); + this.cleanupTasks = []; + await this.storageProvider + .close() + .catch((err) => this.logger.warn("Closing storage provider resulted with an error, it will be ignored", err)); + await this.yagna + .disconnect() + .catch((err) => this.logger.warn("Closing connections with yagna resulted with an error, it will be ignored", err)); + this.services.proposalCache.flushAll(); + this.abortController = new AbortController(); + } + catch (err) { + this.logger.error("Error while disconnecting", err); + throw err; + } + finally { + this.events.emit("disconnected"); + this.hasConnection = false; + } + } + /** + * "Disconnects" from the Golem Network + * + * @return Resolves when all shutdown steps are completed + */ + async disconnect() { + if (this.disconnectPromise) { + return this.disconnectPromise; + } + this.disconnectPromise = this.startDisconnect().finally(() => { + this.disconnectPromise = undefined; + }); + return this.disconnectPromise; + } + async getAllocationFromOrder({ order, maxAgreements, }) { + var _a; + if (!((_a = order.payment) === null || _a === void 0 ? void 0 : _a.allocation)) { + const budget = this.market.estimateBudget({ order, maxAgreements }); + /** + * We need to create allocations that will exist longer than the agreements made. + * + * Without this in the event of agreement termination due to its expiry, + * the invoice for the agreement arrives, and we try to accept the invoice with + * an allocation that already expired (had the same expiration time as the agreement), + * which leads to unpaid invoices. + */ + const EXPIRATION_BUFFER_MINUTES = 15; + return this.payment.createAllocation({ + budget, + expirationSec: Math.round(order.market.rentHours * (60 + EXPIRATION_BUFFER_MINUTES) * 60), + }); + } + if (typeof order.payment.allocation === "string") { + return this.payment.getAllocation(order.payment.allocation); + } + return order.payment.allocation; + } + /** + * Define your computational resource demand and access a single instance + * + * Use Case: Get a single instance of a resource from the market to execute operations on + * + * @example + * ```ts + * const rental = await glm.oneOf({ order }); + * await rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem! 👋")) + * .then((res) => console.log(res.stdout)); + * await rental.stopAndFinalize(); + * ``` + * + * @param {Object} options + * @param options.order - represents the order specifications which will result in access to ResourceRental. + * @param options.signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + * @param options.setup - an optional function that is called as soon as the exe unit is ready + * @param options.teardown - an optional function that is called before the exe unit is destroyed + */ + async oneOf({ order, setup, teardown, signalOrTimeout, volumes }) { + this.validateSettings({ + order, + volumes, + }); + const { signal, cleanup: cleanupAbortSignals } = anyAbortSignal(createAbortSignalFromTimeout(signalOrTimeout), this.abortController.signal); + let allocation = undefined; + let proposalSubscription = undefined; + let rental = undefined; + let networkNode = undefined; + const cleanup = async () => { + var _a; + cleanupAbortSignals(); + if (proposalSubscription) { + proposalSubscription.unsubscribe(); + } + // First finalize the rental (which will wait for all payments to be processed) + // and only then release the allocation + if (rental) { + await rental.stopAndFinalize().catch((err) => this.logger.error("Error while finalizing rental", err)); + } + if (order.network && networkNode) { + await this.network + .removeNetworkNode(order.network, networkNode) + .catch((err) => this.logger.error("Error while removing network node", err)); + } + // Don't release the allocation if it was provided by the user + if (((_a = order.payment) === null || _a === void 0 ? void 0 : _a.allocation) || !allocation) { + return; + } + await this.payment + .releaseAllocation(allocation) + .catch((err) => this.logger.error("Error while releasing allocation", err)); + }; + try { + const proposalPool = new DraftOfferProposalPool({ + logger: this.logger, + validateOfferProposal: order.market.offerProposalFilter, + selectOfferProposal: order.market.offerProposalSelector, + }); + allocation = await this.getAllocationFromOrder({ order, maxAgreements: 1 }); + signal.throwIfAborted(); + const demandSpecification = await this.market.buildDemandDetails(order.demand, order.market, allocation); + const draftProposal$ = this.market.collectDraftOfferProposals({ + demandSpecification, + pricing: order.market.pricing, + filter: order.market.offerProposalFilter, + }); + proposalSubscription = proposalPool.readFrom(draftProposal$); + const agreement = await this.market.signAgreementFromPool(proposalPool, { + expirationSec: Math.round(order.market.rentHours * 60 * 60), + }, signal); + networkNode = order.network + ? await this.network.createNetworkNode(order.network, agreement.provider.id) + : undefined; + rental = this.rental.createResourceRental(agreement, allocation, { + payment: order.payment, + activity: order.activity, + networkNode, + exeUnit: { setup, teardown, volumes }, + }); + // We managed to create the activity, no need to look for more agreement candidates + proposalSubscription.unsubscribe(); + this.cleanupTasks.push(cleanup); + return rental; + } + catch (err) { + this.logger.error("Error while creating rental", err); + // if the execution was interrupted before we got the chance to add the cleanup task + // we need to call it manually + await cleanup(); + throw err; + } + } + /** + * Define your computational resource demand and access a pool of instances. + * The pool will grow up to the specified poolSize. + * + * @example + * ```ts + * // create a pool that can grow up to 3 rentals at the same time + * const pool = await glm.manyOf({ + * poolSize: 3, + * demand + * }); + * await Promise.allSettled([ + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the first machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the second machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the third machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * ]); + * ``` + * + * @param {Object} options + * @param options.order - represents the order specifications which will result in access to LeaseProcess. + * @param options.poolSize {Object | number} - can be defined as a number or an object with min and max fields, if defined as a number it will be treated as a min parameter. + * @param options.poolSize.min - the minimum pool size to achieve ready state (default = 0) + * @param options.poolSize.max - the maximum pool size, if reached, the next pool element will only be available if the borrowed resource is released or destroyed (dafault = 100) + * @param options.setup - an optional function that is called as soon as the exe unit is ready + * @param options.teardown - an optional function that is called before the exe unit is destroyed + */ + async manyOf({ poolSize, order, setup, teardown, volumes }) { + var _a, _b; + this.validateSettings({ + order, + volumes, + }); + const signal = this.abortController.signal; + let allocation = undefined; + let resourceRentalPool = undefined; + let subscription = undefined; + const cleanup = async () => { + var _a; + if (subscription) { + subscription.unsubscribe(); + } + // First drain the pool (which will wait for all rentals to be paid for + // and only then release the allocation + if (resourceRentalPool) { + await resourceRentalPool + .drainAndClear() + .catch((err) => this.logger.error("Error while draining resource rental pool", err)); + } + // Don't release the allocation if it was provided by the user + if (((_a = order.payment) === null || _a === void 0 ? void 0 : _a.allocation) || !allocation) { + return; + } + await this.payment + .releaseAllocation(allocation) + .catch((err) => this.logger.error("Error while releasing allocation", err)); + }; + try { + const proposalPool = new DraftOfferProposalPool({ + logger: this.logger, + validateOfferProposal: order.market.offerProposalFilter, + selectOfferProposal: order.market.offerProposalSelector, + }); + const maxAgreements = typeof poolSize === "number" ? poolSize : ((_b = (_a = poolSize === null || poolSize === void 0 ? void 0 : poolSize.max) !== null && _a !== void 0 ? _a : poolSize === null || poolSize === void 0 ? void 0 : poolSize.min) !== null && _b !== void 0 ? _b : 1); + allocation = await this.getAllocationFromOrder({ order, maxAgreements }); + signal.throwIfAborted(); + const demandSpecification = await this.market.buildDemandDetails(order.demand, order.market, allocation); + const draftProposal$ = this.market.collectDraftOfferProposals({ + demandSpecification, + pricing: order.market.pricing, + filter: order.market.offerProposalFilter, + }); + subscription = proposalPool.readFrom(draftProposal$); + const rentSeconds = Math.round(order.market.rentHours * 60 * 60); + resourceRentalPool = this.rental.createResourceRentalPool(proposalPool, allocation, { + poolSize, + network: order.network, + resourceRentalOptions: { + activity: order.activity, + payment: order.payment, + exeUnit: { setup, teardown, volumes }, + }, + agreementOptions: { + expirationSec: rentSeconds, + }, + }); + this.cleanupTasks.push(cleanup); + return resourceRentalPool; + } + catch (err) { + this.logger.error("Error while creating rental pool", err); + // if the execution was interrupted before we got the chance to add the cleanup task + // we need to call it manually + await cleanup(); + throw err; + } + } + isConnected() { + return this.hasConnection; + } + /** + * Creates a new logical network within the Golem VPN infrastructure. + * Allows communication between network nodes using standard network mechanisms, + * but requires specific implementation in the ExeUnit/runtime, + * which must be capable of providing a standard Unix-socket interface to their payloads + * and marshaling the logical network traffic through the Golem Net transport layer + * @param options + */ + async createNetwork(options) { + return await this.network.createNetwork(options); + } + /** + * Removes an existing network from the Golem VPN infrastructure. + * @param network + */ + async destroyNetwork(network) { + return await this.network.removeNetwork(network); + } + use(pluginCallback, pluginOptions) { + this.registeredPlugins.push({ + initializer: pluginCallback, + options: pluginOptions, + }); + } + createStorageProvider() { + if (typeof this.options.dataTransferProtocol === "string") { + switch (this.options.dataTransferProtocol) { + case "gftp": + return new GftpStorageProvider(this.logger); + case "ws": + return new WebSocketStorageProvider(this.yagna, { + logger: this.logger, + }); + default: + throw new GolemConfigError(`Unsupported data transfer protocol ${this.options.dataTransferProtocol}. Supported protocols are "gftp" and "ws"`); + } + } + else if (this.options.dataTransferProtocol !== undefined) { + return this.options.dataTransferProtocol; + } + else { + return new NullStorageProvider(); + } + } + async connectPlugins() { + this.logger.debug("Started plugin initialization"); + for (const plugin of this.registeredPlugins) { + const cleanup = await plugin.initializer(this, plugin.options); + if (cleanup) { + this.cleanupTasks.push(cleanup); + } + } + this.logger.debug("Finished plugin initialization"); + } + /** + * A helper method used to check if the user provided settings and settings are reasonable + * @param settings + * @private + */ + validateSettings(settings) { + var _a, _b; + // Rule: If user specifies volumes and the min storage size, then the min storage has to be at least of the largest volume size + if (settings.volumes && ((_a = settings.order.demand.workload) === null || _a === void 0 ? void 0 : _a.minStorageGib) !== undefined) { + const largestVolumeSizeGib = Math.max(...Object.values(settings.volumes).map((spec) => spec.sizeGib)); + if (settings.order.demand.workload.minStorageGib < largestVolumeSizeGib) { + throw new GolemUserError("Your minStorageGib requirement is below your expected largest volume size."); + } + } + // Rule: Require minStorageGib settings for volume users to ensure that they will get suitable providers from the market + if (settings.volumes && ((_b = settings.order.demand.workload) === null || _b === void 0 ? void 0 : _b.minStorageGib) === undefined) { + throw new GolemUserError("You have specified volumes but did not specify a minStorageGib requirement."); + } + } +} + +export { defaultLogger as $, Agreement as A, BasicDemandDirector as B, Batch as C, Demand as D, ExecutionConfig as E, RemoteProcess as F, GolemInternalError as G, GolemWorkError as H, Invoice as I, WorkErrorCode as J, GolemError as K, GolemUserError as L, MarketErrorCode as M, NetworkState as N, OfferProposal as O, PaymentDemandDirector as P, GolemAbortError as Q, ResourceRental as R, ScanDirector as S, TcpProxy as T, GolemConfigError as U, GolemPlatformError as V, WebSocketStorageProvider as W, GolemTimeoutError as X, GolemModuleError as Y, sleep as Z, nullLogger as _, GolemNetwork as a, env as a0, YagnaApi as a1, isBrowser as a2, isNode as a3, isWebWorker as a4, checkAndThrowUnsupportedInBrowserError as a5, createAbortSignalFromTimeout as a6, anyAbortSignal as a7, runOnNextEventLoopIteration as a8, mergeUntilFirstComplete as a9, waitFor as aa, waitAndCall as ab, PaymentApiAdapter as ac, MarketApiAdapter as ad, InvoiceRepository as ae, DebitNoteRepository as af, MIN_SUPPORTED_YAGNA as ag, EventReader as ah, GftpStorageProvider as ai, NullStorageProvider as aj, getPaymentNetwork as ak, ResourceRentalPool as b, RentalModuleImpl as c, DemandSpecification as d, GolemMarketError as e, WorkloadDemandDirector as f, DraftOfferProposalPool as g, MarketModuleImpl as h, ScannedOffer as i, DebitNote as j, Allocation as k, RejectionReason as l, GolemPaymentError as m, PaymentErrorCode as n, InvoiceProcessor as o, PaymentModuleImpl as p, Network as q, NetworkNode as r, NetworkModuleImpl as s, NetworkErrorCode as t, GolemNetworkError as u, Activity as v, ActivityStateEnum as w, Result as x, ActivityModuleImpl as y, ExeUnit as z }; +//# sourceMappingURL=shared-BES5zO0i.mjs.map diff --git a/dist/shared-BES5zO0i.mjs.map b/dist/shared-BES5zO0i.mjs.map new file mode 100644 index 000000000..94802dd32 --- /dev/null +++ b/dist/shared-BES5zO0i.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-BES5zO0i.mjs","sources":["../src/shared/utils/sleep.ts","../src/shared/error/golem-error.ts","../src/shared/utils/runtimeContextChecker.ts","../src/shared/utils/logger/nullLogger.ts","../src/shared/utils/logger/defaultLogger.ts","../src/shared/utils/env.ts","../src/shared/utils/wait.ts","../src/shared/yagna/event-reader.ts","../src/shared/yagna/yagnaApi.ts","../src/shared/utils/abortSignal.ts","../src/shared/utils/eventLoop.ts","../src/shared/utils/rxjs.ts","../src/market/demand/demand.ts","../src/market/error.ts","../src/market/proposal/market-proposal.ts","../src/market/proposal/offer-proposal.ts","../src/shared/utils/acquireQueue.ts","../src/market/draft-offer-proposal-pool.ts","../src/market/proposal/offer-counter-proposal.ts","../src/market/proposal/proposals_batch.ts","../src/market/demand/demand-body-builder.ts","../src/market/demand/directors/base-config.ts","../src/market/demand/directors/workload-demand-director-config.ts","../src/market/demand/directors/basic-demand-director-config.ts","../src/market/demand/directors/basic-demand-director.ts","../src/market/demand/directors/payment-demand-director-config.ts","../src/market/demand/directors/payment-demand-director.ts","../src/market/demand/directors/workload-demand-director.ts","../src/market/scan/scan-director.ts","../src/market/scan/scanned-offer.ts","../src/market/market.module.ts","../src/market/agreement/agreement.ts","../src/payment/BaseDocument.ts","../src/payment/invoice.ts","../src/payment/debit_note.ts","../src/payment/allocation.ts","../src/payment/rejection.ts","../node_modules/tslib/tslib.es6.js","../src/payment/error.ts","../src/payment/InvoiceProcessor.ts","../src/payment/PayerDetails.ts","../src/shared/utils/apiErrorMessage.ts","../src/payment/agreement_payment_process.ts","../src/payment/payment.module.ts","../src/activity/activity.ts","../src/activity/results.ts","../src/activity/config.ts","../src/activity/script/script.ts","../src/activity/script/command.ts","../src/shared/storage/gftp.ts","../src/shared/storage/null.ts","../src/shared/storage/ws.ts","../src/activity/exe-unit/error.ts","../src/activity/exe-unit/batch.ts","../src/activity/exe-unit/process.ts","../src/network/tcp-proxy.ts","../src/activity/exe-unit/exe-unit.ts","../src/shared/utils/timeout.ts","../src/activity/exe-script-executor.ts","../src/activity/activity.module.ts","../src/network/error.ts","../src/network/network.ts","../src/network/node.ts","../src/network/network.module.ts","../src/resource-rental/resource-rental.ts","../src/resource-rental/resource-rental-pool.ts","../src/resource-rental/rental.module.ts","../src/shared/yagna/adapters/payment-api-adapter.ts","../src/shared/yagna/adapters/market-api-adapter.ts","../src/shared/yagna/repository/invoice-repository.ts","../src/shared/yagna/repository/debit-note-repository.ts","../src/shared/yagna/adapters/activity-api-adapter.ts","../src/shared/cache/CacheService.ts","../src/shared/yagna/repository/activity-repository.ts","../src/shared/yagna/repository/agreement-repository.ts","../src/shared/yagna/repository/proposal-repository.ts","../src/shared/yagna/repository/demand-repository.ts","../src/shared/storage/StorageServerAdapter.ts","../src/shared/yagna/adapters/network-api-adapter.ts","../src/golem-network/golem-network.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["EnvUtils.getYagnaAppKey","EnvUtils.getYagnaApiUrl","DEFAULTS","EnvUtils.getYagnaSubnet","EnvUtils.getRepoUrl","EnvUtils.isDevMode","EnvUtils.getPaymentNetwork","fs","Buffer","WebSocket","jsSha3"],"mappings":"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","x_google_ignoreList":[37]} \ No newline at end of file diff --git a/dist/shared-BNnsKKpM.js b/dist/shared-BNnsKKpM.js new file mode 100644 index 000000000..a4557158d --- /dev/null +++ b/dist/shared-BNnsKKpM.js @@ -0,0 +1,6835 @@ +'use strict'; + +var debugLogger = require('debug'); +var YaTsClient = require('ya-ts-client'); +var uuid = require('uuid'); +var semverSatisfies = require('semver/functions/satisfies.js'); +var semverCoerce = require('semver/functions/coerce.js'); +var rxjs = require('rxjs'); +var EventSource = require('eventsource'); +var eventemitter3 = require('eventemitter3'); +var AsyncLock = require('async-lock'); +var Decimal = require('decimal.js-light'); +var path = require('path'); +var fs = require('fs'); +var spawn = require('cross-spawn'); +var flexbuffers_js = require('flatbuffers/js/flexbuffers.js'); +var jsSha3 = require('js-sha3'); +var NodeWebSocket = require('ws'); +var net = require('net'); +var buffer = require('buffer'); +var retry = require('async-retry'); +var ipNum = require('ip-num'); + +function _interopNamespaceDefault(e) { + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n.default = e; + return Object.freeze(n); +} + +var YaTsClient__namespace = /*#__PURE__*/_interopNamespaceDefault(YaTsClient); +var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs); +var jsSha3__namespace = /*#__PURE__*/_interopNamespaceDefault(jsSha3); + +/** + * @param time + * @param inMs + * @ignore + */ +const sleep = (time, inMs = false) => new Promise((resolve) => setTimeout(resolve, time * (inMs ? 1 : 1000))); + +/** + * Base class for all errors directly thrown by Golem SDK. + */ +class GolemError extends Error { + constructor(message, + /** + * The previous error, if any, that led to this error. + */ + previous) { + super(message); + this.previous = previous; + } +} +/** + * User-caused errors in the Golem SDK containing logic errors. + * @example you cannot create an activity for an agreement that already expired + */ +class GolemUserError extends GolemError { +} +/** + * Represents errors related to the user choosing to abort or stop running activities. + * @example CTRL+C abort error + */ +class GolemAbortError extends GolemUserError { +} +/** + * Represents configuration errors. + * @example Api key not defined + */ +class GolemConfigError extends GolemUserError { +} +/** + * Represents errors when the SDK encountered an internal error that wasn't handled correctly. + * @example JSON.parse(undefined) -> Error: Unexpected token u in JSON at position 0 + */ +class GolemInternalError extends GolemError { +} +/** + * Represents errors resulting from yagna’s errors or provider failure + * @examples: + * - yagna results with a HTTP 500-error + * - the provider failed to deploy the activity - permission denied when creating the activity on the provider system itself + */ +class GolemPlatformError extends GolemError { +} +/** + * SDK timeout errors + * @examples: + * - Not receiving any offers within the configured time. + * - The activity not starting within the configured time. + * - The request (task) timing out (started on an activity but didn't finish on time). + * - The request start timing out (the task didn't start within the configured amount of time). + */ +class GolemTimeoutError extends GolemError { +} +/** + * Module specific errors - Market, Work, Payment. + * Each of the major modules will have its own domain specific root error type, + * additionally containing an error code specific to a given subdomain + */ +class GolemModuleError extends GolemError { + constructor(message, code, previous) { + super(message, previous); + this.code = code; + } +} + +/** + * @ignore + */ +const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined"; +const isNode = typeof process !== "undefined" && process.versions != null && process.versions.node != null; +/** + * @ignore + */ +const isWebWorker = typeof self === "object" && self.constructor && self.constructor.name === "DedicatedWorkerGlobalScope"; +/** + * @ignore + */ +function checkAndThrowUnsupportedInBrowserError(feature) { + if (isBrowser) + throw new GolemInternalError(`Feature ${feature} is unsupported in the browser.`); +} + +function nullLogger() { + const nullFunc = () => { + // Do nothing. + }; + return { + child: () => nullLogger(), + debug: nullFunc, + info: nullFunc, + warn: nullFunc, + error: nullFunc, + }; +} + +function getNamespace(namespace, disablePrefix) { + if (disablePrefix) { + return namespace; + } + else { + return namespace.startsWith("golem-js:") ? namespace : `golem-js:${namespace}`; + } +} +/** + * Creates a logger that uses the debug library. This logger is used by default by all entities in the SDK. + * + * If the namespace is not prefixed with `golem-js:`, it will be prefixed automatically - this can be controlled by `disableAutoPrefix` options. + */ +function defaultLogger(namespace, opts = { + disableAutoPrefix: false, +}) { + const namespaceWithBase = getNamespace(namespace, opts.disableAutoPrefix); + const logger = debugLogger(namespaceWithBase); + function log(level, msg, ctx) { + if (ctx) { + logger(`[${level}] ${msg} %o`, ctx); + } + else { + logger(`[${level}] ${msg}`); + } + } + function debug(msg, ctx) { + log("DEBUG", msg, ctx); + } + function info(msg, ctx) { + log("INFO", msg, ctx); + } + function warn(msg, ctx) { + log("WARN", msg, ctx); + } + function error(msg, ctx) { + log("ERROR", msg, ctx); + } + return { + child: (childNamespace) => defaultLogger(`${namespaceWithBase}:${childNamespace}`, opts), + info, + error, + warn, + debug, + }; +} + +function getYagnaApiUrl() { + return (isNode ? process === null || process === void 0 ? void 0 : process.env.YAGNA_API_URL : "") || "http://127.0.0.1:7465"; +} +function getYagnaAppKey() { + var _a; + return isNode ? ((_a = process === null || process === void 0 ? void 0 : process.env.YAGNA_APPKEY) !== null && _a !== void 0 ? _a : "") : ""; +} +function getYagnaSubnet() { + var _a; + return isNode ? ((_a = process === null || process === void 0 ? void 0 : process.env.YAGNA_SUBNET) !== null && _a !== void 0 ? _a : "public") : "public"; +} +function getRepoUrl() { + var _a; + return isNode + ? ((_a = process === null || process === void 0 ? void 0 : process.env.GOLEM_REGISTRY_URL) !== null && _a !== void 0 ? _a : "https://registry.golem.network") + : "https://registry.golem.network"; +} +function getPaymentNetwork() { + var _a; + return isNode ? ((_a = process.env.PAYMENT_NETWORK) !== null && _a !== void 0 ? _a : "holesky") : "holesky"; +} +function isDevMode() { + return isNode ? (process === null || process === void 0 ? void 0 : process.env.GOLEM_DEV_MODE) === "true" : false; +} + +var env = /*#__PURE__*/Object.freeze({ + __proto__: null, + getPaymentNetwork: getPaymentNetwork, + getRepoUrl: getRepoUrl, + getYagnaApiUrl: getYagnaApiUrl, + getYagnaAppKey: getYagnaAppKey, + getYagnaSubnet: getYagnaSubnet, + isDevMode: isDevMode +}); + +/** + * Utility function that helps to block the execution until a condition is met (check returns true) or the timeout happens. + * + * @param {function} check - The function checking if the condition is met. + * @param {Object} [opts] - Options controlling the timeout and check interval in seconds. + * @param {AbortSignal} [opts.abortSignal] - AbortSignal to respect when waiting for the condition to be met + * @param {number} [opts.intervalSeconds=1] - The interval between condition checks in seconds. + * + * @return {Promise} - Resolves when the condition is met or rejects with a timeout error if it wasn't met on time. + */ +function waitFor(check, opts) { + var _a; + const intervalSeconds = (_a = opts === null || opts === void 0 ? void 0 : opts.intervalSeconds) !== null && _a !== void 0 ? _a : 1; + let verifyInterval; + const verify = new Promise((resolve, reject) => { + verifyInterval = setInterval(async () => { + var _a; + if ((_a = opts === null || opts === void 0 ? void 0 : opts.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) { + reject(new GolemAbortError("Waiting for a condition has been aborted", opts.abortSignal.reason)); + } + if (await check()) { + resolve(); + } + }, intervalSeconds * 1000); + }); + return verify.finally(() => { + clearInterval(verifyInterval); + }); +} +/** + * Simple utility that allows you to wait n-seconds and then call the provided function + */ +function waitAndCall(fn, waitSeconds) { + return new Promise((resolve, reject) => { + setTimeout(async () => { + try { + const val = await fn(); + resolve(val); + } + catch (err) { + reject(err); + } + }, waitSeconds * 1000); + }); +} + +class EventReader { + constructor(logger) { + this.logger = logger; + } + async pollToSubject(generator, subject) { + for await (const value of generator) { + subject.next(value); + } + subject.complete(); + } + createReader(eventType, eventsFetcher) { + let isFinished = false; + let keepReading = true; + let currentPoll = null; + let lastTimestamp = new Date().toISOString(); + const logger = this.logger; + return { + eventType, + isFinished, + pollValues: async function* () { + while (keepReading) { + try { + currentPoll = eventsFetcher(lastTimestamp); + const events = await currentPoll; + logger.debug("Polled events from Yagna", { + eventType, + count: events.length, + lastEventTimestamp: lastTimestamp, + }); + for (const event of events) { + yield event; + lastTimestamp = event.eventDate; + } + } + catch (error) { + if (typeof error === "object" && error.name === "CancelError") { + logger.debug("Polling was cancelled", { eventType }); + continue; + } + logger.error("Error fetching events from Yagna", { eventType, error }); + } + } + logger.debug("Stopped reading events", { eventType }); + isFinished = true; + }, + cancel: async function () { + keepReading = false; + if (currentPoll) { + currentPoll.cancel(); + } + await waitFor(() => isFinished, { intervalSeconds: 0 }); + logger.debug("Cancelled reading the events", { eventType }); + }, + }; + } +} + +const MIN_SUPPORTED_YAGNA = "0.15.2"; +/** + * Utility class that groups various Yagna APIs under a single wrapper + * + * This class has the following responsibilities: + * + * - selectively exposes services from ya-ts-client in a more user-friendly manner + * - implements an event reader that collects events from Yagna endpoints and allows subscribing to them as Observables + * for agreements, debit notes and invoices. These observables emit ya-ts-client types on outputs + * + * End users of the SDK should not use this class and make use of {@link golem-network/golem-network.GolemNetwork} instead. This class is designed for + * SDK developers to use. + */ +class YagnaApi { + constructor(options) { + this.debitNoteEvents$ = new rxjs.Subject(); + this.debitNoteEventsPoll = null; + this.invoiceEvents$ = new rxjs.Subject(); + this.invoiceEventPoll = null; + this.agreementEvents$ = new rxjs.Subject(); + this.agreementEventsPoll = null; + const apiKey = (options === null || options === void 0 ? void 0 : options.apiKey) || getYagnaAppKey(); + this.basePath = (options === null || options === void 0 ? void 0 : options.basePath) || getYagnaApiUrl(); + const yagnaOptions = { + apiKey: apiKey, + basePath: this.basePath, + }; + if (!yagnaOptions.apiKey) { + throw new GolemConfigError("Yagna API key not defined"); + } + const commonHeaders = { + Authorization: `Bearer ${apiKey}`, + }; + const marketClient = new YaTsClient__namespace.MarketApi.Client({ + BASE: `${this.basePath}/market-api/v1`, + HEADERS: commonHeaders, + }); + this.market = marketClient.requestor; + const paymentClient = new YaTsClient__namespace.PaymentApi.Client({ + BASE: `${this.basePath}/payment-api/v1`, + HEADERS: commonHeaders, + }); + this.payment = paymentClient.requestor; + const activityApiClient = new YaTsClient__namespace.ActivityApi.Client({ + BASE: `${this.basePath}/activity-api/v1`, + HEADERS: commonHeaders, + }); + this.activity = { + control: activityApiClient.requestorControl, + state: activityApiClient.requestorState, + exec: { + observeBatchExecResults: (activityId, batchId) => { + return new rxjs.Observable((observer) => { + const eventSource = new EventSource(`${this.basePath}/activity-api/v1/activity/${activityId}/exec/${batchId}`, { + headers: { + Accept: "text/event-stream", + Authorization: `Bearer ${apiKey}`, + }, + }); + eventSource.addEventListener("runtime", (event) => observer.next(JSON.parse(event.data))); + eventSource.addEventListener("error", (error) => observer.error(error)); + return () => eventSource.close(); + }); + }, + }, + }; + const netClient = new YaTsClient__namespace.NetApi.Client({ + BASE: `${this.basePath}/net-api/v1`, + HEADERS: commonHeaders, + }); + this.net = netClient.requestor; + const gsbClient = new YaTsClient__namespace.GsbApi.Client({ + BASE: `${this.basePath}/gsb-api/v1`, + HEADERS: commonHeaders, + }); + this.gsb = gsbClient.requestor; + this.logger = (options === null || options === void 0 ? void 0 : options.logger) ? options.logger.child("yagna") : defaultLogger("yagna"); + const identityClient = new YaTsClient__namespace.IdentityApi.Client({ + BASE: this.basePath, + HEADERS: commonHeaders, + }); + this.identity = identityClient.default; + const versionClient = new YaTsClient__namespace.VersionApi.Client({ + BASE: this.basePath, + }); + this.version = versionClient.default; + this.yagnaOptions = yagnaOptions; + this.appSessionId = uuid.v4(); + this.reader = new EventReader(this.logger); + } + /** + * Effectively starts the Yagna API client including subscribing to events exposed via rxjs subjects + */ + async connect() { + this.logger.debug("Connecting to Yagna"); + const version = await this.assertSupportedVersion(); + const identity = await this.identity.getIdentity(); + this.startPollingEvents(); + this.logger.info("Connected to Yagna", { version, identity: identity.identity }); + return identity; + } + /** + * Terminates the Yagna API related activities + */ + async disconnect() { + this.logger.debug("Disconnecting from Yagna"); + await this.stopPollingEvents(); + this.logger.info("Disconnected from Yagna"); + } + async getVersion() { + try { + const res = await this.version.getVersion(); + return res.current.version; + } + catch (err) { + throw new GolemPlatformError(`Failed to establish yagna version due to: ${err}`, err); + } + } + startPollingEvents() { + this.logger.debug("Starting to poll for events from Yagna", { appSessionId: this.appSessionId }); + const pollIntervalSec = 5; + const maxEvents = 100; + this.agreementEventsPoll = this.reader.createReader("AgreementEvents", (lastEventTimestamp) => this.market.collectAgreementEvents(pollIntervalSec, lastEventTimestamp, maxEvents, this.appSessionId)); + this.debitNoteEventsPoll = this.reader.createReader("DebitNoteEvents", (lastEventTimestamp) => { + return this.payment.getDebitNoteEvents(pollIntervalSec, lastEventTimestamp, maxEvents, this.appSessionId); + }); + this.invoiceEventPoll = this.reader.createReader("InvoiceEvents", (lastEventTimestamp) => this.payment.getInvoiceEvents(pollIntervalSec, lastEventTimestamp, maxEvents, this.appSessionId)); + // Run the readers and don't block execution + this.reader + .pollToSubject(this.agreementEventsPoll.pollValues(), this.agreementEvents$) + .then(() => this.logger.debug("Finished polling agreement events from Yagna")) + .catch((err) => this.logger.error("Error while polling agreement events from Yagna", err)); + this.reader + .pollToSubject(this.debitNoteEventsPoll.pollValues(), this.debitNoteEvents$) + .then(() => this.logger.debug("Finished polling debit note events from Yagna")) + .catch((err) => this.logger.error("Error while polling debit note events from Yagna", err)); + this.reader + .pollToSubject(this.invoiceEventPoll.pollValues(), this.invoiceEvents$) + .then(() => this.logger.debug("Finished polling invoice events from Yagna")) + .catch((err) => this.logger.error("Error while polling invoice events from Yagna", err)); + } + async stopPollingEvents() { + this.logger.debug("Stopping polling events from Yagna"); + const promises = []; + if (this.invoiceEventPoll) { + promises.push(this.invoiceEventPoll.cancel()); + } + if (this.debitNoteEventsPoll) { + promises.push(this.debitNoteEventsPoll.cancel()); + } + if (this.agreementEventsPoll) { + promises.push(this.agreementEventsPoll.cancel()); + } + await Promise.allSettled(promises); + this.logger.debug("Stopped polling events from Yagna"); + } + async assertSupportedVersion() { + const version = await this.getVersion(); + const normVersion = semverCoerce(version); + this.logger.debug("Checking Yagna version support", { + userInstalled: normVersion === null || normVersion === void 0 ? void 0 : normVersion.raw, + minSupported: MIN_SUPPORTED_YAGNA, + }); + if (!normVersion) { + throw new GolemPlatformError(`Unreadable yagna version '${version}'. Can't proceed without checking yagna version support status.`); + } + if (!semverSatisfies(normVersion, `>=${MIN_SUPPORTED_YAGNA}`)) { + throw new GolemPlatformError(`You run yagna in version ${version} and the minimal version supported by the SDK is ${MIN_SUPPORTED_YAGNA}. ` + + `Please consult the golem-js README to find matching SDK version or upgrade your yagna installation.`); + } + return normVersion.version; + } +} + +/** + * If provided an AbortSignal, returns it. + * If provided a number, returns an AbortSignal that will be aborted after the specified number of milliseconds. + * If provided undefined, returns an AbortSignal that will never be aborted. + */ +function createAbortSignalFromTimeout(timeoutOrSignal) { + if (timeoutOrSignal instanceof AbortSignal) { + return timeoutOrSignal; + } + if (typeof timeoutOrSignal === "number") { + return AbortSignal.timeout(timeoutOrSignal); + } + return new AbortController().signal; +} +/** + * Combine multiple AbortSignals into a single signal that will be aborted if any + * of the input signals are aborted. If any of the input signals are already aborted, + * the returned signal will be aborted immediately. + * + * Polyfill for AbortSignal.any(), since it's only available starting in Node 20 + * https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static + * + * The function returns a signal and a cleanup function that allows you + * to remove listeners when they are no longer needed. + */ +function anyAbortSignal(...signals) { + const controller = new AbortController(); + const onAbort = (ev) => { + if (controller.signal.aborted) + return; + const reason = ev.target.reason; + controller.abort(reason); + }; + for (const signal of signals) { + if (signal.aborted) { + controller.abort(signal.reason); + break; + } + signal.addEventListener("abort", onAbort); + } + const cleanup = () => { + for (const signal of signals) { + signal.removeEventListener("abort", onAbort); + } + }; + return { signal: controller.signal, cleanup }; +} + +/** + * Run a callback on the next event loop iteration ("promote" a microtask to a task using setTimeout). + * Note that this is not guaranteed to run on the very next iteration, but it will run as soon as possible. + * This function is designed to avoid the problem of microtasks queueing other microtasks in an infinite loop. + * See the example below for a common pitfall that this function can help avoid. + * Learn more about microtasks and their relation to async/await here: + * https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide/In_depth + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#control_flow_effects_of_await + * @param cb The callback to run on the next event loop iteration. + * @example + * ```ts + * const signal = AbortSignal.timeout(1_000); + * // This loop will run for 1 second, then stop. + * while (!signal.aborted) { + * await runOnNextEventLoopIteration(() => Promise.resolve()); + * } + * + * const signal = AbortSignal.timeout(1_000); + * // This loop will run indefinitely. + * // Each while loop iteration queues a microtask, which itself queues another microtask, and so on. + * while (!signal.aborted) { + * await Promise.resolve(); + * } + * ``` + */ +function runOnNextEventLoopIteration(cb) { + return new Promise((resolve, reject) => { + setTimeout(() => cb().then(resolve).catch(reject)); + }); +} + +/** + * Merges two observables until the first one completes (or errors). + * The difference between this and `merge` is that this will complete when the first observable completes, + * while `merge` would only complete when _all_ observables complete. + */ +function mergeUntilFirstComplete(observable1, observable2) { + const completionSubject = new rxjs.Subject(); + const observable1WithCompletion = observable1.pipe(rxjs.takeUntil(completionSubject), rxjs.finalize(() => completionSubject.next())); + const observable2WithCompletion = observable2.pipe(rxjs.takeUntil(completionSubject), rxjs.finalize(() => completionSubject.next())); + return observable1WithCompletion.pipe(rxjs.mergeWith(observable2WithCompletion)); +} + +class DemandSpecification { + constructor( + /** Represents the low level demand request body that will be used to subscribe for offers matching our "computational resource needs" */ + prototype, paymentPlatform) { + this.prototype = prototype; + this.paymentPlatform = paymentPlatform; + } +} +class Demand { + constructor(id, details) { + this.id = id; + this.details = details; + } + get paymentPlatform() { + return this.details.paymentPlatform; + } +} + +exports.MarketErrorCode = void 0; +(function (MarketErrorCode) { + MarketErrorCode["CouldNotGetAgreement"] = "CouldNotGetAgreement"; + MarketErrorCode["CouldNotGetProposal"] = "CouldNotGetProposal"; + MarketErrorCode["ServiceNotInitialized"] = "ServiceNotInitialized"; + MarketErrorCode["MissingAllocation"] = "MissingAllocation"; + MarketErrorCode["SubscriptionFailed"] = "SubscriptionFailed"; + MarketErrorCode["InvalidProposal"] = "InvalidProposal"; + MarketErrorCode["ProposalResponseFailed"] = "ProposalResponseFailed"; + MarketErrorCode["ProposalRejectionFailed"] = "ProposalRejectionFailed"; + MarketErrorCode["DemandExpired"] = "DemandExpired"; + MarketErrorCode["ResourceRentalTerminationFailed"] = "ResourceRentalTerminationFailed"; + MarketErrorCode["ResourceRentalCreationFailed"] = "ResourceRentalCreationFailed"; + MarketErrorCode["AgreementApprovalFailed"] = "AgreementApprovalFailed"; + MarketErrorCode["NoProposalAvailable"] = "NoProposalAvailable"; + MarketErrorCode["InternalError"] = "InternalError"; + MarketErrorCode["ScanFailed"] = "ScanFailed"; +})(exports.MarketErrorCode || (exports.MarketErrorCode = {})); +class GolemMarketError extends GolemModuleError { + constructor(message, code, previous) { + super(message, code, previous); + this.code = code; + this.previous = previous; + } +} + +/** + * Base representation of a market proposal that can be issued either by the Provider (offer proposal) + * or Requestor (counter-proposal) + */ +class MarketProposal { + constructor(model) { + var _a; + this.model = model; + /** + * Reference to the previous proposal in the "negotiation chain" + * + * If null, this means that was the initial offer that the negotiations started from + */ + this.previousProposalId = null; + this.id = model.proposalId; + this.previousProposalId = (_a = model.prevProposalId) !== null && _a !== void 0 ? _a : null; + this.properties = model.properties; + } + get state() { + return this.model.state; + } + get timestamp() { + return new Date(Date.parse(this.model.timestamp)); + } + isInitial() { + return this.model.state === "Initial"; + } + isDraft() { + return this.model.state === "Draft"; + } + isExpired() { + return this.model.state === "Expired"; + } + isRejected() { + return this.model.state === "Rejected"; + } + isValid() { + try { + this.validate(); + return true; + } + catch (err) { + return false; + } + } +} + +/** + * Entity representing the offer presented by the Provider to the Requestor + * + * Issue: The final proposal that gets promoted to an agreement comes from the provider + * Right now the last time I can access it directly is when I receive the counter from the provider, + * later it's impossible for me to get it via the API `{"message":"Path deserialize error: Id [2cb0b2820c6142fab5af7a8e90da09f0] has invalid owner type."}` + * + * FIXME #yagna should allow obtaining proposals via the API even if I'm not the owner! + */ +class OfferProposal extends MarketProposal { + constructor(model, demand) { + super(model); + this.demand = demand; + this.issuer = "Provider"; + this.validate(); + } + get pricing() { + var _a, _b; + const usageVector = this.properties["golem.com.usage.vector"]; + const priceVector = this.properties["golem.com.pricing.model.linear.coeffs"]; + if (!usageVector) { + throw new GolemInternalError("The proposal does not contain 'golem.com.usage.vector' property. We can't estimate the costs."); + } + if (!priceVector) { + throw new GolemInternalError("The proposal does not contain 'golem.com.pricing.model.linear.coeffs' property. We can't estimate costs."); + } + const envIdx = usageVector.findIndex((ele) => ele === "golem.usage.duration_sec"); + const cpuIdx = usageVector.findIndex((ele) => ele === "golem.usage.cpu_sec"); + const envSec = (_a = priceVector[envIdx]) !== null && _a !== void 0 ? _a : 0.0; + const cpuSec = (_b = priceVector[cpuIdx]) !== null && _b !== void 0 ? _b : 0.0; + const start = priceVector[priceVector.length - 1]; + return { + cpuSec, + envSec, + start, + }; + } + getDto() { + return { + transferProtocol: this.properties["golem.activity.caps.transfer.protocol"], + cpuBrand: this.properties["golem.inf.cpu.brand"], + cpuCapabilities: this.properties["golem.inf.cpu.capabilities"], + cpuCores: this.properties["golem.inf.cpu.cores"], + cpuThreads: this.properties["golem.inf.cpu.threads"], + memory: this.properties["golem.inf.mem.gib"], + storage: this.properties["golem.inf.storage.gib"], + publicNet: this.properties["golem.node.net.is-public"], + runtimeCapabilities: this.properties["golem.runtime.capabilities"], + runtimeName: this.properties["golem.runtime.name"], + runtimeVersion: this.properties["golem.runtime.version"], + state: this.state, + }; + } + /** + * Cost estimation based on CPU/h, ENV/h and start prices + * + * @param rentHours Number of hours of rental to use for the estimation + */ + getEstimatedCost(rentHours = 1) { + var _a; + const threadsNo = (_a = this.getDto().cpuThreads) !== null && _a !== void 0 ? _a : 1; + const rentSeconds = rentHours * 60 * 60; + return this.pricing.start + this.pricing.cpuSec * threadsNo * rentSeconds + this.pricing.envSec * rentSeconds; + } + get provider() { + return { + id: this.model.issuerId, + name: this.properties["golem.node.id.name"], + walletAddress: this.properties[`golem.com.payment.platform.${this.demand.paymentPlatform}.address`], + }; + } + /** + * Validates if the proposal satisfies basic business rules, is complete and thus safe to interact with + * + * Use this method before executing any important logic, to ensure that you're working with correct, complete data + */ + validate() { + const usageVector = this.properties["golem.com.usage.vector"]; + const priceVector = this.properties["golem.com.pricing.model.linear.coeffs"]; + if (!usageVector || usageVector.length === 0) { + throw new GolemMarketError("Broken proposal: the `golem.com.usage.vector` does not contain valid information about structure of the usage counters vector", exports.MarketErrorCode.InvalidProposal); + } + if (!priceVector || priceVector.length === 0) { + throw new GolemMarketError("Broken proposal: the `golem.com.pricing.model.linear.coeffs` does not contain pricing information", exports.MarketErrorCode.InvalidProposal); + } + if (usageVector.length < priceVector.length - 1) { + throw new GolemMarketError("Broken proposal: the `golem.com.usage.vector` has less pricing information than `golem.com.pricing.model.linear.coeffs`", exports.MarketErrorCode.InvalidProposal); + } + if (priceVector.length < usageVector.length) { + throw new GolemMarketError("Broken proposal: the `golem.com.pricing.model.linear.coeffs` should contain 3 price values", exports.MarketErrorCode.InvalidProposal); + } + } + getProviderPaymentPlatforms() { + return (Object.keys(this.properties) + .filter((prop) => prop.startsWith("golem.com.payment.platform.")) + .map((prop) => prop.split(".")[4]) || []); + } +} + +/** + * `Promise.withResolvers` is only available in Node 22.0.0 and later. + */ +function withResolvers() { + let resolve; + let reject; + const promise = new Promise((_resolve, _reject) => { + resolve = _resolve; + reject = _reject; + }); + return { resolve, reject, promise }; +} +/** + * A queue of acquirers waiting for an item. + * use `get` to queue up for the next available item. + * use `put` to give the item to the next acquirer. + */ +class AcquireQueue { + constructor() { + this.queue = []; + this.abortController = new AbortController(); + } + /** + * Release (reject) all acquirers. + * Essentially this is a way to reset the queue. + */ + releaseAll() { + this.abortController.abort(); + this.queue = []; + this.abortController = new AbortController(); + } + /** + * Queue up for the next available item. + */ + async get(signalOrTimeout) { + const { signal, cleanup } = anyAbortSignal(createAbortSignalFromTimeout(signalOrTimeout), this.abortController.signal); + signal.throwIfAborted(); + const { resolve, promise } = withResolvers(); + this.queue.push(resolve); + const abortPromise = new Promise((_, reject) => { + signal.addEventListener("abort", () => { + this.queue = this.queue.filter((r) => r !== resolve); + reject(signal.reason); + }); + }); + return Promise.race([promise, abortPromise]).finally(cleanup); + } + /** + * Are there any acquirers waiting for an item? + */ + hasAcquirers() { + return this.queue.length > 0; + } + /** + * Give the item to the next acquirer. + * If there are no acquirers, throw an error. You should check `hasAcquirers` before calling this method. + */ + put(item) { + if (!this.hasAcquirers()) { + throw new GolemInternalError("No acquirers waiting for the item"); + } + const resolve = this.queue.shift(); + resolve(item); + } + size() { + return this.queue.length; + } +} + +/** + * Pool of draft offer proposals that are ready to be promoted to agreements with Providers + * + * Reaching this pool means that the related initial proposal which was delivered by Yagna in response + * to the subscription with the Demand has been fully negotiated between the Provider and Requestor. + * + * This pool should contain only offer proposals that can be used to pursue the final Agreement between the + * parties. + * + * Technically, the "market" part of you application should populate this pool with such offer proposals. + */ +class DraftOfferProposalPool { + constructor(options) { + this.options = options; + this.events = new eventemitter3.EventEmitter(); + this.acquireQueue = new AcquireQueue(); + /** {@link ProposalPoolOptions.minCount} */ + this.minCount = 0; + /** {@link ProposalPoolOptions.selectOfferProposal} */ + this.selectOfferProposal = (proposals) => proposals[0]; + /** {@link ProposalPoolOptions.validateOfferProposal} */ + this.validateOfferProposal = (proposal) => proposal !== undefined; + /** + * The proposals that were not yet leased to anyone and are available for lease + */ + this.available = new Set(); + /** + * The proposal that were already leased to someone and shouldn't be leased again + */ + this.leased = new Set(); + if (options === null || options === void 0 ? void 0 : options.selectOfferProposal) { + this.selectOfferProposal = options.selectOfferProposal; + } + if (options === null || options === void 0 ? void 0 : options.validateOfferProposal) { + this.validateOfferProposal = options.validateOfferProposal; + } + if ((options === null || options === void 0 ? void 0 : options.minCount) && options.minCount >= 0) { + this.minCount = options.minCount; + } + this.logger = this.logger = (options === null || options === void 0 ? void 0 : options.logger) || defaultLogger("proposal-pool"); + } + /** + * Pushes the provided proposal to the list of proposals available for lease + */ + add(proposal) { + if (!proposal.isDraft()) { + this.logger.error("Cannot add a non-draft proposal to the pool", { proposalId: proposal.id }); + throw new GolemMarketError("Cannot add a non-draft proposal to the pool", exports.MarketErrorCode.InvalidProposal); + } + // if someone is waiting for a proposal, give it to them + if (this.acquireQueue.hasAcquirers()) { + this.acquireQueue.put(proposal); + return; + } + this.available.add(proposal); + this.events.emit("added", { proposal }); + } + /** + * Attempts to obtain a single proposal from the pool + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the acquiring + */ + async acquire(signalOrTimeout) { + const signal = createAbortSignalFromTimeout(signalOrTimeout); + signal.throwIfAborted(); + // iterate over available proposals until we find a valid one + const tryGettingFromAvailable = async () => { + signal.throwIfAborted(); + const proposal = this.available.size > 0 ? this.selectOfferProposal([...this.available]) : null; + if (!proposal) { + // No proposal was selected, either `available` is empty or the user's proposal filter didn't select anything + // no point retrying + return; + } + if (!this.validateOfferProposal(proposal)) { + // Drop if not valid + this.removeFromAvailable(proposal); + // and try again + return runOnNextEventLoopIteration(tryGettingFromAvailable); + } + // valid proposal found + return proposal; + }; + const proposal = await tryGettingFromAvailable(); + // Try to get one + if (proposal) { + this.available.delete(proposal); + this.leased.add(proposal); + this.events.emit("acquired", { proposal }); + return proposal; + } + // if no valid proposal was found, wait for one to appear + return this.acquireQueue.get(signal); + } + /** + * Releases the proposal back to the pool + * + * Validates if the proposal is still usable before putting it back to the list of available ones + * @param proposal + */ + release(proposal) { + this.leased.delete(proposal); + if (this.validateOfferProposal(proposal)) { + this.events.emit("released", { proposal }); + // if someone is waiting for a proposal, give it to them + if (this.acquireQueue.hasAcquirers()) { + this.acquireQueue.put(proposal); + return; + } + // otherwise, put it back to the list of available proposals + this.available.add(proposal); + } + else { + this.events.emit("removed", { proposal }); + } + } + remove(proposal) { + if (this.leased.has(proposal)) { + this.leased.delete(proposal); + this.events.emit("removed", { proposal }); + } + if (this.available.has(proposal)) { + this.available.delete(proposal); + this.events.emit("removed", { proposal }); + } + } + /** + * Returns the number of all items in the pool (available + leased out) + */ + count() { + return this.availableCount() + this.leasedCount(); + } + /** + * Returns the number of items that are possible to lease from the pool + */ + availableCount() { + return this.available.size; + } + /** + * Returns the number of items that were leased out of the pool + */ + leasedCount() { + return this.leased.size; + } + /** + * Tells if the pool is ready to take items from + */ + isReady() { + return this.count() >= this.minCount; + } + /** + * Clears the pool entirely + */ + async clear() { + this.acquireQueue.releaseAll(); + for (const proposal of this.available) { + this.available.delete(proposal); + this.events.emit("removed", { proposal }); + } + for (const proposal of this.leased) { + this.leased.delete(proposal); + this.events.emit("removed", { proposal }); + } + this.available = new Set(); + this.leased = new Set(); + this.events.emit("cleared"); + } + removeFromAvailable(proposal) { + this.available.delete(proposal); + this.events.emit("removed", { proposal }); + } + readFrom(source) { + return source.subscribe({ + next: (proposal) => this.add(proposal), + error: (err) => this.logger.error("Error while collecting proposals", err), + }); + } +} + +class OfferCounterProposal extends MarketProposal { + constructor(model) { + super(model); + this.issuer = "Requestor"; + } + validate() { + return; + } +} + +const DEFAULTS$2 = { + minBatchSize: 100, + releaseTimeoutMs: 1000, +}; +/** + * Proposals Batch aggregates initial proposals and returns a set grouped by the provider's key + * to avoid duplicate offers issued by the provider. + */ +class ProposalsBatch { + constructor(options) { + var _a, _b; + /** Batch of proposals mapped by provider key and related set of initial proposals */ + this.batch = new Map(); + /** Lock used to synchronize adding and getting proposals from the batch */ + this.lock = new AsyncLock(); + this.config = { + minBatchSize: (_a = options === null || options === void 0 ? void 0 : options.minBatchSize) !== null && _a !== void 0 ? _a : DEFAULTS$2.minBatchSize, + releaseTimeoutMs: (_b = options === null || options === void 0 ? void 0 : options.releaseTimeoutMs) !== null && _b !== void 0 ? _b : DEFAULTS$2.releaseTimeoutMs, + }; + } + /** + * Add proposal to the batch grouped by provider key + * which consist of providerId, cores, threads, mem and storage + */ + async addProposal(proposal) { + const providerKey = this.getProviderKey(proposal); + await this.lock.acquire("proposals-batch", () => { + let proposals = this.batch.get(providerKey); + if (!proposals) { + proposals = new Set(); + this.batch.set(providerKey, proposals); + } + proposals.add(proposal); + }); + } + /** + * Returns the batched proposals from the internal buffer and empties it + */ + async getProposals() { + const proposals = []; + await this.lock.acquire("proposals-batch", () => { + this.batch.forEach((providersProposals) => proposals.push(this.getBestProposal(providersProposals))); + this.batch.clear(); + }); + return proposals; + } + /** + * Waits for the max amount time for batching or max batch size to be reached before it makes sense to process events + * + * Used to flow-control the consumption of the proposal events from the batch. + * The returned promise resolves when it is time to process the buffered proposal events. + */ + async waitForProposals() { + let timeoutId, intervalId; + const isTimeoutReached = new Promise((resolve) => { + timeoutId = setTimeout(resolve, this.config.releaseTimeoutMs); + }); + const isBatchSizeReached = new Promise((resolve) => { + intervalId = setInterval(() => { + if (this.batch.size >= this.config.minBatchSize) { + resolve(true); + } + }, 1000); + }); + await Promise.race([isTimeoutReached, isBatchSizeReached]); + clearTimeout(timeoutId); + clearInterval(intervalId); + } + /** + * Selects the best proposal from the set according to the lowest price and the youngest proposal age + */ + getBestProposal(proposals) { + const sortByLowerPriceAndHigherTime = (p1, p2) => { + const p1Price = p1.getEstimatedCost(); + const p2Price = p2.getEstimatedCost(); + const p1Time = p1.timestamp.valueOf(); + const p2Time = p2.timestamp.valueOf(); + return p1Price !== p2Price ? p1Price - p2Price : p2Time - p1Time; + }; + return [...proposals].sort(sortByLowerPriceAndHigherTime)[0]; + } + /** + * Provider key used to group proposals so that they can be distinguished based on ID and hardware configuration + */ + getProviderKey(proposal) { + return [ + proposal.provider.id, + proposal.properties["golem.inf.cpu.cores"], + proposal.properties["golem.inf.cpu.threads"], + proposal.properties["golem.inf.mem.gib"], + proposal.properties["golem.inf.storage.gib"], + ].join("-"); + } +} + +var ComparisonOperator; +(function (ComparisonOperator) { + ComparisonOperator["Eq"] = "="; + ComparisonOperator["Lt"] = "<"; + ComparisonOperator["Gt"] = ">"; + ComparisonOperator["GtEq"] = ">="; + ComparisonOperator["LtEq"] = "<="; +})(ComparisonOperator || (ComparisonOperator = {})); +/** + * A helper class assisting in building the Golem Demand object + * + * Various directors should use the builder to add properties and constraints before the final product is received + * from the builder and sent to yagna to subscribe for matched offers (proposals). + * + * The main purpose of the builder is to accept different requirements (properties and constraints) from different + * directors who know what kind of properties and constraints are needed. Then it helps to merge these requirements. + * + * Demand -> DemandSpecification -> DemandPrototype -> DemandDTO + */ +class DemandBodyBuilder { + constructor() { + this.properties = []; + this.constraints = []; + } + addProperty(key, value) { + const findIndex = this.properties.findIndex((prop) => prop.key === key); + if (findIndex >= 0) { + this.properties[findIndex] = { key, value }; + } + else { + this.properties.push({ key, value }); + } + return this; + } + addConstraint(key, value, comparisonOperator = ComparisonOperator.Eq) { + this.constraints.push({ key, value, comparisonOperator }); + return this; + } + getProduct() { + return { + properties: this.properties, + constraints: this.constraints.map((c) => `(${c.key + c.comparisonOperator + c.value})`), + }; + } + mergePrototype(prototype) { + if (prototype.properties) { + prototype.properties.forEach((prop) => { + this.addProperty(prop.key, prop.value); + }); + } + if (prototype.constraints) { + prototype.constraints.forEach((cons) => { + const { key, value, comparisonOperator } = { ...this.parseConstraint(cons) }; + this.addConstraint(key, value, comparisonOperator); + }); + } + return this; + } + parseConstraint(constraint) { + for (const key in ComparisonOperator) { + const value = ComparisonOperator[key]; + const parsedConstraint = constraint.slice(1, -1).split(value); + if (parsedConstraint.length === 2) { + return { + key: parsedConstraint[0], + value: parsedConstraint[1], + comparisonOperator: value, + }; + } + } + throw new GolemInternalError(`Unable to parse constraint "${constraint}"`); + } +} + +/** + * Basic config utility class + * + * Helps in building more specific config classes + */ +class BaseConfig { + isPositiveInt(value) { + return value > 0 && Number.isInteger(value); + } +} + +var PackageFormat; +(function (PackageFormat) { + PackageFormat["GVMKitSquash"] = "gvmkit-squash"; +})(PackageFormat || (PackageFormat = {})); +class WorkloadDemandDirectorConfig extends BaseConfig { + constructor(options) { + var _a; + super(); + this.packageFormat = PackageFormat.GVMKitSquash; + this.engine = "vm"; + this.runtime = { + name: "vm", + version: undefined, + }; + this.minMemGib = 0.5; + this.minStorageGib = 2; + this.minCpuThreads = 1; + this.minCpuCores = 1; + this.capabilities = []; + this.useHttps = false; + Object.assign(this, options); + if (!((_a = options.runtime) === null || _a === void 0 ? void 0 : _a.name)) { + this.runtime.name = this.engine; + } + this.expirationSec = options.expirationSec; + if (!this.imageHash && !this.manifest && !this.imageTag && !this.imageUrl) { + throw new GolemConfigError("You must define a package or manifest option"); + } + if (this.imageUrl && !this.imageHash) { + throw new GolemConfigError("If you provide an imageUrl, you must also provide it's SHA3-224 hash in imageHash"); + } + if (!this.isPositiveInt(this.expirationSec)) { + throw new GolemConfigError(`The expirationSec param has to be a positive integer, received: ${this.expirationSec}`); + } + if (options.engine && options.runtime) { + throw new GolemConfigError("The engine parameter is deprecated and cannot be used with the runtime parameter. Use the runtime option only"); + } + } +} + +class BasicDemandDirectorConfig extends BaseConfig { + constructor(options) { + super(); + this.subnetTag = getYagnaSubnet(); + if (options === null || options === void 0 ? void 0 : options.subnetTag) { + this.subnetTag = options.subnetTag; + } + } +} + +class BasicDemandDirector { + constructor(config = new BasicDemandDirectorConfig()) { + this.config = config; + } + apply(builder) { + builder + .addProperty("golem.srv.caps.multi-activity", true) + .addProperty("golem.node.debug.subnet", this.config.subnetTag); + builder + .addConstraint("golem.com.pricing.model", "linear") + .addConstraint("golem.node.debug.subnet", this.config.subnetTag); + } +} + +class PaymentDemandDirectorConfig extends BaseConfig { + constructor(options) { + super(); + this.debitNotesAcceptanceTimeoutSec = 2 * 60; // 2 minutes + this.midAgreementDebitNoteIntervalSec = 2 * 60; // 2 minutes + this.midAgreementPaymentTimeoutSec = 12 * 60 * 60; // 12 hours + if (options) { + Object.assign(this, options); + } + if (!this.isPositiveInt(this.debitNotesAcceptanceTimeoutSec)) { + throw new GolemConfigError("The debit note acceptance timeout time has to be a positive integer"); + } + if (!this.isPositiveInt(this.midAgreementDebitNoteIntervalSec)) { + throw new GolemConfigError("The debit note interval time has to be a positive integer"); + } + if (!this.isPositiveInt(this.midAgreementPaymentTimeoutSec)) { + throw new GolemConfigError("The mid-agreement payment timeout time has to be a positive integer"); + } + } +} + +class PaymentDemandDirector { + constructor(allocation, marketApiAdapter, config = new PaymentDemandDirectorConfig()) { + this.allocation = allocation; + this.marketApiAdapter = marketApiAdapter; + this.config = config; + } + async apply(builder) { + // Configure mid-agreement payments + builder + .addProperty("golem.com.scheme.payu.debit-note.interval-sec?", this.config.midAgreementDebitNoteIntervalSec) + .addProperty("golem.com.scheme.payu.payment-timeout-sec?", this.config.midAgreementPaymentTimeoutSec) + .addProperty("golem.com.payment.debit-notes.accept-timeout?", this.config.debitNotesAcceptanceTimeoutSec); + // Configure payment platform + const { constraints, properties } = await this.marketApiAdapter.getPaymentRelatedDemandDecorations(this.allocation.id); + builder.mergePrototype({ constraints, properties }); + } +} + +class WorkloadDemandDirector { + constructor(config) { + this.config = config; + } + async apply(builder) { + builder.addProperty("golem.srv.comp.expiration", Date.now() + this.config.expirationSec * 1000); + builder + .addProperty("golem.srv.comp.vm.package_format", this.config.packageFormat) + .addConstraint("golem.runtime.name", this.config.runtime.name); + if (this.config.runtime.version) { + builder.addConstraint("golem.runtime.version", this.config.runtime.version); + } + if (this.config.capabilities.length) + this.config.capabilities.forEach((cap) => builder.addConstraint("golem.runtime.capabilities", cap)); + builder + .addConstraint("golem.inf.mem.gib", this.config.minMemGib, ComparisonOperator.GtEq) + .addConstraint("golem.inf.storage.gib", this.config.minStorageGib, ComparisonOperator.GtEq) + .addConstraint("golem.inf.cpu.cores", this.config.minCpuCores, ComparisonOperator.GtEq) + .addConstraint("golem.inf.cpu.threads", this.config.minCpuThreads, ComparisonOperator.GtEq); + if (this.config.imageUrl) { + const taskPackage = await this.resolveTaskPackageFromCustomUrl(); + builder.addProperty("golem.srv.comp.task_package", taskPackage); + } + else if (this.config.imageHash || this.config.imageTag) { + const taskPackage = await this.resolveTaskPackageUrl(); + builder.addProperty("golem.srv.comp.task_package", taskPackage); + } + this.addManifestDecorations(builder); + } + async resolveTaskPackageFromCustomUrl() { + if (!this.config.imageUrl) { + throw new GolemPlatformError("Tried to resolve task package from custom url, but no url was provided"); + } + if (!this.config.imageHash) { + throw new GolemPlatformError("Tried to resolve task package from custom url, but no hash was provided. Please calculate the SHA3-224 hash of the image and provide it as `imageHash`"); + } + return `hash:sha3:${this.config.imageHash}:${this.config.imageUrl}`; + } + async resolveTaskPackageUrl() { + const repoUrl = getRepoUrl(); + const useHttps = this.config.useHttps; + const isDev = isDevMode(); + let hash = this.config.imageHash; + const tag = this.config.imageTag; + const url = `${repoUrl}/v1/image/info?${isDev ? "dev=true" : "count=true"}&${tag ? `tag=${tag}` : `hash=${hash}`}`; + try { + const response = await fetch(url); + if (!response.ok) { + throw new GolemPlatformError(`Unable to get image ${await response.text()}`); + } + const data = await response.json(); + const imageUrl = useHttps ? data.https : data.http; + hash = data.sha3; + return `hash:sha3:${hash}:${imageUrl}`; + } + catch (error) { + if (error instanceof GolemError) + throw error; + throw new GolemPlatformError(`Failed to fetch image: ${error}`); + } + } + addManifestDecorations(builder) { + if (!this.config.manifest) + return; + builder.addProperty("golem.srv.comp.payload", this.config.manifest); + if (this.config.manifestSig) + builder.addProperty("golem.srv.comp.payload.sig", this.config.manifestSig); + if (this.config.manifestSigAlgorithm) + builder.addProperty("golem.srv.comp.payload.sig.algorithm", this.config.manifestSigAlgorithm); + if (this.config.manifestCert) + builder.addProperty("golem.srv.comp.payload.cert", this.config.manifestCert); + } +} + +class ScanDirector { + constructor(options) { + this.options = options; + } + async apply(builder) { + this.addWorkloadDecorations(builder); + this.addGenericDecorations(builder); + this.addPaymentDecorations(builder); + } + addPaymentDecorations(builder) { + if (!this.options.payment) + return; + const network = this.options.payment.network; + const driver = this.options.payment.driver || "erc20"; + const token = this.options.payment.token || ["mainnet", "polygon"].includes(network) ? "glm" : "tglm"; + builder.addConstraint(`golem.com.payment.platform.${driver}-${network}-${token}.address`, "*"); + } + addWorkloadDecorations(builder) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1; + if (((_a = this.options.workload) === null || _a === void 0 ? void 0 : _a.engine) && ((_b = this.options.workload) === null || _b === void 0 ? void 0 : _b.runtime)) { + throw new GolemConfigError("The engine parameter is deprecated and cannot be used with the runtime parameter. Use the runtime parameter only"); + } + /** @deprecated */ + if ((_c = this.options.workload) === null || _c === void 0 ? void 0 : _c.engine) { + builder.addConstraint("golem.runtime.name", (_d = this.options.workload) === null || _d === void 0 ? void 0 : _d.engine); + } + if ((_f = (_e = this.options.workload) === null || _e === void 0 ? void 0 : _e.runtime) === null || _f === void 0 ? void 0 : _f.name) { + builder.addConstraint("golem.runtime.name", this.options.workload.runtime.name); + } + if ((_h = (_g = this.options.workload) === null || _g === void 0 ? void 0 : _g.runtime) === null || _h === void 0 ? void 0 : _h.version) { + builder.addConstraint("golem.runtime.version", this.options.workload.runtime.version); + } + if ((_j = this.options.workload) === null || _j === void 0 ? void 0 : _j.capabilities) + (_k = this.options.workload) === null || _k === void 0 ? void 0 : _k.capabilities.forEach((cap) => builder.addConstraint("golem.runtime.capabilities", cap)); + if ((_l = this.options.workload) === null || _l === void 0 ? void 0 : _l.minMemGib) { + builder.addConstraint("golem.inf.mem.gib", (_m = this.options.workload) === null || _m === void 0 ? void 0 : _m.minMemGib, ComparisonOperator.GtEq); + } + if ((_o = this.options.workload) === null || _o === void 0 ? void 0 : _o.maxMemGib) { + builder.addConstraint("golem.inf.mem.gib", (_p = this.options.workload) === null || _p === void 0 ? void 0 : _p.maxMemGib, ComparisonOperator.LtEq); + } + if ((_q = this.options.workload) === null || _q === void 0 ? void 0 : _q.minStorageGib) { + builder.addConstraint("golem.inf.storage.gib", (_r = this.options.workload) === null || _r === void 0 ? void 0 : _r.minStorageGib, ComparisonOperator.GtEq); + } + if ((_s = this.options.workload) === null || _s === void 0 ? void 0 : _s.maxStorageGib) { + builder.addConstraint("golem.inf.storage.gib", (_t = this.options.workload) === null || _t === void 0 ? void 0 : _t.maxStorageGib, ComparisonOperator.LtEq); + } + if ((_u = this.options.workload) === null || _u === void 0 ? void 0 : _u.minCpuThreads) { + builder.addConstraint("golem.inf.cpu.threads", (_v = this.options.workload) === null || _v === void 0 ? void 0 : _v.minCpuThreads, ComparisonOperator.GtEq); + } + if ((_w = this.options.workload) === null || _w === void 0 ? void 0 : _w.maxCpuThreads) { + builder.addConstraint("golem.inf.cpu.threads", (_x = this.options.workload) === null || _x === void 0 ? void 0 : _x.maxCpuThreads, ComparisonOperator.LtEq); + } + if ((_y = this.options.workload) === null || _y === void 0 ? void 0 : _y.minCpuCores) { + builder.addConstraint("golem.inf.cpu.cores", (_z = this.options.workload) === null || _z === void 0 ? void 0 : _z.minCpuCores, ComparisonOperator.GtEq); + } + if ((_0 = this.options.workload) === null || _0 === void 0 ? void 0 : _0.maxCpuCores) { + builder.addConstraint("golem.inf.cpu.cores", (_1 = this.options.workload) === null || _1 === void 0 ? void 0 : _1.maxCpuCores, ComparisonOperator.LtEq); + } + } + addGenericDecorations(builder) { + if (this.options.subnetTag) { + builder.addConstraint("golem.node.debug.subnet", this.options.subnetTag); + } + } +} + +class ScannedOffer { + constructor(model) { + this.model = model; + } + get properties() { + return this.model.properties; + } + get constraints() { + return this.model.constraints; + } + get pricing() { + var _a, _b; + const usageVector = this.properties["golem.com.usage.vector"]; + const priceVector = this.properties["golem.com.pricing.model.linear.coeffs"]; + if (!usageVector) { + throw new GolemInternalError("The proposal does not contain 'golem.com.usage.vector' property. We can't estimate the costs."); + } + if (!priceVector) { + throw new GolemInternalError("The proposal does not contain 'golem.com.pricing.model.linear.coeffs' property. We can't estimate costs."); + } + const envIdx = usageVector.findIndex((ele) => ele === "golem.usage.duration_sec"); + const cpuIdx = usageVector.findIndex((ele) => ele === "golem.usage.cpu_sec"); + const envSec = (_a = priceVector[envIdx]) !== null && _a !== void 0 ? _a : 0.0; + const cpuSec = (_b = priceVector[cpuIdx]) !== null && _b !== void 0 ? _b : 0.0; + const start = priceVector[priceVector.length - 1]; + return { + cpuSec, + envSec, + start, + }; + } + get provider() { + return { + id: this.model.providerId, + name: this.properties["golem.node.id.name"] || "", + }; + } + get transferProtocol() { + return this.properties["golem.activity.caps.transfer.protocol"]; + } + get cpuBrand() { + return this.properties["golem.inf.cpu.brand"]; + } + get cpuVendor() { + return this.properties["golem.inf.cpu.vendor"]; + } + get cpuCapabilities() { + return this.properties["golem.inf.cpu.capabilities"]; + } + get cpuCores() { + return this.properties["golem.inf.cpu.cores"]; + } + get cpuThreads() { + return this.properties["golem.inf.cpu.threads"]; + } + get gpuBrand() { + return this.properties["golem.!exp.gap-35.v1.inf.gpu.model"]; + } + /** @deprecated Use {@link memoryGib} instead */ + get memory() { + return this.memoryGib; + } + get memoryGib() { + return this.properties["golem.inf.mem.gib"]; + } + /** @deprecated Use {@link storageGib} instead */ + get storage() { + return this.storageGib; + } + get storageGib() { + return this.properties["golem.inf.storage.gib"]; + } + get publicNet() { + return this.properties["golem.node.net.is-public"]; + } + get runtimeCapabilities() { + return this.properties["golem.runtime.capabilities"]; + } + get runtimeName() { + return this.properties["golem.runtime.name"]; + } + get runtimeVersion() { + return this.properties["golem.runtime.version"]; + } + /** + * Get the ID of the offer published by the Provider + * + * Note: + * - this ID will change after the provider refreshes the offer (usually after 1h) + * - this ID will remain unchanged for the same published offer between different scans + */ + get offerId() { + return this.model.offerId; + } + /** + * The timestamp at which the offer was generated by the Provider + */ + get offerCreateAt() { + return this.model.timestamp; + } + /** + * Lists down payment addresses on different payment platforms + * + * @example Example return value + * ```json + * { + * "erc20-polygon-glm": "0x8737beea5668595fda9d50e85cae9cad10b4c980", + * "erc20-holesky-tglm:" "0x8737beea5668595fda9d50e85cae9cad10b4c980", + * } + * ``` + */ + get paymentPlatformAddresses() { + const propRegex = /golem\.com\.payment\.platform\.([a-z0-9-]+)\.address/; + const platformAddress = Object.entries(this.model.properties) + .map(([key, address]) => { + const match = key.match(propRegex); + return [match ? match[1] : "", address]; + }) + .filter(([key]) => !!key); + return Object.fromEntries(platformAddress); + } + /** + * Cost estimation based on CPU/h, ENV/h and start prices + * + * @param rentHours Number of hours of rental to use for the estimation + */ + getEstimatedCost(rentHours = 1) { + const threadsNo = this.cpuThreads; + const rentSeconds = rentHours * 60 * 60; + return this.pricing.start + this.pricing.cpuSec * threadsNo * rentSeconds + this.pricing.envSec * rentSeconds; + } +} + +class MarketModuleImpl { + constructor(deps, options) { + this.deps = deps; + this.events = new eventemitter3.EventEmitter(); + this.logger = defaultLogger("market"); + this.logger = deps.logger; + this.marketApi = deps.marketApi; + this.fileServer = deps.fileServer; + this.options = { + ...{ demandRefreshIntervalSec: 30 * 60 }, + ...options, + }; + this.collectAndEmitAgreementEvents(); + } + async buildDemandDetails(demandOptions, orderOptions, allocation) { + const builder = new DemandBodyBuilder(); + // Instruct the builder what's required + const basicConfig = new BasicDemandDirectorConfig({ + subnetTag: demandOptions.subnetTag, + }); + const basicDirector = new BasicDemandDirector(basicConfig); + basicDirector.apply(builder); + const workloadOptions = demandOptions.workload + ? await this.applyLocalGVMIServeSupport(demandOptions.workload) + : demandOptions.workload; + const expirationSec = Math.round(orderOptions.rentHours * 60 * 60); + /** + * Default value on providers for MIN_AGREEMENT_EXPIRATION = 5min. + * This means that if the user declares a rentHours time of less than 5 min, + * offers will be rejected during negotiations with these providers. + */ + const MIN_EXPIRATION_SEC_WARN = 5 * 60; + if (expirationSec < MIN_EXPIRATION_SEC_WARN) { + this.logger.warn("The declared value of rentHours is less than 5 min. This may cause offers to be rejected during negotiations."); + } + const workloadConfig = new WorkloadDemandDirectorConfig({ + ...workloadOptions, + expirationSec, + }); + const workloadDirector = new WorkloadDemandDirector(workloadConfig); + await workloadDirector.apply(builder); + const paymentConfig = new PaymentDemandDirectorConfig(demandOptions.payment); + const paymentDirector = new PaymentDemandDirector(allocation, this.deps.marketApi, paymentConfig); + await paymentDirector.apply(builder); + return new DemandSpecification(builder.getProduct(), allocation.paymentPlatform); + } + buildScanSpecification(options) { + const builder = new DemandBodyBuilder(); + const director = new ScanDirector(options); + director.apply(builder); + return builder.getProduct(); + } + /** + * Augments the user-provided options with additional logic + * + * Use Case: serve the GVMI from the requestor and avoid registry + */ + async applyLocalGVMIServeSupport(options) { + var _a, _b, _c; + if ((_a = options.imageUrl) === null || _a === void 0 ? void 0 : _a.startsWith("file://")) { + const sourcePath = (_b = options.imageUrl) === null || _b === void 0 ? void 0 : _b.replace("file://", ""); + const publishInfo = (_c = this.fileServer.getPublishInfo(sourcePath)) !== null && _c !== void 0 ? _c : (await this.fileServer.publishFile(sourcePath)); + const { fileUrl: imageUrl, fileHash: imageHash } = publishInfo; + this.logger.debug("Applied local GVMI serve support", { + sourcePath, + publishInfo, + }); + return { + ...options, + imageUrl, + imageHash, + }; + } + return options; + } + /** + * Publishes the specified demand and re-publishes it based on demandSpecification.expirationSec interval + */ + publishAndRefreshDemand(demandSpecification) { + return new rxjs.Observable((subscriber) => { + let currentDemand; + const subscribeToOfferProposals = async () => { + try { + currentDemand = await this.deps.marketApi.publishDemandSpecification(demandSpecification); + subscriber.next(currentDemand); + this.events.emit("demandSubscriptionStarted", { + demand: currentDemand, + }); + this.logger.debug("Subscribing for proposals matched with the demand", { demand: currentDemand }); + return currentDemand; + } + catch (err) { + const golemMarketError = new GolemMarketError(`Could not publish demand on the market`, exports.MarketErrorCode.SubscriptionFailed, err); + subscriber.error(golemMarketError); + } + }; + const unsubscribeFromOfferProposals = async (demand) => { + try { + await this.deps.marketApi.unpublishDemand(demand); + this.logger.info("Unpublished demand", { demandId: demand.id }); + this.logger.debug("Unpublished demand", demand); + this.events.emit("demandSubscriptionStopped", { + demand, + }); + } + catch (err) { + const golemMarketError = new GolemMarketError(`Could not publish demand on the market`, exports.MarketErrorCode.SubscriptionFailed, err); + subscriber.error(golemMarketError); + } + }; + void subscribeToOfferProposals(); + const interval = setInterval(() => { + Promise.all([unsubscribeFromOfferProposals(currentDemand), subscribeToOfferProposals()]) + .then(([, demand]) => { + if (demand) { + this.events.emit("demandSubscriptionRefreshed", { + demand, + }); + this.logger.info("Refreshed subscription for offer proposals with the new demand", { demand }); + } + }) + .catch((err) => { + this.logger.error("Error while re-publishing demand for offers", err); + subscriber.error(err); + }); + }, this.options.demandRefreshIntervalSec * 1000); + return () => { + clearInterval(interval); + if (currentDemand) { + void unsubscribeFromOfferProposals(currentDemand); + } + }; + }); + } + collectMarketProposalEvents(demand) { + return this.deps.marketApi.collectMarketProposalEvents(demand).pipe(rxjs.tap((event) => this.logger.debug("Received demand offer event from yagna", { event })), rxjs.tap((event) => this.emitMarketProposalEvents(event))); + } + collectAllOfferProposals(demand) { + return this.collectMarketProposalEvents(demand).pipe(rxjs.filter((event) => event.type === "ProposalReceived"), rxjs.map((event) => event.proposal)); + } + async negotiateProposal(offerProposal, counterDemand) { + try { + const counterProposal = await this.deps.marketApi.counterProposal(offerProposal, counterDemand); + this.logger.debug("Counter proposal sent", counterProposal); + this.events.emit("offerCounterProposalSent", { + offerProposal, + counterProposal, + }); + return counterProposal; + } + catch (error) { + this.events.emit("errorSendingCounterProposal", { + offerProposal, + error, + }); + throw error; + } + } + async proposeAgreement(proposal, options) { + const agreement = await this.marketApi.proposeAgreement(proposal, options); + this.logger.info("Proposed and got approval for agreement", { + agreementId: agreement.id, + provider: agreement.provider, + }); + return agreement; + } + async terminateAgreement(agreement, reason) { + await this.marketApi.terminateAgreement(agreement, reason); + this.logger.info("Terminated agreement", { + agreementId: agreement.id, + provider: agreement.provider, + reason, + }); + return agreement; + } + collectDraftOfferProposals(options) { + return this.publishAndRefreshDemand(options.demandSpecification).pipe( + // For each fresh demand, start to watch the related market conversation events + rxjs.switchMap((freshDemand) => this.collectMarketProposalEvents(freshDemand)), + // Select only events for proposal received + rxjs.filter((event) => event.type === "ProposalReceived"), + // Convert event to proposal + rxjs.map((event) => event.proposal), + // We are interested only in Initial and Draft proposals, that are valid + rxjs.filter((proposal) => (proposal.isInitial() || proposal.isDraft()) && proposal.isValid()), + // If they are accepted by the pricing criteria + rxjs.filter((proposal) => this.filterProposalsByPricingOptions(options.pricing, proposal)), + // If they are accepted by the user filter + rxjs.filter((proposal) => ((options === null || options === void 0 ? void 0 : options.filter) ? this.filterProposalsByUserFilter(options.filter, proposal) : true)), + // Batch initial proposals and deduplicate them by provider key, pass-though proposals in other states + this.reduceInitialProposalsByProviderKey({ + minProposalsBatchSize: options === null || options === void 0 ? void 0 : options.minProposalsBatchSize, + proposalsBatchReleaseTimeoutMs: options === null || options === void 0 ? void 0 : options.proposalsBatchReleaseTimeoutMs, + }), + // Tap-in negotiator logic and negotiate initial proposals + rxjs.tap((proposal) => { + if (proposal.isInitial()) { + this.negotiateProposal(proposal, options.demandSpecification).catch((err) => this.logger.error("Failed to negotiate the proposal", err)); + } + }), + // Continue only with drafts + rxjs.filter((proposal) => proposal.isDraft())); + } + emitMarketProposalEvents(event) { + const { type } = event; + switch (type) { + case "ProposalReceived": + this.events.emit("offerProposalReceived", { + offerProposal: event.proposal, + }); + break; + case "ProposalRejected": + this.events.emit("offerCounterProposalRejected", { + counterProposal: event.counterProposal, + reason: event.reason, + }); + break; + case "PropertyQueryReceived": + this.events.emit("offerPropertyQueryReceived"); + break; + default: + this.logger.warn("Unsupported event type in event", { event }); + break; + } + } + async signAgreementFromPool(draftProposalPool, agreementOptions, signalOrTimeout) { + this.logger.info("Trying to sign an agreement..."); + const signal = createAbortSignalFromTimeout(signalOrTimeout); + const getProposal = async () => { + try { + signal.throwIfAborted(); + this.logger.debug("Acquiring proposal from draft proposal pool", { + draftPoolCounters: { + total: draftProposalPool.count(), + available: draftProposalPool.availableCount(), + }, + }); + const proposal = await draftProposalPool.acquire(signal); + this.logger.debug("Acquired proposal from the pool", { proposal }); + if (signal.aborted) { + draftProposalPool.release(proposal); + signal.throwIfAborted(); + } + return proposal; + } + catch (error) { + if (signal.aborted) { + throw signal.reason.name === "TimeoutError" + ? new GolemTimeoutError("Could not sign any agreement in time") + : new GolemAbortError("The signing of the agreement has been aborted", error); + } + throw error; + } + }; + const tryProposing = async () => { + const proposal = await getProposal(); + try { + const agreement = await this.proposeAgreement(proposal, agreementOptions); + // agreement is valid, proposal can be destroyed + draftProposalPool.remove(proposal); + return agreement; + } + catch (error) { + this.logger.debug("Failed to propose agreement, retrying", { error }); + // We failed to propose the agreement, destroy the proposal and try again with another one + draftProposalPool.remove(proposal); + return runOnNextEventLoopIteration(tryProposing); + } + }; + return tryProposing(); + } + /** + * Reduce initial proposals to a set grouped by the provider's key to avoid duplicate offers + */ + reduceInitialProposalsByProviderKey(options) { + return (input) => new rxjs.Observable((observer) => { + let isCancelled = false; + const proposalsBatch = new ProposalsBatch({ + minBatchSize: options === null || options === void 0 ? void 0 : options.minProposalsBatchSize, + releaseTimeoutMs: options === null || options === void 0 ? void 0 : options.proposalsBatchReleaseTimeoutMs, + }); + const subscription = input.subscribe((proposal) => { + if (proposal.isInitial()) { + proposalsBatch + .addProposal(proposal) + .catch((err) => this.logger.error("Failed to add the initial proposal to the batch", err)); + } + else { + observer.next(proposal); + } + }); + const batch = async () => { + if (isCancelled) { + return; + } + try { + await proposalsBatch.waitForProposals(); + const proposals = await proposalsBatch.getProposals(); + if (proposals.length > 0) { + this.logger.debug("Received batch of proposals", { count: proposals.length }); + proposals.forEach((proposal) => observer.next(proposal)); + } + } + catch (error) { + observer.error(error); + } + batch(); + }; + batch(); + return () => { + isCancelled = true; + subscription.unsubscribe(); + }; + }); + } + estimateBudget({ order, maxAgreements }) { + var _a, _b; + const pricingModel = order.market.pricing.model; + // TODO: Don't assume for the user, at least not on pure golem-js level + const minCpuThreads = (_b = (_a = order.demand.workload) === null || _a === void 0 ? void 0 : _a.minCpuThreads) !== null && _b !== void 0 ? _b : 1; + const { rentHours } = order.market; + switch (pricingModel) { + case "linear": { + const { maxCpuPerHourPrice, maxStartPrice, maxEnvPerHourPrice } = order.market.pricing; + const threadCost = maxAgreements * rentHours * minCpuThreads * maxCpuPerHourPrice; + const startCost = maxAgreements * maxStartPrice; + const envCost = maxAgreements * rentHours * maxEnvPerHourPrice; + return startCost + envCost + threadCost; + } + case "burn-rate": + return maxAgreements * rentHours * order.market.pricing.avgGlmPerHour; + default: + throw new GolemUserError(`Unsupported pricing model ${pricingModel}`); + } + } + async fetchAgreement(agreementId) { + return this.marketApi.getAgreement(agreementId); + } + /** + * Subscribes to an observable that maps yagna events into our domain events + * and emits these domain events via EventEmitter + */ + collectAndEmitAgreementEvents() { + this.marketApi.collectAgreementEvents().subscribe((event) => { + switch (event.type) { + case "AgreementApproved": + this.events.emit("agreementApproved", { + agreement: event.agreement, + }); + break; + case "AgreementCancelled": + this.events.emit("agreementCancelled", { + agreement: event.agreement, + }); + break; + case "AgreementTerminated": + this.events.emit("agreementTerminated", { + agreement: event.agreement, + reason: event.reason, + terminatedBy: event.terminatedBy, + }); + break; + case "AgreementRejected": + this.events.emit("agreementRejected", { + agreement: event.agreement, + reason: event.reason, + }); + break; + } + }); + } + filterProposalsByUserFilter(filter, proposal) { + try { + const result = filter(proposal); + if (!result) { + this.events.emit("offerProposalRejectedByProposalFilter", { + offerProposal: proposal, + }); + this.logger.debug("The offer was rejected by the user filter", { id: proposal.id }); + } + return result; + } + catch (err) { + this.logger.error("Executing user provided proposal filter resulted with an error", err); + throw err; + } + } + filterProposalsByPricingOptions(pricing, proposal) { + let isPriceValid = true; + if (pricing.model === "linear") { + isPriceValid = + proposal.pricing.cpuSec <= pricing.maxCpuPerHourPrice / 3600 && + proposal.pricing.envSec <= pricing.maxEnvPerHourPrice / 3600 && + proposal.pricing.start <= pricing.maxStartPrice; + } + else if (pricing.model === "burn-rate") { + isPriceValid = + proposal.pricing.start + proposal.pricing.envSec * 3600 + proposal.pricing.cpuSec * 3600 <= + pricing.avgGlmPerHour; + } + if (!isPriceValid) { + this.events.emit("offerProposalRejectedByPriceFilter", { + offerProposal: proposal, + }); + this.logger.debug("The offer was ignored because the price was too high", { + id: proposal.id, + pricing: proposal.pricing, + }); + } + return isPriceValid; + } + scan(scanSpecification) { + return this.deps.marketApi.scan(scanSpecification); + } +} + +/** + * Agreement module - an object representing the contract between the requestor and the provider. + */ +class Agreement { + /** + * @param id + * @param model + * @param demand + */ + constructor(id, model, demand) { + this.id = id; + this.model = model; + this.demand = demand; + } + /** + * Return agreement state + * @return state + */ + getState() { + return this.model.state; + } + get provider() { + return { + id: this.model.offer.providerId, + name: this.model.offer.properties["golem.node.id.name"], + walletAddress: this.model.offer.properties[`golem.com.payment.platform.${this.demand.paymentPlatform}.address`], + }; + } + /** + * Returns flag if the agreement is in the final state + * @description if the final state is true, agreement will not change state further anymore + * @return boolean + */ + isFinalState() { + const state = this.getState(); + return state !== "Pending" && state !== "Proposal"; + } +} + +/** + * Common properties and methods for payment related documents - Invoices and DebitNotes + */ +class BaseDocument { + constructor(id, model, provider) { + this.id = id; + this.model = model; + this.provider = provider; + this.recipientId = model.recipientId; + this.payeeAddr = model.payeeAddr; + this.requestorWalletAddress = model.payerAddr; + this.paymentPlatform = model.paymentPlatform; + this.agreementId = model.agreementId; + this.paymentDueDate = model.paymentDueDate; + this.status = model.status; + } + /** + * Tells what's the current status of the document + */ + getStatus() { + return this.status; + } +} + +/** + * An Invoice is an artifact issued by the Provider to the Requestor, in the context of a specific Agreement. It indicates the total Amount owed by the Requestor in this Agreement. No further Debit Notes shall be issued after the Invoice is issued. The issue of Invoice signals the Termination of the Agreement (if it hasn't been terminated already). No Activity execution is allowed after the Invoice is issued. + */ +class Invoice extends BaseDocument { + /** + * @param model + * @param providerInfo + */ + constructor(model, providerInfo) { + super(model.invoiceId, model, providerInfo); + this.model = model; + this.activityIds = model.activityIds; + this.amount = model.amount; + this.timestamp = model.timestamp; + this.recipientId = model.recipientId; + } + getPreciseAmount() { + return new Decimal(this.amount); + } + /** + * Compares two invoices together and tells if they are the same thing + */ + isSameAs(invoice) { + return this.id === invoice.id && this.amount === invoice.amount && this.agreementId === invoice.agreementId; + } +} + +/** + * A Debit Note is an artifact issued by the Provider to the Requestor, in the context of a specific Activity. It is a notification of Total Amount Due incurred by the Activity until the moment the Debit Note is issued. This is expected to be used as trigger for payment in upfront-payment or pay-as-you-go scenarios. NOTE: Only Debit Notes with non-null paymentDueDate are expected to trigger payments. NOTE: Debit Notes flag the current Total Amount Due, which is accumulated from the start of Activity. Debit Notes are expected to trigger payments, therefore payment amount for the newly received Debit Note is expected to be determined by difference of Total Payments for the Agreement vs Total Amount Due. + */ +class DebitNote extends BaseDocument { + /** + * + * @param model + * @param providerInfo + */ + constructor(model, providerInfo) { + super(model.debitNoteId, model, providerInfo); + this.model = model; + this.id = model.debitNoteId; + this.timestamp = model.timestamp; + this.activityId = model.activityId; + this.totalAmountDue = model.totalAmountDue; + this.usageCounterVector = model.usageCounterVector; + } + getPreciseAmount() { + return new Decimal(this.totalAmountDue); + } +} + +/** + * Represents a designated sum of money reserved for the purpose of making some particular payments. Allocations are currently purely virtual objects. An Allocation is connected to a payment account (wallet) specified by address and payment platform field. + */ +class Allocation { + constructor(model) { + this.model = model; + this.id = model.allocationId; + this.timeout = model.timeout; + this.timestamp = model.timestamp; + this.totalAmount = model.totalAmount; + this.spentAmount = model.spentAmount; + this.remainingAmount = model.remainingAmount; + if (!model.address || !model.paymentPlatform) { + throw new GolemConfigError("Account address and payment platform are required"); + } + this.address = model.address; + this.paymentPlatform = model.paymentPlatform; + } +} + +exports.RejectionReason = void 0; +(function (RejectionReason) { + RejectionReason["UnsolicitedService"] = "UNSOLICITED_SERVICE"; + RejectionReason["BadService"] = "BAD_SERVICE"; + RejectionReason["IncorrectAmount"] = "INCORRECT_AMOUNT"; + RejectionReason["RejectedByRequestorFilter"] = "REJECTED_BY_REQUESTOR_FILTER"; + /** + * Use it when you're processing an event after the agreement reached it's "final state" + * + * By final state we mean: we got an invoice for that agreement + */ + RejectionReason["AgreementFinalized"] = "AGREEMENT_FINALIZED"; +})(exports.RejectionReason || (exports.RejectionReason = {})); + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ + + +function __classPrivateFieldGet(receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +} + +function __classPrivateFieldSet(receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +} + +typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +var _GolemPaymentError_allocation, _GolemPaymentError_provider; +exports.PaymentErrorCode = void 0; +(function (PaymentErrorCode) { + PaymentErrorCode["AllocationCreationFailed"] = "AllocationCreationFailed"; + PaymentErrorCode["MissingAllocation"] = "MissingAllocation"; + PaymentErrorCode["PaymentProcessNotInitialized"] = "PaymentProcessNotInitialized"; + PaymentErrorCode["AllocationReleaseFailed"] = "AllocationReleaseFailed"; + PaymentErrorCode["InvoiceAcceptanceFailed"] = "InvoiceAcceptanceFailed"; + PaymentErrorCode["DebitNoteAcceptanceFailed"] = "DebitNoteAcceptanceFailed"; + PaymentErrorCode["InvoiceRejectionFailed"] = "InvoiceRejectionFailed"; + PaymentErrorCode["DebitNoteRejectionFailed"] = "DebitNoteRejectionFailed"; + PaymentErrorCode["CouldNotGetDebitNote"] = "CouldNotGetDebitNote"; + PaymentErrorCode["CouldNotGetInvoice"] = "CouldNotGetInvoice"; + PaymentErrorCode["PaymentStatusQueryFailed"] = "PaymentStatusQueryFailed"; + PaymentErrorCode["AgreementAlreadyPaid"] = "AgreementAlreadyPaid"; + PaymentErrorCode["InvoiceAlreadyReceived"] = "InvoiceAlreadyReceived"; +})(exports.PaymentErrorCode || (exports.PaymentErrorCode = {})); +class GolemPaymentError extends GolemModuleError { + constructor(message, code, allocation, provider, previous) { + super(message, code, previous); + this.code = code; + this.previous = previous; + _GolemPaymentError_allocation.set(this, void 0); + _GolemPaymentError_provider.set(this, void 0); + __classPrivateFieldSet(this, _GolemPaymentError_allocation, allocation, "f"); + __classPrivateFieldSet(this, _GolemPaymentError_provider, provider, "f"); + } + getAllocation() { + return __classPrivateFieldGet(this, _GolemPaymentError_allocation, "f"); + } + getProvider() { + return __classPrivateFieldGet(this, _GolemPaymentError_provider, "f"); + } +} +_GolemPaymentError_allocation = new WeakMap(), _GolemPaymentError_provider = new WeakMap(); + +/** + * A class that provides methods for working with invoices. It interacts with the Yagna API directly. + */ +class InvoiceProcessor { + /** + * Use `InvoiceProcessor.create()` to create an instance of this class. + */ + constructor(api) { + this.api = api; + } + /** + * Collects invoices from the Yagna API until the limit is reached or there are no more invoices. + * @param {Object} options - The parameters for collecting invoices. + * @param options.after Only collect invoices that were created after this date. + * @param options.limit Maximum number of invoices to collect. + * @param options.statuses Only collect invoices with these statuses. + * @param options.providerIds Only collect invoices from these providers. + * @param options.minAmount Only collect invoices with an amount greater than or equal to this. + * @param options.maxAmount Only collect invoices with an amount less than or equal to this. + * @param options.providerWallets Only collect invoices from these provider wallets. + * @param options.paymentPlatforms Only collect invoices from these payment platforms. + * + * @example + * ```typescript + * const invoices = await invoiceProcessor.collectInvoices({ + * after: new Date(Date.now() - 24 * 60 * 60 * 1000), // only collect invoices that were created in the last 24 hours + * limit: 100, // only collect 100 invoices max + * statuses: ["RECEIVED"], // only collect unpaid invoices + * providerIds: ["0x1234"], // only collect invoices from this provider + * minAmount: "0.1", // only collect invoices with an amount greater than or equal to 0.1 GLM + * maxAmount: "1", // only collect invoices with an amount less than or equal to 1 GLM + * providerWallets: ["0x1234"], // only collect invoices from this provider wallet + * paymentPlatforms: ["erc20-polygon-glm"], // only collect invoices from this payment platform + * }); + * ``` + */ + async collectInvoices({ after = new Date(0), limit = 50, statuses, providerIds, minAmount, maxAmount, providerWallets, paymentPlatforms, } = {}) { + // yagna api doesn't sort invoices by timestamp, so we have to fetch all invoices and sort them ourselves + // this is not very efficient, but it's the only way to get invoices sorted by timestamp + // otherwise yagna returns the invoices in seemingly random order + // FIXME: move to batched requests once yagna api supports it + const invoices = await this.api.payment.getInvoices(after === null || after === void 0 ? void 0 : after.toISOString()); + const filteredInvoices = invoices.filter((invoice) => { + if (statuses && !statuses.includes(invoice.status)) { + return false; + } + if (providerIds && !providerIds.includes(invoice.issuerId)) { + return false; + } + if (minAmount !== undefined && new Decimal(invoice.amount).lt(minAmount)) { + return false; + } + if (maxAmount !== undefined && new Decimal(invoice.amount).gt(maxAmount)) { + return false; + } + if (providerWallets && !providerWallets.includes(invoice.payeeAddr)) { + return false; + } + if (paymentPlatforms && !paymentPlatforms.includes(invoice.paymentPlatform)) { + return false; + } + return true; + }); + filteredInvoices.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()); + return filteredInvoices.slice(0, limit); + } + /** + * Fetches a single invoice from the Yagna API. + */ + async fetchSingleInvoice(invoiceId) { + return this.api.payment.getInvoice(invoiceId); + } + /** + * Creates an allocation for the exact amount of the invoice and accepts the invoice. + * If `dryRun` is `true`, no allocation will be created and the invoice will not be accepted. + */ + async acceptInvoice({ invoice, dryRun = false, }) { + let allocation = { + totalAmount: invoice.amount, + paymentPlatform: invoice.paymentPlatform, + address: invoice.payerAddr, + timestamp: new Date().toISOString(), + timeout: new Date(Date.now() + 60000).toISOString(), + makeDeposit: false, + remainingAmount: "", + spentAmount: "", + allocationId: "", + }; + if (dryRun) { + return { + allocation, + amount: invoice.amount, + invoiceId: invoice.invoiceId, + success: true, + dryRun, + }; + } + try { + allocation = await this.api.payment.createAllocation(allocation); + await this.api.payment.acceptInvoice(invoice.invoiceId, { + allocationId: allocation.allocationId, + totalAmountAccepted: invoice.amount, + }); + return { + success: true, + allocation, + amount: invoice.amount, + invoiceId: invoice.invoiceId, + dryRun, + }; + } + catch (e) { + return { + success: false, + allocation, + amount: invoice.amount, + invoiceId: invoice.invoiceId, + reason: e, + dryRun, + }; + } + } + /** + * Creates an allocation for the exact amount of the invoices and accepts the invoices. + * Since the invoices can be from different payment platforms and payer addresses, + * multiple allocations might be created. + * If `dryRun` is `true`, no allocation will be created and the invoices will not be accepted. + * Please keep in mind that this method is not atomic, so if one of the invoices fails + * to be accepted, the others will still be accepted. This is a limitation of the Yagna API. + * Use the returned `InvoiceAcceptResult` to check which invoices were accepted successfully. + */ + async acceptManyInvoices({ invoices, dryRun = false, }) { + /** + * Allocations are created per payment platform and payer address. + * So it's necessary to group invoices by payment platform and payer address + * and create an allocation for each group. + */ + const groupByPaymentPlatform = (invoiceDetails) => { + return invoiceDetails.reduce((acc, curr) => { + acc[curr.paymentPlatform] = acc[curr.paymentPlatform] || []; + acc[curr.paymentPlatform].push(curr); + return acc; + }, {}); + }; + const groupByPayerAddress = (invoiceDetails) => { + return invoiceDetails.reduce((acc, curr) => { + acc[curr.payerAddr] = acc[curr.payerAddr] || []; + acc[curr.payerAddr].push(curr); + return acc; + }, {}); + }; + const results = []; + const groupedByPaymentPlatform = groupByPaymentPlatform(invoices); + for (const [paymentPlatform, invoices] of Object.entries(groupedByPaymentPlatform)) { + const groupedByPayerAddress = groupByPayerAddress(invoices); + for (const [payerAddress, invoices] of Object.entries(groupedByPayerAddress)) { + const sum = invoices.reduce((acc, curr) => acc.plus(curr.amount), new Decimal(0)); + let allocation = { + totalAmount: sum.toFixed(18), + paymentPlatform, + address: payerAddress, + timestamp: new Date().toISOString(), + timeout: new Date(Date.now() + 60000).toISOString(), + makeDeposit: false, + remainingAmount: "", + spentAmount: "", + allocationId: "", + }; + if (!dryRun) { + allocation = await this.api.payment.createAllocation(allocation); + } + for (const invoice of invoices) { + if (dryRun) { + results.push({ + invoiceId: invoice.invoiceId, + allocation, + success: true, + amount: invoice.amount, + dryRun, + }); + continue; + } + try { + await this.api.payment.acceptInvoice(invoice.invoiceId, { + allocationId: allocation.allocationId, + totalAmountAccepted: invoice.amount, + }); + results.push({ + invoiceId: invoice.invoiceId, + allocation, + success: true, + amount: invoice.amount, + dryRun, + }); + } + catch (e) { + results.push({ + invoiceId: invoice.invoiceId, + allocation, + success: false, + amount: invoice.amount, + reason: e, + dryRun, + }); + } + } + } + } + return results; + } +} + +class PayerDetails { + constructor(network, driver, address, + // eslint-disable-next-line @typescript-eslint/ban-types -- keep the autocomplete for "glm" and "tglm" but allow any string + token) { + this.network = network; + this.driver = driver; + this.address = address; + this.token = token; + } + getPaymentPlatform() { + return `${this.driver}-${this.network}-${this.token}`; + } +} + +function isApiError(error) { + return typeof error == "object" && error !== null && "name" in error && error.name === "ApiError"; +} +/** + * Try to extract a message from a yagna API error. + * If the error is not an instance of `ApiError`, return the error message. + */ +function getMessageFromApiError(error) { + if (!(error instanceof Error)) { + return String(error); + } + if (isApiError(error)) { + try { + return JSON.stringify(error.body, null, 2); + } + catch (_jsonParseError) { + return error.message; + } + } + return error.message; +} + +/** + * Process manager that controls the logic behind processing payments for an agreement (debit notes and invoices). + * The process is started automatically and ends when the final invoice is received. + * You can stop the process earlier by calling the `stop` method. You cannot restart the process after stopping it. + */ +class AgreementPaymentProcess { + constructor(agreement, allocation, paymentModule, options, logger) { + this.agreement = agreement; + this.allocation = allocation; + this.paymentModule = paymentModule; + this.invoice = null; + this.debitNotes = new Map(); + /** + * Lock used to synchronize callers and enforce important business rules + * + * Example of a rule: you shouldn't accept a debit note if an invoice is already in place + */ + this.lock = new AsyncLock(); + this.logger = logger || defaultLogger("payment"); + this.options = { + invoiceFilter: (options === null || options === void 0 ? void 0 : options.invoiceFilter) || (() => true), + debitNoteFilter: (options === null || options === void 0 ? void 0 : options.debitNoteFilter) || (() => true), + }; + const invoiceSubscription = this.paymentModule + .observeInvoices() + .pipe(rxjs.filter((invoice) => invoice.agreementId === this.agreement.id)) + .subscribe((invoice) => this.addInvoice(invoice)); + const debitNoteSubscription = this.paymentModule + .observeDebitNotes() + .pipe(rxjs.filter((debitNote) => debitNote.agreementId === this.agreement.id)) + .subscribe((debitNote) => this.addDebitNote(debitNote)); + this.cleanupSubscriptions = () => { + invoiceSubscription.unsubscribe(); + debitNoteSubscription.unsubscribe(); + }; + } + /** + * Adds the debit note to the process avoiding race conditions + */ + addDebitNote(debitNote) { + return this.lock.acquire(`app-${debitNote.agreementId}`, () => this.applyDebitNote(debitNote)); + } + /** + * Adds the invoice to the process avoiding race conditions + */ + addInvoice(invoice) { + return this.lock.acquire(`app-${invoice.agreementId}`, () => this.applyInvoice(invoice)); + } + /** + * Tells if the process reached a point in which we can consider it as "finished" + */ + isFinished() { + return this.invoice !== null; + } + async applyDebitNote(debitNote) { + const isAlreadyFinalized = this.hasReceivedInvoice(); + if (isAlreadyFinalized) { + await this.rejectDebitNote(debitNote, exports.RejectionReason.AgreementFinalized, `DebitNote ${debitNote.id} rejected because the agreement ${debitNote.agreementId} is already covered ` + + `with a final invoice that should be paid instead of the debit note`); + return false; + } + if (this.debitNotes.has(debitNote.id)) { + const isAlreadyProcessed = await this.hasProcessedDebitNote(debitNote); + if (isAlreadyProcessed) { + this.logger.warn(`We received a duplicate debit note - the previous one was already accepted, so this one gets ignored`, { + debitNoteId: debitNote.id, + agreementId: debitNote.agreementId, + }); + return false; + } + } + this.debitNotes.set(debitNote.id, debitNote); + let acceptedByFilter = false; + try { + acceptedByFilter = await this.options.debitNoteFilter(debitNote, { + agreement: this.agreement, + allocation: this.allocation, + demand: this.agreement.demand, + }); + } + catch (error) { + throw new GolemUserError("An error occurred in the debit note filter", error); + } + if (!acceptedByFilter) { + await this.rejectDebitNote(debitNote, exports.RejectionReason.RejectedByRequestorFilter, `DebitNote ${debitNote.id} for agreement ${debitNote.agreementId} rejected by DebitNote Filter`); + return false; + } + try { + await this.paymentModule.acceptDebitNote(debitNote, this.allocation, debitNote.totalAmountDue); + this.logger.debug(`DebitNote accepted`, { + debitNoteId: debitNote.id, + agreementId: debitNote.agreementId, + }); + return true; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Unable to accept debit note ${debitNote.id}. ${message}`, exports.PaymentErrorCode.DebitNoteAcceptanceFailed, undefined, debitNote.provider, error); + } + } + async hasProcessedDebitNote(debitNote) { + const status = await debitNote.getStatus(); + return status !== "RECEIVED"; + } + async rejectDebitNote(debitNote, rejectionReason, rejectMessage) { + try { + await this.paymentModule.rejectDebitNote(debitNote, rejectMessage); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Unable to reject debit note ${debitNote.id}. ${message}`, exports.PaymentErrorCode.DebitNoteRejectionFailed, undefined, debitNote.provider, error); + } + } + finalize(invoice) { + this.invoice = invoice; + this.cleanupSubscriptions(); + } + async applyInvoice(invoice) { + this.logger.debug("Applying invoice for agreement", { + invoiceId: invoice.id, + agreementId: invoice.agreementId, + provider: invoice.provider, + }); + if (this.invoice) { + // Protects from possible fraud: someone sends a second, different invoice for the same agreement + throw new GolemPaymentError(`Agreement ${this.agreement.id} is already covered with an invoice: ${this.invoice.id}`, exports.PaymentErrorCode.AgreementAlreadyPaid, this.allocation, this.invoice.provider); + } + if (invoice.getStatus() !== "RECEIVED") { + throw new GolemPaymentError(`The invoice ${invoice.id} for agreement ${invoice.agreementId} has status ${invoice.getStatus()}, ` + + `but we can accept only the ones with status RECEIVED`, exports.PaymentErrorCode.InvoiceAlreadyReceived, this.allocation, invoice.provider); + } + this.finalize(invoice); + let acceptedByFilter = false; + try { + acceptedByFilter = await this.options.invoiceFilter(invoice, { + agreement: this.agreement, + allocation: this.allocation, + demand: this.agreement.demand, + }); + } + catch (error) { + throw new GolemUserError("An error occurred in the invoice filter", error); + } + if (!acceptedByFilter) { + const rejectionReason = exports.RejectionReason.RejectedByRequestorFilter; + const message = `Invoice ${invoice.id} for agreement ${invoice.agreementId} rejected by Invoice Filter`; + await this.rejectInvoice(invoice, rejectionReason, message); + return false; + } + try { + await this.paymentModule.acceptInvoice(invoice, this.allocation, invoice.amount); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Unable to accept invoice ${invoice.id} ${message}`, exports.PaymentErrorCode.InvoiceAcceptanceFailed, undefined, invoice.provider, error); + } + return true; + } + async rejectInvoice(invoice, rejectionReason, message) { + try { + await this.paymentModule.rejectInvoice(invoice, message); + this.logger.warn(`Invoice rejected`, { reason: message }); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Unable to reject invoice ${invoice.id} ${message}`, exports.PaymentErrorCode.InvoiceRejectionFailed, undefined, invoice.provider, error); + } + } + hasReceivedInvoice() { + return this.invoice !== null; + } + isStarted() { + return this.cleanupSubscriptions !== null; + } + stop() { + this.cleanupSubscriptions(); + } +} + +const MAINNETS = Object.freeze(["mainnet", "polygon"]); +class PaymentModuleImpl { + constructor(deps, options) { + var _a, _b, _c; + this.events = new eventemitter3.EventEmitter(); + this.logger = defaultLogger("payment"); + this.options = { + driver: "erc20", + network: getPaymentNetwork(), + token: "tglm", + }; + const network = (_a = options === null || options === void 0 ? void 0 : options.network) !== null && _a !== void 0 ? _a : this.options.network; + const driver = (_b = options === null || options === void 0 ? void 0 : options.driver) !== null && _b !== void 0 ? _b : this.options.driver; + const token = (_c = options === null || options === void 0 ? void 0 : options.token) !== null && _c !== void 0 ? _c : (MAINNETS.includes(network) ? "glm" : "tglm"); + this.options = { network, driver, token }; + this.logger = deps.logger; + this.yagnaApi = deps.yagna; + this.paymentApi = deps.paymentApi; + this.startEmittingPaymentEvents(); + } + startEmittingPaymentEvents() { + this.paymentApi.receivedInvoices$.subscribe((invoice) => { + this.events.emit("invoiceReceived", { + invoice, + }); + }); + this.paymentApi.receivedDebitNotes$.subscribe((debitNote) => { + this.events.emit("debitNoteReceived", { debitNote }); + }); + } + getPaymentPlatform() { + return `${this.options.driver}-${this.options.network}-${this.options.token}`; + } + async getPayerDetails() { + const { identity: address } = await this.yagnaApi.identity.getIdentity(); + return new PayerDetails(this.options.network, this.options.driver, address, this.options.token); + } + observeDebitNotes() { + return this.paymentApi.receivedDebitNotes$; + } + observeInvoices() { + return this.paymentApi.receivedInvoices$; + } + async createAllocation(params) { + this.logger.debug("Creating allocation", { params: params }); + try { + const allocation = await this.paymentApi.createAllocation({ + paymentPlatform: this.getPaymentPlatform(), + ...params, + }); + this.events.emit("allocationCreated", { allocation }); + this.logger.info("Created allocation", { + allocationId: allocation.id, + budget: allocation.totalAmount, + platform: this.getPaymentPlatform(), + }); + this.logger.debug("Created allocation", allocation); + return allocation; + } + catch (error) { + this.events.emit("errorCreatingAllocation", error); + throw error; + } + } + async releaseAllocation(allocation) { + this.logger.debug("Releasing allocation", allocation); + try { + const lastKnownAllocationState = await this.getAllocation(allocation.id).catch(() => { + this.logger.warn("Failed to fetch allocation before releasing", { id: allocation.id }); + return allocation; + }); + await this.paymentApi.releaseAllocation(allocation); + this.events.emit("allocationReleased", { + allocation: lastKnownAllocationState, + }); + this.logger.info("Released allocation", { + allocationId: lastKnownAllocationState.id, + totalAmount: lastKnownAllocationState.totalAmount, + spentAmount: lastKnownAllocationState.spentAmount, + }); + } + catch (error) { + this.events.emit("errorReleasingAllocation", { + allocation: await this.paymentApi.getAllocation(allocation.id).catch(() => { + this.logger.warn("Failed to fetch allocation after failed release attempt", { id: allocation.id }); + return allocation; + }), + error, + }); + throw error; + } + } + getAllocation(id) { + this.logger.debug("Fetching allocation by id", { id }); + return this.paymentApi.getAllocation(id); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + amendAllocation(allocation, _newOpts) { + const err = Error("Amending allocation is not supported yet"); + this.events.emit("errorAmendingAllocation", { + allocation, + error: err, + }); + throw err; + } + async acceptInvoice(invoice, allocation, amount) { + this.logger.debug("Accepting invoice", invoice); + try { + const acceptedInvoice = await this.paymentApi.acceptInvoice(invoice, allocation, amount); + this.events.emit("invoiceAccepted", { + invoice: acceptedInvoice, + }); + this.logger.info("Accepted invoice", { + id: invoice.id, + allocationId: allocation.id, + agreementId: invoice.agreementId, + provider: invoice.provider, + amount, + }); + return acceptedInvoice; + } + catch (error) { + this.events.emit("errorAcceptingInvoice", { invoice, error }); + this.logger.error(`Failed to accept invoice. ${error}`, { + id: invoice.id, + allocationId: allocation.id, + agreementId: invoice.agreementId, + provider: invoice.provider, + amount, + }); + throw error; + } + } + async rejectInvoice(invoice, reason) { + this.logger.debug("Rejecting invoice", { id: invoice.id, reason }); + try { + const rejectedInvoice = await this.paymentApi.rejectInvoice(invoice, reason); + this.events.emit("invoiceRejected", { + invoice: rejectedInvoice, + }); + this.logger.warn("Rejeced invoice", { id: invoice.id, reason }); + return rejectedInvoice; + } + catch (error) { + this.events.emit("errorRejectingInvoice", { invoice, error }); + this.logger.error(`Failed to reject invoice. ${error}`, { id: invoice.id, reason }); + throw error; + } + } + async acceptDebitNote(debitNote, allocation, amount) { + this.logger.debug("Accepting debit note", debitNote); + try { + const acceptedDebitNote = await this.paymentApi.acceptDebitNote(debitNote, allocation, amount); + this.events.emit("debitNoteAccepted", { + debitNote: acceptedDebitNote, + }); + this.logger.debug("Accepted debit note", { + id: debitNote.id, + allocationId: allocation.id, + activityId: debitNote.activityId, + provider: debitNote.provider, + amount, + }); + return acceptedDebitNote; + } + catch (error) { + this.events.emit("errorAcceptingDebitNote", { debitNote, error }); + this.logger.error(`Failed to accept debitNote. ${error}`, { + id: debitNote.id, + allocationId: allocation.id, + activityId: debitNote.activityId, + provider: debitNote.provider, + amount, + }); + throw error; + } + } + async rejectDebitNote(debitNote, reason) { + this.logger.info("Rejecting debit note", { id: debitNote.id, reason }); + // TODO: this is not supported by PaymnetAdapter + const message = "Unable to send debitNote rejection to provider. This feature is not yet supported."; + this.logger.warn(message); + this.events.emit("errorRejectingDebitNote", { debitNote, error: new GolemInternalError(message) }); + return debitNote; + // this.logger.debug("Rejecting debit note", { id: debitNote.id, reason }); + // try { + // const rejectedDebitNote = await this.paymentApi.rejectDebitNote(debitNote, reason); + // this.events.emit("debitNoteRejected", rejectedDebitNote); + // return rejectedDebitNote; + // } catch (error) { + // this.events.emit("errorRejectingDebitNote", debitNote, error); + // throw error; + // } + } + /** + * Creates an instance of utility class InvoiceProcessor that deals with invoice related use-cases + */ + createInvoiceProcessor() { + return new InvoiceProcessor(this.yagnaApi); + } + createAgreementPaymentProcess(agreement, allocation, options) { + return new AgreementPaymentProcess(agreement, allocation, this, options, this.logger.child("agreement-payment-process")); + } +} + +exports.ActivityStateEnum = void 0; +(function (ActivityStateEnum) { + ActivityStateEnum["New"] = "New"; + ActivityStateEnum["Initialized"] = "Initialized"; + ActivityStateEnum["Deployed"] = "Deployed"; + ActivityStateEnum["Ready"] = "Ready"; + ActivityStateEnum["Unresponsive"] = "Unresponsive"; + ActivityStateEnum["Terminated"] = "Terminated"; + /** In case when we couldn't establish the in on yagna */ + ActivityStateEnum["Unknown"] = "Unknown"; +})(exports.ActivityStateEnum || (exports.ActivityStateEnum = {})); +/** + * Activity module - an object representing the runtime environment on the provider in accordance with the `Package` specification. + * As part of a given activity, it is possible to execute exe script commands and capture their results. + */ +class Activity { + /** + * @param id The ID of the activity in Yagna + * @param agreement The agreement that's related to this activity + * @param currentState The current state as it was obtained from yagna + * @param previousState The previous state (or New if this is the first time we're creating the activity) + * @param usage Current resource usage vector information + */ + constructor(id, agreement, currentState = exports.ActivityStateEnum.New, previousState = exports.ActivityStateEnum.Unknown, usage) { + this.id = id; + this.agreement = agreement; + this.currentState = currentState; + this.previousState = previousState; + this.usage = usage; + } + get provider() { + return this.agreement.provider; + } + getState() { + return this.currentState; + } + getPreviousState() { + return this.previousState; + } +} + +// FIXME: Make the `data` field Uint8Array and update the rest of the code +// eslint-disable-next-line +class Result { + constructor(props) { + this.index = props.index; + this.eventDate = props.eventDate; + this.result = props.result; + this.stdout = props.stdout; + this.stderr = props.stderr; + this.message = props.message; + this.isBatchFinished = props.isBatchFinished; + this.data = props.data; + } + /** + * Helper method making JSON-like output results more accessible + */ + getOutputAsJson() { + if (!this.stdout) { + throw new GolemInternalError("Can't convert Result output to JSON, because the output is missing!"); + } + try { + return JSON.parse(this.stdout.toString().trim()); + } + catch (err) { + throw new GolemInternalError(`Failed to parse output to JSON! Output: "${this.stdout.toString()}". Error: ${err}`); + } + } +} + +const DEFAULTS$1 = { + activityExeBatchResultPollIntervalSeconds: 5, + activityExeBatchResultMaxRetries: 20, +}; +/** + * @internal + */ +class ExecutionConfig { + constructor(options) { + this.activityExeBatchResultMaxRetries = + (options === null || options === void 0 ? void 0 : options.activityExeBatchResultMaxRetries) || DEFAULTS$1.activityExeBatchResultMaxRetries; + this.activityExeBatchResultPollIntervalSeconds = + (options === null || options === void 0 ? void 0 : options.activityExeBatchResultPollIntervalSeconds) || DEFAULTS$1.activityExeBatchResultPollIntervalSeconds; + } +} + +/** + * Represents a series of Commands that can be sent to exe-unit via yagna's API + */ +class Script { + constructor(commands = []) { + this.commands = commands; + } + static create(commands) { + return new Script(commands); + } + add(command) { + this.commands.push(command); + } + async before() { + await Promise.all(this.commands.map((cmd) => cmd.before())); + } + async after(results) { + // Call after() for each command mapping its result. + return Promise.all(this.commands.map((command, i) => command.after(results[i]))); + } + getExeScriptRequest() { + if (!this.commands.length) { + throw new GolemInternalError("There are no commands in the script"); + } + return { text: JSON.stringify(this.commands.map((cmd) => cmd.toJson())) }; + } +} + +const EMPTY_ERROR_RESULT = new Result({ + result: "Error", + eventDate: new Date().toISOString(), + index: -1, + message: "No result due to error", +}); +/** + * Generic command that can be send to an exe-unit via yagna's API + */ +class Command { + constructor(commandName, args) { + this.commandName = commandName; + this.args = args || {}; + } + /** + * Serializes the command to a JSON representation + */ + toJson() { + return { + [this.commandName]: this.args, + }; + } + /** + * Converts the command into + */ + toExeScriptRequest() { + return { text: JSON.stringify([this.toJson()]) }; + } + /** + * Setup local environment for executing this command. + */ + async before() { } + /** + * Cleanup local setup that was needed for the command to run. + * + * It is called after the command was sent to the activity, and the command was processed. + * + * When run within scripts or batch commands, after() might be called without any results, as one of the previous + * commands might have failed. In this case, the command should still cleanup its local setup and return an empty + * error result. + * + * @param result + */ + async after(result) { + return result !== null && result !== void 0 ? result : EMPTY_ERROR_RESULT; + } +} +class Deploy extends Command { + constructor(args) { + super("deploy", args); + } +} +class Start extends Command { + constructor(args) { + super("start", args); + } +} +class Run extends Command { + constructor(cmd, args, env, capture) { + const captureOpt = capture || { + stdout: { atEnd: { format: "string" } }, + stderr: { atEnd: { format: "string" } }, + }; + super("run", { + entry_point: cmd, + args, + env, + capture: captureOpt, + }); + } +} +class Transfer extends Command { + constructor(from, to, args) { + super("transfer", { from, to, args }); + this.from = from; + this.to = to; + } +} +class UploadFile extends Transfer { + constructor(storageProvider, src, dstPath) { + super(); + this.storageProvider = storageProvider; + this.src = src; + this.dstPath = dstPath; + this.args["to"] = `container:${dstPath}`; + } + async before() { + this.args["from"] = await this.storageProvider.publishFile(this.src); + } + async after(result) { + await this.storageProvider.release([this.args["from"]]); + return result; + } +} +class UploadData extends Transfer { + constructor(storageProvider, src, dstPath) { + super(); + this.storageProvider = storageProvider; + this.src = src; + this.dstPath = dstPath; + this.args["to"] = `container:${dstPath}`; + } + async before() { + this.args["from"] = await this.storageProvider.publishData(this.src); + } + async after(result) { + await this.storageProvider.release([this.args["from"]]); + return result; + } +} +class DownloadFile extends Transfer { + constructor(storageProvider, srcPath, dstPath) { + super(); + this.storageProvider = storageProvider; + this.srcPath = srcPath; + this.dstPath = dstPath; + this.args = { from: `container:${srcPath}` }; + } + async before() { + this.args["to"] = await this.storageProvider.receiveFile(this.dstPath); + } + async after(result) { + await this.storageProvider.release([this.args["to"]]); + return result; + } +} +class DownloadData extends Transfer { + constructor(storageProvider, srcPath) { + super(); + this.storageProvider = storageProvider; + this.srcPath = srcPath; + this.chunks = []; + this.args = { from: `container:${srcPath}` }; + } + async before() { + this.args["to"] = await this.storageProvider.receiveData((data) => { + // NOTE: this assumes in-order delivery. For not it should work with websocket provider and local file polyfill. + this.chunks.push(data); + }); + } + async after(result) { + await this.storageProvider.release([this.args["to"]]); + if (result.result === "Ok") { + return new Result({ + ...result, + data: this.combineChunks(), + }); + } + return new Result({ + ...result, + result: "Error", + data: undefined, + }); + } + combineChunks() { + const data = new Uint8Array(this.chunks.reduce((acc, chunk) => acc + chunk.length, 0)); + let offset = 0; + for (const chunk of this.chunks) { + data.set(chunk, offset); + offset += chunk.length; + } + // Release memory. + this.chunks = []; + return data; + } +} + +/** + * @deprecated Use WebSocketStorageProvider instead. This will be removed in the next major version. + * + * Storage provider that spawns a GFTP process and uses it to serve files. + */ +class GftpStorageProvider { + constructor(logger) { + /** + * All published URLs to be release on close(). + * @private + */ + this.publishedUrls = new Set(); + this.isInitialized = false; + /** + * lock against parallel writing to stdin in gftp process + * @private + */ + this.lock = new AsyncLock(); + if (isBrowser) { + throw new GolemUserError(`File transfer by GFTP module is unsupported in the browser context.`); + } + this.logger = logger || defaultLogger("storage"); + } + async init() { + if (this.isInitialized) { + this.logger.warn("GFTP init attempted even though it was already ready - check the logic of your application"); + return; + } + await this.startGftpServer(); + this.logger.info(`GFTP Version: ${await this.jsonRpc("version")}`); + } + startGftpServer() { + return new Promise((resolve, reject) => { + var _a, _b, _c, _d, _e, _f; + this.logger.debug("Starting GFTP server"); + this.gftpServerProcess = spawn("gftp", ["server"]); + this.gftpServerProcess.on("spawn", () => { + this.logger.info("GFTP server spawned"); + this.isInitialized = true; + resolve(); + }); + this.gftpServerProcess.on("error", (error) => { + this.logger.error("Error while spawning GFTP server", error); + reject(error); + }); + this.gftpServerProcess.on("close", (code, signal) => { + this.logger.info("GFTP server closed", { code, signal }); + this.isInitialized = false; + }); + (_b = (_a = this.gftpServerProcess) === null || _a === void 0 ? void 0 : _a.stdout) === null || _b === void 0 ? void 0 : _b.setEncoding("utf-8"); + (_d = (_c = this.gftpServerProcess) === null || _c === void 0 ? void 0 : _c.stderr) === null || _d === void 0 ? void 0 : _d.setEncoding("utf-8"); + this.reader = (_f = (_e = this.gftpServerProcess) === null || _e === void 0 ? void 0 : _e.stdout) === null || _f === void 0 ? void 0 : _f.iterator(); + }); + } + async generateTempFileName() { + const { randomUUID } = await import('crypto'); + const tmp = await import('tmp'); + const fileName = path.join(tmp.dirSync().name, randomUUID().toString()); + if (fs.existsSync(fileName)) + fs.unlinkSync(fileName); + return fileName; + } + async receiveFile(path) { + const { url } = await this.jsonRpc("receive", { output_file: path }); + return url; + } + receiveData() { + throw new GolemUserError("receiveData is not implemented in GftpStorageProvider"); + } + async publishFile(src) { + const url = await this.uploadFile(src); + this.publishedUrls.add(url); + return url; + } + async publishData(src) { + let url; + if (Buffer.isBuffer(src)) { + url = await this.uploadBytes(src); + } + else { + url = await this.uploadBytes(Buffer.from(src)); + } + this.publishedUrls.add(url); + return url; + } + release() { + // NOTE: Due to GFTP's handling of file Ids (hashes), all files with same content will share IDs, so releasing + // one might break transfer of another one. Therefore, we release all files on close(). + return Promise.resolve(undefined); + } + async releaseAll() { + const urls = Array.from(this.publishedUrls).filter((url) => !!url); + if (urls.length) { + await this.jsonRpc("close", { urls }); + } + } + async close() { + var _a; + if (this.isInitialized) { + await this.releaseAll(); + (_a = this.gftpServerProcess) === null || _a === void 0 ? void 0 : _a.kill(); + } + } + async jsonRpc(method, params = {}) { + return this.lock.acquire("gftp-io", async () => { + var _a, _b, _c, _d; + if (!this.isInitialized) { + throw new GolemInternalError(`GFTP was not initialized when calling JSON-RPC ${method} with ${JSON.stringify(params)}`); + } + const callId = uuid.v4(); + const request = { + jsonrpc: "2.0", + id: callId, + method: method, + params: params, + }; + const query = `${JSON.stringify(request)}\n`; + this.logger.debug("Sending GFTP command", { request }); + (_b = (_a = this.gftpServerProcess) === null || _a === void 0 ? void 0 : _a.stdin) === null || _b === void 0 ? void 0 : _b.write(query); + const value = (_d = (await ((_c = this.reader) === null || _c === void 0 ? void 0 : _c.next()))) === null || _d === void 0 ? void 0 : _d.value; + if (!value) { + throw new GolemInternalError("Unable to get GFTP command result"); + } + const { result } = JSON.parse(value); + if (result === undefined) { + throw new GolemInternalError(value); + } + return result; + }); + } + async uploadStream(stream) { + var _a; + // FIXME: temp file is never deleted. + const fileName = await this.generateTempFileName(); + const wStream = fs.createWriteStream(fileName, { + encoding: "binary", + }); + // eslint-disable-next-line no-async-promise-executor + await new Promise(async (fulfill) => { + wStream.once("finish", fulfill); + for await (const chunk of stream) { + wStream.write(chunk); + } + wStream.end(); + }); + const links = await this.jsonRpc("publish", { files: [fileName.toString()] }); + if (links.length !== 1) + throw "invalid gftp publish response"; + return (_a = links[0]) === null || _a === void 0 ? void 0 : _a.url; + } + async uploadBytes(data) { + return await this.uploadStream((async function* () { + yield data; + })()); + } + async uploadFile(file) { + var _a; + const links = await this.jsonRpc("publish", { files: [file.toString()] }); + return (_a = links[0]) === null || _a === void 0 ? void 0 : _a.url; + } + isReady() { + return this.isInitialized; + } +} + +/** + * Null Storage Provider. + * + * Blocks all storage operations. Any attempt to use storage will result in an error. + * + * This will be the default storage provider if no default storage provider is available + * for the platform the SDK is running on. + * + * @category mid-level + */ +class NullStorageProvider { + close() { + return Promise.resolve(undefined); + } + init() { + return Promise.resolve(undefined); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + publishData(src) { + return Promise.reject(new GolemInternalError("NullStorageProvider does not support upload data")); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + publishFile(src) { + return Promise.reject(new GolemInternalError("NullStorageProvider does not support upload files")); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + receiveFile(path) { + return Promise.reject(new GolemInternalError("NullStorageProvider does not support download files")); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + receiveData(callback) { + return Promise.reject(new GolemInternalError("NullStorageProvider does not support download data")); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + release(urls) { + return Promise.resolve(undefined); + } + isReady() { + return true; + } +} + +const fsPromises = fs__namespace.promises; +/** + * Storage provider that uses GFTP over WebSockets. + */ +class WebSocketStorageProvider { + constructor(yagnaApi, options) { + var _a; + this.yagnaApi = yagnaApi; + /** + * Map of open services (IDs) indexed by GFTP url. + */ + this.services = new Map(); + this.ready = false; + this.openHandles = new Set(); + this.logger = ((_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.child("storage")) || defaultLogger("storage"); + } + async close() { + this.ready = false; + await Promise.allSettled(Array.from(this.openHandles).map((handle) => handle.close())); + return this.release(Array.from(this.services.keys())); + } + init() { + this.ready = true; + return Promise.resolve(undefined); + } + async publishData(data) { + const fileInfo = await this.createFileInfo(); + const ws = await this.createSocket(fileInfo, ["GetMetadata", "GetChunk"]); + ws.addEventListener("message", (event) => { + if (!(event.data instanceof ArrayBuffer)) { + this.logger.error("Received non-ArrayBuffer data from the socket", { data: event.data }); + return; + } + const req = flexbuffers_js.toObject(event.data); + this.logger.debug("Received GFTP request for publishData", req); + if (req.component === "GetMetadata") { + this.respond(ws, req.id, { fileSize: data.byteLength }); + } + else if (req.component === "GetChunk") { + this.respond(ws, req.id, { + content: data.slice(req.payload.offset, req.payload.offset + req.payload.size), + offset: req.payload.offset, + }); + } + else { + this.logger.error(`Unsupported message in publishData(): ${req.component}`); + } + }); + return fileInfo.url; + } + async publishFile(src) { + if (isBrowser) { + throw new GolemUserError("Cannot publish files in browser context, did you mean to use `publishData()`?"); + } + this.logger.info("Preparing file upload", { sourcePath: src }); + const fileInfo = await this.createFileInfo(); + const ws = await this.createSocket(fileInfo, ["GetMetadata", "GetChunk"]); + const fileStats = await fsPromises.stat(src); + const fileSize = fileStats.size; + const fileHandle = await fsPromises.open(src, "r"); + this.openHandles.add(fileHandle); + ws.addEventListener("message", async (event) => { + if (!(event.data instanceof ArrayBuffer)) { + this.logger.error("Received non-ArrayBuffer data from the socket", { data: event.data }); + return; + } + const req = flexbuffers_js.toObject(event.data); + this.logger.debug("Received GFTP request for publishFile", req); + if (req.component === "GetMetadata") { + this.respond(ws, req.id, { fileSize }); + } + else if (req.component === "GetChunk") { + const { offset, size } = req.payload; + const chunkSize = Math.min(size, fileSize - offset); + const chunk = Buffer.alloc(chunkSize); + try { + await fileHandle.read(chunk, 0, chunkSize, offset); + this.respond(ws, req.id, { + content: chunk, + offset, + }); + } + catch (error) { + this.logger.error("Something went wrong while sending the file chunk", { error }); + } + } + else { + this.logger.error(`Unsupported message in publishFile(): ${req.component}`); + } + }); + return fileInfo.url; + } + async receiveData(callback) { + const data = []; + const fileInfo = await this.createFileInfo(); + const ws = await this.createSocket(fileInfo, ["UploadChunk", "UploadFinished"]); + ws.addEventListener("message", (event) => { + if (!(event.data instanceof ArrayBuffer)) { + this.logger.error("Received non-ArrayBuffer data from the socket", { data: event.data }); + return; + } + const req = flexbuffers_js.toObject(event.data); + this.logger.debug("Received GFTP request for receiveData", req); + if (req.component === "UploadChunk") { + data.push(req.payload.chunk); + this.respond(ws, req.id, null); + } + else if (req.component === "UploadFinished") { + this.respond(ws, req.id, null); + const result = this.completeReceive(req.payload.hash, data); + callback(result); + } + else { + this.logger.error(`Unsupported message in receiveData(): ${req.component}`); + } + }); + return fileInfo.url; + } + async receiveFile(path) { + if (isBrowser) { + throw new GolemUserError("Cannot receive files in browser context, did you mean to use `receiveData()`?"); + } + this.logger.info("Preparing file download", { destination: path }); + const fileInfo = await this.createFileInfo(); + const fileHandle = await fsPromises.open(path, "w"); + this.openHandles.add(fileHandle); + const ws = await this.createSocket(fileInfo, ["UploadChunk", "UploadFinished"]); + ws.addEventListener("message", async (event) => { + if (!(event.data instanceof ArrayBuffer)) { + this.logger.error("Received non-ArrayBuffer data from the socket", { data: event.data }); + return; + } + const req = flexbuffers_js.toObject(event.data); + this.logger.debug("Received GFTP request for receiveFile", req); + if (req.component === "UploadChunk") { + await fileHandle.write(req.payload.chunk.content); + this.respond(ws, req.id, null); + } + else if (req.component === "UploadFinished") { + this.respond(ws, req.id, null); + await fileHandle.close(); + this.openHandles.delete(fileHandle); + } + else { + this.logger.error(`Unsupported message in receiveFile(): ${req.component}`); + } + }); + return fileInfo.url; + } + async release(urls) { + urls.forEach((url) => { + const serviceId = this.services.get(url); + if (serviceId) { + this.deleteService(serviceId).catch((error) => this.logger.warn(`Failed to delete service`, { serviceId, error })); + } + this.services.delete(url); + }); + } + isReady() { + return this.ready; + } + async createFileInfo() { + const id = uuid.v4(); + const data = await this.yagnaApi.identity.getIdentity(); + const me = data.identity; + return { + id, + url: `gftp://${me}/${id}`, + }; + } + getWsConstructor() { + if (isBrowser) { + return WebSocket; + } + return NodeWebSocket; + } + async createSocket(fileInfo, components) { + const service = await this.createService(fileInfo, components); + const ws = new (this.getWsConstructor())(service.url, ["gsb+flexbuffers"]); + ws.addEventListener("error", () => { + this.logger.error(`Socket Error (${fileInfo.id})`); + }); + ws.binaryType = "arraybuffer"; + return ws; + } + async createService(fileInfo, components) { + const resp = (await this.yagnaApi.gsb.bindServices({ + listen: { + on: `/public/gftp/${fileInfo.id}`, + components, + }, + // FIXME: not present in ya-client for some reason + })); + const servicesId = resp.servicesId; + const messageEndpoint = `/gsb-api/v1/services/${servicesId}?authToken=${this.yagnaApi.yagnaOptions.apiKey}`; + const url = new URL(messageEndpoint, this.yagnaApi.yagnaOptions.basePath); + url.protocol = "ws:"; + this.services.set(fileInfo.url, servicesId); + return { url, serviceId: servicesId }; + } + async deleteService(id) { + await this.yagnaApi.gsb.unbindServices(id); + } + respond(ws, id, payload) { + ws.send(flexbuffers_js.encode({ + id, + payload, + })); + } + completeReceive(hash, data) { + data.sort((a, b) => a.offset - b.offset); + const size = data.reduce((acc, cur) => acc + cur.content.byteLength, 0); + const buf = new Uint8Array(size); + data.forEach((chunk) => { + buf.set(chunk.content, chunk.offset); + }); + // FIXME: Use digest.update and async, as it can only handle 14MB/s on my machine, which is way to slow to do synchronously. + const hashHex = jsSha3__namespace.sha3_256(buf); + if (hash !== hashHex) { + throw new GolemInternalError(`File corrupted, expected hash ${hash}, got ${hashHex}`); + } + else { + return buf; + } + } +} + +var _GolemWorkError_agreement, _GolemWorkError_activity, _GolemWorkError_provider; +exports.WorkErrorCode = void 0; +(function (WorkErrorCode) { + WorkErrorCode["ServiceNotInitialized"] = "ServiceNotInitialized"; + WorkErrorCode["ScriptExecutionFailed"] = "ScriptExecutionFailed"; + WorkErrorCode["ActivityDestroyingFailed"] = "ActivityDestroyingFailed"; + WorkErrorCode["ActivityResultsFetchingFailed"] = "ActivityResultsFetchingFailed"; + WorkErrorCode["ActivityCreationFailed"] = "ActivityCreationFailed"; + WorkErrorCode["NetworkSetupMissing"] = "NetworkSetupMissing"; + WorkErrorCode["ScriptInitializationFailed"] = "ScriptInitializationFailed"; + WorkErrorCode["ActivityDeploymentFailed"] = "ActivityDeploymentFailed"; + WorkErrorCode["ActivityStatusQueryFailed"] = "ActivityStatusQueryFailed"; + WorkErrorCode["ActivityResetFailed"] = "ActivityResetFailed"; +})(exports.WorkErrorCode || (exports.WorkErrorCode = {})); +class GolemWorkError extends GolemModuleError { + constructor(message, code, agreement, activity, provider, previous) { + super(message, code, previous); + this.code = code; + this.previous = previous; + _GolemWorkError_agreement.set(this, void 0); + _GolemWorkError_activity.set(this, void 0); + _GolemWorkError_provider.set(this, void 0); + __classPrivateFieldSet(this, _GolemWorkError_agreement, agreement, "f"); + __classPrivateFieldSet(this, _GolemWorkError_activity, activity, "f"); + __classPrivateFieldSet(this, _GolemWorkError_provider, provider, "f"); + } + getAgreement() { + return __classPrivateFieldGet(this, _GolemWorkError_agreement, "f"); + } + getActivity() { + return __classPrivateFieldGet(this, _GolemWorkError_activity, "f"); + } + getProvider() { + return __classPrivateFieldGet(this, _GolemWorkError_provider, "f"); + } +} +_GolemWorkError_agreement = new WeakMap(), _GolemWorkError_activity = new WeakMap(), _GolemWorkError_provider = new WeakMap(); + +class Batch { + constructor(executor, storageProvider, logger) { + this.executor = executor; + this.storageProvider = storageProvider; + this.logger = logger; + this.script = new Script([]); + } + run(executableOrCommand, executableArgs) { + if (executableArgs) { + this.script.add(new Run(executableOrCommand, executableArgs)); + } + else { + this.script.add(new Run("/bin/sh", ["-c", executableOrCommand])); + } + return this; + } + transfer(from, to) { + this.script.add(new Transfer(from, to)); + return this; + } + uploadFile(src, dst) { + this.script.add(new UploadFile(this.storageProvider, src, dst)); + return this; + } + uploadJson(json, dst) { + const src = new TextEncoder().encode(JSON.stringify(json)); + this.script.add(new UploadData(this.storageProvider, src, dst)); + return this; + } + uploadData(data, dst) { + this.script.add(new UploadData(this.storageProvider, data, dst)); + return this; + } + downloadFile(src, dst) { + this.script.add(new DownloadFile(this.storageProvider, src, dst)); + return this; + } + /** + * Executes the batch of commands added via {@link run} returning result for each of the steps. + */ + async end() { + await this.script.before(); + try { + const allResults = []; + const script = this.script.getExeScriptRequest(); + this.logger.debug(`Sending exec script request to the exe-unit on provider:`, { script }); + const executionMetadata = await this.executor.execute(script); + const result$ = this.executor.getResultsObservable(executionMetadata); + return new Promise((resolve, reject) => { + this.logger.debug("Reading the results of the batch script"); + result$.subscribe({ + next: (res) => { + this.logger.debug(`Received data for batch script execution`, { res }); + allResults.push(res); + }, + complete: () => { + this.logger.debug("End of batch script execution"); + this.script + .after(allResults) + .then((results) => resolve(results)) + .catch((error) => reject(error)); + }, + error: (error) => { + const golemError = error instanceof GolemWorkError + ? error + : new GolemWorkError(`Unable to execute script ${error}`, exports.WorkErrorCode.ScriptExecutionFailed, this.executor.activity.agreement, this.executor.activity, this.executor.activity.agreement.provider, error); + this.logger.debug("Error in batch script execution", { error }); + this.script + .after(allResults) + .then(() => reject(golemError)) + .catch(() => reject(golemError)); // Return original error, as it might be more important. + }, + }); + }); + } + catch (error) { + this.logger.error(`Failed to send the exec script to the exe-unit on provider`, { error }); + // NOTE: This is called only to ensure that each of the commands in the original script will be populated with at least `EmptyErrorResult`. + // That's actually a FIXME, as the command could start with an empty result, which eventually will get replaced with an actual one. + await this.script.after([]); + if (error instanceof GolemWorkError) { + throw error; + } + throw new GolemWorkError(`Unable to execute script ${error}`, exports.WorkErrorCode.ScriptExecutionFailed, this.executor.activity.agreement, this.executor.activity, this.executor.activity.agreement.provider, error); + } + } + async endStream() { + const script = this.script; + await script.before(); + let executionMetadata; + try { + executionMetadata = await this.executor.execute(this.script.getExeScriptRequest()); + } + catch (error) { + // the original error is more important than the one from after() + await script.after([]); + if (error instanceof GolemWorkError) { + throw error; + } + throw new GolemWorkError(`Unable to execute script ${error}`, exports.WorkErrorCode.ScriptExecutionFailed, this.executor.activity.agreement, this.executor.activity, this.executor.activity.agreement.provider, error); + } + const decodedResults = []; + const { activity } = this.executor; + const result$ = this.executor.getResultsObservable(executionMetadata); + return result$.pipe(rxjs.map((chunk) => { + if (chunk.result !== "Error") { + return chunk; + } + throw new GolemWorkError(`${chunk === null || chunk === void 0 ? void 0 : chunk.message}. Stdout: ${String(chunk === null || chunk === void 0 ? void 0 : chunk.stdout).trim()}. Stderr: ${String(chunk === null || chunk === void 0 ? void 0 : chunk.stderr).trim()}`, exports.WorkErrorCode.ScriptExecutionFailed, activity.agreement, activity, activity.provider); + }), rxjs.tap((chunk) => { + decodedResults.push(chunk); + }), rxjs.finalize(() => script.after(decodedResults).catch((error) => this.logger.error("Failed to cleanup script", { error })))); + } +} + +const DEFAULTS = { + exitWaitingTimeout: 20000, +}; +/** + * RemoteProcess class representing the process spawned on the provider by {@link ExeUnit.runAndStream} + */ +class RemoteProcess { + constructor(activityModule, activityResult$, activity, logger) { + this.activityModule = activityModule; + this.activity = activity; + this.logger = logger; + /** + * Stream connected to stdout from provider process + */ + this.stdout = new rxjs.Subject(); + /** + * Stream connected to stderr from provider process + */ + this.stderr = new rxjs.Subject(); + this.subscription = activityResult$ + .pipe(rxjs.finalize(() => { + this.stdout.complete(); + this.stderr.complete(); + })) + .subscribe({ + next: (result) => { + this.lastResult = result; + if (result.stdout) + this.stdout.next(result.stdout); + if (result.stderr) + this.stderr.next(result.stderr); + }, + error: (error) => { + this.streamError = error; + }, + }); + } + /** + * Waits for the process to complete and returns the last part of the command's results as a {@link Result} object. + * If the timeout is reached, the return promise will be rejected. + * @param timeout - maximum waiting time im ms for the final result (default: 20_000) + */ + waitForExit(timeout) { + return new Promise((resolve, reject) => { + const timeoutInMs = timeout !== null && timeout !== void 0 ? timeout : DEFAULTS.exitWaitingTimeout; + const timeoutId = setTimeout(() => { + reject(new GolemWorkError(`Unable to get activity results. The waiting time (${timeoutInMs} ms) for the final result has been exceeded`, exports.WorkErrorCode.ActivityResultsFetchingFailed, this.activity.agreement, this.activity, this.activity.provider, new GolemTimeoutError(`The waiting time (${timeoutInMs} ms) for the final result has been exceeded`))); + this.activityModule + .destroyActivity(this.activity) + .catch((err) => this.logger.error(`Error when destroying activity`, err)); + }, timeoutInMs); + const end = () => { + clearTimeout(timeoutId); + if (this.lastResult) { + resolve(this.lastResult); + } + else { + reject(new GolemWorkError(`An error occurred while retrieving the results. ${this.streamError}`, exports.WorkErrorCode.ActivityResultsFetchingFailed, this.activity.agreement, this.activity, this.activity.provider)); + this.activityModule + .destroyActivity(this.activity) + .catch((err) => this.logger.error(`Error when destroying activity`, err)); + } + }; + this.subscription.add(() => end()); + }); + } + /** + * Checks if the exe-script batch from Yagna has completed, reflecting all work and streaming to be completed + */ + isFinished() { + return this.subscription.closed; + } +} + +/** + * Allows proxying of TCP traffic to a service running in an activity on a provider via the requestor + * + * **IMPORTANT** + * + * This feature is supported only in the Node.js environment. In has no effect in browsers. + * + * General solution description: + * + * - Open a TCP server and listen to connections + * - When a new connection arrives, establish a WS connection with yagna + * - Pass any incoming data from the client TCP socket to the WS, buffer it when the socket is not ready yet + * - Pass any returning data from the WS to the client TCP socket, but don't do it if the client socket already disconnected + * - When the WS will be closed, then close the client socket as well + * - When the client TCP socket will be closed, close the WS as well + * - Handle teardown of the TCP-WS bridge by clearing communication buffers to avoid memory leaks + */ +class TcpProxy { + constructor( + /** + * The URL to the WebSocket implementing the communication transport layer + */ + wsUrl, + /** + * The yagna app-key used to authenticate the WebSocket connection + */ + appKey, + /** + * Additional options of the proxy + */ + options = {}) { + var _a; + this.wsUrl = wsUrl; + this.appKey = appKey; + this.events = new eventemitter3.EventEmitter(); + checkAndThrowUnsupportedInBrowserError("TCP Proxy"); + this.heartBeatSec = (_a = options.heartBeatSec) !== null && _a !== void 0 ? _a : 10; + this.logger = options.logger ? options.logger.child("tcp-proxy") : defaultLogger("tcp-proxy"); + this.server = net.createServer((client) => { + this.logger.debug("Client connected to TCP Server"); + const state = { + /** Tells if the client socket is in a usable state */ + sReady: true, + /** Buffer for chunks of data that arrived from yagna's WS and should be delivered to the client socket when it's ready */ + sBuffer: [], + /** Tells if the WS with yagna is ready for communication */ + wsReady: false, + /** Buffer for chunks of data that arrived from the client socket and should be sent to yagna's WS when it's ready */ + wsBuffer: [], + }; + const clearSocketBuffer = () => (state.sBuffer = []); + const clearWebSocketBuffer = () => (state.wsBuffer = []); + // UTILITY METHODS + const flushSocketBuffer = () => { + this.logger.debug("Flushing Socket buffer"); + if (state.sBuffer.length > 0) { + client.write(buffer.Buffer.concat(state.sBuffer)); + } + clearSocketBuffer(); + }; + const flushWebSocketBuffer = () => { + this.logger.debug("Flushing WebSocket buffer"); + if (state.wsBuffer.length > 0) { + ws.send(buffer.Buffer.concat(state.wsBuffer), { + binary: true, + mask: true, + }); + } + clearWebSocketBuffer(); + }; + const teardownBridge = () => { + ws.close(); + client.end(); + clearWebSocketBuffer(); + clearSocketBuffer(); + }; + const ws = new NodeWebSocket.WebSocket(this.wsUrl, { headers: { authorization: `Bearer ${this.appKey}` } }); + // OPEN HANDLERS + ws.on("open", () => { + this.logger.debug("Yagna WS opened"); + state.wsReady = true; + // Push any pending data to the web-socket + flushWebSocketBuffer(); + }); + // NOTE: That's not really required in our use-case, added for completeness of the flow + client.on("connect", () => { + this.logger.debug("Client socket connected"); + state.sReady = true; + // Push any pending data to the client socket + flushSocketBuffer(); + }); + // ERROR HANDLERS + ws.on("error", (error) => { + this.notifyOfError("Yagna WS encountered an error", error); + teardownBridge(); + }); + client.on("error", (error) => { + this.notifyOfError("Server Socket encountered an error", error); + teardownBridge(); + }); + // TERMINATION HANDLERS + // When the WS socket will be closed + ws.on("close", () => { + clearInterval(heartBeatInt); + this.logger.debug("Yagna WS closed"); + client.end(); + clearWebSocketBuffer(); + clearSocketBuffer(); + }); + ws.on("end", () => { + this.logger.debug("Yagna WS end"); + client.end(); + clearWebSocketBuffer(); + clearSocketBuffer(); + }); + // When the client will disconnect + client.on("close", (error) => { + if (error) { + this.logger.error("Server Socket encountered closed with an error error"); + } + else { + this.logger.debug("Server Socket has been closed (client disconnected)"); + } + ws.close(); + clearWebSocketBuffer(); + clearSocketBuffer(); + }); + // DATA TRANSFER + // Send data to the WebSocket or buffer if it's not ready yet + client.on("data", async (chunk) => { + this.logger.debug("Server Socket received data", { length: chunk.length, wsReady: state.wsReady }); + if (!state.wsReady) { + state.wsBuffer.push(chunk); + } + else { + ws.send(chunk, { binary: true, mask: true }); + } + }); + // Send data to the client or buffer if it's not ready yet + ws.on("message", (message) => { + const length = "length" in message ? message.length : null; + this.logger.debug("Yagna WS received data", { length, socketReady: state.sReady }); + if (message instanceof buffer.Buffer) { + if (!state.sReady) { + state.wsBuffer.push(message); + } + else { + client.write(message); + } + } + else { + // Defensive programming + this.logger.error("Encountered unsupported type of message", typeof message); + } + }); + // WS health monitoring + ws.on("ping", () => { + this.logger.debug("Yagna WS received ping event"); + }); + // Configure pings to check the health of the WS to Yagna + let isAlive = true; + const heartBeat = () => { + if (state.wsReady) { + this.logger.debug("Yagna WS checking if the client is alive"); + if (!isAlive) { + this.notifyOfError("Yagna WS doesn't seem to be healthy, going to terminate"); + // Previous check failed, time to terminate + return ws.terminate(); + } + isAlive = false; + ws.ping(); + } + else { + this.logger.debug("Yagna WS is not ready yet, skipping heart beat"); + } + }; + const heartBeatInt = setInterval(heartBeat, this.heartBeatSec * 1000); + ws.on("pong", () => { + this.logger.debug("Yagna WS received pong event"); + isAlive = true; + }); + }); + this.attachDebugLogsToServer(); + } + /** + * Start the proxy in listening mode + * + * @param port The port number to use on the requestor + * @param abort The abort controller to use in order to control cancelling requests + */ + async listen(port, abort) { + this.logger.debug("TcpProxy listen initiated"); + // Retries if possible + this.server.listen({ + port, + signal: abort ? abort.signal : undefined, + }); + return new Promise((resolve, reject) => { + const handleError = (err) => { + this.notifyOfError("TcpProxy failed to start listening", { port, err }); + this.server.removeListener("listening", handleListen); + reject(err); + }; + const handleListen = () => { + this.logger.info("TcpProxy is listening", { port }); + this.server.removeListener("error", handleError); + resolve(); + }; + this.server.once("listening", handleListen); + this.server.once("error", handleError); + }); + } + /** + * Gracefully close the proxy + */ + close() { + this.logger.debug("TCP Server close initiated by the user"); + return new Promise((resolve, reject) => { + var _a; + if (this.server.listening) { + (_a = this.server) === null || _a === void 0 ? void 0 : _a.close((err) => { + if (err) { + this.notifyOfError("TCP Server closed with an error", err); + reject(err); + } + else { + this.logger.info("TCP server closed - was listening"); + resolve(); + } + }); + } + else { + this.logger.info("TCP Server closed - was not listening"); + resolve(); + } + }); + } + notifyOfError(message, err) { + this.logger.error(message, err); + this.events.emit("error", `${message}: ${err}`); + } + attachDebugLogsToServer() { + this.server.on("listening", () => this.logger.debug("TCP Server started to listen")); + this.server.on("close", () => this.logger.debug("TCP Server closed")); + this.server.on("connection", () => this.logger.debug("TCP Server received new connection")); + this.server.on("drop", (data) => this.logger.debug("TCP Server dropped a connection because of reaching `maxConnections`", { data })); + this.server.on("error", (err) => this.logger.error("Server event 'error'", err)); + } +} + +/** + * Groups most common operations that the requestors might need to implement their workflows + */ +class ExeUnit { + constructor(activity, activityModule, options) { + var _a, _b, _c; + this.activity = activity; + this.activityModule = activityModule; + this.options = options; + this.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) !== null && _a !== void 0 ? _a : defaultLogger("work"); + this.provider = activity.provider; + this.storageProvider = (_b = options === null || options === void 0 ? void 0 : options.storageProvider) !== null && _b !== void 0 ? _b : new NullStorageProvider(); + this.networkNode = options === null || options === void 0 ? void 0 : options.networkNode; + this.abortSignal = createAbortSignalFromTimeout(options === null || options === void 0 ? void 0 : options.signalOrTimeout); + this.executor = this.activityModule.createScriptExecutor(this.activity, { + ...(_c = this.options) === null || _c === void 0 ? void 0 : _c.executionOptions, + signalOrTimeout: this.abortSignal, + }); + } + async fetchState() { + if (this.abortSignal.aborted) { + throw new GolemAbortError("ExeUnit has been aborted"); + } + return this.activityModule + .refreshActivity(this.activity) + .then((activity) => activity.getState()) + .catch((err) => { + this.logger.error("Failed to read activity state", err); + throw new GolemWorkError("Failed to read activity state", exports.WorkErrorCode.ActivityStatusQueryFailed, this.activity.agreement, this.activity, err); + }); + } + /** + * This function initializes the exe unit by deploying the image to the remote machine + * and preparing and running the environment. + * This process also includes running setup function if the user has defined it + */ + async setup() { + try { + let state = await this.fetchState(); + if (state === exports.ActivityStateEnum.Ready) { + await this.setupActivity(); + return; + } + if (state === exports.ActivityStateEnum.Initialized) { + await this.deployActivity(); + } + await sleep(1000, true); + state = await this.fetchState(); + if (state !== exports.ActivityStateEnum.Ready) { + const currentDateTime = new Date().toISOString(); + throw new GolemWorkError(`Activity ${this.activity.id} cannot reach the Ready state at: ${currentDateTime}. Current state: ${state}`, exports.WorkErrorCode.ActivityDeploymentFailed, this.activity.agreement, this.activity, this.activity.provider); + } + await this.setupActivity(); + } + catch (error) { + if (this.abortSignal.aborted) { + throw this.abortSignal.reason.name === "TimeoutError" + ? new GolemTimeoutError("Initializing of the exe-unit has been aborted due to a timeout", this.abortSignal.reason) + : new GolemAbortError("Initializing of the exe-unit has been aborted", this.abortSignal.reason); + } + throw error; + } + } + /** + * This function starts the teardown function if the user has defined it. + * It is run before the machine is destroyed. + */ + async teardown() { + var _a; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.teardown) { + await this.options.teardown(this); + } + } + async deployActivity() { + var _a, _b; + try { + const executionMetadata = await this.executor.execute(new Script([ + new Deploy({ + ...(_b = (_a = this.networkNode) === null || _a === void 0 ? void 0 : _a.getNetworkDeploymentArg) === null || _b === void 0 ? void 0 : _b.call(_a), + ...this.getVolumeDeploymentArg(), + }), + new Start(), + ]).getExeScriptRequest()); + const result$ = this.executor.getResultsObservable(executionMetadata); + // if any result is an error, throw an error + await rxjs.lastValueFrom(result$.pipe(rxjs.tap((result) => { + if (result.result === "Error") { + throw new Error(String(result.message)); + } + }))); + } + catch (error) { + throw new GolemWorkError(`Unable to deploy activity. ${error}`, exports.WorkErrorCode.ActivityDeploymentFailed, this.activity.agreement, this.activity, this.activity.provider, error); + } + } + async setupActivity() { + var _a; + if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.setup) { + await this.options.setup(this); + } + } + async run(exeOrCmd, argsOrOptions, options) { + const isArray = Array.isArray(argsOrOptions); + this.logger.debug("Running command", { + command: isArray ? `${exeOrCmd} ${argsOrOptions === null || argsOrOptions === void 0 ? void 0 : argsOrOptions.join(" ")}` : exeOrCmd, + provider: this.provider.name, + }); + const run = isArray + ? new Run(exeOrCmd, argsOrOptions, options === null || options === void 0 ? void 0 : options.env, options === null || options === void 0 ? void 0 : options.capture) + : new Run("/bin/sh", ["-c", exeOrCmd], argsOrOptions === null || argsOrOptions === void 0 ? void 0 : argsOrOptions.env, argsOrOptions === null || argsOrOptions === void 0 ? void 0 : argsOrOptions.capture); + const runOptions = isArray ? options : argsOrOptions; + return this.runOneCommand(run, runOptions); + } + async runAndStream(exeOrCmd, argsOrOptions, options) { + const isArray = Array.isArray(argsOrOptions); + const capture = { + stdout: { stream: { format: "string" } }, + stderr: { stream: { format: "string" } }, + }; + const run = isArray + ? new Run(exeOrCmd, argsOrOptions, options === null || options === void 0 ? void 0 : options.env, capture) + : new Run("/bin/sh", ["-c", exeOrCmd], argsOrOptions === null || argsOrOptions === void 0 ? void 0 : argsOrOptions.env, capture); + const script = new Script([run]); + // In this case, the script consists only of one run command, + // so we skip the execution of script.before and script.after + const executionMetadata = await this.executor.execute(script.getExeScriptRequest()); + const activityResult$ = this.executor.getResultsObservable(executionMetadata, true, options === null || options === void 0 ? void 0 : options.signalOrTimeout, options === null || options === void 0 ? void 0 : options.maxRetries); + return new RemoteProcess(this.activityModule, activityResult$, this.activity, this.logger); + } + /** + * Generic transfer command, requires the user to provide a publicly readable transfer source + * + * @param from - publicly available resource for reading. Supported protocols: file, http, ftp or gftp + * @param to - file path + * @param options Additional run options. + */ + async transfer(from, to, options) { + this.logger.debug(`Transferring`, { from, to }); + return this.runOneCommand(new Transfer(from, to), options); + } + async uploadFile(src, dst, options) { + this.logger.debug(`Uploading file`, { src, dst }); + return this.runOneCommand(new UploadFile(this.storageProvider, src, dst), options); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + uploadJson(json, dst, options) { + this.logger.debug(`Uploading json`, { dst }); + const src = new TextEncoder().encode(JSON.stringify(json)); + return this.runOneCommand(new UploadData(this.storageProvider, src, dst), options); + } + uploadData(data, dst, options) { + this.logger.debug(`Uploading data`, { dst }); + return this.runOneCommand(new UploadData(this.storageProvider, data, dst), options); + } + downloadFile(src, dst, options) { + this.logger.debug(`Downloading file from`, { src, dst }); + return this.runOneCommand(new DownloadFile(this.storageProvider, src, dst), options); + } + downloadData(src, options) { + this.logger.debug(`Downloading data`, { src }); + return this.runOneCommand(new DownloadData(this.storageProvider, src), options); + } + async downloadJson(src, options) { + this.logger.debug(`Downloading json`, { src }); + const result = await this.downloadData(src, options); + if (result.result !== "Ok") { + return new Result({ + ...result, + data: undefined, + }); + } + return new Result({ + ...result, + data: JSON.parse(new TextDecoder().decode(result.data)), + }); + } + beginBatch() { + return new Batch(this.executor, this.storageProvider, this.logger); + } + /** + * Provides a WebSocket URI that allows communicating with a remote process listening on the target port + * + * @param port The port number used by the service running within an activity on the provider + */ + getWebsocketUri(port) { + if (!this.networkNode) + throw new GolemWorkError("There is no network in this exe-unit", exports.WorkErrorCode.NetworkSetupMissing, this.activity.agreement, this.activity, this.activity.provider); + return this.networkNode.getWebsocketUri(port); + } + getIp() { + if (!this.networkNode) + throw new GolemWorkError("There is no network in this exe-unit", exports.WorkErrorCode.NetworkSetupMissing, this.activity.agreement, this.activity, this.activity.provider); + return this.networkNode.ip; + } + /** + * Creates a new TCP proxy that will allow tunnelling the TPC traffic from the provider via the requestor + * + * @param portOnProvider The port that the service running on the provider is listening to + */ + createTcpProxy(portOnProvider) { + var _a, _b; + if (!((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.yagnaOptions) === null || _b === void 0 ? void 0 : _b.apiKey)) { + throw new GolemConfigError("You need to provide yagna API key to use the TCP Proxy functionality"); + } + return new TcpProxy(this.getWebsocketUri(portOnProvider), this.options.yagnaOptions.apiKey, { + logger: this.logger, + }); + } + getDto() { + return { + provider: this.provider, + id: this.activity.id, + agreement: this.activity.agreement, + }; + } + async runOneCommand(command, options) { + // Initialize script. + const script = new Script([command]); + await script.before().catch((e) => { + var _a, _b; + throw new GolemWorkError(`Script initialization failed for command: ${JSON.stringify(command.toJson())}. ${((_b = (_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) || (e === null || e === void 0 ? void 0 : e.message) || e}`, exports.WorkErrorCode.ScriptInitializationFailed, this.activity.agreement, this.activity, this.activity.provider, e); + }); + await sleep(100, true); + // Send script. + const executionMetadata = await this.executor.execute(script.getExeScriptRequest()); + const result$ = this.executor.getResultsObservable(executionMetadata, false, options === null || options === void 0 ? void 0 : options.signalOrTimeout, options === null || options === void 0 ? void 0 : options.maxRetries); + // Process result. + let allResults = await rxjs.lastValueFrom(result$.pipe(rxjs.toArray())); + allResults = await script.after(allResults); + // Handle errors. + const commandsErrors = allResults.filter((res) => res.result === "Error"); + if (commandsErrors.length) { + const errorMessage = commandsErrors + .map((err) => { var _a, _b; return `Error: ${err.message}. Stdout: ${(_a = err.stdout) === null || _a === void 0 ? void 0 : _a.toString().trim()}. Stderr: ${(_b = err.stderr) === null || _b === void 0 ? void 0 : _b.toString().trim()}`; }) + .join(". "); + this.logger.warn(`Task error`, { + provider: this.provider.name, + error: errorMessage, + }); + } + return allResults[0]; + } + getVolumeDeploymentArg() { + var _a; + if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.volumes)) { + return {}; + } + const argument = { + volumes: {}, + }; + for (const [, volumeSpec] of Object.entries(this.options.volumes)) { + argument.volumes[volumeSpec.path] = { + storage: { size: `${volumeSpec.sizeGib}g`, errors: "panic" }, + }; + } + return argument; + } +} + +async function withTimeout(promise, timeoutMs) { + let timeoutId; + const timeout = (milliseconds) => new Promise((_, reject) => { + timeoutId = setTimeout(() => reject(new GolemTimeoutError("Timeout for the operation was reached")), milliseconds); + }); + return Promise.race([promise, timeout(timeoutMs)]).finally(() => clearTimeout(timeoutId)); +} + +const RETRYABLE_ERROR_STATUS_CODES = [408, 500]; +class ExeScriptExecutor { + constructor(activity, activityModule, logger, options) { + this.activity = activity; + this.activityModule = activityModule; + this.logger = logger; + this.options = new ExecutionConfig(options); + this.abortSignal = createAbortSignalFromTimeout(options === null || options === void 0 ? void 0 : options.signalOrTimeout); + } + /** + * Executes the provided script and returns the batch id and batch size that can be used + * to fetch it's results + * @param script + * @returns script execution metadata - batch id and batch size that can be used to fetch results using `getResultsObservable` + */ + async execute(script) { + try { + this.abortSignal.throwIfAborted(); + const batchId = await this.send(script); + const batchSize = JSON.parse(script.text).length; + this.logger.debug(`Script sent.`, { batchId, script }); + return { batchId, batchSize }; + } + catch (error) { + const message = getMessageFromApiError(error); + this.logger.error("Execution of script failed.", { + reason: message, + }); + if (this.abortSignal.aborted) { + throw new GolemAbortError("Executions of script has been aborted", this.abortSignal.reason); + } + throw new GolemWorkError(`Unable to execute script. ${message}`, exports.WorkErrorCode.ScriptExecutionFailed, this.activity.agreement, this.activity, this.activity.provider, error); + } + } + /** + * Given a batch id and batch size collect the results from yagna. You can choose to either + * stream them as they go or poll for them. When a timeout is reached (by either the timeout provided + * as an argument here or in the constructor) the observable will emit an error. + * + * + * @param batch - batch id and batch size + * @param stream - define type of getting results from execution (polling or streaming) + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the execution + * @param maxRetries - maximum number of retries retrieving results when an error occurs, default: 10 + */ + getResultsObservable(batch, stream, signalOrTimeout, maxRetries) { + const { signal, cleanup } = anyAbortSignal(this.abortSignal, createAbortSignalFromTimeout(signalOrTimeout)); + // observable that emits when the script execution should be aborted + const abort$ = new rxjs.Observable((subscriber) => { + const getError = () => new GolemAbortError("Execution of script has been aborted", signal.reason); + if (signal.aborted) { + subscriber.error(getError()); + } + signal.addEventListener("abort", () => { + subscriber.error(getError()); + }); + }); + // get an observable that will emit results of a batch execution + const results$ = stream + ? this.streamingBatch(batch.batchId, batch.batchSize) + : this.pollingBatch(batch.batchId, maxRetries); + return mergeUntilFirstComplete(abort$, results$).pipe(rxjs.finalize(cleanup)); + } + async send(script) { + return withTimeout(this.activityModule.executeScript(this.activity, script), 10000); + } + pollingBatch(batchId, maxRetries) { + let isCompleted = false; + let lastIndex; + const { id: activityId, agreement } = this.activity; + const { activityExeBatchResultPollIntervalSeconds, activityExeBatchResultMaxRetries } = this.options; + const { logger, activity, activityModule } = this; + return new rxjs.Observable((subscriber) => { + const pollForResults = async () => { + if (isCompleted) { + subscriber.complete(); + return; + } + logger.debug("Polling for batch script execution result"); + await retry(async (bail, attempt) => { + var _a, _b; + logger.debug(`Trying to poll for batch execution results from yagna. Attempt: ${attempt}`); + try { + if (isCompleted) { + bail(new Error("Batch is finished")); + } + const results = await activityModule.getBatchResults(activity, batchId, undefined, activityExeBatchResultPollIntervalSeconds); + const newResults = results && results.slice(lastIndex + 1); + logger.debug(`Received batch execution results`, { results: newResults, activityId }); + if (Array.isArray(newResults) && newResults.length) { + newResults.forEach((result) => { + subscriber.next(result); + isCompleted || (isCompleted = !!result.isBatchFinished); + lastIndex = result.index; + }); + } + } + catch (error) { + logger.debug(`Failed to fetch activity results. Attempt: ${attempt}. ${error}`); + const errorStatus = (_a = error === null || error === void 0 ? void 0 : error.status) !== null && _a !== void 0 ? _a : (_b = error.previous) === null || _b === void 0 ? void 0 : _b.status; + if (RETRYABLE_ERROR_STATUS_CODES.includes(errorStatus)) { + throw error; + } + else { + bail(error); + } + } + }, { + retries: maxRetries !== null && maxRetries !== void 0 ? maxRetries : activityExeBatchResultMaxRetries, + maxTimeout: 15000, + }); + return runOnNextEventLoopIteration(pollForResults); + }; + pollForResults().catch((error) => { + logger.error(`Polling for batch results failed`, error); + subscriber.error(error); + }); + return () => { + isCompleted = true; + }; + }).pipe(rxjs.catchError((error) => { + if (error instanceof GolemWorkError) { + throw error; + } + throw new GolemWorkError(`Unable to get activity results. ${error}`, exports.WorkErrorCode.ActivityResultsFetchingFailed, agreement, activity, activity.provider, error); + })); + } + streamingBatch(batchId, batchSize) { + return this.activityModule.observeStreamingBatchEvents(this.activity, batchId).pipe(rxjs.map((resultEvents) => this.parseEventToResult(resultEvents, batchSize)), rxjs.takeWhile((result) => !result.isBatchFinished, true), + // transform to domain error + rxjs.catchError((error) => { + throw new GolemWorkError(`Unable to get activity results. ${error}`, exports.WorkErrorCode.ActivityResultsFetchingFailed, this.activity.agreement, this.activity, this.activity.provider, error); + })); + } + parseEventToResult(event, batchSize) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j; + // StreamingBatchEvent has a slightly more extensive structure, + // including a return code that could be added to the Result entity... (?) + const result = new Result({ + index: event.index, + eventDate: event.timestamp, + result: ((_a = event === null || event === void 0 ? void 0 : event.kind) === null || _a === void 0 ? void 0 : _a.finished) + ? ((_c = (_b = event === null || event === void 0 ? void 0 : event.kind) === null || _b === void 0 ? void 0 : _b.finished) === null || _c === void 0 ? void 0 : _c.return_code) === 0 + ? "Ok" + : "Error" + : ((_d = event === null || event === void 0 ? void 0 : event.kind) === null || _d === void 0 ? void 0 : _d.stderr) + ? "Error" + : "Ok", + stdout: (_e = event === null || event === void 0 ? void 0 : event.kind) === null || _e === void 0 ? void 0 : _e.stdout, + stderr: (_f = event === null || event === void 0 ? void 0 : event.kind) === null || _f === void 0 ? void 0 : _f.stderr, + message: (_h = (_g = event === null || event === void 0 ? void 0 : event.kind) === null || _g === void 0 ? void 0 : _g.finished) === null || _h === void 0 ? void 0 : _h.message, + isBatchFinished: event.index + 1 >= batchSize && Boolean((_j = event === null || event === void 0 ? void 0 : event.kind) === null || _j === void 0 ? void 0 : _j.finished), + }); + this.logger.debug("Received stream batch execution result", { result }); + return result; + } +} + +class ActivityModuleImpl { + constructor(services) { + this.services = services; + this.events = new eventemitter3.EventEmitter(); + this.logger = defaultLogger("activity"); + this.logger = services.logger; + this.activityApi = services.activityApi; + } + createScriptExecutor(activity, options) { + return new ExeScriptExecutor(activity, this, this.logger.child("executor"), options); + } + async executeScript(activity, script) { + this.logger.debug("Executing script on activity", { activityId: activity.id }); + try { + this.events.emit("scriptSent", { + activity, + script, + }); + const result = await this.activityApi.executeScript(activity, script); + this.events.emit("scriptExecuted", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after script execution", { activityId: activity.id }); + return activity; + }), + script, + result, + }); + return result; + } + catch (error) { + this.events.emit("errorExecutingScript", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after script execution error", { activityId: activity.id }); + return activity; + }), + script, + error, + }); + throw error; + } + } + async getBatchResults(activity, batchId, commandIndex, timeout) { + this.logger.debug("Fetching batch results", { activityId: activity.id, batchId }); + try { + const results = await this.activityApi.getExecBatchResults(activity, batchId, commandIndex, timeout); + this.events.emit("batchResultsReceived", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after batch results received", { activityId: activity.id }); + return activity; + }), + batchId, + results, + }); + return results; + } + catch (error) { + this.events.emit("errorGettingBatchResults", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after batch results error", { activityId: activity.id }); + return activity; + }), + batchId, + error, + }); + throw error; + } + } + observeStreamingBatchEvents(activity, batchId, commandIndex) { + this.logger.debug("Observing streaming batch events", { activityId: activity.id, batchId }); + return this.activityApi.getExecBatchEvents(activity, batchId, commandIndex).pipe(rxjs.tap(async (event) => { + this.events.emit("batchEventsReceived", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after batch events received", { activityId: activity.id }); + return activity; + }), + batchId, + event, + }); + }), rxjs.catchError(async (error) => { + this.events.emit("errorGettingBatchEvents", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after batch events error", { activityId: activity.id }); + return activity; + }), + batchId, + error, + }); + throw error; + })); + } + async createActivity(agreement) { + this.logger.debug("Creating activity", { + agreementId: agreement.id, + provider: agreement.provider, + }); + try { + const activity = await this.activityApi.createActivity(agreement); + this.events.emit("activityCreated", { activity }); + this.logger.info("Created activity", { + activityId: activity.id, + agreementId: agreement.id, + provider: agreement.provider, + }); + return activity; + } + catch (error) { + this.events.emit("errorCreatingActivity", error); + throw error; + } + } + async destroyActivity(activity) { + this.logger.debug("Destroying activity", activity); + try { + const updated = await this.activityApi.destroyActivity(activity); + this.events.emit("activityDestroyed", { + activity: updated, + }); + this.logger.info("Destroyed activity", { + activityId: updated.id, + agreementId: updated.agreement.id, + provider: updated.agreement.provider, + }); + return updated; + } + catch (error) { + this.events.emit("errorDestroyingActivity", { activity, error }); + throw error; + } + } + async refreshActivity(staleActivity) { + // logging to debug level to avoid spamming the logs because this method is called frequently + this.logger.debug("Fetching latest activity state", { + activityId: staleActivity.id, + lastState: staleActivity.getState(), + }); + try { + const freshActivity = await this.activityApi.getActivity(staleActivity.id); + if (freshActivity.getState() !== freshActivity.getPreviousState()) { + this.logger.debug("Activity state changed", { + activityId: staleActivity.id, + previousState: freshActivity.getPreviousState(), + newState: freshActivity.getState(), + }); + this.events.emit("activityStateChanged", { + activity: freshActivity, + previousState: freshActivity.getPreviousState(), + }); + } + return freshActivity; + } + catch (error) { + this.events.emit("errorRefreshingActivity", { + activity: staleActivity, + error, + }); + throw error; + } + } + async findActivityById(activityId) { + this.logger.info("Fetching activity by ID", { activityId }); + return await this.activityApi.getActivity(activityId); + } + async createExeUnit(activity, options) { + this.logger.debug("Creating exe-unit for activity", { activityId: activity.id }); + const exe = new ExeUnit(activity, this, { + yagnaOptions: this.services.yagna.yagnaOptions, + logger: this.logger.child("exe-unit"), + ...options, + }); + this.logger.debug("Initializing the exe-unit for activity", { activityId: activity.id }); + try { + await exe.setup(); + const refreshedActivity = await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after work context initialization", { activityId: activity.id }); + return activity; + }); + this.events.emit("exeUnitInitialized", { + activity: refreshedActivity, + }); + this.logger.info("Initialized exe-unit", { + activityId: activity.id, + state: refreshedActivity.getState(), + }); + return exe; + } + catch (error) { + this.events.emit("errorInitializingExeUnit", { + activity: await this.refreshActivity(activity).catch(() => { + this.logger.warn("Failed to refresh activity after exe-unit initialization error", { + activityId: activity.id, + }); + return activity; + }), + error, + }); + throw error; + } + } +} + +var _GolemNetworkError_network; +exports.NetworkErrorCode = void 0; +(function (NetworkErrorCode) { + NetworkErrorCode["ServiceNotInitialized"] = "ServiceNotInitialized"; + NetworkErrorCode["NetworkSetupMissing"] = "NetworkSetupMissing"; + NetworkErrorCode["NetworkCreationFailed"] = "NetworkCreationFailed"; + NetworkErrorCode["NoAddressesAvailable"] = "NoAddressesAvailable"; + NetworkErrorCode["AddressOutOfRange"] = "AddressOutOfRange"; + NetworkErrorCode["AddressAlreadyAssigned"] = "AddressAlreadyAssigned"; + NetworkErrorCode["NodeAddingFailed"] = "NodeAddingFailed"; + NetworkErrorCode["NodeRemovalFailed"] = "NodeRemovalFailed"; + NetworkErrorCode["NetworkRemovalFailed"] = "NetworkRemovalFailed"; + NetworkErrorCode["GettingIdentityFailed"] = "GettingIdentityFailed"; + NetworkErrorCode["NetworkRemoved"] = "NetworkRemoved"; +})(exports.NetworkErrorCode || (exports.NetworkErrorCode = {})); +class GolemNetworkError extends GolemModuleError { + constructor(message, code, network, previous) { + super(message, code, previous); + this.code = code; + this.previous = previous; + _GolemNetworkError_network.set(this, void 0); + __classPrivateFieldSet(this, _GolemNetworkError_network, network, "f"); + } + getNetwork() { + return __classPrivateFieldGet(this, _GolemNetworkError_network, "f"); + } +} +_GolemNetworkError_network = new WeakMap(); + +exports.NetworkState = void 0; +(function (NetworkState) { + NetworkState["Active"] = "Active"; + NetworkState["Removed"] = "Removed"; +})(exports.NetworkState || (exports.NetworkState = {})); +class Network { + constructor(id, ip, mask, gateway) { + this.id = id; + this.nodes = new Map(); + this.state = exports.NetworkState.Active; + this.ipRange = ipNum.IPv4CidrRange.fromCidr(mask ? `${ip.split("/")[0]}/${ipNum.IPv4Mask.fromDecimalDottedString(mask).prefix}` : ip); + this.ipIterator = this.ipRange[Symbol.iterator](); + this.ip = this.getFirstAvailableIpAddress(); + this.mask = this.ipRange.getPrefix().toMask(); + this.gateway = gateway ? new ipNum.IPv4(gateway) : undefined; + } + /** + * Returns information about the network. + */ + getNetworkInfo() { + var _a, _b; + return { + id: this.id, + ip: this.ip.toString(), + mask: this.mask.toString(), + gateway: (_b = (_a = this.gateway) === null || _a === void 0 ? void 0 : _a.toString) === null || _b === void 0 ? void 0 : _b.call(_a), + nodes: Object.fromEntries(Array.from(this.nodes).map(([id, node]) => [node.ip, id])), + }; + } + /** + * Adds a node to the network. + * @param node - The network node to be added. + */ + addNode(node) { + if (this.isRemoved()) { + throw new GolemNetworkError(`Unable to add node ${node.id} to removed network`, exports.NetworkErrorCode.NetworkRemoved, this.getNetworkInfo()); + } + if (this.hasNode(node)) { + throw new GolemNetworkError(`Node ${node.id} has already been added to this network`, exports.NetworkErrorCode.AddressAlreadyAssigned); + } + this.nodes.set(node.id, node); + } + /** + * Checks whether the node belongs to the network. + * @param node - The network node to check. + */ + hasNode(node) { + return this.nodes.has(node.id); + } + /** + * Removes a node from the network. + * @param node - The network node to be removed. + */ + removeNode(node) { + if (this.isRemoved()) { + throw new GolemNetworkError(`Unable to remove node ${node.id} from removed network`, exports.NetworkErrorCode.NetworkRemoved, this.getNetworkInfo()); + } + if (!this.hasNode(node)) { + throw new GolemNetworkError(`There is no node ${node.id} in the network`, exports.NetworkErrorCode.NodeRemovalFailed); + } + this.nodes.delete(node.id); + } + markAsRemoved() { + if (this.state === exports.NetworkState.Removed) { + throw new GolemNetworkError("Network already removed", exports.NetworkErrorCode.NetworkRemoved, this.getNetworkInfo()); + } + this.state = exports.NetworkState.Removed; + } + /** + * Returns the first available IP address in the network. + */ + getFirstAvailableIpAddress() { + const ip = this.ipIterator.next().value; + if (!ip) + throw new GolemNetworkError(`No more addresses available in ${this.ipRange.toCidrString()}`, exports.NetworkErrorCode.NoAddressesAvailable, this.getNetworkInfo()); + return ip; + } + /** + * Checks if a given IP address is within the network range. + * @param ip - The IPv4 address to check. + */ + isIpInNetwork(ip) { + return this.ipRange.contains(new ipNum.IPv4CidrRange(ip, new ipNum.IPv4Prefix(BigInt(this.mask.prefix)))); + } + /** + * Checks if a given node ID is unique within the network. + * @param id - The node ID to check. + */ + isNodeIdUnique(id) { + return !this.nodes.has(id); + } + /** + * Checks if a given IP address is unique within the network. + */ + isNodeIpUnique(ip) { + for (const node of this.nodes.values()) { + if (new ipNum.IPv4(node.ip).isEquals(ip)) + return false; + } + return true; + } + isRemoved() { + return this.state === exports.NetworkState.Removed; + } +} + +/** + * Describes a node in a VPN, mapping a Golem node id to an IP address + */ +class NetworkNode { + constructor(id, ip, getNetworkInfo, yagnaBaseUri) { + this.id = id; + this.ip = ip; + this.getNetworkInfo = getNetworkInfo; + this.yagnaBaseUri = yagnaBaseUri; + } + /** + * Generate a dictionary of arguments that are required for the appropriate + *`Deploy` command of an exe-script in order to pass the network configuration to the runtime + * on the provider's end. + */ + getNetworkDeploymentArg() { + return { + net: [ + { + ...this.getNetworkInfo(), + nodeIp: this.ip, + }, + ], + }; + } + getWebsocketUri(port) { + const url = new URL(this.yagnaBaseUri); + url.protocol = "ws"; + return `${url.href}/net/${this.getNetworkInfo().id}/tcp/${this.ip}/${port}`; + } +} + +class NetworkModuleImpl { + constructor(deps) { + this.events = new eventemitter3.EventEmitter(); + this.logger = defaultLogger("network"); + this.lock = new AsyncLock(); + this.networkApi = deps.networkApi; + if (deps.logger) { + this.logger = deps.logger; + } + } + async createNetwork(options) { + var _a, _b, _c, _d; + this.logger.debug(`Creating network`, options); + try { + const ipDecimalDottedString = ((_b = (_a = options === null || options === void 0 ? void 0 : options.ip) === null || _a === void 0 ? void 0 : _a.split("/")) === null || _b === void 0 ? void 0 : _b[0]) || "192.168.0.0"; + const maskBinaryNotation = parseInt(((_d = (_c = options === null || options === void 0 ? void 0 : options.ip) === null || _c === void 0 ? void 0 : _c.split("/")) === null || _d === void 0 ? void 0 : _d[1]) || "24"); + const maskPrefix = (options === null || options === void 0 ? void 0 : options.mask) ? ipNum.IPv4Mask.fromDecimalDottedString(options.mask).prefix : maskBinaryNotation; + const ipRange = ipNum.IPv4CidrRange.fromCidr(`${ipNum.IPv4.fromString(ipDecimalDottedString)}/${maskPrefix}`); + const ip = ipRange.getFirst(); + const mask = ipRange.getPrefix().toMask(); + const gateway = (options === null || options === void 0 ? void 0 : options.gateway) ? new ipNum.IPv4(options.gateway) : undefined; + const network = await this.networkApi.createNetwork({ + ip: ip.toString(), + mask: mask === null || mask === void 0 ? void 0 : mask.toString(), + gateway: gateway === null || gateway === void 0 ? void 0 : gateway.toString(), + }); + // add Requestor as network node + const requestorId = await this.networkApi.getIdentity(); + await this.createNetworkNode(network, requestorId, options === null || options === void 0 ? void 0 : options.ownerIp); + this.logger.info(`Created network`, network.getNetworkInfo()); + this.events.emit("networkCreated", { network }); + return network; + } + catch (err) { + const message = getMessageFromApiError(err); + const error = err instanceof GolemNetworkError + ? err + : new GolemNetworkError(`Unable to create network. ${message}`, exports.NetworkErrorCode.NetworkCreationFailed, undefined, err); + this.events.emit("errorCreatingNetwork", { error }); + throw error; + } + } + async removeNetwork(network) { + this.logger.debug(`Removing network`, network.getNetworkInfo()); + await this.lock.acquire(`net-${network.id}`, async () => { + try { + await this.networkApi.removeNetwork(network); + network.markAsRemoved(); + this.logger.info(`Removed network`, network.getNetworkInfo()); + this.events.emit("networkRemoved", { network }); + } + catch (error) { + this.events.emit("errorRemovingNetwork", { network, error }); + throw error; + } + }); + } + async createNetworkNode(network, nodeId, nodeIp) { + this.logger.debug(`Creating network node`, { nodeId, nodeIp }); + return await this.lock.acquire(`net-${network.id}`, async () => { + try { + if (!network.isNodeIdUnique(nodeId)) { + throw new GolemNetworkError(`Network ID '${nodeId}' has already been assigned in this network.`, exports.NetworkErrorCode.AddressAlreadyAssigned, network.getNetworkInfo()); + } + if (network.isRemoved()) { + throw new GolemNetworkError(`Unable to create network node ${nodeId}. Network has already been removed`, exports.NetworkErrorCode.NetworkRemoved, network.getNetworkInfo()); + } + const ipv4 = this.getFreeIpInNetwork(network, nodeIp); + const node = await this.networkApi.createNetworkNode(network, nodeId, ipv4.toString()); + network.addNode(node); + this.logger.info(`Added network node`, { id: nodeId, ip: ipv4.toString() }); + this.events.emit("nodeCreated", { network, node }); + return node; + } + catch (error) { + this.events.emit("errorCreatingNode", { network, error }); + throw error; + } + }); + } + async removeNetworkNode(network, node) { + this.logger.debug(`Removing network node`, { nodeId: node.id, nodeIp: node.ip }); + return await this.lock.acquire(`net-${network.id}`, async () => { + try { + if (!network.hasNode(node)) { + throw new GolemNetworkError(`The network node ${node.id} does not belong to the network`, exports.NetworkErrorCode.NodeRemovalFailed, network.getNetworkInfo()); + } + if (network.isRemoved()) { + this.logger.debug(`Unable to remove network node ${node.id}. Network has already been removed`, { + network, + node, + }); + return; + } + await this.networkApi.removeNetworkNode(network, node); + network.removeNode(node); + this.logger.info(`Removed network node`, { + network: network.getNetworkInfo().ip, + nodeIp: node.ip, + }); + this.events.emit("nodeRemoved", { network, node }); + } + catch (error) { + this.events.emit("errorRemovingNode", { network, node, error }); + throw error; + } + }); + } + getFreeIpInNetwork(network, targetIp) { + if (!targetIp) { + return network.getFirstAvailableIpAddress(); + } + const ipv4 = ipNum.IPv4.fromString(targetIp); + if (!network.isIpInNetwork(ipv4)) { + throw new GolemNetworkError(`The given IP ('${targetIp}') address must belong to the network ('${network.getNetworkInfo().ip}').`, exports.NetworkErrorCode.AddressOutOfRange, network.getNetworkInfo()); + } + if (!network.isNodeIpUnique(ipv4)) { + throw new GolemNetworkError(`IP '${targetIp.toString()}' has already been assigned in this network.`, exports.NetworkErrorCode.AddressAlreadyAssigned, network.getNetworkInfo()); + } + return ipv4; + } +} + +/** + * Combines an agreement, activity, exe unit and payment process into a single high-level abstraction. + */ +class ResourceRental { + constructor(agreement, storageProvider, paymentProcess, marketModule, activityModule, logger, resourceRentalOptions) { + var _a; + this.agreement = agreement; + this.storageProvider = storageProvider; + this.paymentProcess = paymentProcess; + this.marketModule = marketModule; + this.activityModule = activityModule; + this.logger = logger; + this.resourceRentalOptions = resourceRentalOptions; + this.events = new eventemitter3.EventEmitter(); + this.currentExeUnit = null; + this.abortController = new AbortController(); + this.networkNode = (_a = this.resourceRentalOptions) === null || _a === void 0 ? void 0 : _a.networkNode; + this.createExeUnit(this.abortController.signal).catch((error) => this.logger.debug(`Failed to automatically create the exe unit during resource rental initialization`, { error })); + // TODO: Listen to agreement events to know when it goes down due to provider closing it! + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async startStopAndFinalize(signalOrTimeout) { + var _a; + try { + if (this.currentExeUnit) { + await this.currentExeUnit.teardown(); + } + this.abortController.abort("The resource rental is finalizing"); + if ((_a = this.currentExeUnit) === null || _a === void 0 ? void 0 : _a.activity) { + await this.activityModule.destroyActivity(this.currentExeUnit.activity); + } + if ((await this.fetchAgreementState()) !== "Terminated") { + await this.marketModule.terminateAgreement(this.agreement); + } + } + catch (error) { + this.logger.error("Filed to finalize payment process", { agreementId: this.agreement.id, error }); + throw error; + } + finally { + this.events.emit("finalized"); + } + } + /** + * Terminates the activity and agreement (stopping any ongoing work) and finalizes the payment process. + * Resolves when the rental will be fully terminated and all pending business operations finalized. + * If the rental is already finalized, it will resolve immediately with the last finalization result. + * @param signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the finalization process, especially the payment process. + * Please note that canceling the payment process may fail to comply with the terms of the agreement. + * If this method is called multiple times, it will return the same promise, ignoring the signal or timeout. + */ + async stopAndFinalize(signalOrTimeout) { + if (this.finalizePromise) { + return this.finalizePromise; + } + this.finalizePromise = this.startStopAndFinalize(signalOrTimeout); + return this.finalizePromise; + } + hasActivity() { + return this.currentExeUnit !== null; + } + /** + * Creates an activity on the Provider, and returns a exe-unit that can be used to operate within the activity + * @param signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the exe-unit request, + * especially when the exe-unit is in the process of starting, deploying and preparing the environment (including setup function) + */ + async getExeUnit(signalOrTimeout) { + if (this.finalizePromise || this.abortController.signal.aborted) { + throw new GolemUserError("The resource rental is not active. It may have been aborted or finalized"); + } + if (this.currentExeUnit !== null) { + return this.currentExeUnit; + } + const abortController = new AbortController(); + this.abortController.signal.addEventListener("abort", () => abortController.abort(this.abortController.signal.reason)); + if (signalOrTimeout) { + const abortSignal = createAbortSignalFromTimeout(signalOrTimeout); + abortSignal.addEventListener("abort", () => abortController.abort(abortSignal.reason)); + if (signalOrTimeout instanceof AbortSignal && signalOrTimeout.aborted) { + abortController.abort(signalOrTimeout.reason); + } + } + return this.createExeUnit(abortController.signal); + } + /** + * Destroy previously created exe-unit. + * Please note that if ResourceRental is left without ExeUnit for some time (default 90s) + * the provider will terminate the Agreement and ResourceRental will be unuseble + */ + async destroyExeUnit() { + var _a; + try { + if (this.currentExeUnit !== null) { + await this.activityModule.destroyActivity(this.currentExeUnit.activity); + this.currentExeUnit = null; + } + else { + throw new GolemUserError(`There is no exe-unit to destroy.`); + } + } + catch (error) { + this.events.emit("error", error); + this.logger.error(`Failed to destroy exe-unit. ${error}`, { activityId: (_a = this.currentExeUnit) === null || _a === void 0 ? void 0 : _a.activity }); + throw error; + } + } + async fetchAgreementState() { + return this.marketModule.fetchAgreement(this.agreement.id).then((agreement) => agreement.getState()); + } + async createExeUnit(abortSignal) { + if (!this.exeUnitPromise) { + this.exeUnitPromise = (async () => { + var _a, _b, _c; + const activity = await this.activityModule.createActivity(this.agreement); + this.currentExeUnit = await this.activityModule.createExeUnit(activity, { + storageProvider: this.storageProvider, + networkNode: (_a = this.resourceRentalOptions) === null || _a === void 0 ? void 0 : _a.networkNode, + executionOptions: (_b = this.resourceRentalOptions) === null || _b === void 0 ? void 0 : _b.activity, + signalOrTimeout: abortSignal, + ...(_c = this.resourceRentalOptions) === null || _c === void 0 ? void 0 : _c.exeUnit, + }); + this.events.emit("exeUnitCreated", activity); + return this.currentExeUnit; + })() + .catch((error) => { + this.events.emit("error", error); + this.logger.error(`Failed to create exe-unit. ${error}`, { agreementId: this.agreement.id }); + throw error; + }) + .finally(() => { + this.exeUnitPromise = undefined; + }); + } + return this.exeUnitPromise; + } +} + +const MAX_POOL_SIZE = 100; +/** + * Pool of resource rentals that can be borrowed, released or destroyed. + */ +class ResourceRentalPool { + constructor(options) { + this.events = new eventemitter3.EventEmitter(); + /** + * Pool of resource rentals that do not have an activity + */ + this.lowPriority = new Set(); + /** + * Pool of resource rentals that have an activity + */ + this.highPriority = new Set(); + this.borrowed = new Set(); + /** + * Queue of functions that are waiting for a lease process to be available + */ + this.acquireQueue = new AcquireQueue(); + this.asyncLock = new AsyncLock(); + /** + * Number of resource rentals that are currently being signed. + * This is used to prevent creating more resource rentals than the pool size allows. + */ + this.rentalsBeingSigned = 0; + this.allocation = options.allocation; + this.proposalPool = options.proposalPool; + this.marketModule = options.marketModule; + this.rentalModule = options.rentalModule; + this.networkModule = options.networkModule; + this.network = options.network; + this.resourceRentalOptions = options.resourceRentalOptions; + this.agreementOptions = options.agreementOptions; + this.logger = options.logger; + this.minPoolSize = + (() => { + if (typeof (options === null || options === void 0 ? void 0 : options.poolSize) === "number") { + return options === null || options === void 0 ? void 0 : options.poolSize; + } + if (typeof (options === null || options === void 0 ? void 0 : options.poolSize) === "object") { + return options === null || options === void 0 ? void 0 : options.poolSize.min; + } + })() || 0; + this.maxPoolSize = + (() => { + if (typeof (options === null || options === void 0 ? void 0 : options.poolSize) === "object") { + return options === null || options === void 0 ? void 0 : options.poolSize.max; + } + })() || MAX_POOL_SIZE; + this.abortController = new AbortController(); + } + async createNewResourceRental(signalOrTimeout) { + this.logger.debug("Creating new resource rental to add to pool"); + const { signal, cleanup } = anyAbortSignal(this.abortController.signal, createAbortSignalFromTimeout(signalOrTimeout)); + try { + this.rentalsBeingSigned++; + const agreement = await this.marketModule.signAgreementFromPool(this.proposalPool, this.agreementOptions, signal); + const networkNode = this.network + ? await this.networkModule.createNetworkNode(this.network, agreement.provider.id) + : undefined; + const resourceRental = this.rentalModule.createResourceRental(agreement, this.allocation, { + networkNode, + ...this.resourceRentalOptions, + }); + this.events.emit("created", { agreement }); + return resourceRental; + } + catch (error) { + if (signal.aborted) { + this.logger.debug("Creating resource rental was aborted", error); + throw error; + } + this.events.emit("errorCreatingRental", { + error: new GolemMarketError("Creating resource rental failed", exports.MarketErrorCode.ResourceRentalCreationFailed, error), + }); + this.logger.error("Creating resource rental failed", error); + throw error; + } + finally { + this.rentalsBeingSigned--; + cleanup(); + } + } + async validate(resourceRental) { + try { + const state = await resourceRental.fetchAgreementState(); + const result = state === "Approved"; + this.logger.debug("Validated resource rental in the pool", { result, state }); + return result; + } + catch (err) { + this.logger.error("Something went wrong while validating resource rental, it will be destroyed", err); + return false; + } + } + canCreateMoreResourceRentals() { + return this.getSize() + this.rentalsBeingSigned < this.maxPoolSize; + } + /** + * Take the first valid resource rental from the pool + * If there is no valid resource rental, return null + */ + async takeValidResourceRental() { + let resourceRental = null; + if (this.highPriority.size > 0) { + resourceRental = this.highPriority.values().next().value; + this.highPriority.delete(resourceRental); + } + else if (this.lowPriority.size > 0) { + resourceRental = this.lowPriority.values().next().value; + this.lowPriority.delete(resourceRental); + } + if (!resourceRental) { + return null; + } + const isValid = await this.validate(resourceRental); + if (!isValid) { + await this.destroy(resourceRental); + return this.takeValidResourceRental(); + } + return resourceRental; + } + async enqueueAcquire(signalOrTimeout) { + const rental = await this.acquireQueue.get(signalOrTimeout); + this.borrowed.add(rental); + this.events.emit("acquired", { + agreement: rental.agreement, + }); + return rental; + } + /** + * Sign a new resource rental or wait for one to become available in the pool, + * whichever comes first. + */ + async raceNewRentalWithAcquireQueue(signalOrTimeout) { + const ac = new AbortController(); + const { signal, cleanup } = anyAbortSignal(ac.signal, createAbortSignalFromTimeout(signalOrTimeout), this.abortController.signal); + return Promise.any([ + this.createNewResourceRental(signal), + this.acquireQueue.get(signal).then((rental) => { + this.logger.info("A rental became available in the pool, using it instead of creating a new one"); + return rental; + }), + ]) + .catch((err) => { + // if all promises fail (i.e. the signal is aborted by the user) then + // rethrow the error produced by `createNewResourceRental` because it's more relevant + throw err.errors[0]; + }) + .finally(() => { + ac.abort(); + cleanup(); + }); + } + /** + * Borrow a resource rental from the pool. + * If there is no valid resource rental a new one will be created. + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + */ + async acquire(signalOrTimeout) { + if (this.isDraining) { + throw new GolemAbortError("The pool is in draining mode, you cannot acquire new resources"); + } + let resourceRental = await this.takeValidResourceRental(); + if (!resourceRental) { + if (!this.canCreateMoreResourceRentals()) { + return this.enqueueAcquire(signalOrTimeout); + } + resourceRental = await this.raceNewRentalWithAcquireQueue(signalOrTimeout); + } + this.borrowed.add(resourceRental); + this.events.emit("acquired", { + agreement: resourceRental.agreement, + }); + return resourceRental; + } + /** + * If there are any acquires waiting in the queue, the resource rental will be passed to the first one. + * Otherwise, the resource rental will be added to the queue. + */ + passResourceRentalToWaitingAcquireOrBackToPool(resourceRental) { + if (this.acquireQueue.hasAcquirers()) { + this.acquireQueue.put(resourceRental); + return; + } + if (resourceRental.hasActivity()) { + this.highPriority.add(resourceRental); + } + else { + this.lowPriority.add(resourceRental); + } + } + async release(resourceRental) { + return this.asyncLock.acquire("resource-rental-pool", async () => { + if (this.getAvailableSize() >= this.maxPoolSize) { + return this.destroy(resourceRental); + } + this.borrowed.delete(resourceRental); + const isValid = await this.validate(resourceRental); + if (!isValid) { + return this.destroy(resourceRental); + } + this.passResourceRentalToWaitingAcquireOrBackToPool(resourceRental); + this.events.emit("released", { + agreement: resourceRental.agreement, + }); + }); + } + async destroy(resourceRental) { + try { + this.borrowed.delete(resourceRental); + this.logger.debug("Destroying resource rental from the pool", { agreementId: resourceRental.agreement.id }); + await Promise.all([resourceRental.stopAndFinalize(), this.removeNetworkNode(resourceRental)]); + this.events.emit("destroyed", { + agreement: resourceRental.agreement, + }); + } + catch (error) { + this.events.emit("errorDestroyingRental", { + agreement: resourceRental.agreement, + error: new GolemMarketError("Destroying resource rental failed", exports.MarketErrorCode.ResourceRentalTerminationFailed, error), + }); + this.logger.error("Destroying resource rental failed", error); + } + } + get isDraining() { + return !!this.drainPromise; + } + async startDrain() { + try { + await this.asyncLock.acquire("resource-rental-pool", async () => { + this.abortController.abort("The pool is in draining mode"); + this.events.emit("draining"); + this.acquireQueue.releaseAll(); + const allResourceRentals = Array.from(this.borrowed) + .concat(Array.from(this.lowPriority)) + .concat(Array.from(this.highPriority)); + await Promise.allSettled(allResourceRentals.map((resourceRental) => this.destroy(resourceRental))); + this.lowPriority.clear(); + this.highPriority.clear(); + this.borrowed.clear(); + this.abortController = new AbortController(); + }); + } + catch (error) { + this.logger.error("Draining the pool failed", error); + throw error; + } + finally { + this.events.emit("end"); + } + } + /** + * Sets the pool into draining mode and then clears it + * + * When set to drain mode, no new acquires will be possible. At the same time, all agreements in the pool will be terminated with the Providers. + * + * @return Resolves when all agreements are terminated + */ + async drainAndClear() { + if (this.isDraining) { + return this.drainPromise; + } + this.drainPromise = this.startDrain().finally(() => { + this.drainPromise = undefined; + }); + return this.drainPromise; + } + /** + * Total size (available + borrowed) + */ + getSize() { + return this.getAvailableSize() + this.getBorrowedSize(); + } + /** + * Available size (how many resource rental are ready to be borrowed) + */ + getAvailableSize() { + return this.lowPriority.size + this.highPriority.size; + } + /** + * Borrowed size (how many resource rental are currently out of the pool) + */ + getBorrowedSize() { + return this.borrowed.size; + } + async ready(timeoutOrAbortSignal) { + if (this.minPoolSize <= this.getAvailableSize()) { + return; + } + const { signal, cleanup } = anyAbortSignal(this.abortController.signal, createAbortSignalFromTimeout(timeoutOrAbortSignal)); + const tryCreatingMissingResourceRentals = async () => { + await Promise.allSettled(new Array(this.minPoolSize - this.getAvailableSize()).fill(0).map(() => this.createNewResourceRental(signal).then((resourceRental) => this.lowPriority.add(resourceRental), (error) => this.logger.error("Creating resource rental failed", error)))); + }; + while (this.minPoolSize > this.getAvailableSize()) { + if (signal.aborted) { + break; + } + await runOnNextEventLoopIteration(tryCreatingMissingResourceRentals); + } + cleanup(); + if (this.minPoolSize > this.getAvailableSize()) { + throw new Error("Could not create enough resource rentals to reach the minimum pool size in time"); + } + this.events.emit("ready"); + } + async removeNetworkNode(resourceRental) { + if (this.network && resourceRental.networkNode) { + this.logger.debug("Removing a node from the network", { + network: this.network.getNetworkInfo().ip, + nodeIp: resourceRental.networkNode.ip, + }); + await this.networkModule.removeNetworkNode(this.network, resourceRental.networkNode); + } + } + /** + * Acquire a resource rental from the pool and release it after the callback is done + * @example + * ```typescript + * const result = await pool.withRental(async (rental) => { + * // Do something with the rented resources + * return result; + * // pool.release(rental) is called automatically + * // even if an error is thrown in the callback + * }); + * ``` + * @param callback - a function that takes a `rental` object as its argument. The rental is automatically released after the callback is executed, regardless of whether it completes successfully or throws an error. + * @param signalOrTimeout - the timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + */ + async withRental(callback, signalOrTimeout) { + const rental = await this.acquire(signalOrTimeout); + try { + return await callback(rental); + } + finally { + await this.release(rental); + } + } +} + +class RentalModuleImpl { + constructor(deps) { + this.deps = deps; + this.events = new eventemitter3.EventEmitter(); + } + createResourceRental(agreement, allocation, options) { + const paymentProcess = this.deps.paymentModule.createAgreementPaymentProcess(agreement, allocation, options === null || options === void 0 ? void 0 : options.payment); + const rental = new ResourceRental(agreement, this.deps.storageProvider, paymentProcess, this.deps.marketModule, this.deps.activityModule, this.deps.logger.child("resource-rental"), options); + this.events.emit("resourceRentalCreated", rental.agreement); + return rental; + } + createResourceRentalPool(draftPool, allocation, options) { + const pool = new ResourceRentalPool({ + allocation, + rentalModule: this, + marketModule: this.deps.marketModule, + networkModule: this.deps.networkModule, + proposalPool: draftPool, + resourceRentalOptions: options === null || options === void 0 ? void 0 : options.resourceRentalOptions, + logger: this.deps.logger.child("resource-rental-pool"), + network: options === null || options === void 0 ? void 0 : options.network, + poolSize: options === null || options === void 0 ? void 0 : options.poolSize, + }); + this.events.emit("resourceRentalPoolCreated"); + return pool; + } +} + +class PaymentApiAdapter { + constructor(yagna, invoiceRepo, debitNoteRepo, logger) { + this.yagna = yagna; + this.invoiceRepo = invoiceRepo; + this.debitNoteRepo = debitNoteRepo; + this.logger = logger; + this.receivedInvoices$ = new rxjs.Subject(); + this.receivedDebitNotes$ = new rxjs.Subject(); + } + async connect() { + this.logger.debug("Connecting Payment API Adapter"); + rxjs.from(this.yagna.invoiceEvents$) + .pipe(rxjs.mergeMap((invoice) => { + if (invoice && invoice.invoiceId) { + return this.invoiceRepo.getById(invoice.invoiceId); + } + else { + return rxjs.of(); + } + })) + .subscribe({ + next: (event) => this.receivedInvoices$.next(event), + error: (err) => this.receivedInvoices$.error(err), + complete: () => this.logger.debug("Finished reading InvoiceEvents"), + }); + rxjs.from(this.yagna.debitNoteEvents$) + .pipe(rxjs.mergeMap((debitNote) => { + if (debitNote && debitNote.debitNoteId) { + return this.debitNoteRepo.getById(debitNote.debitNoteId); + } + else { + return rxjs.of(); + } + })) + .subscribe({ + next: (event) => this.receivedDebitNotes$.next(event), + error: (err) => this.receivedDebitNotes$.error(err), + complete: () => this.logger.debug("Finished reading DebitNoteEvents"), + }); + this.logger.debug("Payment API Adapter connected"); + } + getInvoice(id) { + return this.invoiceRepo.getById(id); + } + getDebitNote(id) { + return this.debitNoteRepo.getById(id); + } + async acceptInvoice(invoice, allocation, amount) { + try { + await this.yagna.payment.acceptInvoice(invoice.id, { + totalAmountAccepted: amount, + allocationId: allocation.id, + }); + return this.invoiceRepo.getById(invoice.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not accept invoice. ${message}`, exports.PaymentErrorCode.InvoiceAcceptanceFailed, allocation, invoice.provider); + } + } + async rejectInvoice(invoice, reason) { + try { + await this.yagna.payment.rejectInvoice(invoice.id, { + rejectionReason: "BAD_SERVICE", + totalAmountAccepted: "0.00", + message: reason, + }); + return this.invoiceRepo.getById(invoice.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not reject invoice. ${message}`, exports.PaymentErrorCode.InvoiceRejectionFailed, undefined, invoice.provider); + } + } + async acceptDebitNote(debitNote, allocation, amount) { + try { + await this.yagna.payment.acceptDebitNote(debitNote.id, { + totalAmountAccepted: amount, + allocationId: allocation.id, + }); + return this.debitNoteRepo.getById(debitNote.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not accept debit note. ${message}`, exports.PaymentErrorCode.DebitNoteAcceptanceFailed, allocation, debitNote.provider); + } + } + async rejectDebitNote(debitNote) { + try { + // TODO: this endpoint is not implemented in Yagna, it always responds 501:NotImplemented. + // Reported in https://github.com/golemfactory/yagna/issues/1249 + // await this.yagna.payment.rejectDebitNote(debitNote.id, { + // rejectionReason: "BAD_SERVICE", + // totalAmountAccepted: "0.00", + // message: reason, + // }); + return this.debitNoteRepo.getById(debitNote.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not reject debit note. ${message}`, exports.PaymentErrorCode.DebitNoteRejectionFailed, undefined, debitNote.provider, error); + } + } + async getAllocation(id) { + try { + const model = await this.yagna.payment.getAllocation(id); + return new Allocation(model); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not retrieve allocation. ${message}`, exports.PaymentErrorCode.AllocationCreationFailed, undefined, undefined, error); + } + } + async createAllocation(params) { + try { + const { identity: address } = await this.yagna.identity.getIdentity(); + const now = new Date(); + const model = await this.yagna.payment.createAllocation({ + totalAmount: params.budget.toString(), + paymentPlatform: params.paymentPlatform, + address, + timestamp: now.toISOString(), + timeout: new Date(+now + params.expirationSec * 1000).toISOString(), + makeDeposit: false, + remainingAmount: "", + spentAmount: "", + allocationId: "", + deposit: params.deposit, + }); + this.logger.debug(`Allocation ${model.allocationId} has been created for address ${address} using payment platform ${params.paymentPlatform}`); + const allocation = new Allocation(model); + return allocation; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Could not create new allocation. ${message}`, exports.PaymentErrorCode.AllocationCreationFailed, undefined, undefined, error); + } + } + async releaseAllocation(allocation) { + var _a, _b; + try { + return this.yagna.payment.releaseAllocation(allocation.id); + } + catch (error) { + throw new GolemPaymentError(`Could not release allocation. ${((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) || error}`, exports.PaymentErrorCode.AllocationReleaseFailed, allocation, undefined, error); + } + } +} + +class MarketApiAdapter { + constructor(yagnaApi, agreementRepo, proposalRepo, demandRepo, logger) { + this.yagnaApi = yagnaApi; + this.agreementRepo = agreementRepo; + this.proposalRepo = proposalRepo; + this.demandRepo = demandRepo; + this.logger = logger; + } + async publishDemandSpecification(spec) { + const idOrError = await this.yagnaApi.market.subscribeDemand(this.buildDemandRequestBody(spec.prototype)); + if (typeof idOrError !== "string") { + throw new Error(`Failed to subscribe to demand: ${idOrError.message}`); + } + const demand = new Demand(idOrError, spec); + this.demandRepo.add(demand); + return demand; + } + async unpublishDemand(demand) { + const result = await this.yagnaApi.market.unsubscribeDemand(demand.id); + if (result === null || result === void 0 ? void 0 : result.message) { + throw new Error(`Failed to unsubscribe from demand: ${result.message}`); + } + } + collectMarketProposalEvents(demand) { + return new rxjs.Observable((observer) => { + let isCancelled = false; + const longPoll = async () => { + if (isCancelled) { + return; + } + try { + for (const event of await this.yagnaApi.market.collectOffers(demand.id)) { + const timestamp = new Date(Date.parse(event.eventDate)); + switch (event.eventType) { + case "ProposalEvent": + { + try { + // @ts-expect-error FIXME #ya-ts-client, #ya-client: Fix mappings and type discriminators + const offerProposal = new OfferProposal(event.proposal, demand); + this.proposalRepo.add(offerProposal); + observer.next({ + type: "ProposalReceived", + proposal: offerProposal, + timestamp, + }); + } + catch (err) { + observer.error(err); + this.logger.error("Failed to create offer proposal from the event", { err, event, demand }); + } + } + break; + case "ProposalRejectedEvent": { + // @ts-expect-error FIXME #ya-ts-client, #ya-client: Fix mappings and type discriminators + const { proposalId, reason } = event; + const marketProposal = this.proposalRepo.getById(proposalId); + if (marketProposal && this.isOfferCounterProposal(marketProposal)) { + observer.next({ + type: "ProposalRejected", + counterProposal: marketProposal, + reason: reason.message, + timestamp, + }); + } + else { + this.logger.error("Could not locate counter proposal with ID issued by the Requestor while handling ProposalRejectedEvent", { + event, + }); + } + break; + } + case "PropertyQueryEvent": + observer.next({ + type: "PropertyQueryReceived", + timestamp, + }); + break; + default: + this.logger.warn("Unsupported demand subscription event", { event }); + } + } + } + catch (error) { + // when the demand is unsubscribed the long poll will reject with a 404 + if ("status" in error && error.status === 404) { + return; + } + this.logger.error("Polling yagna for offer proposal events failed", error); + observer.error(error); + } + void longPoll(); + }; + void longPoll(); + return () => { + isCancelled = true; + }; + }); + } + async counterProposal(receivedProposal, demand) { + const bodyClone = structuredClone(this.buildDemandRequestBody(demand.prototype)); + bodyClone.properties["golem.com.payment.chosen-platform"] = demand.paymentPlatform; + const maybeNewId = await this.yagnaApi.market.counterProposalDemand(receivedProposal.demand.id, receivedProposal.id, bodyClone); + this.logger.debug("Proposal counter result from yagna", { result: maybeNewId }); + if (typeof maybeNewId !== "string") { + throw new GolemInternalError(`Counter proposal failed ${maybeNewId.message}`); + } + const dto = await this.yagnaApi.market.getProposalOffer(receivedProposal.demand.id, maybeNewId); + const counterProposal = new OfferCounterProposal(dto); + this.proposalRepo.add(counterProposal); + return counterProposal; + } + async rejectProposal(receivedProposal, reason) { + try { + const result = await this.yagnaApi.market.rejectProposalOffer(receivedProposal.demand.id, receivedProposal.id, { + message: reason, + }); + this.logger.debug("Proposal rejection result from yagna", { response: result }); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Failed to reject proposal. ${message}`, exports.MarketErrorCode.ProposalRejectionFailed, error); + } + } + buildDemandRequestBody(decorations) { + var _a, _b; + let constraints; + if (!((_a = decorations.constraints) === null || _a === void 0 ? void 0 : _a.length)) + constraints = "(&)"; + else if (decorations.constraints.length == 1) + constraints = decorations.constraints[0]; + else + constraints = `(&${decorations.constraints.join("\n\t")})`; + const properties = {}; + (_b = decorations.properties) === null || _b === void 0 ? void 0 : _b.forEach((prop) => (properties[prop.key] = prop.value)); + return { constraints, properties }; + } + async getPaymentRelatedDemandDecorations(allocationId) { + return this.yagnaApi.payment.getDemandDecorations([allocationId]); + } + async confirmAgreement(agreement, options) { + try { + // FIXME #yagna, If we don't provide the app-session ID when confirming the agreement, we won't be able to collect invoices with that app-session-id + // it's hard to know when the appSessionId is mandatory and when it isn't + this.logger.debug("Confirming agreement by Requestor", { agreementId: agreement.id }); + await this.yagnaApi.market.confirmAgreement(agreement.id, this.yagnaApi.appSessionId); + this.logger.debug("Waiting for agreement approval by Provider", { agreementId: agreement.id }); + await this.yagnaApi.market.waitForApproval(agreement.id, (options === null || options === void 0 ? void 0 : options.waitingForApprovalTimeoutSec) || 60); + this.logger.debug(`Agreement approved by Provider`, { agreementId: agreement.id }); + // Get fresh copy + return this.agreementRepo.getById(agreement.id); + } + catch (error) { + throw new GolemMarketError(`Unable to confirm agreement with provider`, exports.MarketErrorCode.AgreementApprovalFailed, error); + } + } + async createAgreement(proposal, options) { + const expirationSec = (options === null || options === void 0 ? void 0 : options.expirationSec) || 3600; + try { + const agreementProposalRequest = { + proposalId: proposal.id, + validTo: new Date(+new Date() + expirationSec * 1000).toISOString(), + }; + const agreementId = await withTimeout(this.yagnaApi.market.createAgreement(agreementProposalRequest), 30000); + if (typeof agreementId !== "string") { + throw new GolemMarketError(`Unable to create agreement. Invalid response from the server`, exports.MarketErrorCode.ResourceRentalCreationFailed); + } + const agreement = await this.agreementRepo.getById(agreementId); + this.logger.debug(`Agreement created`, { + agreement, + proposalId: proposal.id, + demandId: proposal.demand.id, + }); + return agreement; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Unable to create agreement ${message}`, exports.MarketErrorCode.ResourceRentalCreationFailed, error); + } + } + async proposeAgreement(proposal, options) { + const agreement = await this.createAgreement(proposal, options); + const confirmed = await this.confirmAgreement(agreement); + const state = confirmed.getState(); + if (state !== "Approved") { + throw new GolemMarketError(`Agreement ${agreement.id} cannot be approved. Current state: ${state}`, exports.MarketErrorCode.AgreementApprovalFailed); + } + this.logger.debug("Established agreement", agreement); + return confirmed; + } + getAgreement(id) { + return this.agreementRepo.getById(id); + } + async getAgreementState(id) { + const entry = await this.agreementRepo.getById(id); + return entry.getState(); + } + async terminateAgreement(agreement, reason = "Finished") { + try { + // Re-fetch entity before acting to be sure that we don't terminate a terminated activity + const current = await this.agreementRepo.getById(agreement.id); + if (current.getState() === "Terminated") { + throw new GolemUserError("You can not terminate an agreement that's already terminated"); + } + await withTimeout(this.yagnaApi.market.terminateAgreement(current.id, { + message: reason, + }), 30000); + this.logger.debug(`Agreement terminated`, { id: agreement.id, reason }); + return this.agreementRepo.getById(agreement.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Unable to terminate agreement ${agreement.id}. ${message}`, exports.MarketErrorCode.ResourceRentalTerminationFailed, error); + } + } + collectAgreementEvents() { + return this.yagnaApi.agreementEvents$.pipe(rxjs.switchMap((event) => new rxjs.Observable((observer) => { + try { + this.logger.debug("Market API Adapter received agreement event", { event }); + const timestamp = new Date(Date.parse(event.eventDate)); + // @ts-expect-error FIXME #yagna, wasn't this fixed? {@issue https://github.com/golemfactory/yagna/pull/3136} + const eventType = event.eventType || event.eventtype; + this.getAgreement(event.agreementId) + .then((agreement) => { + switch (eventType) { + case "AgreementApprovedEvent": + observer.next({ + type: "AgreementApproved", + agreement, + timestamp, + }); + break; + case "AgreementTerminatedEvent": + observer.next({ + type: "AgreementTerminated", + agreement, + // @ts-expect-error FIXME #ya-ts-client event type discrimination doesn't work nicely with the current generator + terminatedBy: event.terminator, + // @ts-expect-error FIXME #ya-ts-client event type discrimination doesn't work nicely with the current generator + reason: event.reason.message, + timestamp, + }); + break; + case "AgreementRejectedEvent": + observer.next({ + type: "AgreementRejected", + agreement, + // @ts-expect-error FIXME #ya-ts-client event type discrimination doesn't work nicely with the current generator + reason: event.reason.message, + timestamp, + }); + break; + case "AgreementCancelledEvent": + observer.next({ + type: "AgreementCancelled", + agreement, + timestamp, + }); + break; + default: + this.logger.warn("Unsupported agreement event type for event", { event }); + break; + } + }) + .catch((err) => this.logger.error("Failed to load agreement", { agreementId: event.agreementId, err })); + } + catch (err) { + const golemMarketError = new GolemMarketError("Error while processing agreement event from yagna", exports.MarketErrorCode.InternalError, err); + this.logger.error(golemMarketError.message, { event, err }); + observer.error(err); + } + }))); + } + isOfferCounterProposal(proposal) { + return proposal.issuer === "Requestor"; + } + scan(spec) { + const ac = new AbortController(); + return new rxjs.Observable((observer) => { + this.yagnaApi.market + .beginScan({ + type: "offer", + ...this.buildDemandRequestBody(spec), + }) + .then((iterator) => { + if (typeof iterator !== "string") { + throw new Error(`Something went wrong while starting the scan, ${iterator.message}`); + } + return iterator; + }) + .then(async (iterator) => { + const cleanupIterator = () => this.yagnaApi.market.endScan(iterator); + if (ac.signal.aborted) { + await cleanupIterator(); + return; + } + const eventSource = new EventSource(`${this.yagnaApi.market.httpRequest.config.BASE}/scan/${iterator}/events`, { + headers: { + Accept: "text/event-stream", + Authorization: `Bearer ${this.yagnaApi.yagnaOptions.apiKey}`, + }, + }); + eventSource.addEventListener("offer", (event) => { + try { + const parsed = JSON.parse(event.data); + observer.next(new ScannedOffer(parsed)); + } + catch (error) { + observer.error(error); + } + }); + eventSource.addEventListener("error", (error) => observer.error(error)); + ac.signal.onabort = async () => { + eventSource.close(); + await cleanupIterator(); + }; + }) + .catch((error) => { + const message = getMessageFromApiError(error); + observer.error(new GolemMarketError(`Error while scanning for offers. ${message}`, exports.MarketErrorCode.ScanFailed, error)); + }); + return () => { + ac.abort(); + }; + }); + } +} + +class InvoiceRepository { + constructor(paymentClient, marketClient) { + this.paymentClient = paymentClient; + this.marketClient = marketClient; + } + async getById(id) { + let model; + let agreement; + try { + model = await this.paymentClient.getInvoice(id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Failed to get debit note: ${message}`, exports.PaymentErrorCode.CouldNotGetInvoice, undefined, undefined, error); + } + try { + agreement = await this.marketClient.getAgreement(model.agreementId); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Failed to get agreement for invoice: ${message}`, exports.MarketErrorCode.CouldNotGetAgreement, error); + } + const providerInfo = { + id: model.issuerId, + walletAddress: model.payeeAddr, + name: agreement.offer.properties["golem.node.id.name"], + }; + return new Invoice(model, providerInfo); + } +} + +class DebitNoteRepository { + constructor(paymentClient, marketClient) { + this.paymentClient = paymentClient; + this.marketClient = marketClient; + } + async getById(id) { + let model; + let agreement; + try { + model = await this.paymentClient.getDebitNote(id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemPaymentError(`Failed to get debit note: ${message}`, exports.PaymentErrorCode.CouldNotGetDebitNote, undefined, undefined, error); + } + try { + agreement = await this.marketClient.getAgreement(model.agreementId); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Failed to get agreement for debit note: ${message}`, exports.MarketErrorCode.CouldNotGetAgreement, error); + } + const providerInfo = { + id: model.issuerId, + walletAddress: model.payeeAddr, + name: agreement.offer.properties["golem.node.id.name"], + }; + return new DebitNote(model, providerInfo); + } +} + +class ActivityApiAdapter { + constructor(state, control, exec, activityRepo) { + this.state = state; + this.control = control; + this.exec = exec; + this.activityRepo = activityRepo; + } + getActivity(id) { + return this.activityRepo.getById(id); + } + async createActivity(agreement) { + try { + const activityOrError = await this.control.createActivity({ + agreementId: agreement.id, + }); + if (typeof activityOrError !== "object" || !("activityId" in activityOrError)) { + // will be caught in the catch block and converted to GolemWorkError + throw new Error(activityOrError); + } + return this.activityRepo.getById(activityOrError.activityId); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to create activity: ${message}`, exports.WorkErrorCode.ActivityCreationFailed, agreement, undefined, agreement.provider); + } + } + async destroyActivity(activity) { + try { + await this.control.destroyActivity(activity.id, 30); + return this.activityRepo.getById(activity.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to destroy activity: ${message}`, exports.WorkErrorCode.ActivityDestroyingFailed, activity.agreement, activity, activity.agreement.provider); + } + } + async getActivityState(id) { + return this.activityRepo.getStateOfActivity(id); + } + async executeScript(activity, script) { + try { + return await this.control.exec(activity.id, script); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to execute script. ${message}`, exports.WorkErrorCode.ScriptExecutionFailed, activity.agreement, activity, activity.agreement.provider); + } + } + async getExecBatchResults(activity, batchId, commandIndex, timeout) { + try { + const results = await this.control.getExecBatchResults(activity.id, batchId, commandIndex, timeout); + return results.map((r) => new Result(r)); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to fetch activity results. ${message}`, exports.WorkErrorCode.ActivityResultsFetchingFailed, activity.agreement, activity, activity.provider, error); + } + } + getExecBatchEvents(activity, batchId) { + return this.exec.observeBatchExecResults(activity.id, batchId); + } +} + +class CacheService { + constructor() { + this.storage = new Map(); + } + set(key, value) { + this.storage.set(key, value); + return value; + } + get(key) { + return this.storage.get(key); + } + delete(key) { + return this.storage.delete(key); + } + has(key) { + return this.storage.has(key); + } + getAll() { + return [...this.storage.values()]; + } + flushAll() { + return this.storage.clear(); + } +} + +class ActivityRepository { + constructor(state, agreementRepo) { + this.state = state; + this.agreementRepo = agreementRepo; + this.stateCache = new CacheService(); + } + async getById(id) { + var _a; + try { + const agreementId = await this.state.getActivityAgreement(id); + const agreement = await this.agreementRepo.getById(agreementId); + const previousState = (_a = this.stateCache.get(id)) !== null && _a !== void 0 ? _a : exports.ActivityStateEnum.New; + const state = await this.getStateOfActivity(id); + const usage = await this.state.getActivityUsage(id); + return new Activity(id, agreement, state !== null && state !== void 0 ? state : exports.ActivityStateEnum.Unknown, previousState, usage); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to get activity: ${message}`, exports.WorkErrorCode.ActivityStatusQueryFailed, undefined, undefined, undefined, error); + } + } + async getStateOfActivity(id) { + try { + const yagnaStateResponse = await this.state.getActivityState(id); + if (!yagnaStateResponse || yagnaStateResponse.state[0] === null) { + return exports.ActivityStateEnum.Unknown; + } + const state = exports.ActivityStateEnum[yagnaStateResponse.state[0]]; + this.stateCache.set(id, state); + return state; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemWorkError(`Failed to get activity state: ${message}`, exports.WorkErrorCode.ActivityStatusQueryFailed, undefined, undefined, undefined, error); + } + } +} + +class AgreementRepository { + constructor(api, demandRepo) { + this.api = api; + this.demandRepo = demandRepo; + } + async getById(id) { + let dto; + try { + dto = await this.api.getAgreement(id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemMarketError(`Failed to get agreement: ${message}`, exports.MarketErrorCode.CouldNotGetAgreement, error); + } + const { demandId } = dto.demand; + const demand = this.demandRepo.getById(demandId); + if (!demand) { + throw new GolemInternalError(`Could not find information for demand ${demandId} of agreement ${id}`); + } + const agreement = new Agreement(id, dto, demand); + return agreement; + } +} + +class ProposalRepository { + constructor(marketService, identityService, cache) { + this.marketService = marketService; + this.identityService = identityService; + this.cache = cache; + } + add(proposal) { + this.cache.set(proposal.id, proposal); + return proposal; + } + getById(id) { + return this.cache.get(id); + } + async getByDemandAndId(demand, id) { + try { + const dto = await this.marketService.getProposalOffer(demand.id, id); + const identity = await this.identityService.getIdentity(); + const isIssuedByRequestor = identity.identity === dto.issuerId ? "Requestor" : "Provider"; + return isIssuedByRequestor ? new OfferCounterProposal(dto) : new OfferProposal(dto, demand); + } + catch (error) { + const message = error.message; + throw new GolemMarketError(`Failed to get proposal: ${message}`, exports.MarketErrorCode.CouldNotGetProposal, error); + } + } +} + +class DemandRepository { + constructor(api, cache) { + this.api = api; + this.cache = cache; + } + getById(id) { + return this.cache.get(id); + } + add(demand) { + this.cache.set(demand.id, demand); + return demand; + } + getAll() { + return this.cache.getAll(); + } +} + +/** + * IFileServer implementation that uses any StorageProvider to serve files. + * Make sure that the storage provider implements the `.publishFile()` method. + */ +class StorageServerAdapter { + constructor(storage) { + this.storage = storage; + this.published = new Map(); + } + async publishFile(sourcePath) { + if (!this.storage.isReady()) { + throw new GolemInternalError("The GFTP server as to be initialized before publishing a file "); + } + if (!fs.existsSync(sourcePath) || fs.lstatSync(sourcePath).isDirectory()) { + throw new GolemConfigError(`File ${sourcePath} does not exist o is a directory`); + } + const fileUrl = await this.storage.publishFile(sourcePath); + const fileHash = await this.calculateFileHash(sourcePath); + const entry = { + fileUrl, + fileHash, + }; + this.published.set(sourcePath, entry); + return entry; + } + isServing() { + return this.published.size !== 0; + } + getPublishInfo(sourcePath) { + return this.published.get(sourcePath); + } + isFilePublished(sourcePath) { + return this.published.has(sourcePath); + } + async calculateFileHash(localPath) { + const fileStream = fs.createReadStream(localPath); + const hash = jsSha3.sha3_224.create(); + return new Promise((resolve, reject) => { + fileStream.on("data", (chunk) => hash.update(chunk)); + fileStream.on("end", () => resolve(hash.hex())); + fileStream.on("error", (err) => reject(new GolemInternalError(`Error calculating file hash: ${err}`, err))); + }); + } +} + +class NetworkApiAdapter { + constructor(yagnaApi) { + this.yagnaApi = yagnaApi; + } + async createNetwork(options) { + try { + const { id, ip, mask, gateway } = await this.yagnaApi.net.createNetwork(options); + return new Network(id, ip, mask, gateway); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to create network. ${message}`, exports.NetworkErrorCode.NetworkCreationFailed, undefined, error); + } + } + async removeNetwork(network) { + try { + await this.yagnaApi.net.removeNetwork(network.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to remove network. ${message}`, exports.NetworkErrorCode.NetworkRemovalFailed, network.getNetworkInfo(), error); + } + } + async createNetworkNode(network, nodeId, nodeIp) { + try { + await this.yagnaApi.net.addNode(network.id, { id: nodeId, ip: nodeIp }); + const networkNode = new NetworkNode(nodeId, nodeIp, network.getNetworkInfo.bind(network), this.yagnaApi.net.httpRequest.config.BASE); + return networkNode; + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to add node to network. ${message}`, exports.NetworkErrorCode.NodeAddingFailed, network.getNetworkInfo(), error); + } + } + async removeNetworkNode(network, node) { + try { + await this.yagnaApi.net.removeNode(network.id, node.id); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to remove network node. ${message}`, exports.NetworkErrorCode.NodeRemovalFailed, network.getNetworkInfo(), error); + } + } + async getIdentity() { + try { + return await this.yagnaApi.identity.getIdentity().then((res) => res.identity); + } + catch (error) { + const message = getMessageFromApiError(error); + throw new GolemNetworkError(`Unable to get requestor identity. ${message}`, exports.NetworkErrorCode.GettingIdentityFailed, undefined, error); + } + } +} + +/** + * If no override is provided, return a function that creates a new instance of the default factory. + * If override is a factory, return a function that creates a new instance of that factory. + * If override is an instance, return a function that returns that instance (ignoring the arguments). + */ +function getFactory(defaultFactory, override) { + if (override) { + if (typeof override === "function") { + return (...args) => new override(...args); + } + return () => override; + } + return (...args) => new defaultFactory(...args); +} +/** + * General purpose and high-level API for the Golem Network + * + * This class is the main entry-point for developers that would like to build on Golem Network + * using `@golem-sdk/golem-js`. It is supposed to provide an easy access API for use 80% of use cases. + */ +class GolemNetwork { + constructor(options = {}) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q; + this.events = new eventemitter3.EventEmitter(); + this.hasConnection = false; + this.abortController = new AbortController(); + /** + * List af additional tasks that should be executed when the network is being shut down + * (for example finalizing resource rental created with `oneOf`) + */ + this.cleanupTasks = []; + this.registeredPlugins = []; + const optDefaults = { + dataTransferProtocol: "ws", + }; + this.options = { + ...optDefaults, + ...options, + }; + this.logger = (_a = options.logger) !== null && _a !== void 0 ? _a : defaultLogger("golem-network"); + this.logger.debug("Creating Golem Network instance with options", { options: this.options }); + try { + this.yagna = + ((_b = options.override) === null || _b === void 0 ? void 0 : _b.yagna) || + new YagnaApi({ + logger: this.logger, + apiKey: (_c = this.options.api) === null || _c === void 0 ? void 0 : _c.key, + basePath: (_d = this.options.api) === null || _d === void 0 ? void 0 : _d.url, + }); + this.storageProvider = ((_e = options.override) === null || _e === void 0 ? void 0 : _e.storageProvider) || this.createStorageProvider(); + const demandCache = new CacheService(); + const proposalCache = new CacheService(); + const demandRepository = new DemandRepository(this.yagna.market, demandCache); + const proposalRepository = new ProposalRepository(this.yagna.market, this.yagna.identity, proposalCache); + const agreementRepository = new AgreementRepository(this.yagna.market, demandRepository); + this.services = { + logger: this.logger, + yagna: this.yagna, + storageProvider: this.storageProvider, + demandRepository, + proposalCache, + proposalRepository, + paymentApi: ((_f = this.options.override) === null || _f === void 0 ? void 0 : _f.paymentApi) || + new PaymentApiAdapter(this.yagna, new InvoiceRepository(this.yagna.payment, this.yagna.market), new DebitNoteRepository(this.yagna.payment, this.yagna.market), this.logger), + activityApi: ((_g = this.options.override) === null || _g === void 0 ? void 0 : _g.activityApi) || + new ActivityApiAdapter(this.yagna.activity.state, this.yagna.activity.control, this.yagna.activity.exec, new ActivityRepository(this.yagna.activity.state, agreementRepository)), + marketApi: ((_h = this.options.override) === null || _h === void 0 ? void 0 : _h.marketApi) || + new MarketApiAdapter(this.yagna, agreementRepository, proposalRepository, demandRepository, this.logger), + networkApi: ((_j = this.options.override) === null || _j === void 0 ? void 0 : _j.networkApi) || new NetworkApiAdapter(this.yagna), + fileServer: ((_k = this.options.override) === null || _k === void 0 ? void 0 : _k.fileServer) || new StorageServerAdapter(this.storageProvider), + }; + this.network = getFactory(NetworkModuleImpl, (_l = this.options.override) === null || _l === void 0 ? void 0 : _l.network)(this.services); + this.market = getFactory(MarketModuleImpl, (_m = this.options.override) === null || _m === void 0 ? void 0 : _m.market)({ + ...this.services, + networkModule: this.network, + }, this.options.market); + this.payment = getFactory(PaymentModuleImpl, (_o = this.options.override) === null || _o === void 0 ? void 0 : _o.payment)(this.services, this.options.payment); + this.activity = getFactory(ActivityModuleImpl, (_p = this.options.override) === null || _p === void 0 ? void 0 : _p.activity)(this.services); + this.rental = getFactory(RentalModuleImpl, (_q = this.options.override) === null || _q === void 0 ? void 0 : _q.rental)({ + activityModule: this.activity, + paymentModule: this.payment, + marketModule: this.market, + networkModule: this.network, + logger: this.logger, + storageProvider: this.storageProvider, + }); + } + catch (err) { + this.events.emit("error", err); + throw err; + } + } + /** + * "Connects" to the network by initializing the underlying components required to perform operations on Golem Network + * + * @return Resolves when all initialization steps are completed + */ + async connect() { + try { + await this.yagna.connect(); + await this.services.paymentApi.connect(); + await this.storageProvider.init(); + await this.connectPlugins(); + this.events.emit("connected"); + this.hasConnection = true; + } + catch (err) { + this.events.emit("error", err); + throw err; + } + } + async startDisconnect() { + try { + this.abortController.abort("Golem Network is disconnecting"); + await Promise.allSettled(this.cleanupTasks.map((task) => task())); + this.cleanupTasks = []; + await this.storageProvider + .close() + .catch((err) => this.logger.warn("Closing storage provider resulted with an error, it will be ignored", err)); + await this.yagna + .disconnect() + .catch((err) => this.logger.warn("Closing connections with yagna resulted with an error, it will be ignored", err)); + this.services.proposalCache.flushAll(); + this.abortController = new AbortController(); + } + catch (err) { + this.logger.error("Error while disconnecting", err); + throw err; + } + finally { + this.events.emit("disconnected"); + this.hasConnection = false; + } + } + /** + * "Disconnects" from the Golem Network + * + * @return Resolves when all shutdown steps are completed + */ + async disconnect() { + if (this.disconnectPromise) { + return this.disconnectPromise; + } + this.disconnectPromise = this.startDisconnect().finally(() => { + this.disconnectPromise = undefined; + }); + return this.disconnectPromise; + } + async getAllocationFromOrder({ order, maxAgreements, }) { + var _a; + if (!((_a = order.payment) === null || _a === void 0 ? void 0 : _a.allocation)) { + const budget = this.market.estimateBudget({ order, maxAgreements }); + /** + * We need to create allocations that will exist longer than the agreements made. + * + * Without this in the event of agreement termination due to its expiry, + * the invoice for the agreement arrives, and we try to accept the invoice with + * an allocation that already expired (had the same expiration time as the agreement), + * which leads to unpaid invoices. + */ + const EXPIRATION_BUFFER_MINUTES = 15; + return this.payment.createAllocation({ + budget, + expirationSec: Math.round(order.market.rentHours * (60 + EXPIRATION_BUFFER_MINUTES) * 60), + }); + } + if (typeof order.payment.allocation === "string") { + return this.payment.getAllocation(order.payment.allocation); + } + return order.payment.allocation; + } + /** + * Define your computational resource demand and access a single instance + * + * Use Case: Get a single instance of a resource from the market to execute operations on + * + * @example + * ```ts + * const rental = await glm.oneOf({ order }); + * await rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem! 👋")) + * .then((res) => console.log(res.stdout)); + * await rental.stopAndFinalize(); + * ``` + * + * @param {Object} options + * @param options.order - represents the order specifications which will result in access to ResourceRental. + * @param options.signalOrTimeout - timeout in milliseconds or an AbortSignal that will be used to cancel the rental request + * @param options.setup - an optional function that is called as soon as the exe unit is ready + * @param options.teardown - an optional function that is called before the exe unit is destroyed + */ + async oneOf({ order, setup, teardown, signalOrTimeout, volumes }) { + this.validateSettings({ + order, + volumes, + }); + const { signal, cleanup: cleanupAbortSignals } = anyAbortSignal(createAbortSignalFromTimeout(signalOrTimeout), this.abortController.signal); + let allocation = undefined; + let proposalSubscription = undefined; + let rental = undefined; + let networkNode = undefined; + const cleanup = async () => { + var _a; + cleanupAbortSignals(); + if (proposalSubscription) { + proposalSubscription.unsubscribe(); + } + // First finalize the rental (which will wait for all payments to be processed) + // and only then release the allocation + if (rental) { + await rental.stopAndFinalize().catch((err) => this.logger.error("Error while finalizing rental", err)); + } + if (order.network && networkNode) { + await this.network + .removeNetworkNode(order.network, networkNode) + .catch((err) => this.logger.error("Error while removing network node", err)); + } + // Don't release the allocation if it was provided by the user + if (((_a = order.payment) === null || _a === void 0 ? void 0 : _a.allocation) || !allocation) { + return; + } + await this.payment + .releaseAllocation(allocation) + .catch((err) => this.logger.error("Error while releasing allocation", err)); + }; + try { + const proposalPool = new DraftOfferProposalPool({ + logger: this.logger, + validateOfferProposal: order.market.offerProposalFilter, + selectOfferProposal: order.market.offerProposalSelector, + }); + allocation = await this.getAllocationFromOrder({ order, maxAgreements: 1 }); + signal.throwIfAborted(); + const demandSpecification = await this.market.buildDemandDetails(order.demand, order.market, allocation); + const draftProposal$ = this.market.collectDraftOfferProposals({ + demandSpecification, + pricing: order.market.pricing, + filter: order.market.offerProposalFilter, + }); + proposalSubscription = proposalPool.readFrom(draftProposal$); + const agreement = await this.market.signAgreementFromPool(proposalPool, { + expirationSec: Math.round(order.market.rentHours * 60 * 60), + }, signal); + networkNode = order.network + ? await this.network.createNetworkNode(order.network, agreement.provider.id) + : undefined; + rental = this.rental.createResourceRental(agreement, allocation, { + payment: order.payment, + activity: order.activity, + networkNode, + exeUnit: { setup, teardown, volumes }, + }); + // We managed to create the activity, no need to look for more agreement candidates + proposalSubscription.unsubscribe(); + this.cleanupTasks.push(cleanup); + return rental; + } + catch (err) { + this.logger.error("Error while creating rental", err); + // if the execution was interrupted before we got the chance to add the cleanup task + // we need to call it manually + await cleanup(); + throw err; + } + } + /** + * Define your computational resource demand and access a pool of instances. + * The pool will grow up to the specified poolSize. + * + * @example + * ```ts + * // create a pool that can grow up to 3 rentals at the same time + * const pool = await glm.manyOf({ + * poolSize: 3, + * demand + * }); + * await Promise.allSettled([ + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the first machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the second machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * pool.withRental(async (rental) => + * rental + * .getExeUnit() + * .then((exe) => exe.run("echo Hello, Golem from the third machine! 👋")) + * .then((res) => console.log(res.stdout)), + * ), + * ]); + * ``` + * + * @param {Object} options + * @param options.order - represents the order specifications which will result in access to LeaseProcess. + * @param options.poolSize {Object | number} - can be defined as a number or an object with min and max fields, if defined as a number it will be treated as a min parameter. + * @param options.poolSize.min - the minimum pool size to achieve ready state (default = 0) + * @param options.poolSize.max - the maximum pool size, if reached, the next pool element will only be available if the borrowed resource is released or destroyed (dafault = 100) + * @param options.setup - an optional function that is called as soon as the exe unit is ready + * @param options.teardown - an optional function that is called before the exe unit is destroyed + */ + async manyOf({ poolSize, order, setup, teardown, volumes }) { + var _a, _b; + this.validateSettings({ + order, + volumes, + }); + const signal = this.abortController.signal; + let allocation = undefined; + let resourceRentalPool = undefined; + let subscription = undefined; + const cleanup = async () => { + var _a; + if (subscription) { + subscription.unsubscribe(); + } + // First drain the pool (which will wait for all rentals to be paid for + // and only then release the allocation + if (resourceRentalPool) { + await resourceRentalPool + .drainAndClear() + .catch((err) => this.logger.error("Error while draining resource rental pool", err)); + } + // Don't release the allocation if it was provided by the user + if (((_a = order.payment) === null || _a === void 0 ? void 0 : _a.allocation) || !allocation) { + return; + } + await this.payment + .releaseAllocation(allocation) + .catch((err) => this.logger.error("Error while releasing allocation", err)); + }; + try { + const proposalPool = new DraftOfferProposalPool({ + logger: this.logger, + validateOfferProposal: order.market.offerProposalFilter, + selectOfferProposal: order.market.offerProposalSelector, + }); + const maxAgreements = typeof poolSize === "number" ? poolSize : ((_b = (_a = poolSize === null || poolSize === void 0 ? void 0 : poolSize.max) !== null && _a !== void 0 ? _a : poolSize === null || poolSize === void 0 ? void 0 : poolSize.min) !== null && _b !== void 0 ? _b : 1); + allocation = await this.getAllocationFromOrder({ order, maxAgreements }); + signal.throwIfAborted(); + const demandSpecification = await this.market.buildDemandDetails(order.demand, order.market, allocation); + const draftProposal$ = this.market.collectDraftOfferProposals({ + demandSpecification, + pricing: order.market.pricing, + filter: order.market.offerProposalFilter, + }); + subscription = proposalPool.readFrom(draftProposal$); + const rentSeconds = Math.round(order.market.rentHours * 60 * 60); + resourceRentalPool = this.rental.createResourceRentalPool(proposalPool, allocation, { + poolSize, + network: order.network, + resourceRentalOptions: { + activity: order.activity, + payment: order.payment, + exeUnit: { setup, teardown, volumes }, + }, + agreementOptions: { + expirationSec: rentSeconds, + }, + }); + this.cleanupTasks.push(cleanup); + return resourceRentalPool; + } + catch (err) { + this.logger.error("Error while creating rental pool", err); + // if the execution was interrupted before we got the chance to add the cleanup task + // we need to call it manually + await cleanup(); + throw err; + } + } + isConnected() { + return this.hasConnection; + } + /** + * Creates a new logical network within the Golem VPN infrastructure. + * Allows communication between network nodes using standard network mechanisms, + * but requires specific implementation in the ExeUnit/runtime, + * which must be capable of providing a standard Unix-socket interface to their payloads + * and marshaling the logical network traffic through the Golem Net transport layer + * @param options + */ + async createNetwork(options) { + return await this.network.createNetwork(options); + } + /** + * Removes an existing network from the Golem VPN infrastructure. + * @param network + */ + async destroyNetwork(network) { + return await this.network.removeNetwork(network); + } + use(pluginCallback, pluginOptions) { + this.registeredPlugins.push({ + initializer: pluginCallback, + options: pluginOptions, + }); + } + createStorageProvider() { + if (typeof this.options.dataTransferProtocol === "string") { + switch (this.options.dataTransferProtocol) { + case "gftp": + return new GftpStorageProvider(this.logger); + case "ws": + return new WebSocketStorageProvider(this.yagna, { + logger: this.logger, + }); + default: + throw new GolemConfigError(`Unsupported data transfer protocol ${this.options.dataTransferProtocol}. Supported protocols are "gftp" and "ws"`); + } + } + else if (this.options.dataTransferProtocol !== undefined) { + return this.options.dataTransferProtocol; + } + else { + return new NullStorageProvider(); + } + } + async connectPlugins() { + this.logger.debug("Started plugin initialization"); + for (const plugin of this.registeredPlugins) { + const cleanup = await plugin.initializer(this, plugin.options); + if (cleanup) { + this.cleanupTasks.push(cleanup); + } + } + this.logger.debug("Finished plugin initialization"); + } + /** + * A helper method used to check if the user provided settings and settings are reasonable + * @param settings + * @private + */ + validateSettings(settings) { + var _a, _b; + // Rule: If user specifies volumes and the min storage size, then the min storage has to be at least of the largest volume size + if (settings.volumes && ((_a = settings.order.demand.workload) === null || _a === void 0 ? void 0 : _a.minStorageGib) !== undefined) { + const largestVolumeSizeGib = Math.max(...Object.values(settings.volumes).map((spec) => spec.sizeGib)); + if (settings.order.demand.workload.minStorageGib < largestVolumeSizeGib) { + throw new GolemUserError("Your minStorageGib requirement is below your expected largest volume size."); + } + } + // Rule: Require minStorageGib settings for volume users to ensure that they will get suitable providers from the market + if (settings.volumes && ((_b = settings.order.demand.workload) === null || _b === void 0 ? void 0 : _b.minStorageGib) === undefined) { + throw new GolemUserError("You have specified volumes but did not specify a minStorageGib requirement."); + } + } +} + +exports.Activity = Activity; +exports.ActivityModuleImpl = ActivityModuleImpl; +exports.Agreement = Agreement; +exports.Allocation = Allocation; +exports.BasicDemandDirector = BasicDemandDirector; +exports.Batch = Batch; +exports.DebitNote = DebitNote; +exports.DebitNoteRepository = DebitNoteRepository; +exports.Demand = Demand; +exports.DemandSpecification = DemandSpecification; +exports.DraftOfferProposalPool = DraftOfferProposalPool; +exports.EventReader = EventReader; +exports.ExeUnit = ExeUnit; +exports.ExecutionConfig = ExecutionConfig; +exports.GftpStorageProvider = GftpStorageProvider; +exports.GolemAbortError = GolemAbortError; +exports.GolemConfigError = GolemConfigError; +exports.GolemError = GolemError; +exports.GolemInternalError = GolemInternalError; +exports.GolemMarketError = GolemMarketError; +exports.GolemModuleError = GolemModuleError; +exports.GolemNetwork = GolemNetwork; +exports.GolemNetworkError = GolemNetworkError; +exports.GolemPaymentError = GolemPaymentError; +exports.GolemPlatformError = GolemPlatformError; +exports.GolemTimeoutError = GolemTimeoutError; +exports.GolemUserError = GolemUserError; +exports.GolemWorkError = GolemWorkError; +exports.Invoice = Invoice; +exports.InvoiceProcessor = InvoiceProcessor; +exports.InvoiceRepository = InvoiceRepository; +exports.MIN_SUPPORTED_YAGNA = MIN_SUPPORTED_YAGNA; +exports.MarketApiAdapter = MarketApiAdapter; +exports.MarketModuleImpl = MarketModuleImpl; +exports.Network = Network; +exports.NetworkModuleImpl = NetworkModuleImpl; +exports.NetworkNode = NetworkNode; +exports.NullStorageProvider = NullStorageProvider; +exports.OfferProposal = OfferProposal; +exports.PaymentApiAdapter = PaymentApiAdapter; +exports.PaymentDemandDirector = PaymentDemandDirector; +exports.PaymentModuleImpl = PaymentModuleImpl; +exports.RemoteProcess = RemoteProcess; +exports.RentalModuleImpl = RentalModuleImpl; +exports.ResourceRental = ResourceRental; +exports.ResourceRentalPool = ResourceRentalPool; +exports.Result = Result; +exports.ScanDirector = ScanDirector; +exports.ScannedOffer = ScannedOffer; +exports.TcpProxy = TcpProxy; +exports.WebSocketStorageProvider = WebSocketStorageProvider; +exports.WorkloadDemandDirector = WorkloadDemandDirector; +exports.YagnaApi = YagnaApi; +exports.anyAbortSignal = anyAbortSignal; +exports.checkAndThrowUnsupportedInBrowserError = checkAndThrowUnsupportedInBrowserError; +exports.createAbortSignalFromTimeout = createAbortSignalFromTimeout; +exports.defaultLogger = defaultLogger; +exports.env = env; +exports.getPaymentNetwork = getPaymentNetwork; +exports.isBrowser = isBrowser; +exports.isNode = isNode; +exports.isWebWorker = isWebWorker; +exports.mergeUntilFirstComplete = mergeUntilFirstComplete; +exports.nullLogger = nullLogger; +exports.runOnNextEventLoopIteration = runOnNextEventLoopIteration; +exports.sleep = sleep; +exports.waitAndCall = waitAndCall; +exports.waitFor = waitFor; +//# sourceMappingURL=shared-BNnsKKpM.js.map diff --git a/dist/shared-BNnsKKpM.js.map b/dist/shared-BNnsKKpM.js.map new file mode 100644 index 000000000..5246a09df --- /dev/null +++ b/dist/shared-BNnsKKpM.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-BNnsKKpM.js","sources":["../src/shared/utils/sleep.ts","../src/shared/error/golem-error.ts","../src/shared/utils/runtimeContextChecker.ts","../src/shared/utils/logger/nullLogger.ts","../src/shared/utils/logger/defaultLogger.ts","../src/shared/utils/env.ts","../src/shared/utils/wait.ts","../src/shared/yagna/event-reader.ts","../src/shared/yagna/yagnaApi.ts","../src/shared/utils/abortSignal.ts","../src/shared/utils/eventLoop.ts","../src/shared/utils/rxjs.ts","../src/market/demand/demand.ts","../src/market/error.ts","../src/market/proposal/market-proposal.ts","../src/market/proposal/offer-proposal.ts","../src/shared/utils/acquireQueue.ts","../src/market/draft-offer-proposal-pool.ts","../src/market/proposal/offer-counter-proposal.ts","../src/market/proposal/proposals_batch.ts","../src/market/demand/demand-body-builder.ts","../src/market/demand/directors/base-config.ts","../src/market/demand/directors/workload-demand-director-config.ts","../src/market/demand/directors/basic-demand-director-config.ts","../src/market/demand/directors/basic-demand-director.ts","../src/market/demand/directors/payment-demand-director-config.ts","../src/market/demand/directors/payment-demand-director.ts","../src/market/demand/directors/workload-demand-director.ts","../src/market/scan/scan-director.ts","../src/market/scan/scanned-offer.ts","../src/market/market.module.ts","../src/market/agreement/agreement.ts","../src/payment/BaseDocument.ts","../src/payment/invoice.ts","../src/payment/debit_note.ts","../src/payment/allocation.ts","../src/payment/rejection.ts","../node_modules/tslib/tslib.es6.js","../src/payment/error.ts","../src/payment/InvoiceProcessor.ts","../src/payment/PayerDetails.ts","../src/shared/utils/apiErrorMessage.ts","../src/payment/agreement_payment_process.ts","../src/payment/payment.module.ts","../src/activity/activity.ts","../src/activity/results.ts","../src/activity/config.ts","../src/activity/script/script.ts","../src/activity/script/command.ts","../src/shared/storage/gftp.ts","../src/shared/storage/null.ts","../src/shared/storage/ws.ts","../src/activity/exe-unit/error.ts","../src/activity/exe-unit/batch.ts","../src/activity/exe-unit/process.ts","../src/network/tcp-proxy.ts","../src/activity/exe-unit/exe-unit.ts","../src/shared/utils/timeout.ts","../src/activity/exe-script-executor.ts","../src/activity/activity.module.ts","../src/network/error.ts","../src/network/network.ts","../src/network/node.ts","../src/network/network.module.ts","../src/resource-rental/resource-rental.ts","../src/resource-rental/resource-rental-pool.ts","../src/resource-rental/rental.module.ts","../src/shared/yagna/adapters/payment-api-adapter.ts","../src/shared/yagna/adapters/market-api-adapter.ts","../src/shared/yagna/repository/invoice-repository.ts","../src/shared/yagna/repository/debit-note-repository.ts","../src/shared/yagna/adapters/activity-api-adapter.ts","../src/shared/cache/CacheService.ts","../src/shared/yagna/repository/activity-repository.ts","../src/shared/yagna/repository/agreement-repository.ts","../src/shared/yagna/repository/proposal-repository.ts","../src/shared/yagna/repository/demand-repository.ts","../src/shared/storage/StorageServerAdapter.ts","../src/shared/yagna/adapters/network-api-adapter.ts","../src/golem-network/golem-network.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["Subject","EnvUtils.getYagnaAppKey","EnvUtils.getYagnaApiUrl","YaTsClient","Observable","v4","takeUntil","finalize","mergeWith","MarketErrorCode","EventEmitter","DEFAULTS","EnvUtils.getYagnaSubnet","EnvUtils.getRepoUrl","EnvUtils.isDevMode","tap","filter","map","switchMap","RejectionReason","PaymentErrorCode","EnvUtils.getPaymentNetwork","ActivityStateEnum","fs","toObject","encode","jsSha3","WorkErrorCode","Buffer","WebSocket","lastValueFrom","toArray","catchError","takeWhile","NetworkErrorCode","NetworkState","IPv4CidrRange","IPv4Mask","IPv4","IPv4Prefix","from","mergeMap","of"],"mappings":"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","x_google_ignoreList":[37]} \ No newline at end of file diff --git a/dist/shared/cache/CacheService.d.ts b/dist/shared/cache/CacheService.d.ts new file mode 100644 index 000000000..880042fed --- /dev/null +++ b/dist/shared/cache/CacheService.d.ts @@ -0,0 +1,9 @@ +export declare class CacheService { + private readonly storage; + set(key: string, value: T): T; + get(key: string): T | undefined; + delete(key: string): boolean; + has(key: string): boolean; + getAll(): T[]; + flushAll(): void; +} diff --git a/dist/shared/error/golem-error.d.ts b/dist/shared/error/golem-error.d.ts new file mode 100644 index 000000000..fbd36aaf9 --- /dev/null +++ b/dist/shared/error/golem-error.d.ts @@ -0,0 +1,65 @@ +/** + * Base class for all errors directly thrown by Golem SDK. + */ +export declare abstract class GolemError extends Error { + /** + * The previous error, if any, that led to this error. + */ + readonly previous?: Error | undefined; + constructor(message: string, + /** + * The previous error, if any, that led to this error. + */ + previous?: Error | undefined); +} +/** + * User-caused errors in the Golem SDK containing logic errors. + * @example you cannot create an activity for an agreement that already expired + */ +export declare class GolemUserError extends GolemError { +} +/** + * Represents errors related to the user choosing to abort or stop running activities. + * @example CTRL+C abort error + */ +export declare class GolemAbortError extends GolemUserError { +} +/** + * Represents configuration errors. + * @example Api key not defined + */ +export declare class GolemConfigError extends GolemUserError { +} +/** + * Represents errors when the SDK encountered an internal error that wasn't handled correctly. + * @example JSON.parse(undefined) -> Error: Unexpected token u in JSON at position 0 + */ +export declare class GolemInternalError extends GolemError { +} +/** + * Represents errors resulting from yagna’s errors or provider failure + * @examples: + * - yagna results with a HTTP 500-error + * - the provider failed to deploy the activity - permission denied when creating the activity on the provider system itself + */ +export declare class GolemPlatformError extends GolemError { +} +/** + * SDK timeout errors + * @examples: + * - Not receiving any offers within the configured time. + * - The activity not starting within the configured time. + * - The request (task) timing out (started on an activity but didn't finish on time). + * - The request start timing out (the task didn't start within the configured amount of time). + */ +export declare class GolemTimeoutError extends GolemError { +} +/** + * Module specific errors - Market, Work, Payment. + * Each of the major modules will have its own domain specific root error type, + * additionally containing an error code specific to a given subdomain + */ +export declare abstract class GolemModuleError extends GolemError { + code: string | number; + protected constructor(message: string, code: string | number, previous?: Error); +} diff --git a/dist/shared/storage/StorageServerAdapter.d.ts b/dist/shared/storage/StorageServerAdapter.d.ts new file mode 100644 index 000000000..0d52c4f97 --- /dev/null +++ b/dist/shared/storage/StorageServerAdapter.d.ts @@ -0,0 +1,27 @@ +import { FileServerEntry, IFileServer } from "../../activity"; +import { StorageProvider } from "./provider"; +/** + * IFileServer implementation that uses any StorageProvider to serve files. + * Make sure that the storage provider implements the `.publishFile()` method. + */ +declare class StorageServerAdapter implements IFileServer { + private readonly storage; + private published; + constructor(storage: StorageProvider); + publishFile(sourcePath: string): Promise<{ + fileUrl: string; + fileHash: string; + }>; + isServing(): boolean; + getPublishInfo(sourcePath: string): FileServerEntry | undefined; + isFilePublished(sourcePath: string): boolean; + private calculateFileHash; +} +/** + * @deprecated Use StorageServerAdapter instead. This will be removed in the next major version. + * + * This class provides GFTP based implementation of the IFileServer interface used in the SDK + */ +declare class GftpServerAdapter extends StorageServerAdapter { +} +export { GftpServerAdapter, StorageServerAdapter }; diff --git a/dist/shared/storage/default.d.ts b/dist/shared/storage/default.d.ts new file mode 100644 index 000000000..0bc13ed74 --- /dev/null +++ b/dist/shared/storage/default.d.ts @@ -0,0 +1,3 @@ +import { WebSocketStorageProvider } from "./ws"; +import { Logger, YagnaApi } from "../utils"; +export declare function createDefaultStorageProvider(yagnaApi: YagnaApi, logger?: Logger): WebSocketStorageProvider; diff --git a/dist/shared/storage/gftp.d.ts b/dist/shared/storage/gftp.d.ts new file mode 100644 index 000000000..a0d700793 --- /dev/null +++ b/dist/shared/storage/gftp.d.ts @@ -0,0 +1,39 @@ +import { StorageProvider } from "./provider"; +import { Logger } from "../utils"; +/** + * @deprecated Use WebSocketStorageProvider instead. This will be removed in the next major version. + * + * Storage provider that spawns a GFTP process and uses it to serve files. + */ +export declare class GftpStorageProvider implements StorageProvider { + private gftpServerProcess?; + private logger; + /** + * All published URLs to be release on close(). + * @private + */ + private publishedUrls; + private isInitialized; + private reader?; + /** + * lock against parallel writing to stdin in gftp process + * @private + */ + private lock; + constructor(logger?: Logger); + init(): Promise; + private startGftpServer; + private generateTempFileName; + receiveFile(path: string): Promise; + receiveData(): Promise; + publishFile(src: string): Promise; + publishData(src: Uint8Array): Promise; + release(): Promise; + private releaseAll; + close(): Promise; + private jsonRpc; + private uploadStream; + private uploadBytes; + private uploadFile; + isReady(): boolean; +} diff --git a/dist/shared/storage/index.d.ts b/dist/shared/storage/index.d.ts new file mode 100644 index 000000000..2cb0e7b3d --- /dev/null +++ b/dist/shared/storage/index.d.ts @@ -0,0 +1,5 @@ +export { StorageProvider } from "./provider"; +export { GftpStorageProvider } from "./gftp"; +export { NullStorageProvider } from "./null"; +export { WebSocketStorageProvider, WebSocketStorageProviderOptions } from "./ws"; +export { createDefaultStorageProvider } from "./default"; diff --git a/dist/shared/storage/null.d.ts b/dist/shared/storage/null.d.ts new file mode 100644 index 000000000..db0b49fd9 --- /dev/null +++ b/dist/shared/storage/null.d.ts @@ -0,0 +1,21 @@ +import { StorageProvider, StorageProviderDataCallback } from "./provider"; +/** + * Null Storage Provider. + * + * Blocks all storage operations. Any attempt to use storage will result in an error. + * + * This will be the default storage provider if no default storage provider is available + * for the platform the SDK is running on. + * + * @category mid-level + */ +export declare class NullStorageProvider implements StorageProvider { + close(): Promise; + init(): Promise; + publishData(src: Uint8Array): Promise; + publishFile(src: string): Promise; + receiveFile(path: string): Promise; + receiveData(callback: StorageProviderDataCallback): Promise; + release(urls: string[]): Promise; + isReady(): boolean; +} diff --git a/dist/shared/storage/provider.d.ts b/dist/shared/storage/provider.d.ts new file mode 100644 index 000000000..47ca814ce --- /dev/null +++ b/dist/shared/storage/provider.d.ts @@ -0,0 +1,38 @@ +export type StorageProviderDataCallback = (data: Uint8Array) => void; +export interface StorageProvider { + /** + * Initialize storage provider. + */ + init(): Promise; + /** + * Tells if the storage provider is ready for use + */ + isReady(): boolean; + /** + * Close storage provider and release all resources. + */ + close(): Promise; + /** + * Return allocated resource URL from Yagna of a file to be downloaded. + */ + receiveFile(destPath: string): Promise; + /** + * Return allocated resource URL from Yagna of a file to be downloaded. + */ + receiveData(callback: StorageProviderDataCallback): Promise; + /** + * Return allocated resource URL from Yagna of a file to be uploaded. + * @param srcPath + */ + publishFile(srcPath: string): Promise; + /** + * Return allocated resource URL from Yagna of data to be uploaded. + * @param data + */ + publishData(data: Uint8Array): Promise; + /** + * Release previously allocated resource URL from Yagna. + * @param urls + */ + release(urls: string[]): Promise; +} diff --git a/dist/shared/storage/ws.d.ts b/dist/shared/storage/ws.d.ts new file mode 100644 index 000000000..8b1a7f816 --- /dev/null +++ b/dist/shared/storage/ws.d.ts @@ -0,0 +1,34 @@ +import { StorageProvider, StorageProviderDataCallback } from "./provider"; +import { Logger, YagnaApi } from "../utils"; +export interface WebSocketStorageProviderOptions { + logger?: Logger; +} +/** + * Storage provider that uses GFTP over WebSockets. + */ +export declare class WebSocketStorageProvider implements StorageProvider { + private readonly yagnaApi; + /** + * Map of open services (IDs) indexed by GFTP url. + */ + private services; + private logger; + private ready; + private openHandles; + constructor(yagnaApi: YagnaApi, options?: WebSocketStorageProviderOptions); + close(): Promise; + init(): Promise; + publishData(data: Uint8Array): Promise; + publishFile(src: string): Promise; + receiveData(callback: StorageProviderDataCallback): Promise; + receiveFile(path: string): Promise; + release(urls: string[]): Promise; + isReady(): boolean; + private createFileInfo; + private getWsConstructor; + private createSocket; + private createService; + private deleteService; + private respond; + private completeReceive; +} diff --git a/dist/shared/types.d.ts b/dist/shared/types.d.ts new file mode 100644 index 000000000..bb6c8ae4e --- /dev/null +++ b/dist/shared/types.d.ts @@ -0,0 +1,2 @@ +import { StorageProvider } from "./storage"; +export type DataTransferProtocol = "gftp" | "ws" | StorageProvider; diff --git a/dist/shared/utils/abortSignal.d.ts b/dist/shared/utils/abortSignal.d.ts new file mode 100644 index 000000000..ba0aafa55 --- /dev/null +++ b/dist/shared/utils/abortSignal.d.ts @@ -0,0 +1,21 @@ +/** + * If provided an AbortSignal, returns it. + * If provided a number, returns an AbortSignal that will be aborted after the specified number of milliseconds. + * If provided undefined, returns an AbortSignal that will never be aborted. + */ +export declare function createAbortSignalFromTimeout(timeoutOrSignal: number | AbortSignal | undefined): AbortSignal; +/** + * Combine multiple AbortSignals into a single signal that will be aborted if any + * of the input signals are aborted. If any of the input signals are already aborted, + * the returned signal will be aborted immediately. + * + * Polyfill for AbortSignal.any(), since it's only available starting in Node 20 + * https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static + * + * The function returns a signal and a cleanup function that allows you + * to remove listeners when they are no longer needed. + */ +export declare function anyAbortSignal(...signals: AbortSignal[]): { + signal: AbortSignal; + cleanup: () => void; +}; diff --git a/dist/shared/utils/acquireQueue.d.ts b/dist/shared/utils/acquireQueue.d.ts new file mode 100644 index 000000000..2804b51ce --- /dev/null +++ b/dist/shared/utils/acquireQueue.d.ts @@ -0,0 +1,28 @@ +/** + * A queue of acquirers waiting for an item. + * use `get` to queue up for the next available item. + * use `put` to give the item to the next acquirer. + */ +export declare class AcquireQueue { + private queue; + private abortController; + /** + * Release (reject) all acquirers. + * Essentially this is a way to reset the queue. + */ + releaseAll(): void; + /** + * Queue up for the next available item. + */ + get(signalOrTimeout?: number | AbortSignal): Promise; + /** + * Are there any acquirers waiting for an item? + */ + hasAcquirers(): boolean; + /** + * Give the item to the next acquirer. + * If there are no acquirers, throw an error. You should check `hasAcquirers` before calling this method. + */ + put(item: T): void; + size(): number; +} diff --git a/dist/shared/utils/apiErrorMessage.d.ts b/dist/shared/utils/apiErrorMessage.d.ts new file mode 100644 index 000000000..84111897e --- /dev/null +++ b/dist/shared/utils/apiErrorMessage.d.ts @@ -0,0 +1,5 @@ +/** + * Try to extract a message from a yagna API error. + * If the error is not an instance of `ApiError`, return the error message. + */ +export declare function getMessageFromApiError(error: unknown): string; diff --git a/dist/shared/utils/env.d.ts b/dist/shared/utils/env.d.ts new file mode 100644 index 000000000..935c9c441 --- /dev/null +++ b/dist/shared/utils/env.d.ts @@ -0,0 +1,6 @@ +export declare function getYagnaApiUrl(): string; +export declare function getYagnaAppKey(): string; +export declare function getYagnaSubnet(): string; +export declare function getRepoUrl(): string; +export declare function getPaymentNetwork(): string; +export declare function isDevMode(): boolean; diff --git a/dist/shared/utils/eventLoop.d.ts b/dist/shared/utils/eventLoop.d.ts new file mode 100644 index 000000000..e595d2f64 --- /dev/null +++ b/dist/shared/utils/eventLoop.d.ts @@ -0,0 +1,26 @@ +/** + * Run a callback on the next event loop iteration ("promote" a microtask to a task using setTimeout). + * Note that this is not guaranteed to run on the very next iteration, but it will run as soon as possible. + * This function is designed to avoid the problem of microtasks queueing other microtasks in an infinite loop. + * See the example below for a common pitfall that this function can help avoid. + * Learn more about microtasks and their relation to async/await here: + * https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide/In_depth + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#control_flow_effects_of_await + * @param cb The callback to run on the next event loop iteration. + * @example + * ```ts + * const signal = AbortSignal.timeout(1_000); + * // This loop will run for 1 second, then stop. + * while (!signal.aborted) { + * await runOnNextEventLoopIteration(() => Promise.resolve()); + * } + * + * const signal = AbortSignal.timeout(1_000); + * // This loop will run indefinitely. + * // Each while loop iteration queues a microtask, which itself queues another microtask, and so on. + * while (!signal.aborted) { + * await Promise.resolve(); + * } + * ``` + */ +export declare function runOnNextEventLoopIteration(cb: () => Promise): Promise; diff --git a/dist/shared/utils/index.d.ts b/dist/shared/utils/index.d.ts new file mode 100644 index 000000000..4263b9be5 --- /dev/null +++ b/dist/shared/utils/index.d.ts @@ -0,0 +1,12 @@ +import sleep from "./sleep"; +export { sleep }; +export * from "./runtimeContextChecker"; +export { Logger } from "./logger/logger"; +export { nullLogger } from "./logger/nullLogger"; +export { defaultLogger } from "./logger/defaultLogger"; +export * as EnvUtils from "./env"; +export { YagnaApi, YagnaOptions } from "../yagna/yagnaApi"; +export * from "./abortSignal"; +export * from "./eventLoop"; +export * from "./rxjs"; +export * from "./wait"; diff --git a/dist/shared/utils/logger/defaultLogger.d.ts b/dist/shared/utils/logger/defaultLogger.d.ts new file mode 100644 index 000000000..03a5f4cf1 --- /dev/null +++ b/dist/shared/utils/logger/defaultLogger.d.ts @@ -0,0 +1,15 @@ +import { Logger } from "./logger"; +export type DefaultLoggerOptions = { + /** + * Disables prefixing the root namespace with golem-js + * + * @default false + */ + disableAutoPrefix: boolean; +}; +/** + * Creates a logger that uses the debug library. This logger is used by default by all entities in the SDK. + * + * If the namespace is not prefixed with `golem-js:`, it will be prefixed automatically - this can be controlled by `disableAutoPrefix` options. + */ +export declare function defaultLogger(namespace: string, opts?: DefaultLoggerOptions): Logger; diff --git a/dist/shared/utils/logger/logger.d.ts b/dist/shared/utils/logger/logger.d.ts new file mode 100644 index 000000000..fc95c3ede --- /dev/null +++ b/dist/shared/utils/logger/logger.d.ts @@ -0,0 +1,11 @@ +export interface Logger { + child(namespace: string): Logger; + debug(msg: string): void; + debug(msg: string, ctx: Record | Error | unknown): void; + info(msg: string): void; + info(msg: string, ctx: Record | Error | unknown): void; + warn(msg: string): void; + warn(msg: string, ctx: Record | Error | unknown): void; + error(msg: string): void; + error(msg: string, ctx: Record | Error | unknown): void; +} diff --git a/dist/shared/utils/logger/nullLogger.d.ts b/dist/shared/utils/logger/nullLogger.d.ts new file mode 100644 index 000000000..47947bb00 --- /dev/null +++ b/dist/shared/utils/logger/nullLogger.d.ts @@ -0,0 +1,2 @@ +import { Logger } from "./logger"; +export declare function nullLogger(): Logger; diff --git a/dist/shared/utils/runtimeContextChecker.d.ts b/dist/shared/utils/runtimeContextChecker.d.ts new file mode 100644 index 000000000..35a8dc8f0 --- /dev/null +++ b/dist/shared/utils/runtimeContextChecker.d.ts @@ -0,0 +1,13 @@ +/** + * @ignore + */ +export declare const isBrowser: boolean; +export declare const isNode: boolean; +/** + * @ignore + */ +export declare const isWebWorker: boolean; +/** + * @ignore + */ +export declare function checkAndThrowUnsupportedInBrowserError(feature: string): void; diff --git a/dist/shared/utils/rxjs.d.ts b/dist/shared/utils/rxjs.d.ts new file mode 100644 index 000000000..a2db8a137 --- /dev/null +++ b/dist/shared/utils/rxjs.d.ts @@ -0,0 +1,7 @@ +import { Observable } from "rxjs"; +/** + * Merges two observables until the first one completes (or errors). + * The difference between this and `merge` is that this will complete when the first observable completes, + * while `merge` would only complete when _all_ observables complete. + */ +export declare function mergeUntilFirstComplete(observable1: Observable, observable2: Observable): Observable; diff --git a/dist/shared/utils/sleep.d.ts b/dist/shared/utils/sleep.d.ts new file mode 100644 index 000000000..f50947be1 --- /dev/null +++ b/dist/shared/utils/sleep.d.ts @@ -0,0 +1,7 @@ +/** + * @param time + * @param inMs + * @ignore + */ +declare const sleep: (time: number, inMs?: boolean) => Promise; +export default sleep; diff --git a/dist/shared/utils/timeout.d.ts b/dist/shared/utils/timeout.d.ts new file mode 100644 index 000000000..0ed78561e --- /dev/null +++ b/dist/shared/utils/timeout.d.ts @@ -0,0 +1 @@ +export declare function withTimeout(promise: Promise, timeoutMs: number): Promise; diff --git a/dist/shared/utils/types.d.ts b/dist/shared/utils/types.d.ts new file mode 100644 index 000000000..c52dd8b36 --- /dev/null +++ b/dist/shared/utils/types.d.ts @@ -0,0 +1,7 @@ +export type RequireAtLeastOne = Pick> & { + [K in Keys]-?: Required> & Partial>>; +}[Keys]; +/** + * Utility type extracting the type of the element of a typed array + */ +export type ElementOf = T extends Array ? U : never; diff --git a/dist/shared/utils/wait.d.ts b/dist/shared/utils/wait.d.ts new file mode 100644 index 000000000..eda367db4 --- /dev/null +++ b/dist/shared/utils/wait.d.ts @@ -0,0 +1,18 @@ +/** + * Utility function that helps to block the execution until a condition is met (check returns true) or the timeout happens. + * + * @param {function} check - The function checking if the condition is met. + * @param {Object} [opts] - Options controlling the timeout and check interval in seconds. + * @param {AbortSignal} [opts.abortSignal] - AbortSignal to respect when waiting for the condition to be met + * @param {number} [opts.intervalSeconds=1] - The interval between condition checks in seconds. + * + * @return {Promise} - Resolves when the condition is met or rejects with a timeout error if it wasn't met on time. + */ +export declare function waitFor(check: () => boolean | Promise, opts?: { + abortSignal?: AbortSignal; + intervalSeconds?: number; +}): Promise; +/** + * Simple utility that allows you to wait n-seconds and then call the provided function + */ +export declare function waitAndCall(fn: () => Promise | T, waitSeconds: number): Promise; diff --git a/dist/shared/yagna/adapters/activity-api-adapter.d.ts b/dist/shared/yagna/adapters/activity-api-adapter.d.ts new file mode 100644 index 000000000..9844a00e4 --- /dev/null +++ b/dist/shared/yagna/adapters/activity-api-adapter.d.ts @@ -0,0 +1,22 @@ +import { Agreement } from "../../../market"; +import { ActivityApi } from "ya-ts-client"; +import { Activity, ActivityStateEnum, IActivityApi, Result } from "../../../activity"; +import { IActivityRepository } from "../../../activity/activity"; +import { ExeScriptRequest } from "../../../activity/exe-script-executor"; +import { Observable } from "rxjs"; +import { StreamingBatchEvent } from "../../../activity/results"; +import { YagnaExeScriptObserver } from "../yagnaApi"; +export declare class ActivityApiAdapter implements IActivityApi { + private readonly state; + private readonly control; + private readonly exec; + private readonly activityRepo; + constructor(state: ActivityApi.RequestorStateService, control: ActivityApi.RequestorControlService, exec: YagnaExeScriptObserver, activityRepo: IActivityRepository); + getActivity(id: string): Promise; + createActivity(agreement: Agreement): Promise; + destroyActivity(activity: Activity): Promise; + getActivityState(id: string): Promise; + executeScript(activity: Activity, script: ExeScriptRequest): Promise; + getExecBatchResults(activity: Activity, batchId: string, commandIndex?: number, timeout?: number): Promise; + getExecBatchEvents(activity: Activity, batchId: string): Observable; +} diff --git a/dist/shared/yagna/adapters/index.d.ts b/dist/shared/yagna/adapters/index.d.ts new file mode 100644 index 000000000..bd0440b1f --- /dev/null +++ b/dist/shared/yagna/adapters/index.d.ts @@ -0,0 +1,2 @@ +export * from "./payment-api-adapter"; +export * from "./market-api-adapter"; diff --git a/dist/shared/yagna/adapters/market-api-adapter.d.ts b/dist/shared/yagna/adapters/market-api-adapter.d.ts new file mode 100644 index 000000000..ae3d29156 --- /dev/null +++ b/dist/shared/yagna/adapters/market-api-adapter.d.ts @@ -0,0 +1,50 @@ +import { Observable } from "rxjs"; +import { Agreement, AgreementEvent, AgreementState, Demand, DemandSpecification, IMarketApi, MarketProposalEvent, OfferProposal } from "../../../market"; +import { YagnaApi } from "../yagnaApi"; +import { Logger } from "../../utils"; +import { DemandBodyPrototype, IDemandRepository } from "../../../market/demand"; +import { AgreementOptions, IAgreementRepository } from "../../../market/agreement/agreement"; +import { IProposalRepository, OfferCounterProposal } from "../../../market/proposal"; +import { ScanSpecification, ScannedOffer } from "../../../market/scan"; +/** + * A bit more user-friendly type definition of DemandOfferBaseDTO from ya-ts-client + * + * That's probably one of the most confusing elements around Golem Protocol and the API specificiation: + * + * - Providers create Offers + * - Requestors create Demands + * - Demands are used to create a subscription for Proposals - Initial ones reflect the Offer that was matched with the Demand used to subscribe + * - Once the proposal is countered, it's countered with a "counter proposal" which is no longer Offer + Demand, + * but rather a sketch of the agreement - here both parties try to agree on the values of certain properties that + * are interesting from their perspective. These "negotiated proposals (of) ...." are buit using DemandOffeBaseDTO + * + * #FIXME yagna - feedback in the note above + */ +export type DemandRequestBody = { + properties: Record; + constraints: string; +}; +export declare class MarketApiAdapter implements IMarketApi { + private readonly yagnaApi; + private readonly agreementRepo; + private readonly proposalRepo; + private readonly demandRepo; + private readonly logger; + constructor(yagnaApi: YagnaApi, agreementRepo: IAgreementRepository, proposalRepo: IProposalRepository, demandRepo: IDemandRepository, logger: Logger); + publishDemandSpecification(spec: DemandSpecification): Promise; + unpublishDemand(demand: Demand): Promise; + collectMarketProposalEvents(demand: Demand): Observable; + counterProposal(receivedProposal: OfferProposal, demand: DemandSpecification): Promise; + rejectProposal(receivedProposal: OfferProposal, reason: string): Promise; + private buildDemandRequestBody; + getPaymentRelatedDemandDecorations(allocationId: string): Promise; + confirmAgreement(agreement: Agreement, options?: AgreementOptions): Promise; + createAgreement(proposal: OfferProposal, options?: AgreementOptions): Promise; + proposeAgreement(proposal: OfferProposal, options?: AgreementOptions): Promise; + getAgreement(id: string): Promise; + getAgreementState(id: string): Promise; + terminateAgreement(agreement: Agreement, reason?: string): Promise; + collectAgreementEvents(): Observable; + private isOfferCounterProposal; + scan(spec: ScanSpecification): Observable; +} diff --git a/dist/shared/yagna/adapters/network-api-adapter.d.ts b/dist/shared/yagna/adapters/network-api-adapter.d.ts new file mode 100644 index 000000000..dac7e78ca --- /dev/null +++ b/dist/shared/yagna/adapters/network-api-adapter.d.ts @@ -0,0 +1,15 @@ +import { YagnaApi } from "../yagnaApi"; +import { INetworkApi, Network, NetworkNode } from "../../../network"; +export declare class NetworkApiAdapter implements INetworkApi { + private readonly yagnaApi; + constructor(yagnaApi: YagnaApi); + createNetwork(options: { + ip: string; + mask?: string; + gateway?: string; + }): Promise; + removeNetwork(network: Network): Promise; + createNetworkNode(network: Network, nodeId: string, nodeIp: string): Promise; + removeNetworkNode(network: Network, node: NetworkNode): Promise; + getIdentity(): Promise; +} diff --git a/dist/shared/yagna/adapters/payment-api-adapter.d.ts b/dist/shared/yagna/adapters/payment-api-adapter.d.ts new file mode 100644 index 000000000..7b9f0624a --- /dev/null +++ b/dist/shared/yagna/adapters/payment-api-adapter.d.ts @@ -0,0 +1,24 @@ +import { Subject } from "rxjs"; +import { Allocation, CreateAllocationParams, DebitNote, Invoice, IPaymentApi } from "../../../payment"; +import { IInvoiceRepository } from "../../../payment/invoice"; +import { Logger, YagnaApi } from "../../utils"; +import { IDebitNoteRepository } from "../../../payment/debit_note"; +export declare class PaymentApiAdapter implements IPaymentApi { + private readonly yagna; + private readonly invoiceRepo; + private readonly debitNoteRepo; + private readonly logger; + receivedInvoices$: Subject; + receivedDebitNotes$: Subject; + constructor(yagna: YagnaApi, invoiceRepo: IInvoiceRepository, debitNoteRepo: IDebitNoteRepository, logger: Logger); + connect(): Promise; + getInvoice(id: string): Promise; + getDebitNote(id: string): Promise; + acceptInvoice(invoice: Invoice, allocation: Allocation, amount: string): Promise; + rejectInvoice(invoice: Invoice, reason: string): Promise; + acceptDebitNote(debitNote: DebitNote, allocation: Allocation, amount: string): Promise; + rejectDebitNote(debitNote: DebitNote): Promise; + getAllocation(id: string): Promise; + createAllocation(params: CreateAllocationParams): Promise; + releaseAllocation(allocation: Allocation): Promise; +} diff --git a/dist/shared/yagna/event-reader.d.ts b/dist/shared/yagna/event-reader.d.ts new file mode 100644 index 000000000..523d71518 --- /dev/null +++ b/dist/shared/yagna/event-reader.d.ts @@ -0,0 +1,26 @@ +import { Logger } from "../utils"; +import { Subject } from "rxjs"; +import { EventDTO } from "ya-ts-client/dist/market-api"; +export type CancellablePoll = { + /** User defined name of the event stream for ease of debugging */ + eventType: string; + /** Flag indicating if the reader is finished and no longer polling */ + isFinished: boolean; + /** Triggers the poll using the fetcher provided when the CancellablePoll was created */ + pollValues: () => AsyncGenerator; + /** + * Cancels the polling operations, stopping the reader + */ + cancel: () => Promise; +}; +type CancellablePromise = Promise & { + cancel: () => void; +}; +export type CancellableEventsFetcherWithCursor = (lastEventTimestamp: string) => CancellablePromise; +export declare class EventReader { + private readonly logger; + constructor(logger: Logger); + pollToSubject(generator: AsyncGenerator, subject: Subject): Promise; + createReader(eventType: string, eventsFetcher: CancellableEventsFetcherWithCursor): CancellablePoll; +} +export {}; diff --git a/dist/shared/yagna/index.d.ts b/dist/shared/yagna/index.d.ts new file mode 100644 index 000000000..7b0bc7b55 --- /dev/null +++ b/dist/shared/yagna/index.d.ts @@ -0,0 +1,4 @@ +export * from "./adapters"; +export * from "./repository"; +export * from "./yagnaApi"; +export * from "./event-reader"; diff --git a/dist/shared/yagna/repository/activity-repository.d.ts b/dist/shared/yagna/repository/activity-repository.d.ts new file mode 100644 index 000000000..cf586849d --- /dev/null +++ b/dist/shared/yagna/repository/activity-repository.d.ts @@ -0,0 +1,11 @@ +import { Activity, ActivityStateEnum, IActivityRepository } from "../../../activity/activity"; +import { ActivityApi } from "ya-ts-client"; +import { IAgreementRepository } from "../../../market/agreement/agreement"; +export declare class ActivityRepository implements IActivityRepository { + private readonly state; + private readonly agreementRepo; + private stateCache; + constructor(state: ActivityApi.RequestorStateService, agreementRepo: IAgreementRepository); + getById(id: string): Promise; + getStateOfActivity(id: string): Promise; +} diff --git a/dist/shared/yagna/repository/agreement-repository.d.ts b/dist/shared/yagna/repository/agreement-repository.d.ts new file mode 100644 index 000000000..aa4ff0478 --- /dev/null +++ b/dist/shared/yagna/repository/agreement-repository.d.ts @@ -0,0 +1,9 @@ +import { Agreement, IAgreementRepository } from "../../../market/agreement/agreement"; +import { MarketApi } from "ya-ts-client"; +import { IDemandRepository } from "../../../market/demand/demand"; +export declare class AgreementRepository implements IAgreementRepository { + private readonly api; + private readonly demandRepo; + constructor(api: MarketApi.RequestorService, demandRepo: IDemandRepository); + getById(id: string): Promise; +} diff --git a/dist/shared/yagna/repository/debit-note-repository.d.ts b/dist/shared/yagna/repository/debit-note-repository.d.ts new file mode 100644 index 000000000..bfb650c4f --- /dev/null +++ b/dist/shared/yagna/repository/debit-note-repository.d.ts @@ -0,0 +1,8 @@ +import { DebitNote, IDebitNoteRepository } from "../../../payment/debit_note"; +import { MarketApi, PaymentApi } from "ya-ts-client"; +export declare class DebitNoteRepository implements IDebitNoteRepository { + private readonly paymentClient; + private readonly marketClient; + constructor(paymentClient: PaymentApi.RequestorService, marketClient: MarketApi.RequestorService); + getById(id: string): Promise; +} diff --git a/dist/shared/yagna/repository/demand-repository.d.ts b/dist/shared/yagna/repository/demand-repository.d.ts new file mode 100644 index 000000000..79440f230 --- /dev/null +++ b/dist/shared/yagna/repository/demand-repository.d.ts @@ -0,0 +1,11 @@ +import { Demand, IDemandRepository } from "../../../market/demand/demand"; +import { MarketApi } from "ya-ts-client"; +import { CacheService } from "../../cache/CacheService"; +export declare class DemandRepository implements IDemandRepository { + private readonly api; + private readonly cache; + constructor(api: MarketApi.RequestorService, cache: CacheService); + getById(id: string): Demand | undefined; + add(demand: Demand): Demand; + getAll(): Demand[]; +} diff --git a/dist/shared/yagna/repository/index.d.ts b/dist/shared/yagna/repository/index.d.ts new file mode 100644 index 000000000..9ef543a11 --- /dev/null +++ b/dist/shared/yagna/repository/index.d.ts @@ -0,0 +1,2 @@ +export * from "./invoice-repository"; +export * from "./debit-note-repository"; diff --git a/dist/shared/yagna/repository/invoice-repository.d.ts b/dist/shared/yagna/repository/invoice-repository.d.ts new file mode 100644 index 000000000..308b0551f --- /dev/null +++ b/dist/shared/yagna/repository/invoice-repository.d.ts @@ -0,0 +1,8 @@ +import { IInvoiceRepository, Invoice } from "../../../payment/invoice"; +import { MarketApi, PaymentApi } from "ya-ts-client"; +export declare class InvoiceRepository implements IInvoiceRepository { + private readonly paymentClient; + private readonly marketClient; + constructor(paymentClient: PaymentApi.RequestorService, marketClient: MarketApi.RequestorService); + getById(id: string): Promise; +} diff --git a/dist/shared/yagna/repository/proposal-repository.d.ts b/dist/shared/yagna/repository/proposal-repository.d.ts new file mode 100644 index 000000000..98a904e75 --- /dev/null +++ b/dist/shared/yagna/repository/proposal-repository.d.ts @@ -0,0 +1,13 @@ +import { MarketApi, IdentityApi } from "ya-ts-client"; +import { Demand } from "../../../market"; +import { CacheService } from "../../cache/CacheService"; +import { IProposalRepository, MarketProposal } from "../../../market/proposal/market-proposal"; +export declare class ProposalRepository implements IProposalRepository { + private readonly marketService; + private readonly identityService; + private readonly cache; + constructor(marketService: MarketApi.RequestorService, identityService: IdentityApi.DefaultService, cache: CacheService); + add(proposal: MarketProposal): MarketProposal; + getById(id: string): MarketProposal | undefined; + getByDemandAndId(demand: Demand, id: string): Promise; +} diff --git a/dist/shared/yagna/yagnaApi.d.ts b/dist/shared/yagna/yagnaApi.d.ts new file mode 100644 index 000000000..75e51b4ee --- /dev/null +++ b/dist/shared/yagna/yagnaApi.d.ts @@ -0,0 +1,90 @@ +import * as YaTsClient from "ya-ts-client"; +import { Logger } from "../utils"; +import { Observable, Subject } from "rxjs"; +import { StreamingBatchEvent } from "../../activity/results"; +import { ElementOf } from "../utils/types"; +export type YagnaOptions = { + apiKey?: string; + basePath?: string; + logger?: Logger; +}; +export declare const MIN_SUPPORTED_YAGNA = "0.15.2"; +export type YagnaAgreementOperationEvent = ElementOf>>; +export type YagnaInvoiceEvent = ElementOf>>; +export type YagnaDebitNoteEvent = ElementOf>>; +export interface YagnaExeScriptObserver { + observeBatchExecResults(activityId: string, batchId: string): Observable; +} +/** + * Utility class that groups various Yagna APIs under a single wrapper + * + * This class has the following responsibilities: + * + * - selectively exposes services from ya-ts-client in a more user-friendly manner + * - implements an event reader that collects events from Yagna endpoints and allows subscribing to them as Observables + * for agreements, debit notes and invoices. These observables emit ya-ts-client types on outputs + * + * End users of the SDK should not use this class and make use of {@link golem-network/golem-network.GolemNetwork} instead. This class is designed for + * SDK developers to use. + */ +export declare class YagnaApi { + readonly appSessionId: string; + readonly yagnaOptions: YagnaOptions; + /** + * Base path used to build paths to Yagna's API + * + * @example http://localhost:7465 + */ + readonly basePath: string; + readonly identity: YaTsClient.IdentityApi.DefaultService; + market: YaTsClient.MarketApi.RequestorService; + activity: { + control: YaTsClient.ActivityApi.RequestorControlService; + state: YaTsClient.ActivityApi.RequestorStateService; + exec: YagnaExeScriptObserver; + }; + net: YaTsClient.NetApi.RequestorService; + payment: YaTsClient.PaymentApi.RequestorService; + gsb: YaTsClient.GsbApi.RequestorService; + version: YaTsClient.VersionApi.DefaultService; + debitNoteEvents$: Subject<{ + eventType: string; /** + * Terminates the Yagna API related activities + */ + eventDate: string; + debitNoteId: string; + }>; + private debitNoteEventsPoll; + invoiceEvents$: Subject<{ + eventType: string; + eventDate: string; + invoiceId: string; + }>; + private invoiceEventPoll; + agreementEvents$: Subject<{ + eventType: string; + eventDate: string; + } & { + agreementId: string; + }>; + private agreementEventsPoll; + private readonly logger; + private readonly reader; + constructor(options?: YagnaOptions); + /** + * Effectively starts the Yagna API client including subscribing to events exposed via rxjs subjects + */ + connect(): Promise<{ + identity: string; + name: string; + role: string; + }>; + /** + * Terminates the Yagna API related activities + */ + disconnect(): Promise; + getVersion(): Promise; + private startPollingEvents; + private stopPollingEvents; + private assertSupportedVersion; +} diff --git a/src/activity/exe-unit/exe-unit.ts b/src/activity/exe-unit/exe-unit.ts index 3569a90b2..ed066e910 100644 --- a/src/activity/exe-unit/exe-unit.ts +++ b/src/activity/exe-unit/exe-unit.ts @@ -132,8 +132,9 @@ export class ExeUnit { state = await this.fetchState(); if (state !== ActivityStateEnum.Ready) { + const currentDateTime = new Date().toISOString(); throw new GolemWorkError( - `Activity ${this.activity.id} cannot reach the Ready state. Current state: ${state}`, + `Activity ${this.activity.id} cannot reach the Ready state at: ${currentDateTime}. Current state: ${state}`, WorkErrorCode.ActivityDeploymentFailed, this.activity.agreement, this.activity, diff --git a/src/experimental/deployment/deployment.ts b/src/experimental/deployment/deployment.ts index 85132b1b0..bcdcd29c0 100644 --- a/src/experimental/deployment/deployment.ts +++ b/src/experimental/deployment/deployment.ts @@ -128,8 +128,9 @@ export class Deployment { // Allocation is re-used for all demands so the expiration date should // be the equal to the longest expiration date of all demands - const longestExpiration = - Math.max(...this.components.resourceRentalPools.map((pool) => pool.options.market.rentHours)) * 3600; + const longestExpiration = Math.round( + Math.max(...this.components.resourceRentalPools.map((pool) => pool.options.market.rentHours)) * 3600, + ); const totalBudget = this.components.resourceRentalPools.reduce((acc, pool) => { const replicas = pool.options.deployment.replicas; @@ -181,7 +182,7 @@ export class Deployment { payment: pool.options?.payment, }, agreementOptions: { - expirationSec: pool.options.market.rentHours * 3600, + expirationSec: Math.round(pool.options.market.rentHours * 3600), }, }); this.pools.set(pool.name, { diff --git a/src/golem-network/golem-network.ts b/src/golem-network/golem-network.ts index 26ed7f27e..8db28a538 100644 --- a/src/golem-network/golem-network.ts +++ b/src/golem-network/golem-network.ts @@ -409,7 +409,7 @@ export class GolemNetwork { return this.payment.createAllocation({ budget, - expirationSec: order.market.rentHours * (60 + EXPIRATION_BUFFER_MINUTES) * 60, + expirationSec: Math.round(order.market.rentHours * (60 + EXPIRATION_BUFFER_MINUTES) * 60), }); } @@ -503,7 +503,7 @@ export class GolemNetwork { const agreement = await this.market.signAgreementFromPool( proposalPool, { - expirationSec: order.market.rentHours * 60 * 60, + expirationSec: Math.round(order.market.rentHours * 60 * 60), }, signal, ); @@ -626,7 +626,7 @@ export class GolemNetwork { }); subscription = proposalPool.readFrom(draftProposal$); - const rentSeconds = order.market.rentHours * 60 * 60; + const rentSeconds = Math.round(order.market.rentHours * 60 * 60); resourceRentalPool = this.rental.createResourceRentalPool(proposalPool, allocation, { poolSize, diff --git a/src/market/demand/directors/workload-demand-director-config.ts b/src/market/demand/directors/workload-demand-director-config.ts index a36116b43..9c8b3688e 100644 --- a/src/market/demand/directors/workload-demand-director-config.ts +++ b/src/market/demand/directors/workload-demand-director-config.ts @@ -55,7 +55,9 @@ export class WorkloadDemandDirectorConfig extends BaseConfig { } if (!this.isPositiveInt(this.expirationSec)) { - throw new GolemConfigError("The expirationSec param has to be a positive integer"); + throw new GolemConfigError( + `The expirationSec param has to be a positive integer, received: ${this.expirationSec}`, + ); } if (options.engine && options.runtime) { diff --git a/src/market/market.module.ts b/src/market/market.module.ts index 2a66a9d52..b43e2b89e 100644 --- a/src/market/market.module.ts +++ b/src/market/market.module.ts @@ -285,7 +285,7 @@ export class MarketModuleImpl implements MarketModule { ? await this.applyLocalGVMIServeSupport(demandOptions.workload) : demandOptions.workload; - const expirationSec = orderOptions.rentHours * 60 * 60; + const expirationSec = Math.round(orderOptions.rentHours * 60 * 60); /** * Default value on providers for MIN_AGREEMENT_EXPIRATION = 5min. diff --git a/src/resource-rental/resource-rental.ts b/src/resource-rental/resource-rental.ts index 38b927e5f..ff258c855 100644 --- a/src/resource-rental/resource-rental.ts +++ b/src/resource-rental/resource-rental.ts @@ -1,13 +1,12 @@ import { Agreement, MarketModule } from "../market"; import { AgreementPaymentProcess, PaymentProcessOptions } from "../payment/agreement_payment_process"; import { createAbortSignalFromTimeout, Logger } from "../shared/utils"; -import { waitFor } from "../shared/utils/wait"; import { Activity, ActivityModule, ExeUnit, ExeUnitOptions } from "../activity"; import { StorageProvider } from "../shared/storage"; import { EventEmitter } from "eventemitter3"; import { NetworkNode } from "../network"; import { ExecutionOptions } from "../activity/exe-script-executor"; -import { GolemAbortError, GolemTimeoutError, GolemUserError } from "../shared/error/golem-error"; +import { GolemUserError } from "../shared/error/golem-error"; export interface ResourceRentalEvents { /** Emitted when the rental process is fully finalized */ @@ -59,6 +58,7 @@ export class ResourceRental { // TODO: Listen to agreement events to know when it goes down due to provider closing it! } + // eslint-disable-next-line @typescript-eslint/no-unused-vars private async startStopAndFinalize(signalOrTimeout?: number | AbortSignal) { try { if (this.currentExeUnit) { @@ -71,25 +71,6 @@ export class ResourceRental { if ((await this.fetchAgreementState()) !== "Terminated") { await this.marketModule.terminateAgreement(this.agreement); } - if (this.paymentProcess.isFinished()) { - return; - } - - this.logger.info("Waiting for payment process of agreement to finish", { agreementId: this.agreement.id }); - const abortSignal = createAbortSignalFromTimeout(signalOrTimeout); - await waitFor(() => this.paymentProcess.isFinished(), { - abortSignal: abortSignal, - }).catch((error) => { - this.paymentProcess.stop(); - if (error instanceof GolemTimeoutError) { - throw new GolemTimeoutError( - `The finalization of payment process has been aborted due to a timeout`, - abortSignal.reason, - ); - } - throw new GolemAbortError("The finalization of payment process has been aborted", abortSignal.reason); - }); - this.logger.info("Finalized payment process", { agreementId: this.agreement.id }); } catch (error) { this.logger.error("Filed to finalize payment process", { agreementId: this.agreement.id, error }); throw error;