From 962d6dc4e4ab53f538a0142028bb428ca8132f3e Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Wed, 6 May 2026 16:45:11 -0700 Subject: [PATCH 01/30] feat: add OpenClaw observability plugin shell Signed-off-by: mnajafian-nv --- .gitignore | 1 + integrations/openclaw/index.ts | 26 ++ integrations/openclaw/openclaw.plugin.json | 157 +++++++++ integrations/openclaw/package-lock.json | 79 +++++ integrations/openclaw/package.json | 45 +++ .../openclaw/src/__tests__/config.test.ts | 184 ++++++++++ integrations/openclaw/src/config.ts | 330 ++++++++++++++++++ integrations/openclaw/src/health.ts | 29 ++ integrations/openclaw/src/modules.ts | 44 +++ .../openclaw/src/openclaw-plugin-entry.d.ts | 53 +++ integrations/openclaw/src/runtime-state.ts | 219 ++++++++++++ integrations/openclaw/src/types.ts | 95 +++++ integrations/openclaw/tsconfig.json | 25 ++ 13 files changed, 1287 insertions(+) create mode 100644 integrations/openclaw/index.ts create mode 100644 integrations/openclaw/openclaw.plugin.json create mode 100644 integrations/openclaw/package-lock.json create mode 100644 integrations/openclaw/package.json create mode 100644 integrations/openclaw/src/__tests__/config.test.ts create mode 100644 integrations/openclaw/src/config.ts create mode 100644 integrations/openclaw/src/health.ts create mode 100644 integrations/openclaw/src/modules.ts create mode 100644 integrations/openclaw/src/openclaw-plugin-entry.d.ts create mode 100644 integrations/openclaw/src/runtime-state.ts create mode 100644 integrations/openclaw/src/types.ts create mode 100644 integrations/openclaw/tsconfig.json diff --git a/.gitignore b/.gitignore index eba83c4f..f0d12d23 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ crates/node/index.js crates/node/index.d.ts crates/node/coverage/ crates/node/junit.xml +integrations/openclaw/dist/ # WebAssembly crates/wasm/pkg/ diff --git a/integrations/openclaw/index.ts b/integrations/openclaw/index.ts new file mode 100644 index 00000000..3a5085ef --- /dev/null +++ b/integrations/openclaw/index.ts @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import { + definePluginEntry, + type OpenClawPluginApi, +} from "openclaw/plugin-sdk/plugin-entry"; + +import { nemoFlowConfigSchema } from "./src/config.js"; +import { registerNemoFlowPlugin } from "./src/runtime-state.js"; + +export { NEMO_FLOW_OPENCLAW_JSON_SCHEMA, nemoFlowConfigSchema, parseConfig } from "./src/config.js"; +export type { NemoFlowHookBackendConfig } from "./src/config.js"; +export { createHealthSnapshot } from "./src/health.js"; +export { registerNemoFlowPlugin, NemoFlowRuntimeState } from "./src/runtime-state.js"; +export type { HookReplayBackendStatus, NemoFlowHealthSnapshot } from "./src/health.js"; + +export default definePluginEntry({ + id: "nemo-flow", + name: "NeMo Flow Observability", + description: "ATIF, OpenInference, and OpenTelemetry telemetry through NeMo Flow", + configSchema: nemoFlowConfigSchema, + register(api: OpenClawPluginApi) { + registerNemoFlowPlugin(api); + }, +}); diff --git a/integrations/openclaw/openclaw.plugin.json b/integrations/openclaw/openclaw.plugin.json new file mode 100644 index 00000000..abe1fe08 --- /dev/null +++ b/integrations/openclaw/openclaw.plugin.json @@ -0,0 +1,157 @@ +{ + "id": "nemo-flow", + "name": "NeMo Flow Observability", + "description": "ATIF, OpenInference, and OpenTelemetry telemetry through NeMo Flow.", + "activation": { + "onStartup": true + }, + "configSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "default": true + }, + "backend": { + "type": "string", + "enum": ["hooks"], + "default": "hooks" + }, + "nemoFlow": { + "type": "object", + "additionalProperties": false, + "properties": { + "pluginConfig": { + "type": "object", + "additionalProperties": true, + "default": {} + } + } + }, + "atif": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "default": true + }, + "outputDir": { + "type": "string" + }, + "agentName": { + "type": "string", + "default": "openclaw" + }, + "agentVersion": { + "type": "string" + } + } + }, + "telemetry": { + "type": "object", + "additionalProperties": false, + "properties": { + "openInference": { + "$ref": "#/$defs/otlpSubscriber" + }, + "otel": { + "$ref": "#/$defs/otlpSubscriber" + } + } + }, + "capture": { + "type": "object", + "additionalProperties": false, + "properties": { + "includePrompts": { + "type": "boolean", + "default": true + }, + "includeResponses": { + "type": "boolean", + "default": true + }, + "stripToolArgs": { + "type": "boolean", + "default": true + }, + "stripToolResults": { + "type": "boolean", + "default": true + } + } + }, + "correlation": { + "type": "object", + "additionalProperties": false, + "properties": { + "llmOutputGraceMs": { + "type": "number", + "default": 250 + }, + "recordTtlMs": { + "type": "number", + "default": 600000 + }, + "maxRecordsPerKey": { + "type": "number", + "default": 32 + } + } + } + }, + "$defs": { + "otlpSubscriber": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "default": false + }, + "transport": { + "type": "string", + "enum": ["http_binary", "grpc"], + "default": "http_binary" + }, + "endpoint": { + "type": "string" + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "resourceAttributes": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "serviceName": { + "type": "string", + "default": "openclaw-nemo-flow" + }, + "serviceNamespace": { + "type": "string", + "default": "nemo-flow" + }, + "serviceVersion": { + "type": "string", + "default": "unknown" + }, + "instrumentationScope": { + "type": "string" + }, + "timeoutMillis": { + "type": "number", + "default": 3000 + } + } + } + } + } +} diff --git a/integrations/openclaw/package-lock.json b/integrations/openclaw/package-lock.json new file mode 100644 index 00000000..68463afe --- /dev/null +++ b/integrations/openclaw/package-lock.json @@ -0,0 +1,79 @@ +{ + "name": "@nvidia/nemo-flow-openclaw", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@nvidia/nemo-flow-openclaw", + "version": "0.0.0", + "license": "Apache-2.0", + "devDependencies": { + "@types/node": "^20.19.0", + "typescript": "^5.8.2" + }, + "optionalDependencies": { + "nemo-flow-node": "file:../../crates/node" + }, + "peerDependencies": { + "openclaw": "*" + }, + "peerDependenciesMeta": { + "openclaw": { + "optional": true + } + } + }, + "../../crates/node": { + "name": "nemo-flow-node", + "version": "0.2.0", + "license": "Apache-2.0", + "optional": true, + "devDependencies": { + "@napi-rs/cli": "^2", + "c8": "^11.0.0", + "prettier": "^3.8.2", + "typedoc": "^0.28.0", + "typescript": "^5.8.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz", + "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/nemo-flow-node": { + "resolved": "../../crates/node", + "link": true + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/integrations/openclaw/package.json b/integrations/openclaw/package.json new file mode 100644 index 00000000..e1d7292e --- /dev/null +++ b/integrations/openclaw/package.json @@ -0,0 +1,45 @@ +{ + "name": "@nvidia/nemo-flow-openclaw", + "version": "0.0.0", + "private": true, + "description": "NeMo Flow-authored observability plugin for OpenClaw.", + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "files": [ + "dist", + "openclaw.plugin.json" + ], + "openclaw": { + "extensions": [ + "./dist/index.js" + ] + }, + "scripts": { + "build": "tsc -p tsconfig.json", + "typecheck": "tsc -p tsconfig.json --noEmit", + "test": "npm run build && node --test \"dist/src/__tests__/*.test.js\"" + }, + "peerDependencies": { + "openclaw": "*" + }, + "peerDependenciesMeta": { + "openclaw": { + "optional": true + } + }, + "optionalDependencies": { + "nemo-flow-node": "file:../../crates/node" + }, + "devDependencies": { + "@types/node": "^20.19.0", + "typescript": "^5.8.2" + }, + "license": "Apache-2.0" +} diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts new file mode 100644 index 00000000..30333b8d --- /dev/null +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -0,0 +1,184 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { describe, it } from "node:test"; + +import { + NEMO_FLOW_OPENCLAW_JSON_SCHEMA, + nemoFlowConfigSchema, + parseConfig, +} from "../config.js"; +import type { NemoFlowModules } from "../modules.js"; +import { registerNemoFlowPlugin } from "../runtime-state.js"; +import type { OpenClawPluginApiLike, PluginLoggerLike } from "../types.js"; + +describe("nemo-flow OpenClaw plugin shell", () => { + it("applies hook-backend config defaults", () => { + const config = parseConfig(undefined); + + assert.equal(config.enabled, true); + assert.equal(config.backend, "hooks"); + assert.deepEqual(config.nemoFlow.pluginConfig, { version: 1, components: [] }); + assert.equal(config.atif.enabled, true); + assert.equal(config.atif.agentName, "openclaw"); + assert.equal(config.telemetry.otel.enabled, false); + assert.equal(config.telemetry.otel.transport, "http_binary"); + assert.equal(config.telemetry.otel.instrumentationScope, "nemo-flow-otel"); + assert.equal(config.telemetry.openInference.enabled, false); + assert.equal( + config.telemetry.openInference.instrumentationScope, + "nemo-flow-openinference", + ); + assert.deepEqual(config.capture, { + includePrompts: true, + includeResponses: true, + stripToolArgs: true, + stripToolResults: true, + }); + assert.deepEqual(config.correlation, { + llmOutputGraceMs: 250, + recordTtlMs: 600_000, + maxRecordsPerKey: 32, + }); + }); + + it("rejects unsupported backends", () => { + assert.throws( + () => parseConfig({ backend: "managed_execution" }), + /unsupported nemo-flow backend: managed_execution/, + ); + }); + + it("wraps manifest JSON Schema in OpenClawPluginConfigSchema", () => { + assert.equal(typeof nemoFlowConfigSchema.safeParse, "function"); + assert.deepEqual(nemoFlowConfigSchema.jsonSchema, NEMO_FLOW_OPENCLAW_JSON_SCHEMA); + assert.equal(nemoFlowConfigSchema.safeParse?.({ backend: "hooks" }).success, true); + assert.equal(nemoFlowConfigSchema.safeParse?.({ backend: "bad" }).success, false); + }); + + it("returns without side effects outside full registration mode", () => { + const api = createApi({ registrationMode: "discovery" }); + + registerNemoFlowPlugin(api); + + assert.equal(api.calls.services.length, 0); + assert.equal(api.calls.lifecycle.length, 0); + assert.equal(api.calls.gatewayMethods.length, 0); + }); + + it("returns without side effects when disabled", () => { + const api = createApi({ pluginConfig: { enabled: false } }); + + registerNemoFlowPlugin(api); + + assert.equal(api.calls.services.length, 0); + assert.equal(api.calls.lifecycle.length, 0); + assert.equal(api.calls.gatewayMethods.length, 0); + assert.deepEqual(api.messages.info, ["nemo-flow observability disabled by plugin config"]); + }); + + it("returns without side effects when config parsing fails during registration", () => { + const api = createApi({ pluginConfig: { backend: "managed_execution" } }); + + registerNemoFlowPlugin(api); + + assert.equal(api.calls.services.length, 0); + assert.equal(api.calls.lifecycle.length, 0); + assert.equal(api.calls.gatewayMethods.length, 0); + assert.match( + api.messages.warn[0] ?? "", + /nemo-flow observability disabled because plugin config is invalid/, + ); + }); + + it("registers service, lifecycle, and health surfaces in full mode", () => { + const api = createApi(); + + registerNemoFlowPlugin(api, async () => createModules()); + + assert.deepEqual( + api.calls.services.map((service) => service.id), + ["nemo-flow-observability"], + ); + assert.deepEqual( + api.calls.lifecycle.map((lifecycle) => lifecycle.id), + ["nemo-flow-observability-cleanup"], + ); + assert.deepEqual( + api.calls.gatewayMethods.map((method) => method.method), + ["nemoFlow.status"], + ); + }); + + it("does not statically import nemo-flow-node or OpenClaw private src paths", () => { + const files = [ + readFileSync(new URL("../modules.js", import.meta.url), "utf8"), + readFileSync(new URL("../../index.js", import.meta.url), "utf8"), + ].join("\n"); + + assert.doesNotMatch(files, /from ["']nemo-flow-node/); + assert.doesNotMatch(files, /from ["']nemo-flow-node\/plugin/); + assert.doesNotMatch(files, /openclaw\/src\//); + }); +}); + +type TestApi = OpenClawPluginApiLike & { + calls: { + services: Parameters[0][]; + lifecycle: Parameters[0][]; + gatewayMethods: Array<{ method: string }>; + }; + messages: { + info: string[]; + warn: string[]; + }; +}; + +function createApi(params: { + registrationMode?: string; + pluginConfig?: Record; +} = {}): TestApi { + const messages: TestApi["messages"] = { info: [], warn: [] }; + const calls: TestApi["calls"] = { + services: [], + lifecycle: [], + gatewayMethods: [], + }; + const logger: PluginLoggerLike = { + info: (message) => messages.info.push(message), + warn: (message) => messages.warn.push(message), + }; + + const api: TestApi = { + id: "nemo-flow", + version: "1.2.3", + registrationMode: params.registrationMode ?? "full", + logger, + resolvePath: (input) => input, + registerService: (service) => calls.services.push(service), + registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), + registerGatewayMethod: (method) => calls.gatewayMethods.push({ method }), + calls, + messages, + }; + + if (params.pluginConfig !== undefined) { + api.pluginConfig = params.pluginConfig; + } + + return api; +} + +function createModules(): NemoFlowModules { + return { + nf: {}, + pluginHost: { + defaultConfig: () => ({ version: 1, components: [] }), + validate: () => ({ diagnostics: [] }), + initialize: async () => ({ diagnostics: [] }), + clear: () => {}, + }, + }; +} diff --git a/integrations/openclaw/src/config.ts b/integrations/openclaw/src/config.ts new file mode 100644 index 00000000..d42949ad --- /dev/null +++ b/integrations/openclaw/src/config.ts @@ -0,0 +1,330 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import type { OpenClawPluginConfigSchema } from "openclaw/plugin-sdk/plugin-entry"; + +import manifest from "../openclaw.plugin.json" with { type: "json" }; + +export type BackendKind = "hooks"; + +export type TelemetrySinkConfig = { + enabled: boolean; + transport?: string; + endpoint?: string; + headers?: Record; + resourceAttributes?: Record; + serviceName: string; + serviceNamespace: string; + serviceVersion?: string; + instrumentationScope?: string; + timeoutMillis: number; +}; + +export type CaptureConfig = { + includePrompts: boolean; + includeResponses: boolean; + stripToolArgs: boolean; + stripToolResults: boolean; +}; + +export type CorrelationConfig = { + llmOutputGraceMs: number; + recordTtlMs: number; + maxRecordsPerKey: number; +}; + +export type AtifConfig = { + enabled: boolean; + outputDir?: string; + agentName: string; + agentVersion?: string; +}; + +export type NemoFlowPluginHostConfig = { + version: number; + components: unknown[]; + [key: string]: unknown; +}; + +export type NemoFlowHookBackendConfig = { + enabled: boolean; + backend: BackendKind; + nemoFlow: { + pluginConfig: NemoFlowPluginHostConfig; + }; + atif: AtifConfig; + telemetry: { + openInference: TelemetrySinkConfig; + otel: TelemetrySinkConfig; + }; + capture: CaptureConfig; + correlation: CorrelationConfig; +}; + +const DEFAULT_PLUGIN_HOST_CONFIG: NemoFlowPluginHostConfig = { + version: 1, + components: [], +}; + +export const NEMO_FLOW_OPENCLAW_JSON_SCHEMA = manifest.configSchema; + +export const DEFAULT_CONFIG: NemoFlowHookBackendConfig = { + enabled: true, + backend: "hooks", + nemoFlow: { + pluginConfig: DEFAULT_PLUGIN_HOST_CONFIG, + }, + atif: { + enabled: true, + agentName: "openclaw", + }, + telemetry: { + openInference: defaultTelemetrySinkConfig("nemo-flow-openinference"), + otel: defaultTelemetrySinkConfig("nemo-flow-otel"), + }, + capture: { + includePrompts: true, + includeResponses: true, + stripToolArgs: true, + stripToolResults: true, + }, + correlation: { + llmOutputGraceMs: 250, + recordTtlMs: 600_000, + maxRecordsPerKey: 32, + }, +}; + +export const nemoFlowConfigSchema = { + safeParse(value: unknown) { + try { + return { success: true, data: parseConfig(value) }; + } catch (error) { + return { + success: false, + error: { + issues: [ + { + path: [], + message: error instanceof Error ? error.message : String(error), + }, + ], + }, + }; + } + }, + jsonSchema: NEMO_FLOW_OPENCLAW_JSON_SCHEMA, +} satisfies OpenClawPluginConfigSchema; + +export function parseConfig(value: unknown): NemoFlowHookBackendConfig { + const raw = asRecord(value, "config", true); + const backend = optionalString(raw.backend, "backend") ?? DEFAULT_CONFIG.backend; + + if (backend !== "hooks") { + throw new Error(`unsupported nemo-flow backend: ${backend}`); + } + + const atif = asRecord(raw.atif, "atif", true); + const telemetry = asRecord(raw.telemetry, "telemetry", true); + const otel = asRecord(telemetry.otel, "telemetry.otel", true); + const openInference = asRecord(telemetry.openInference, "telemetry.openInference", true); + const capture = asRecord(raw.capture, "capture", true); + const correlation = asRecord(raw.correlation, "correlation", true); + const nemoFlow = asRecord(raw.nemoFlow, "nemoFlow", true); + + return { + enabled: optionalBoolean(raw.enabled, "enabled") ?? DEFAULT_CONFIG.enabled, + backend, + nemoFlow: { + pluginConfig: parsePluginHostConfig(nemoFlow.pluginConfig), + }, + atif: { + enabled: optionalBoolean(atif.enabled, "atif.enabled") ?? DEFAULT_CONFIG.atif.enabled, + agentName: optionalString(atif.agentName, "atif.agentName") ?? DEFAULT_CONFIG.atif.agentName, + ...definedStringProperty("outputDir", optionalString(atif.outputDir, "atif.outputDir")), + ...definedStringProperty( + "agentVersion", + optionalString(atif.agentVersion, "atif.agentVersion"), + ), + }, + telemetry: { + openInference: parseTelemetrySinkConfig( + openInference, + DEFAULT_CONFIG.telemetry.openInference, + "telemetry.openInference", + ), + otel: parseTelemetrySinkConfig(otel, DEFAULT_CONFIG.telemetry.otel, "telemetry.otel"), + }, + capture: { + includePrompts: + optionalBoolean(capture.includePrompts, "capture.includePrompts") ?? + DEFAULT_CONFIG.capture.includePrompts, + includeResponses: + optionalBoolean(capture.includeResponses, "capture.includeResponses") ?? + DEFAULT_CONFIG.capture.includeResponses, + stripToolArgs: + optionalBoolean(capture.stripToolArgs, "capture.stripToolArgs") ?? + DEFAULT_CONFIG.capture.stripToolArgs, + stripToolResults: + optionalBoolean(capture.stripToolResults, "capture.stripToolResults") ?? + DEFAULT_CONFIG.capture.stripToolResults, + }, + correlation: { + llmOutputGraceMs: + optionalNumber(correlation.llmOutputGraceMs, "correlation.llmOutputGraceMs") ?? + DEFAULT_CONFIG.correlation.llmOutputGraceMs, + recordTtlMs: + optionalNumber(correlation.recordTtlMs, "correlation.recordTtlMs") ?? + DEFAULT_CONFIG.correlation.recordTtlMs, + maxRecordsPerKey: + optionalNumber(correlation.maxRecordsPerKey, "correlation.maxRecordsPerKey") ?? + DEFAULT_CONFIG.correlation.maxRecordsPerKey, + }, + }; +} + +function parsePluginHostConfig(value: unknown): NemoFlowPluginHostConfig { + if (value === undefined) { + return clonePluginHostConfig(DEFAULT_PLUGIN_HOST_CONFIG); + } + const record = asRecord(value, "nemoFlow.pluginConfig", false); + const version = optionalNumber(record.version, "nemoFlow.pluginConfig.version") ?? 1; + const components = record.components === undefined ? [] : record.components; + + if (!Array.isArray(components)) { + throw new Error("nemoFlow.pluginConfig.components must be an array"); + } + + return { + ...record, + version, + components: [...components], + }; +} + +function parseTelemetrySinkConfig( + raw: Record, + defaults: TelemetrySinkConfig, + path: string, +): TelemetrySinkConfig { + return { + enabled: optionalBoolean(raw.enabled, `${path}.enabled`) ?? defaults.enabled, + serviceName: optionalString(raw.serviceName, `${path}.serviceName`) ?? defaults.serviceName, + serviceNamespace: + optionalString(raw.serviceNamespace, `${path}.serviceNamespace`) ?? defaults.serviceNamespace, + timeoutMillis: + optionalNumber(raw.timeoutMillis, `${path}.timeoutMillis`) ?? defaults.timeoutMillis, + ...definedStringProperty( + "transport", + optionalString(raw.transport, `${path}.transport`) ?? defaults.transport, + ), + ...definedStringProperty( + "serviceVersion", + optionalString(raw.serviceVersion, `${path}.serviceVersion`) ?? defaults.serviceVersion, + ), + ...definedStringProperty( + "instrumentationScope", + optionalString(raw.instrumentationScope, `${path}.instrumentationScope`) ?? + defaults.instrumentationScope, + ), + ...definedStringProperty("endpoint", optionalString(raw.endpoint, `${path}.endpoint`)), + ...definedRecordProperty("headers", optionalStringRecord(raw.headers, `${path}.headers`)), + ...definedRecordProperty( + "resourceAttributes", + optionalStringRecord(raw.resourceAttributes, `${path}.resourceAttributes`), + ), + }; +} + +function defaultTelemetrySinkConfig(instrumentationScope: string): TelemetrySinkConfig { + return { + enabled: false, + transport: "http_binary", + serviceName: "openclaw-nemo-flow", + serviceNamespace: "nemo-flow", + serviceVersion: "unknown", + instrumentationScope, + timeoutMillis: 3000, + }; +} + +function clonePluginHostConfig(config: NemoFlowPluginHostConfig): NemoFlowPluginHostConfig { + return { + ...config, + components: [...config.components], + }; +} + +function asRecord(value: unknown, path: string, optional: boolean): Record { + if (value === undefined && optional) { + return {}; + } + if (value && typeof value === "object" && !Array.isArray(value)) { + return value as Record; + } + throw new Error(`${path} must be an object`); +} + +function optionalBoolean(value: unknown, path: string): boolean | undefined { + if (value === undefined) { + return undefined; + } + if (typeof value !== "boolean") { + throw new Error(`${path} must be a boolean`); + } + return value; +} + +function optionalNumber(value: unknown, path: string): number | undefined { + if (value === undefined) { + return undefined; + } + if (typeof value !== "number" || !Number.isFinite(value)) { + throw new Error(`${path} must be a finite number`); + } + return value; +} + +function optionalString(value: unknown, path: string): string | undefined { + if (value === undefined) { + return undefined; + } + if (typeof value !== "string") { + throw new Error(`${path} must be a string`); + } + return value; +} + +function optionalStringRecord( + value: unknown, + path: string, +): Record | undefined { + if (value === undefined) { + return undefined; + } + const record = asRecord(value, path, false); + const out: Record = {}; + + for (const [key, item] of Object.entries(record)) { + if (typeof item !== "string") { + throw new Error(`${path}.${key} must be a string`); + } + out[key] = item; + } + + return out; +} + +function definedStringProperty( + key: K, + value: string | undefined, +): Partial> { + return value === undefined ? {} : { [key]: value } as Record; +} + +function definedRecordProperty( + key: K, + value: Record | undefined, +): Partial>> { + return value === undefined ? {} : { [key]: value } as Record>; +} diff --git a/integrations/openclaw/src/health.ts b/integrations/openclaw/src/health.ts new file mode 100644 index 00000000..bcc7a3cc --- /dev/null +++ b/integrations/openclaw/src/health.ts @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +export type HookReplayBackendStatus = + | { state: "not_initialized"; reason?: string } + | { state: "disabled"; reason?: string } + | { state: "ready" } + | { state: "degraded"; reason: string } + | { state: "stopping" } + | { state: "stopped"; reason?: string }; + +export type NemoFlowHealthSnapshot = { + id: "nemo-flow"; + backend: "hooks"; + status: HookReplayBackendStatus; + initializedPluginHost: boolean; +}; + +export function createHealthSnapshot(params: { + status: HookReplayBackendStatus; + initializedPluginHost: boolean; +}): NemoFlowHealthSnapshot { + return { + id: "nemo-flow", + backend: "hooks", + status: params.status, + initializedPluginHost: params.initializedPluginHost, + }; +} diff --git a/integrations/openclaw/src/modules.ts b/integrations/openclaw/src/modules.ts new file mode 100644 index 00000000..739f9f3c --- /dev/null +++ b/integrations/openclaw/src/modules.ts @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +export type ConfigDiagnostic = { + level: "warning" | "error"; + code: string; + component?: string; + field?: string; + message: string; +}; + +export type ConfigReport = { + diagnostics: ConfigDiagnostic[]; +}; + +export type NemoFlowPluginHostModule = { + defaultConfig: () => { version: number; components: unknown[]; [key: string]: unknown }; + validate: (config: { version: number; components: unknown[]; [key: string]: unknown }) => ConfigReport; + initialize: ( + config: { version: number; components: unknown[]; [key: string]: unknown }, + ) => Promise; + clear: () => void; +}; + +export type NemoFlowRuntimeModule = Record; + +export type NemoFlowModules = { + nf: NemoFlowRuntimeModule; + pluginHost: NemoFlowPluginHostModule; +}; + +export type NemoFlowModuleLoader = () => Promise; + +export const defaultNemoFlowModuleLoader: NemoFlowModuleLoader = async () => { + const [nf, pluginHost] = await Promise.all([ + import("nemo-flow-node"), + import("nemo-flow-node/plugin"), + ]); + + return { + nf, + pluginHost: pluginHost as NemoFlowPluginHostModule, + }; +}; diff --git a/integrations/openclaw/src/openclaw-plugin-entry.d.ts b/integrations/openclaw/src/openclaw-plugin-entry.d.ts new file mode 100644 index 00000000..5380afd0 --- /dev/null +++ b/integrations/openclaw/src/openclaw-plugin-entry.d.ts @@ -0,0 +1,53 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +declare module "openclaw/plugin-sdk/plugin-entry" { + export type OpenClawPluginApi = + import("./types.js").OpenClawPluginApiLike; + + export type OpenClawPluginConfigSchema = + import("./types.js").OpenClawPluginConfigSchemaLike; + + export function definePluginEntry(params: { + id: string; + name: string; + description: string; + configSchema?: OpenClawPluginConfigSchema; + register: (api: OpenClawPluginApi) => void; + }): unknown; +} + +declare module "nemo-flow-node" { + const runtimeModule: Record; + export default runtimeModule; +} + +declare module "nemo-flow-node/plugin" { + export type ConfigDiagnostic = { + level: "warning" | "error"; + code: string; + component?: string; + field?: string; + message: string; + }; + + export type ConfigReport = { + diagnostics: ConfigDiagnostic[]; + }; + + export function defaultConfig(): { version: number; components: unknown[]; [key: string]: unknown }; + + export function validate(config: { + version: number; + components: unknown[]; + [key: string]: unknown; + }): ConfigReport; + + export function initialize(config: { + version: number; + components: unknown[]; + [key: string]: unknown; + }): Promise; + + export function clear(): void; +} diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts new file mode 100644 index 00000000..1bdea804 --- /dev/null +++ b/integrations/openclaw/src/runtime-state.ts @@ -0,0 +1,219 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import { parseConfig } from "./config.js"; +import { createHealthSnapshot, type HookReplayBackendStatus } from "./health.js"; +import { + defaultNemoFlowModuleLoader, + type ConfigDiagnostic, + type NemoFlowModules, + type NemoFlowModuleLoader, +} from "./modules.js"; +import type { + OpenClawPluginApiLike, + OpenClawPluginServiceContextLike, + PluginLoggerLike, + RuntimeStateOptions, + StartContext, +} from "./types.js"; + +const PLUGIN_ID = "nemo-flow"; +const SERVICE_ID = "nemo-flow-observability"; +const LIFECYCLE_ID = "nemo-flow-observability-cleanup"; +const STATUS_METHOD = "nemoFlow.status"; + +export class NemoFlowRuntimeState { + private readonly api: OpenClawPluginApiLike; + private readonly moduleLoader: NemoFlowModuleLoader; + private statusValue: HookReplayBackendStatus = { state: "not_initialized" }; + private modulesValue?: NemoFlowModules; + private initializedPluginHost = false; + + constructor(options: RuntimeStateOptions) { + this.api = options.api; + this.moduleLoader = options.moduleLoader ?? defaultNemoFlowModuleLoader; + } + + status(): HookReplayBackendStatus { + return this.statusValue; + } + + health() { + return createHealthSnapshot({ + status: this.statusValue, + initializedPluginHost: this.initializedPluginHost, + }); + } + + async start(ctx: StartContext): Promise { + if (this.statusValue.state === "ready" || this.statusValue.state === "degraded") { + return; + } + + let modules: NemoFlowModules; + try { + modules = await this.moduleLoader(); + this.modulesValue = modules; + } catch (error) { + this.statusValue = { state: "degraded", reason: `failed to load nemo-flow-node: ${toMessage(error)}` }; + ctx.logger.warn?.(this.statusValue.reason); + return; + } + + const { hostConfig, degradedReason } = this.resolvePluginHostConfig(modules, ctx.logger); + if (degradedReason) { + this.statusValue = { state: "degraded", reason: degradedReason }; + } + + const validationReport = validatePluginHostConfig(modules, hostConfig, ctx.logger); + + if (validationReport.diagnostics.some((diagnostic) => diagnostic.level === "error")) { + this.statusValue = { + state: "degraded", + reason: "NeMo Flow plugin host config validation failed", + }; + return; + } + + try { + const activationReport = await modules.pluginHost.initialize(hostConfig); + logDiagnostics(ctx.logger, activationReport.diagnostics); + this.initializedPluginHost = true; + } catch (error) { + this.statusValue = { + state: "degraded", + reason: `failed to initialize NeMo Flow plugin host: ${toMessage(error)}`, + }; + ctx.logger.warn?.(this.statusValue.reason); + return; + } + + if (!degradedReason) { + this.statusValue = { state: "ready" }; + } + } + + async stop(reason: string, logger?: PluginLoggerLike): Promise { + if (this.statusValue.state === "stopped" || this.statusValue.state === "disabled") { + return; + } + + this.statusValue = { state: "stopping" }; + + if (this.initializedPluginHost && this.modulesValue) { + try { + this.modulesValue.pluginHost.clear(); + } catch (error) { + logger?.warn?.(`failed to clear NeMo Flow plugin host: ${toMessage(error)}`); + } + this.initializedPluginHost = false; + } + + this.statusValue = { state: "stopped", reason }; + } + + cleanup(reason: string): Promise { + return this.stop(reason, this.api.logger); + } + + private resolvePluginHostConfig( + modules: NemoFlowModules, + logger: PluginLoggerLike, + ): { + hostConfig: { version: number; components: unknown[]; [key: string]: unknown }; + degradedReason?: string; + } { + const configured = parseConfig(this.api.pluginConfig).nemoFlow.pluginConfig; + + if (configured.components.length === 0) { + return { hostConfig: modules.pluginHost.defaultConfig() }; + } + + const validationReport = validatePluginHostConfig(modules, configured, logger); + const degradedReason = + "nemoFlow.pluginConfig.components is not supported by the hook backend; using default NeMo Flow plugin host config"; + logger.warn?.(degradedReason); + logDiagnostics(logger, validationReport.diagnostics); + return { + hostConfig: modules.pluginHost.defaultConfig(), + degradedReason, + }; + } +} + +export function registerNemoFlowPlugin( + api: OpenClawPluginApiLike, + moduleLoader?: NemoFlowModuleLoader, +): void { + if (api.registrationMode !== "full") { + return; + } + + let config; + try { + config = parseConfig(api.pluginConfig); + } catch (error) { + api.logger.warn?.( + `nemo-flow observability disabled because plugin config is invalid: ${toMessage(error)}`, + ); + return; + } + + if (!config.enabled) { + api.logger.info?.("nemo-flow observability disabled by plugin config"); + return; + } + + const runtime = new NemoFlowRuntimeState( + moduleLoader === undefined ? { api, config } : { api, config, moduleLoader }, + ); + + api.registerService({ + id: SERVICE_ID, + start: (ctx: OpenClawPluginServiceContextLike) => + runtime.start({ + stateDir: ctx.stateDir, + logger: ctx.logger, + resolvePath: api.resolvePath, + agentVersion: config.atif.agentVersion ?? api.version ?? "unknown", + ...(ctx.workspaceDir === undefined ? {} : { workspaceDir: ctx.workspaceDir }), + }), + stop: (ctx: OpenClawPluginServiceContextLike) => runtime.stop("service_stop", ctx.logger), + }); + + api.registerRuntimeLifecycle({ + id: LIFECYCLE_ID, + description: "Clean up NeMo Flow OpenClaw observability plugin state", + cleanup: (ctx) => runtime.cleanup(ctx.reason), + }); + + api.registerGatewayMethod?.(STATUS_METHOD, () => runtime.health(), { + scope: "operator.admin", + }); +} + +function validatePluginHostConfig( + modules: NemoFlowModules, + config: { version: number; components: unknown[]; [key: string]: unknown }, + logger: PluginLoggerLike, +) { + const report = modules.pluginHost.validate(config); + logDiagnostics(logger, report.diagnostics); + return report; +} + +function logDiagnostics(logger: PluginLoggerLike, diagnostics: ConfigDiagnostic[]): void { + for (const diagnostic of diagnostics) { + const prefix = diagnostic.component ? `${diagnostic.component}: ` : ""; + const message = `${prefix}${diagnostic.code}: ${diagnostic.message}`; + if (diagnostic.level === "error") { + logger.warn?.(message); + } else { + logger.info?.(message); + } + } +} + +function toMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} diff --git a/integrations/openclaw/src/types.ts b/integrations/openclaw/src/types.ts new file mode 100644 index 00000000..55bdb47c --- /dev/null +++ b/integrations/openclaw/src/types.ts @@ -0,0 +1,95 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import type { NemoFlowHookBackendConfig } from "./config.js"; +import type { HookReplayBackendStatus, NemoFlowHealthSnapshot } from "./health.js"; +import type { NemoFlowModuleLoader } from "./modules.js"; + +export type JsonPrimitive = string | number | boolean | null; +export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue }; +export type JsonRecord = { [key: string]: JsonValue }; + +export type PluginConfigValidation = + | { ok: true; value?: unknown } + | { ok: false; errors: string[] }; + +export type OpenClawPluginConfigSchemaLike = { + safeParse?: (value: unknown) => { + success: boolean; + data?: unknown; + error?: { + issues?: Array<{ path: Array; message: string }>; + }; + }; + parse?: (value: unknown) => unknown; + validate?: (value: unknown) => PluginConfigValidation; + uiHints?: Record; + jsonSchema?: JsonRecord; +}; + +export type PluginLoggerLike = { + debug?: (message: string) => void; + info?: (message: string) => void; + warn?: (message: string) => void; + error?: (message: string) => void; +}; + +export type OpenClawPluginServiceContextLike = { + stateDir: string; + workspaceDir?: string; + logger: PluginLoggerLike; + config?: unknown; +}; + +export type OpenClawPluginServiceLike = { + id: string; + start: (ctx: OpenClawPluginServiceContextLike) => void | Promise; + stop?: (ctx: OpenClawPluginServiceContextLike) => void | Promise; +}; + +export type OpenClawRuntimeCleanupContextLike = { + reason: string; + sessionKey?: string; + runId?: string; +}; + +export type OpenClawPluginApiLike = { + id: string; + name?: string; + version?: string; + registrationMode: string; + pluginConfig?: Record; + logger: PluginLoggerLike; + resolvePath: (input: string) => string; + registerService: (service: OpenClawPluginServiceLike) => void; + registerRuntimeLifecycle: (lifecycle: { + id: string; + description?: string; + cleanup: (ctx: OpenClawRuntimeCleanupContextLike) => void | Promise; + }) => void; + registerGatewayMethod?: ( + method: string, + handler: () => NemoFlowHealthSnapshot | Promise, + opts?: { scope?: string }, + ) => void; +}; + +export type RuntimeStateOptions = { + api: OpenClawPluginApiLike; + config: NemoFlowHookBackendConfig; + moduleLoader?: NemoFlowModuleLoader; +}; + +export type StartContext = { + stateDir: string; + workspaceDir?: string; + logger: PluginLoggerLike; + resolvePath: (input: string) => string; + agentVersion: string; +}; + +export type RuntimeStateSnapshot = { + status: HookReplayBackendStatus; + initializedPluginHost: boolean; + unavailableReason?: string; +}; diff --git a/integrations/openclaw/tsconfig.json b/integrations/openclaw/tsconfig.json new file mode 100644 index 00000000..46856dc1 --- /dev/null +++ b/integrations/openclaw/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "rootDir": ".", + "outDir": "dist", + "resolveJsonModule": true, + "baseUrl": ".", + "paths": { + "openclaw/plugin-sdk/plugin-entry": ["./src/openclaw-plugin-entry.d.ts"], + "nemo-flow-node": ["./src/openclaw-plugin-entry.d.ts"], + "nemo-flow-node/plugin": ["./src/openclaw-plugin-entry.d.ts"] + }, + "types": ["node"], + "skipLibCheck": false, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true + }, + "include": ["index.ts", "src/**/*.ts", "src/**/*.d.ts"] +} From 5fa14d708adf3a5f6dc38d1fc914421f0e523d90 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Wed, 6 May 2026 17:50:51 -0700 Subject: [PATCH 02/30] feat: add OpenClaw hook replay backend Signed-off-by: mnajafian-nv --- .../openclaw/src/__tests__/config.test.ts | 38 +- .../src/__tests__/hooks-backend.test.ts | 305 ++++++++++++ .../openclaw/src/hook-replay/marks.ts | 82 ++++ .../openclaw/src/hook-replay/session.ts | 287 +++++++++++ integrations/openclaw/src/hooks-backend.ts | 453 ++++++++++++++++++ integrations/openclaw/src/modules.ts | 29 +- .../openclaw/src/openclaw-hook-types.ts | 176 +++++++ integrations/openclaw/src/runtime-state.ts | 92 ++++ integrations/openclaw/src/types.ts | 3 + 9 files changed, 1462 insertions(+), 3 deletions(-) create mode 100644 integrations/openclaw/src/__tests__/hooks-backend.test.ts create mode 100644 integrations/openclaw/src/hook-replay/marks.ts create mode 100644 integrations/openclaw/src/hook-replay/session.ts create mode 100644 integrations/openclaw/src/hooks-backend.ts create mode 100644 integrations/openclaw/src/openclaw-hook-types.ts diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts index 30333b8d..66e1f17c 100644 --- a/integrations/openclaw/src/__tests__/config.test.ts +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -66,6 +66,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); assert.equal(api.calls.gatewayMethods.length, 0); + assert.equal(api.calls.hooks.length, 0); }); it("returns without side effects when disabled", () => { @@ -76,6 +77,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); assert.equal(api.calls.gatewayMethods.length, 0); + assert.equal(api.calls.hooks.length, 0); assert.deepEqual(api.messages.info, ["nemo-flow observability disabled by plugin config"]); }); @@ -87,6 +89,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); assert.equal(api.calls.gatewayMethods.length, 0); + assert.equal(api.calls.hooks.length, 0); assert.match( api.messages.warn[0] ?? "", /nemo-flow observability disabled because plugin config is invalid/, @@ -110,6 +113,24 @@ describe("nemo-flow OpenClaw plugin shell", () => { api.calls.gatewayMethods.map((method) => method.method), ["nemoFlow.status"], ); + assert.deepEqual( + api.calls.hooks.map((hook) => hook.hookName), + [ + "gateway_start", + "gateway_stop", + "session_start", + "session_end", + "llm_input", + "llm_output", + "model_call_started", + "model_call_ended", + "after_tool_call", + "agent_end", + "before_agent_finalize", + "subagent_spawned", + "subagent_ended", + ], + ); }); it("does not statically import nemo-flow-node or OpenClaw private src paths", () => { @@ -129,6 +150,7 @@ type TestApi = OpenClawPluginApiLike & { services: Parameters[0][]; lifecycle: Parameters[0][]; gatewayMethods: Array<{ method: string }>; + hooks: Array<{ hookName: string }>; }; messages: { info: string[]; @@ -145,6 +167,7 @@ function createApi(params: { services: [], lifecycle: [], gatewayMethods: [], + hooks: [], }; const logger: PluginLoggerLike = { info: (message) => messages.info.push(message), @@ -159,6 +182,7 @@ function createApi(params: { resolvePath: (input) => input, registerService: (service) => calls.services.push(service), registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), + on: (hookName) => calls.hooks.push({ hookName }), registerGatewayMethod: (method) => calls.gatewayMethods.push({ method }), calls, messages, @@ -173,7 +197,7 @@ function createApi(params: { function createModules(): NemoFlowModules { return { - nf: {}, + nf: createNemoFlowRuntime(), pluginHost: { defaultConfig: () => ({ version: 1, components: [] }), validate: () => ({ diagnostics: [] }), @@ -182,3 +206,15 @@ function createModules(): NemoFlowModules { }, }; } + +function createNemoFlowRuntime(): NemoFlowModules["nf"] { + return { + ScopeType: { Agent: 0 }, + createScopeStack: () => ({ type: "stack" }), + currentScopeStack: () => ({ type: "previous-stack" }), + setThreadScopeStack: () => {}, + pushScope: () => ({ type: "scope" }), + popScope: () => {}, + event: () => {}, + }; +} diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts new file mode 100644 index 00000000..a7c149ee --- /dev/null +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -0,0 +1,305 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +import { parseConfig } from "../config.js"; +import { HookReplayBackend } from "../hooks-backend.js"; +import type { NemoFlowRuntimeModule } from "../modules.js"; +import type { PluginLoggerLike } from "../types.js"; + +describe("HookReplayBackend", () => { + it("opens a session root and records aliases on session_start", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onSessionStart( + { sessionId: "session-1", sessionKey: "session-key-1", resumedFrom: "previous-session" }, + { sessionId: "session-1", sessionKey: "session-key-1", agentId: "agent-1" }, + ); + + const session = backend.state().sessions.get("session-1"); + assert.ok(session); + assert.equal(session.sessionId, "session-1"); + assert.equal(session.sessionKey, "session-key-1"); + assert.equal(session.agentId, "agent-1"); + assert.equal(session.resumedFrom, "previous-session"); + assert.equal(backend.state().sessionAliases.get("session-key-1"), "session-1"); + assert.equal(nf.calls.pushScope.length, 1); + assert.deepEqual(nf.calls.event.map((event) => event.name), ["openclaw.session_start"]); + }); + + it("emits session_start when a session is created lazily from llm_input", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onLlmInput( + { + runId: "run-1", + sessionId: "lazy-session", + provider: "openai", + model: "gpt", + prompt: "hello", + historyMessages: [], + imagesCount: 0, + }, + { runId: "run-1", sessionId: "lazy-session" }, + ); + + assert.deepEqual(nf.calls.event.map((event) => event.name), ["openclaw.session_start"]); + assert.deepEqual(nf.calls.event[0]?.data, { + sessionId: "lazy-session", + source: "lazy_session", + runId: "run-1", + }); + }); + + it("keeps concurrent sessions isolated by scope handle and alias", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onSessionStart({ sessionId: "a", sessionKey: "ka" }, { sessionId: "a", sessionKey: "ka" }); + backend.onSessionStart({ sessionId: "b", sessionKey: "kb" }, { sessionId: "b", sessionKey: "kb" }); + + const first = backend.state().sessions.get("a"); + const second = backend.state().sessions.get("b"); + assert.ok(first?.rootHandle); + assert.ok(second?.rootHandle); + assert.notEqual(first.rootHandle, second.rootHandle); + assert.equal(backend.state().sessionAliases.get("ka"), "a"); + assert.equal(backend.state().sessionAliases.get("kb"), "b"); + }); + + it("drains before close, emits unpaired timing mark, and evicts session records", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onSessionStart({ sessionId: "session-1" }, { sessionId: "session-1" }); + backend.onLlmInput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt", + prompt: "hello", + historyMessages: [], + imagesCount: 0, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + backend.onLlmOutput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt", + assistantTexts: ["hi"], + }, + { runId: "run-1", sessionId: "session-1" }, + ); + backend.onModelCallEnded( + { + runId: "run-1", + callId: "call-1", + sessionId: "session-1", + provider: "openai", + model: "gpt", + durationMs: 42, + outcome: "completed", + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + backend.onSessionEnd( + { sessionId: "session-1", messageCount: 3, reason: "idle" }, + { sessionId: "session-1" }, + ); + + assert.equal(backend.state().sessions.size, 0); + assert.equal(backend.state().sessionAliases.size, 0); + assert.equal(backend.state().llmInputs.size, 0); + assert.equal(backend.state().llmOutputsPendingInput.size, 0); + assert.equal(backend.state().modelCallsByRun.size, 0); + assert.deepEqual( + nf.calls.event.map((event) => event.name), + [ + "openclaw.session_start", + "openclaw.model_call_timing_unpaired", + "openclaw.session_end", + ], + ); + assert.equal(nf.calls.popScope.length, 1); + }); + + it("emits blocked tool marks from after_tool_call only", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onSessionStart({ sessionId: "session-1", sessionKey: "sk" }, { sessionId: "session-1", sessionKey: "sk" }); + backend.onAfterToolCall( + { + toolName: "dangerous_tool", + params: {}, + toolCallId: "tool-call-1", + result: { details: { status: "blocked", deniedReason: "policy" } }, + durationMs: 5, + }, + { sessionKey: "sk", runId: "run-1", toolName: "dangerous_tool", toolCallId: "tool-call-1" }, + ); + + assert.deepEqual(nf.calls.event.map((event) => event.name), [ + "openclaw.session_start", + "openclaw.tool_blocked", + ]); + assert.deepEqual(nf.calls.event[1]?.data, { + toolName: "dangerous_tool", + toolCallId: "tool-call-1", + runId: "run-1", + blocked: true, + deniedReason: "policy", + durationMs: 5, + }); + }); + + it("safe replay restores the previous scope stack and fails open", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onSessionStart({ sessionId: "session-1" }, { sessionId: "session-1" }); + const session = backend.state().sessions.get("session-1"); + assert.ok(session); + + assert.doesNotThrow(() => { + backend.emitCapturedUnderSession("test_throw", session, () => { + throw new Error("boom"); + }); + }); + + assert.equal(backend.state().counters.replayErrors, 1); + assert.equal(nf.calls.setThreadScopeStack.at(-1), nf.previousStack); + }); + + it("bounds repeated replay warnings by label", () => { + const nf = createNemoFlowRuntime(); + const logger = createLogger(); + const backend = createBackend(nf, logger); + + backend.safeReplay("same_failure", undefined, () => { + throw new Error("first"); + }); + backend.safeReplay("same_failure", undefined, () => { + throw new Error("second"); + }); + + assert.equal(logger.messages.warn.length, 1); + assert.match(logger.messages.warn[0] ?? "", /same_failure/); + assert.equal(backend.state().counters.replayErrors, 2); + }); + + it("returns undefined from before_agent_finalize", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + const result = backend.onBeforeAgentFinalize( + { + runId: "run-1", + sessionId: "session-1", + stopHookActive: false, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + assert.equal(result, undefined); + assert.deepEqual(nf.calls.event.map((event) => event.name), [ + "openclaw.session_start", + "openclaw.before_agent_finalize", + ]); + }); + + it("records subagent marks under the requester alias without merging child session identity", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onSessionStart( + { sessionId: "parent-session", sessionKey: "parent-key" }, + { sessionId: "parent-session", sessionKey: "parent-key" }, + ); + backend.onSubagentSpawned( + { + childSessionKey: "child-key", + agentId: "child-agent", + mode: "run", + threadRequested: false, + runId: "child-run", + }, + { requesterSessionKey: "parent-key", childSessionKey: "child-key", runId: "child-run" }, + ); + + assert.equal(backend.state().sessionAliases.get("child-key"), undefined); + assert.deepEqual(nf.calls.event.map((event) => event.name), [ + "openclaw.session_start", + "openclaw.subagent_spawned", + ]); + }); +}); + +type TestNemoFlowRuntime = NemoFlowRuntimeModule & { + previousStack: { id: "previous" }; + calls: { + pushScope: Array<{ name: string; scopeType: number; data: unknown }>; + popScope: Array<{ handle: unknown; output: unknown }>; + event: Array<{ name: string; handle: unknown; data: unknown }>; + setThreadScopeStack: unknown[]; + }; +}; + +type TestLogger = PluginLoggerLike & { + messages: { + warn: string[]; + }; +}; + +function createBackend(nf: TestNemoFlowRuntime, logger = createLogger()): HookReplayBackend { + return new HookReplayBackend({ + nf, + config: parseConfig(undefined), + logger, + }); +} + +function createLogger(): TestLogger { + const messages: TestLogger["messages"] = { warn: [] }; + return { + messages, + info: () => {}, + warn: (message) => messages.warn.push(message), + }; +} + +function createNemoFlowRuntime(): TestNemoFlowRuntime { + let nextScopeId = 0; + const previousStack = { id: "previous" as const }; + const calls: TestNemoFlowRuntime["calls"] = { + pushScope: [], + popScope: [], + event: [], + setThreadScopeStack: [], + }; + + return { + ScopeType: { Agent: 0 }, + previousStack, + calls, + createScopeStack: () => ({ id: `stack-${nextScopeId++}` }), + currentScopeStack: () => previousStack, + setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), + pushScope: (name, scopeType, _handle, _attributes, data) => { + const handle = { id: `scope-${nextScopeId++}` }; + calls.pushScope.push({ name, scopeType, data }); + return handle; + }, + popScope: (handle, output) => calls.popScope.push({ handle, output }), + event: (name, handle, data) => calls.event.push({ name, handle, data }), + }; +} diff --git a/integrations/openclaw/src/hook-replay/marks.ts b/integrations/openclaw/src/hook-replay/marks.ts new file mode 100644 index 00000000..bad386f4 --- /dev/null +++ b/integrations/openclaw/src/hook-replay/marks.ts @@ -0,0 +1,82 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import type { PluginHookAfterToolCallEvent } from "../openclaw-hook-types.js"; +import type { JsonRecord, JsonValue } from "../types.js"; +import type { HookReplayBackendState, SessionState } from "./session.js"; +import type { NemoFlowRuntimeModule } from "../modules.js"; + +export function emitMark(params: { + nf: NemoFlowRuntimeModule; + state: HookReplayBackendState; + session: SessionState; + name: string; + data: JsonRecord; + timestamp?: number; +}): void { + if (!params.session.rootHandle) { + params.state.counters.skippedEvents += 1; + return; + } + + params.nf.event(params.name, params.session.rootHandle, params.data, null, params.timestamp ?? null); + params.state.counters.marksEmitted += 1; +} + +export function blockedToolDetails( + event: PluginHookAfterToolCallEvent, + context?: { runId?: string | undefined }, +): JsonRecord | undefined { + const details = resultDetails(event.result); + if (details?.status !== "blocked") { + return undefined; + } + + return stripUndefined({ + toolName: event.toolName, + toolCallId: event.toolCallId, + runId: event.runId ?? context?.runId, + blocked: true, + deniedReason: typeof details.deniedReason === "string" ? details.deniedReason : undefined, + durationMs: event.durationMs, + }); +} + +export function toJsonRecord(input: Record): JsonRecord { + return stripUndefined(input); +} + +function resultDetails(result: unknown): Record | undefined { + if (!isRecord(result)) { + return undefined; + } + const details = result.details; + return isRecord(details) ? details : undefined; +} + +function stripUndefined(input: Record): JsonRecord { + const output: JsonRecord = {}; + for (const [key, value] of Object.entries(input)) { + if (value !== undefined) { + output[key] = toJsonValue(value); + } + } + return output; +} + +function toJsonValue(value: unknown): JsonValue { + if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + return value; + } + if (Array.isArray(value)) { + return value.map(toJsonValue); + } + if (isRecord(value)) { + return stripUndefined(value); + } + return String(value); +} + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value); +} diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts new file mode 100644 index 00000000..002fae64 --- /dev/null +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -0,0 +1,287 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import type { NemoFlowHookBackendConfig } from "../config.js"; +import type { PluginHookModelCallEndedEvent } from "../openclaw-hook-types.js"; +import type { JsonRecord, PluginLoggerLike } from "../types.js"; +import type { NemoFlowRuntimeModule } from "../modules.js"; + +export type SessionLookupInput = { + sessionId?: string | undefined; + sessionKey?: string | undefined; + runId?: string | undefined; + childSessionKey?: string | undefined; + requesterSessionKey?: string | undefined; +}; + +export type EnsureSessionInput = SessionLookupInput & { + agentId?: string | undefined; + source: "session_start" | "lazy_session"; + resumedFrom?: string | undefined; +}; + +export type SessionState = { + sessionId: string; + sessionKey?: string; + agentId?: string; + source: "session_start" | "lazy_session"; + resumedFrom?: string; + stack: unknown; + rootHandle?: unknown; +}; + +export type PendingLlmOutputRecord = { + sessionKey: string; + timer?: ReturnType | undefined; +}; + +export type LlmInputRecord = { + sessionKey: string; +}; + +export type ModelCallRecord = { + sessionKey: string; + event: PluginHookModelCallEndedEvent; + consumed: boolean; +}; + +export type HookReplayCounters = { + llmSpansReplayed: number; + toolSpansReplayed: number; + marksEmitted: number; + atifFilesWritten: number; + replayErrors: number; + skippedEvents: number; +}; + +export type HookReplayBackendState = { + sessions: Map; + sessionAliases: Map; + llmInputs: Map; + llmOutputsPendingInput: Map; + modelCallsByRun: Map; + counters: HookReplayCounters; +}; + +export type SessionManager = { + nf: NemoFlowRuntimeModule; + config: NemoFlowHookBackendConfig; + logger: PluginLoggerLike; + state: HookReplayBackendState; + emitCapturedUnderSession: (label: string, session: SessionState, emit: () => void) => void; + replayPendingLlmOutputsForSession: ( + session: SessionState, + options: { allowPlaceholderRequest: boolean }, + ) => void; + emitUnpairedModelCallTimingMarks: (session: SessionState) => void; + logBoundedWarn: (key: string, message: string) => void; +}; + +export function lookupSessionKeys(input: SessionLookupInput): string[] { + return [input.sessionId, input.sessionKey, input.requesterSessionKey, input.childSessionKey, input.runId].filter( + (value): value is string => typeof value === "string" && value.length > 0, + ); +} + +export function aliasSessionKeys(input: SessionLookupInput): string[] { + return [input.sessionId, input.sessionKey, input.requesterSessionKey, input.runId].filter( + (value): value is string => typeof value === "string" && value.length > 0, + ); +} + +export function resolveSessionKey( + state: HookReplayBackendState, + input: SessionLookupInput, +): string | undefined { + for (const key of lookupSessionKeys(input)) { + const canonical = state.sessionAliases.get(key); + if (canonical) { + return canonical; + } + } + + return input.sessionId ?? input.sessionKey ?? input.runId; +} + +export function rememberSessionAliases( + state: HookReplayBackendState, + session: SessionState, + input: SessionLookupInput, +): void { + for (const alias of aliasSessionKeys(input)) { + state.sessionAliases.set(alias, session.sessionId); + } +} + +export function createHookReplayState(): HookReplayBackendState { + return { + sessions: new Map(), + sessionAliases: new Map(), + llmInputs: new Map(), + llmOutputsPendingInput: new Map(), + modelCallsByRun: new Map(), + counters: { + llmSpansReplayed: 0, + toolSpansReplayed: 0, + marksEmitted: 0, + atifFilesWritten: 0, + replayErrors: 0, + skippedEvents: 0, + }, + }; +} + +export function ensureSession(manager: SessionManager, input: EnsureSessionInput): SessionState | undefined { + const key = resolveSessionKey(manager.state, input); + if (!key) { + manager.state.counters.skippedEvents += 1; + manager.logBoundedWarn("missing-session-key", "nemo-flow skipped replay because no session/run key was available"); + return undefined; + } + + const existing = manager.state.sessions.get(key); + if (existing) { + rememberSessionAliases(manager.state, existing, input); + return existing; + } + + const canonicalSessionId = input.sessionId ?? key; + const aliased = manager.state.sessions.get(canonicalSessionId); + if (aliased) { + rememberSessionAliases(manager.state, aliased, input); + return aliased; + } + + const stack = manager.nf.createScopeStack(); + const session: SessionState = { + sessionId: canonicalSessionId, + source: input.source, + stack, + }; + + if (input.sessionKey !== undefined) { + session.sessionKey = input.sessionKey; + } + if (input.agentId !== undefined) { + session.agentId = input.agentId; + } + if (input.resumedFrom !== undefined) { + session.resumedFrom = input.resumedFrom; + } + + openSessionRoot(manager, session, input); + manager.state.sessions.set(session.sessionId, session); + rememberSessionAliases(manager.state, session, input); + return session; +} + +export function drainSession(manager: SessionManager, session: SessionState): void { + cancelPendingLlmOutputTimers(manager.state, session); + manager.replayPendingLlmOutputsForSession(session, { allowPlaceholderRequest: true }); + manager.emitUnpairedModelCallTimingMarks(session); + evictSessionCorrelationRecords(manager.state, session); +} + +export function closeSessionRoot( + manager: SessionManager, + session: SessionState, + summary: JsonRecord, + timestamp?: number, +): void { + manager.emitCapturedUnderSession("session_end", session, () => { + if (!session.rootHandle) { + return; + } + + manager.nf.event("openclaw.session_end", session.rootHandle, summary, null, timestamp ?? null); + manager.state.counters.marksEmitted += 1; + manager.nf.popScope(session.rootHandle, summary, timestamp ?? null); + session.rootHandle = undefined; + }); +} + +export function deleteSession(state: HookReplayBackendState, session: SessionState): void { + state.sessions.delete(session.sessionId); +} + +export function insertBoundedRecord( + map: Map, + key: string, + record: T, + maxRecordsPerKey: number, +): void { + const records = map.get(key) ?? []; + records.push(record); + while (records.length > maxRecordsPerKey) { + records.shift(); + } + map.set(key, records); +} + +export function tupleKey(parts: Array): string { + return JSON.stringify(parts.map((part) => (typeof part === "string" && part.length > 0 ? part : null))); +} + +function openSessionRoot(manager: SessionManager, session: SessionState, input: EnsureSessionInput): void { + const data: JsonRecord = { + sessionId: session.sessionId, + source: session.source, + ...(session.sessionKey === undefined ? {} : { sessionKey: session.sessionKey }), + ...(session.agentId === undefined ? {} : { agentId: session.agentId }), + ...(input.runId === undefined ? {} : { runId: input.runId }), + ...(session.resumedFrom === undefined ? {} : { resumedFrom: session.resumedFrom }), + }; + + manager.emitCapturedUnderSession("session_start", session, () => { + session.rootHandle = manager.nf.pushScope( + "openclaw.session", + agentScopeType(manager.nf), + null, + null, + data, + null, + null, + null, + ); + manager.nf.event("openclaw.session_start", session.rootHandle, data, null, null); + manager.state.counters.marksEmitted += 1; + }); +} + +function cancelPendingLlmOutputTimers(state: HookReplayBackendState, session: SessionState): void { + for (const records of state.llmOutputsPendingInput.values()) { + for (const record of records) { + if (record.sessionKey === session.sessionId && record.timer) { + clearTimeout(record.timer); + record.timer = undefined; + } + } + } +} + +function evictSessionCorrelationRecords(state: HookReplayBackendState, session: SessionState): void { + evictFromRecordMap(state.llmInputs, session.sessionId); + evictFromRecordMap(state.llmOutputsPendingInput, session.sessionId); + evictFromRecordMap(state.modelCallsByRun, session.sessionId); + + for (const [alias, canonical] of state.sessionAliases) { + if (canonical === session.sessionId || alias === session.sessionId) { + state.sessionAliases.delete(alias); + } + } +} + +function evictFromRecordMap(map: Map, sessionKey: string): void { + for (const [key, records] of map) { + const retained = records.filter((record) => record.sessionKey !== sessionKey); + if (retained.length === 0) { + map.delete(key); + } else { + map.set(key, retained); + } + } +} + +function agentScopeType(nf: NemoFlowRuntimeModule): number { + return nf.ScopeType?.Agent ?? 0; +} diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts new file mode 100644 index 00000000..66f11d34 --- /dev/null +++ b/integrations/openclaw/src/hooks-backend.ts @@ -0,0 +1,453 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import type { NemoFlowHookBackendConfig } from "./config.js"; +import { emitMark, blockedToolDetails, toJsonRecord } from "./hook-replay/marks.js"; +import { + createHookReplayState, + drainSession, + closeSessionRoot, + deleteSession, + ensureSession, + insertBoundedRecord, + resolveSessionKey, + tupleKey, + type HookReplayBackendState, + type SessionState, +} from "./hook-replay/session.js"; +import type { NemoFlowRuntimeModule } from "./modules.js"; +import type { + PluginHookAfterToolCallEvent, + PluginHookAgentContext, + PluginHookAgentEndEvent, + PluginHookBeforeAgentFinalizeEvent, + PluginHookGatewayContext, + PluginHookGatewayStartEvent, + PluginHookGatewayStopEvent, + PluginHookLlmInputEvent, + PluginHookLlmOutputEvent, + PluginHookModelCallEndedEvent, + PluginHookModelCallStartedEvent, + PluginHookSessionContext, + PluginHookSessionEndEvent, + PluginHookSessionStartEvent, + PluginHookSubagentContext, + PluginHookSubagentEndedEvent, + PluginHookSubagentSpawnedEvent, + PluginHookToolContext, +} from "./openclaw-hook-types.js"; +import type { JsonRecord, PluginLoggerLike } from "./types.js"; + +export type HookReplayBackendOptions = { + nf: NemoFlowRuntimeModule; + config: NemoFlowHookBackendConfig; + logger: PluginLoggerLike; +}; + +export class HookReplayBackend { + private readonly nf: NemoFlowRuntimeModule; + private readonly config: NemoFlowHookBackendConfig; + private readonly logger: PluginLoggerLike; + private readonly stateValue = createHookReplayState(); + private readonly warningCounts = new Map(); + + constructor(options: HookReplayBackendOptions) { + this.nf = options.nf; + this.config = options.config; + this.logger = options.logger; + } + + state(): HookReplayBackendState { + return this.stateValue; + } + + onGatewayStart(_event: PluginHookGatewayStartEvent, _ctx: PluginHookGatewayContext): void { + // Gateway events have no session root in the hook backend. Keep this hook + // registered so later telemetry lifecycle can attach without changing the shell. + } + + onGatewayStop(event: PluginHookGatewayStopEvent, _ctx: PluginHookGatewayContext): void { + this.closeAllSessions({ reason: event.reason ?? "gateway_stop" }); + } + + onSessionStart(event: PluginHookSessionStartEvent, ctx: PluginHookSessionContext): void { + this.ensureSession({ + sessionId: event.sessionId, + sessionKey: event.sessionKey ?? ctx.sessionKey, + agentId: ctx.agentId, + source: "session_start", + resumedFrom: event.resumedFrom, + }); + + // ensureSession opens the root scope and emits openclaw.session_start for both explicit and lazy sessions. + } + + onSessionEnd(event: PluginHookSessionEndEvent, ctx: PluginHookSessionContext): void { + const session = this.ensureSession({ + sessionId: event.sessionId, + sessionKey: event.sessionKey ?? ctx.sessionKey, + agentId: ctx.agentId, + source: "lazy_session", + }); + + if (!session) { + return; + } + + this.closeSession(session, sessionEndSummary(event)); + } + + onLlmInput(event: PluginHookLlmInputEvent, ctx: PluginHookAgentContext): void { + const session = this.ensureSession({ + sessionId: event.sessionId, + sessionKey: ctx.sessionKey, + runId: event.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + + if (!session) { + return; + } + + insertBoundedRecord( + this.stateValue.llmInputs, + llmKey(event), + { sessionKey: session.sessionId }, + this.config.correlation.maxRecordsPerKey, + ); + } + + onLlmOutput(event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void { + const session = this.ensureSession({ + sessionId: event.sessionId, + sessionKey: ctx.sessionKey, + runId: event.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + + if (!session) { + return; + } + + insertBoundedRecord( + this.stateValue.llmOutputsPendingInput, + llmKey(event), + { sessionKey: session.sessionId }, + this.config.correlation.maxRecordsPerKey, + ); + } + + onModelCallStarted(_event: PluginHookModelCallStartedEvent, _ctx: PluginHookAgentContext): void { + // Phase 2 records completed model timing only. Full timing enrichment lands with LLM replay in Phase 4. + } + + onModelCallEnded(event: PluginHookModelCallEndedEvent, ctx: PluginHookAgentContext): void { + const session = this.ensureSession({ + sessionId: event.sessionId ?? ctx.sessionId, + sessionKey: event.sessionKey ?? ctx.sessionKey, + runId: event.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + + if (!session) { + return; + } + + insertBoundedRecord( + this.stateValue.modelCallsByRun, + tupleKey([session.sessionId, event.runId, event.provider, event.model]), + { sessionKey: session.sessionId, event, consumed: false }, + this.config.correlation.maxRecordsPerKey, + ); + } + + onAfterToolCall(event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void { + const session = this.ensureSession({ + sessionId: ctx.sessionId, + sessionKey: ctx.sessionKey, + runId: event.runId ?? ctx.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + + const details = blockedToolDetails(event, { runId: ctx.runId }); + if (session && details) { + this.emitSessionMark("openclaw.tool_blocked", session, details); + } + } + + onAgentEnd(event: PluginHookAgentEndEvent, ctx: PluginHookAgentContext): void { + const session = this.ensureSession({ + sessionId: ctx.sessionId, + sessionKey: ctx.sessionKey, + runId: event.runId ?? ctx.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + + if (!session) { + return; + } + + this.emitSessionMark( + "openclaw.agent_end", + session, + toJsonRecord({ + runId: event.runId ?? ctx.runId, + success: event.success, + error: event.error, + durationMs: event.durationMs, + messageCount: event.messages.length, + }), + ); + } + + onBeforeAgentFinalize(event: PluginHookBeforeAgentFinalizeEvent, ctx: PluginHookAgentContext): void { + const session = this.ensureSession({ + sessionId: event.sessionId, + sessionKey: event.sessionKey ?? ctx.sessionKey, + runId: event.runId ?? ctx.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + + if (!session) { + return; + } + + this.emitSessionMark( + "openclaw.before_agent_finalize", + session, + toJsonRecord({ + runId: event.runId ?? ctx.runId, + turnId: event.turnId, + provider: event.provider, + model: event.model, + cwd: event.cwd, + transcriptPath: event.transcriptPath, + stopHookActive: event.stopHookActive, + messageCount: event.messages?.length, + }), + ); + } + + onSubagentSpawned(event: PluginHookSubagentSpawnedEvent, ctx: PluginHookSubagentContext): void { + const session = + this.ensureSession({ + requesterSessionKey: ctx.requesterSessionKey, + source: "lazy_session", + }) ?? + this.ensureSession({ + childSessionKey: ctx.childSessionKey ?? event.childSessionKey, + runId: ctx.runId ?? event.runId, + agentId: event.agentId, + source: "lazy_session", + }); + + if (!session) { + return; + } + + this.emitSessionMark( + "openclaw.subagent_spawned", + session, + toJsonRecord({ + runId: event.runId, + childSessionKey: event.childSessionKey, + agentId: event.agentId, + label: event.label, + mode: event.mode, + threadRequested: event.threadRequested, + }), + ); + } + + onSubagentEnded(event: PluginHookSubagentEndedEvent, ctx: PluginHookSubagentContext): void { + const session = + this.ensureSession({ + requesterSessionKey: ctx.requesterSessionKey, + source: "lazy_session", + }) ?? + this.ensureSession({ + childSessionKey: ctx.childSessionKey ?? event.targetSessionKey, + runId: ctx.runId ?? event.runId, + source: "lazy_session", + }); + + if (!session) { + return; + } + + this.emitSessionMark( + "openclaw.subagent_ended", + session, + toJsonRecord({ + runId: event.runId ?? ctx.runId, + targetSessionKey: event.targetSessionKey, + targetKind: event.targetKind, + reason: event.reason, + outcome: event.outcome, + error: event.error, + endedAt: event.endedAt, + sendFarewell: event.sendFarewell, + accountId: event.accountId, + }), + ); + } + + stop(reason: string): void { + this.closeAllSessions({ reason }); + } + + safeReplay(label: string, session: SessionState | undefined, emit: () => void): void { + try { + emit(); + } catch (error) { + this.stateValue.counters.replayErrors += 1; + this.logBoundedWarn( + `safe-replay:${label}`, + `nemo-flow replay failed: label=${label} session=${session?.sessionId ?? "unknown"} error=${toMessage(error)}`, + ); + } + } + + emitCapturedUnderSession(label: string, session: SessionState, emit: () => void): void { + this.safeReplay(label, session, () => { + const previousStack = this.nf.currentScopeStack(); + try { + this.nf.setThreadScopeStack(session.stack); + this.withAtifCapture(session, emit); + } finally { + this.nf.setThreadScopeStack(previousStack); + } + }); + } + + replayPendingLlmOutputsForSession(_session: SessionState, _options: { allowPlaceholderRequest: boolean }): void { + // Phase 4 replaces this extension point with real llmCall/llmCallEnd replay. + } + + emitUnpairedModelCallTimingMarks(session: SessionState): void { + for (const records of this.stateValue.modelCallsByRun.values()) { + for (const record of records) { + if (record.sessionKey !== session.sessionId || record.consumed) { + continue; + } + + this.emitSessionMark( + "openclaw.model_call_timing_unpaired", + session, + toJsonRecord({ + runId: record.event.runId, + callId: record.event.callId, + provider: record.event.provider, + model: record.event.model, + api: record.event.api, + transport: record.event.transport, + durationMs: record.event.durationMs, + outcome: record.event.outcome, + errorCategory: record.event.errorCategory, + failureKind: record.event.failureKind, + requestPayloadBytes: record.event.requestPayloadBytes, + responseStreamBytes: record.event.responseStreamBytes, + timeToFirstByteMs: record.event.timeToFirstByteMs, + upstreamRequestIdHash: record.event.upstreamRequestIdHash, + }), + ); + record.consumed = true; + } + } + } + + private ensureSession(input: Parameters[1]): SessionState | undefined { + return ensureSession(this.sessionManager(), input); + } + + private closeSession(session: SessionState, summary: JsonRecord): void { + drainSession(this.sessionManager(), session); + closeSessionRoot(this.sessionManager(), session, summary); + deleteSession(this.stateValue, session); + } + + private emitSessionMark(name: string, session: SessionState, data: JsonRecord): void { + this.emitCapturedUnderSession(name, session, () => { + emitMark({ + nf: this.nf, + state: this.stateValue, + session, + name, + data, + }); + }); + } + + private closeAllSessions(summary: JsonRecord): void { + for (const session of [...this.stateValue.sessions.values()]) { + this.closeSession(session, summary); + } + } + + private withAtifCapture(_session: SessionState, emit: () => void): void { + emit(); + } + + private sessionManager() { + return { + nf: this.nf, + config: this.config, + logger: this.logger, + state: this.stateValue, + emitCapturedUnderSession: (label: string, session: SessionState, emit: () => void) => + this.emitCapturedUnderSession(label, session, emit), + replayPendingLlmOutputsForSession: (session: SessionState, options: { allowPlaceholderRequest: boolean }) => + this.replayPendingLlmOutputsForSession(session, options), + emitUnpairedModelCallTimingMarks: (session: SessionState) => this.emitUnpairedModelCallTimingMarks(session), + logBoundedWarn: (key: string, message: string) => this.logBoundedWarn(key, message), + }; + } + + private logBoundedWarn(key: string, message: string): void { + const count = this.warningCounts.get(key) ?? 0; + this.warningCounts.set(key, count + 1); + if (count === 0) { + this.logger.warn?.(message); + } + } +} + +export function llmKey(input: { + sessionId?: string; + runId?: string; + provider?: string; + model?: string; +}): string { + return tupleKey([input.sessionId, input.runId, input.provider, input.model]); +} + +export function resolveBackendSessionKey( + state: HookReplayBackendState, + input: Parameters[1], +): string | undefined { + return resolveSessionKey(state, input); +} + +function sessionEndSummary(event: PluginHookSessionEndEvent): JsonRecord { + return toJsonRecord({ + sessionId: event.sessionId, + sessionKey: event.sessionKey, + messageCount: event.messageCount, + durationMs: event.durationMs, + reason: event.reason, + sessionFile: event.sessionFile, + transcriptArchived: event.transcriptArchived, + nextSessionId: event.nextSessionId, + nextSessionKey: event.nextSessionKey, + }); +} + +function toMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} diff --git a/integrations/openclaw/src/modules.ts b/integrations/openclaw/src/modules.ts index 739f9f3c..807ed772 100644 --- a/integrations/openclaw/src/modules.ts +++ b/integrations/openclaw/src/modules.ts @@ -22,7 +22,32 @@ export type NemoFlowPluginHostModule = { clear: () => void; }; -export type NemoFlowRuntimeModule = Record; +export type NemoFlowRuntimeModule = { + ScopeType?: { + Agent?: number; + }; + createScopeStack: () => unknown; + currentScopeStack: () => unknown; + setThreadScopeStack: (stack: unknown) => void; + pushScope: ( + name: string, + scopeType: number, + handle?: unknown | null, + attributes?: number | null, + data?: unknown, + metadata?: unknown, + input?: unknown, + timestamp?: number | null, + ) => unknown; + popScope: (handle: unknown, output?: unknown, timestamp?: number | null) => void; + event: ( + name: string, + handle?: unknown | null, + data?: unknown, + metadata?: unknown, + timestamp?: number | null, + ) => void; +}; export type NemoFlowModules = { nf: NemoFlowRuntimeModule; @@ -38,7 +63,7 @@ export const defaultNemoFlowModuleLoader: NemoFlowModuleLoader = async () => { ]); return { - nf, + nf: nf as unknown as NemoFlowRuntimeModule, pluginHost: pluginHost as NemoFlowPluginHostModule, }; }; diff --git a/integrations/openclaw/src/openclaw-hook-types.ts b/integrations/openclaw/src/openclaw-hook-types.ts new file mode 100644 index 00000000..ce26802b --- /dev/null +++ b/integrations/openclaw/src/openclaw-hook-types.ts @@ -0,0 +1,176 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +export type PluginHookAgentContext = { + runId?: string; + agentId?: string; + sessionKey?: string; + sessionId?: string; + workspaceDir?: string; + modelProviderId?: string; + modelId?: string; +}; + +export type PluginHookToolContext = { + agentId?: string; + sessionKey?: string; + sessionId?: string; + runId?: string; + toolName?: string; + toolCallId?: string; +}; + +export type PluginHookSessionContext = { + agentId?: string; + sessionId: string; + sessionKey?: string; +}; + +export type PluginHookLlmInputEvent = { + runId: string; + sessionId: string; + provider: string; + model: string; + systemPrompt?: string; + prompt: string; + historyMessages: unknown[]; + imagesCount: number; +}; + +export type PluginHookLlmOutputEvent = { + runId: string; + sessionId: string; + provider: string; + model: string; + resolvedRef?: string; + harnessId?: string; + assistantTexts: string[]; + lastAssistant?: unknown; + usage?: { + input?: number; + output?: number; + cacheRead?: number; + cacheWrite?: number; + total?: number; + }; +}; + +export type PluginHookModelCallStartedEvent = { + runId: string; + callId: string; + sessionKey?: string; + sessionId?: string; + provider: string; + model: string; + api?: string; + transport?: string; +}; + +export type PluginHookModelCallEndedEvent = PluginHookModelCallStartedEvent & { + durationMs: number; + outcome: "completed" | "error"; + errorCategory?: string; + failureKind?: "aborted" | "connection_closed" | "connection_reset" | "terminated" | "timeout"; + requestPayloadBytes?: number; + responseStreamBytes?: number; + timeToFirstByteMs?: number; + upstreamRequestIdHash?: string; +}; + +export type PluginHookAfterToolCallEvent = { + toolName: string; + params: Record; + runId?: string; + toolCallId?: string; + result?: unknown; + error?: string; + durationMs?: number; +}; + +export type PluginHookSessionStartEvent = { + sessionId: string; + sessionKey?: string; + resumedFrom?: string; +}; + +export type PluginHookSessionEndEvent = { + sessionId: string; + sessionKey?: string; + messageCount: number; + durationMs?: number; + reason?: "new" | "reset" | "idle" | "daily" | "compaction" | "deleted" | "unknown"; + sessionFile?: string; + transcriptArchived?: boolean; + nextSessionId?: string; + nextSessionKey?: string; +}; + +export type PluginHookAgentEndEvent = { + runId?: string; + messages: unknown[]; + success: boolean; + error?: string; + durationMs?: number; +}; + +export type PluginHookBeforeAgentFinalizeEvent = { + runId?: string; + sessionId: string; + sessionKey?: string; + turnId?: string; + provider?: string; + model?: string; + cwd?: string; + transcriptPath?: string; + stopHookActive: boolean; + lastAssistantMessage?: string; + messages?: unknown[]; +}; + +export type PluginHookSubagentContext = { + runId?: string; + childSessionKey?: string; + requesterSessionKey?: string; +}; + +export type PluginHookSubagentSpawnedEvent = { + childSessionKey: string; + agentId: string; + label?: string; + mode: "run" | "session"; + requester?: { + channel?: string; + accountId?: string; + to?: string; + threadId?: string | number; + }; + threadRequested: boolean; + runId: string; +}; + +export type PluginHookSubagentEndedEvent = { + targetSessionKey: string; + targetKind: "subagent" | "acp"; + reason: string; + sendFarewell?: boolean; + accountId?: string; + runId?: string; + endedAt?: number; + outcome?: "ok" | "error" | "timeout" | "killed" | "reset" | "deleted"; + error?: string; +}; + +export type PluginHookGatewayStartEvent = { + port: number; +}; + +export type PluginHookGatewayStopEvent = { + reason?: string; +}; + +export type PluginHookGatewayContext = { + port?: number; + config?: unknown; + workspaceDir?: string; + getCron?: () => unknown; +}; diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index 1bdea804..75e42ae5 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -3,14 +3,36 @@ import { parseConfig } from "./config.js"; import { createHealthSnapshot, type HookReplayBackendStatus } from "./health.js"; +import { HookReplayBackend } from "./hooks-backend.js"; import { defaultNemoFlowModuleLoader, type ConfigDiagnostic, type NemoFlowModules, type NemoFlowModuleLoader, } from "./modules.js"; +import type { + PluginHookAfterToolCallEvent, + PluginHookAgentContext, + PluginHookAgentEndEvent, + PluginHookBeforeAgentFinalizeEvent, + PluginHookGatewayContext, + PluginHookGatewayStartEvent, + PluginHookGatewayStopEvent, + PluginHookLlmInputEvent, + PluginHookLlmOutputEvent, + PluginHookModelCallEndedEvent, + PluginHookModelCallStartedEvent, + PluginHookSessionContext, + PluginHookSessionEndEvent, + PluginHookSessionStartEvent, + PluginHookSubagentContext, + PluginHookSubagentEndedEvent, + PluginHookSubagentSpawnedEvent, + PluginHookToolContext, +} from "./openclaw-hook-types.js"; import type { OpenClawPluginApiLike, + OpenClawHookHandlerLike, OpenClawPluginServiceContextLike, PluginLoggerLike, RuntimeStateOptions, @@ -27,6 +49,7 @@ export class NemoFlowRuntimeState { private readonly moduleLoader: NemoFlowModuleLoader; private statusValue: HookReplayBackendStatus = { state: "not_initialized" }; private modulesValue?: NemoFlowModules; + private backendValue: HookReplayBackend | undefined; private initializedPluginHost = false; constructor(options: RuntimeStateOptions) { @@ -91,6 +114,12 @@ export class NemoFlowRuntimeState { if (!degradedReason) { this.statusValue = { state: "ready" }; } + + this.backendValue = new HookReplayBackend({ + nf: modules.nf, + config: parseConfig(this.api.pluginConfig), + logger: ctx.logger, + }); } async stop(reason: string, logger?: PluginLoggerLike): Promise { @@ -109,6 +138,9 @@ export class NemoFlowRuntimeState { this.initializedPluginHost = false; } + this.backendValue?.stop(reason); + this.backendValue = undefined; + this.statusValue = { state: "stopped", reason }; } @@ -116,6 +148,64 @@ export class NemoFlowRuntimeState { return this.stop(reason, this.api.logger); } + registerHooks(): void { + const dispatch = ( + hookName: string, + handler: (backend: HookReplayBackend, event: unknown, ctx: unknown) => void, + ): void => { + this.api.on(hookName, ((event: unknown, ctx: unknown) => { + const backend = this.backendValue; + if (!backend) { + return; + } + backend.safeReplay(hookName, undefined, () => handler(backend, event, ctx)); + }) as OpenClawHookHandlerLike); + }; + + dispatch("gateway_start", (backend, event, ctx) => + backend.onGatewayStart(event as PluginHookGatewayStartEvent, ctx as PluginHookGatewayContext), + ); + dispatch("gateway_stop", (backend, event, ctx) => + backend.onGatewayStop(event as PluginHookGatewayStopEvent, ctx as PluginHookGatewayContext), + ); + dispatch("session_start", (backend, event, ctx) => + backend.onSessionStart(event as PluginHookSessionStartEvent, ctx as PluginHookSessionContext), + ); + dispatch("session_end", (backend, event, ctx) => + backend.onSessionEnd(event as PluginHookSessionEndEvent, ctx as PluginHookSessionContext), + ); + dispatch("llm_input", (backend, event, ctx) => + backend.onLlmInput(event as PluginHookLlmInputEvent, ctx as PluginHookAgentContext), + ); + dispatch("llm_output", (backend, event, ctx) => + backend.onLlmOutput(event as PluginHookLlmOutputEvent, ctx as PluginHookAgentContext), + ); + dispatch("model_call_started", (backend, event, ctx) => + backend.onModelCallStarted(event as PluginHookModelCallStartedEvent, ctx as PluginHookAgentContext), + ); + dispatch("model_call_ended", (backend, event, ctx) => + backend.onModelCallEnded(event as PluginHookModelCallEndedEvent, ctx as PluginHookAgentContext), + ); + dispatch("after_tool_call", (backend, event, ctx) => + backend.onAfterToolCall(event as PluginHookAfterToolCallEvent, ctx as PluginHookToolContext), + ); + dispatch("agent_end", (backend, event, ctx) => + backend.onAgentEnd(event as PluginHookAgentEndEvent, ctx as PluginHookAgentContext), + ); + dispatch("before_agent_finalize", (backend, event, ctx) => + backend.onBeforeAgentFinalize( + event as PluginHookBeforeAgentFinalizeEvent, + ctx as PluginHookAgentContext, + ), + ); + dispatch("subagent_spawned", (backend, event, ctx) => + backend.onSubagentSpawned(event as PluginHookSubagentSpawnedEvent, ctx as PluginHookSubagentContext), + ); + dispatch("subagent_ended", (backend, event, ctx) => + backend.onSubagentEnded(event as PluginHookSubagentEndedEvent, ctx as PluginHookSubagentContext), + ); + } + private resolvePluginHostConfig( modules: NemoFlowModules, logger: PluginLoggerLike, @@ -190,6 +280,8 @@ export function registerNemoFlowPlugin( api.registerGatewayMethod?.(STATUS_METHOD, () => runtime.health(), { scope: "operator.admin", }); + + runtime.registerHooks(); } function validatePluginHostConfig( diff --git a/integrations/openclaw/src/types.ts b/integrations/openclaw/src/types.ts index 55bdb47c..01aa3071 100644 --- a/integrations/openclaw/src/types.ts +++ b/integrations/openclaw/src/types.ts @@ -47,6 +47,8 @@ export type OpenClawPluginServiceLike = { stop?: (ctx: OpenClawPluginServiceContextLike) => void | Promise; }; +export type OpenClawHookHandlerLike = (event: unknown, ctx: unknown) => void | Promise; + export type OpenClawRuntimeCleanupContextLike = { reason: string; sessionKey?: string; @@ -67,6 +69,7 @@ export type OpenClawPluginApiLike = { description?: string; cleanup: (ctx: OpenClawRuntimeCleanupContextLike) => void | Promise; }) => void; + on: (hookName: string, handler: OpenClawHookHandlerLike, opts?: { priority?: number; timeoutMs?: number }) => void; registerGatewayMethod?: ( method: string, handler: () => NemoFlowHealthSnapshot | Promise, From 7f6c457bfbf060e2a50ea1462ee6d0dacb77f3c5 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Wed, 6 May 2026 20:58:17 -0700 Subject: [PATCH 03/30] feat: align OpenClaw hook backend lifecycle Signed-off-by: mnajafian-nv --- integrations/openclaw/openclaw.plugin.json | 12 +- .../openclaw/src/__tests__/config.test.ts | 151 ++++++++++++++++-- .../src/__tests__/hooks-backend.test.ts | 66 +++++++- integrations/openclaw/src/config.ts | 30 +++- .../openclaw/src/hook-replay/marks.ts | 40 ++++- .../openclaw/src/hook-replay/session.ts | 13 +- integrations/openclaw/src/hooks-backend.ts | 41 ++++- integrations/openclaw/src/modules.ts | 56 +++++++ integrations/openclaw/src/runtime-state.ts | 141 +++++++++++----- 9 files changed, 476 insertions(+), 74 deletions(-) diff --git a/integrations/openclaw/openclaw.plugin.json b/integrations/openclaw/openclaw.plugin.json index abe1fe08..3ac51a67 100644 --- a/integrations/openclaw/openclaw.plugin.json +++ b/integrations/openclaw/openclaw.plugin.json @@ -88,15 +88,18 @@ "additionalProperties": false, "properties": { "llmOutputGraceMs": { - "type": "number", + "type": "integer", + "minimum": 0, "default": 250 }, "recordTtlMs": { - "type": "number", + "type": "integer", + "minimum": 0, "default": 600000 }, "maxRecordsPerKey": { - "type": "number", + "type": "integer", + "minimum": 1, "default": 32 } } @@ -147,7 +150,8 @@ "type": "string" }, "timeoutMillis": { - "type": "number", + "type": "integer", + "minimum": 0, "default": 3000 } } diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts index 66e1f17c..f4bd67d1 100644 --- a/integrations/openclaw/src/__tests__/config.test.ts +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -12,7 +12,7 @@ import { } from "../config.js"; import type { NemoFlowModules } from "../modules.js"; import { registerNemoFlowPlugin } from "../runtime-state.js"; -import type { OpenClawPluginApiLike, PluginLoggerLike } from "../types.js"; +import type { OpenClawHookHandlerLike, OpenClawPluginApiLike, PluginLoggerLike } from "../types.js"; describe("nemo-flow OpenClaw plugin shell", () => { it("applies hook-backend config defaults", () => { @@ -51,6 +51,25 @@ describe("nemo-flow OpenClaw plugin shell", () => { ); }); + it("rejects invalid correlation and timeout values", () => { + assert.throws( + () => parseConfig({ correlation: { llmOutputGraceMs: -1 } }), + /correlation\.llmOutputGraceMs must be a non-negative integer/, + ); + assert.throws( + () => parseConfig({ correlation: { recordTtlMs: 1.5 } }), + /correlation\.recordTtlMs must be a non-negative integer/, + ); + assert.throws( + () => parseConfig({ correlation: { maxRecordsPerKey: 0 } }), + /correlation\.maxRecordsPerKey must be a positive integer/, + ); + assert.throws( + () => parseConfig({ telemetry: { otel: { timeoutMillis: 2.5 } } }), + /telemetry\.otel\.timeoutMillis must be a non-negative integer/, + ); + }); + it("wraps manifest JSON Schema in OpenClawPluginConfigSchema", () => { assert.equal(typeof nemoFlowConfigSchema.safeParse, "function"); assert.deepEqual(nemoFlowConfigSchema.jsonSchema, NEMO_FLOW_OPENCLAW_JSON_SCHEMA); @@ -133,6 +152,69 @@ describe("nemo-flow OpenClaw plugin shell", () => { ); }); + it("uses config parsed during registration when service starts", async () => { + const api = createApi({ pluginConfig: { correlation: { maxRecordsPerKey: 1 } } }); + + registerNemoFlowPlugin(api, async () => createModules()); + api.pluginConfig = { backend: "managed_execution" }; + + const service = api.calls.services[0]; + assert.ok(service); + await assert.doesNotReject(async () => { + await service.start({ + stateDir: "/tmp/openclaw-state", + logger: api.logger, + }); + }); + }); + + it("continues hook-backed telemetry when plugin host validation fails", async () => { + const modules = createModules({ + validateDiagnostics: [{ level: "error", code: "bad_config", message: "invalid" }], + }); + const api = createApi(); + + registerNemoFlowPlugin(api, async () => modules); + const service = api.calls.services[0]; + assert.ok(service); + await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + + const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); + assert.ok(sessionStart); + await sessionStart.handler({ sessionId: "session-1" }, { sessionId: "session-1" }); + + const status = api.calls.gatewayMethods[0]?.handler(); + assert.ok(status); + assert.deepEqual(modules.nf.calls.event.map((event) => event.name), ["openclaw.session_start"]); + assert.equal(status.status.state, "degraded"); + assert.equal(status.initializedPluginHost, false); + }); + + it("routes gateway_stop through runtime stop", async () => { + const modules = createModules(); + const api = createApi(); + + registerNemoFlowPlugin(api, async () => modules); + const service = api.calls.services[0]; + assert.ok(service); + await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + + const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); + const gatewayStop = api.calls.hooks.find((hook) => hook.hookName === "gateway_stop"); + assert.ok(sessionStart); + assert.ok(gatewayStop); + await sessionStart.handler({ sessionId: "session-1" }, { sessionId: "session-1" }); + await gatewayStop.handler({ reason: "test_stop" }, {}); + + const status = api.calls.gatewayMethods[0]?.handler(); + assert.ok(status); + assert.equal(status.status.state, "stopped"); + assert.deepEqual(modules.nf.calls.event.map((event) => event.name), [ + "openclaw.session_start", + "openclaw.session_end", + ]); + }); + it("does not statically import nemo-flow-node or OpenClaw private src paths", () => { const files = [ readFileSync(new URL("../modules.js", import.meta.url), "utf8"), @@ -149,8 +231,11 @@ type TestApi = OpenClawPluginApiLike & { calls: { services: Parameters[0][]; lifecycle: Parameters[0][]; - gatewayMethods: Array<{ method: string }>; - hooks: Array<{ hookName: string }>; + gatewayMethods: Array<{ + method: string; + handler: () => { status: { state: string }; initializedPluginHost: boolean }; + }>; + hooks: Array<{ hookName: string; handler: OpenClawHookHandlerLike }>; }; messages: { info: string[]; @@ -182,8 +267,12 @@ function createApi(params: { resolvePath: (input) => input, registerService: (service) => calls.services.push(service), registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), - on: (hookName) => calls.hooks.push({ hookName }), - registerGatewayMethod: (method) => calls.gatewayMethods.push({ method }), + on: (hookName, handler) => calls.hooks.push({ hookName, handler }), + registerGatewayMethod: (method, handler) => + calls.gatewayMethods.push({ + method, + handler: handler as TestApi["calls"]["gatewayMethods"][number]["handler"], + }), calls, messages, }; @@ -195,26 +284,68 @@ function createApi(params: { return api; } -function createModules(): NemoFlowModules { +type TestNemoFlowRuntime = NemoFlowModules["nf"] & { + calls: { + event: Array<{ name: string; handle: unknown; data: unknown }>; + }; +}; + +type TestModules = NemoFlowModules & { + nf: TestNemoFlowRuntime; +}; + +function createModules(params: { validateDiagnostics?: Array<{ level: "warning" | "error"; code: string; message: string }> } = {}): TestModules { + const nf = createNemoFlowRuntime(); return { - nf: createNemoFlowRuntime(), + nf, pluginHost: { defaultConfig: () => ({ version: 1, components: [] }), - validate: () => ({ diagnostics: [] }), + validate: () => ({ diagnostics: params.validateDiagnostics ?? [] }), initialize: async () => ({ diagnostics: [] }), clear: () => {}, }, }; } -function createNemoFlowRuntime(): NemoFlowModules["nf"] { +function createNemoFlowRuntime(): TestNemoFlowRuntime { + const calls: TestNemoFlowRuntime["calls"] = { + event: [], + }; return { ScopeType: { Agent: 0 }, + calls, createScopeStack: () => ({ type: "stack" }), currentScopeStack: () => ({ type: "previous-stack" }), setThreadScopeStack: () => {}, pushScope: () => ({ type: "scope" }), popScope: () => {}, - event: () => {}, + event: (name, handle, data) => calls.event.push({ name, handle, data }), + llmCall: () => ({}), + llmCallEnd: () => {}, + toolCall: () => ({}), + toolCallEnd: () => {}, + AtifExporter: FakeAtifExporter, + OpenTelemetrySubscriber: FakeSubscriber, + OpenInferenceSubscriber: FakeSubscriber, }; } + +class FakeAtifExporter { + register(): void {} + deregister(): boolean { + return true; + } + exportJson(): string { + return "{}"; + } + clear(): void {} +} + +class FakeSubscriber { + register(): void {} + deregister(): boolean { + return true; + } + forceFlush(): void {} + shutdown(): void {} +} diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts index a7c149ee..d810e252 100644 --- a/integrations/openclaw/src/__tests__/hooks-backend.test.ts +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -5,6 +5,7 @@ import assert from "node:assert/strict"; import { describe, it } from "node:test"; import { parseConfig } from "../config.js"; +import { errorToJson, toJsonRecord } from "../hook-replay/marks.js"; import { HookReplayBackend } from "../hooks-backend.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; import type { PluginLoggerLike } from "../types.js"; @@ -71,7 +72,7 @@ describe("HookReplayBackend", () => { assert.equal(backend.state().sessionAliases.get("kb"), "b"); }); - it("drains before close, emits unpaired timing mark, and evicts session records", () => { + it("drains before close, emits unpaired timing mark, and evicts session records", async () => { const nf = createNemoFlowRuntime(); const backend = createBackend(nf); @@ -111,7 +112,7 @@ describe("HookReplayBackend", () => { { runId: "run-1", sessionId: "session-1" }, ); - backend.onSessionEnd( + await backend.onSessionEnd( { sessionId: "session-1", messageCount: 3, reason: "idle" }, { sessionId: "session-1" }, ); @@ -242,6 +243,37 @@ describe("HookReplayBackend", () => { "openclaw.subagent_spawned", ]); }); + + it("uses child session key as a lazy-session fallback without aliasing it away", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onSubagentSpawned( + { + childSessionKey: "child-key", + agentId: "child-agent", + mode: "run", + threadRequested: false, + runId: "child-run", + }, + { childSessionKey: "child-key", runId: "child-run" }, + ); + + assert.ok(backend.state().sessions.get("child-key")); + assert.equal(backend.state().sessionAliases.get("child-run"), "child-key"); + assert.equal(backend.state().sessionAliases.get("child-key"), undefined); + }); + + it("normalizes circular replay payloads before NAPI boundaries", () => { + const payload: Record = { ok: true }; + payload.self = payload; + + assert.deepEqual(toJsonRecord(payload), { + ok: true, + self: { ok: true, self: "[Circular]" }, + }); + assert.deepEqual(errorToJson(new Error("boom")).message, "boom"); + }); }); type TestNemoFlowRuntime = NemoFlowRuntimeModule & { @@ -265,6 +297,9 @@ function createBackend(nf: TestNemoFlowRuntime, logger = createLogger()): HookRe nf, config: parseConfig(undefined), logger, + agentVersion: "test-version", + resolvedAtifOutputDir: "/tmp/openclaw-state/plugins/nemo-flow/atif", + markOutputDegraded: () => {}, }); } @@ -301,5 +336,32 @@ function createNemoFlowRuntime(): TestNemoFlowRuntime { }, popScope: (handle, output) => calls.popScope.push({ handle, output }), event: (name, handle, data) => calls.event.push({ name, handle, data }), + llmCall: () => ({}), + llmCallEnd: () => {}, + toolCall: () => ({}), + toolCallEnd: () => {}, + AtifExporter: FakeAtifExporter, + OpenTelemetrySubscriber: FakeSubscriber, + OpenInferenceSubscriber: FakeSubscriber, }; } + +class FakeAtifExporter { + register(): void {} + deregister(): boolean { + return true; + } + exportJson(): string { + return "{}"; + } + clear(): void {} +} + +class FakeSubscriber { + register(): void {} + deregister(): boolean { + return true; + } + forceFlush(): void {} + shutdown(): void {} +} diff --git a/integrations/openclaw/src/config.ts b/integrations/openclaw/src/config.ts index d42949ad..c801f28a 100644 --- a/integrations/openclaw/src/config.ts +++ b/integrations/openclaw/src/config.ts @@ -171,13 +171,13 @@ export function parseConfig(value: unknown): NemoFlowHookBackendConfig { }, correlation: { llmOutputGraceMs: - optionalNumber(correlation.llmOutputGraceMs, "correlation.llmOutputGraceMs") ?? + optionalNonNegativeInteger(correlation.llmOutputGraceMs, "correlation.llmOutputGraceMs") ?? DEFAULT_CONFIG.correlation.llmOutputGraceMs, recordTtlMs: - optionalNumber(correlation.recordTtlMs, "correlation.recordTtlMs") ?? + optionalNonNegativeInteger(correlation.recordTtlMs, "correlation.recordTtlMs") ?? DEFAULT_CONFIG.correlation.recordTtlMs, maxRecordsPerKey: - optionalNumber(correlation.maxRecordsPerKey, "correlation.maxRecordsPerKey") ?? + optionalPositiveInteger(correlation.maxRecordsPerKey, "correlation.maxRecordsPerKey") ?? DEFAULT_CONFIG.correlation.maxRecordsPerKey, }, }; @@ -213,7 +213,7 @@ function parseTelemetrySinkConfig( serviceNamespace: optionalString(raw.serviceNamespace, `${path}.serviceNamespace`) ?? defaults.serviceNamespace, timeoutMillis: - optionalNumber(raw.timeoutMillis, `${path}.timeoutMillis`) ?? defaults.timeoutMillis, + optionalNonNegativeInteger(raw.timeoutMillis, `${path}.timeoutMillis`) ?? defaults.timeoutMillis, ...definedStringProperty( "transport", optionalString(raw.transport, `${path}.transport`) ?? defaults.transport, @@ -285,6 +285,28 @@ function optionalNumber(value: unknown, path: string): number | undefined { return value; } +function optionalNonNegativeInteger(value: unknown, path: string): number | undefined { + const parsed = optionalNumber(value, path); + if (parsed === undefined) { + return undefined; + } + if (!Number.isInteger(parsed) || parsed < 0) { + throw new Error(`${path} must be a non-negative integer`); + } + return parsed; +} + +function optionalPositiveInteger(value: unknown, path: string): number | undefined { + const parsed = optionalNumber(value, path); + if (parsed === undefined) { + return undefined; + } + if (!Number.isInteger(parsed) || parsed < 1) { + throw new Error(`${path} must be a positive integer`); + } + return parsed; +} + function optionalString(value: unknown, path: string): string | undefined { if (value === undefined) { return undefined; diff --git a/integrations/openclaw/src/hook-replay/marks.ts b/integrations/openclaw/src/hook-replay/marks.ts index bad386f4..c2aaac97 100644 --- a/integrations/openclaw/src/hook-replay/marks.ts +++ b/integrations/openclaw/src/hook-replay/marks.ts @@ -32,7 +32,7 @@ export function blockedToolDetails( return undefined; } - return stripUndefined({ + return toJsonRecord({ toolName: event.toolName, toolCallId: event.toolCallId, runId: event.runId ?? context?.runId, @@ -43,7 +43,21 @@ export function blockedToolDetails( } export function toJsonRecord(input: Record): JsonRecord { - return stripUndefined(input); + return stripUndefined(input, new WeakSet()); +} + +export function errorToJson(error: unknown): JsonRecord { + if (error instanceof Error) { + return toJsonRecord({ + name: error.name, + message: error.message, + stack: error.stack, + }); + } + if (isRecord(error)) { + return toJsonRecord(error); + } + return { message: String(error) }; } function resultDetails(result: unknown): Record | undefined { @@ -54,25 +68,37 @@ function resultDetails(result: unknown): Record | undefined { return isRecord(details) ? details : undefined; } -function stripUndefined(input: Record): JsonRecord { +function stripUndefined(input: Record, seen: WeakSet): JsonRecord { const output: JsonRecord = {}; for (const [key, value] of Object.entries(input)) { if (value !== undefined) { - output[key] = toJsonValue(value); + output[key] = toJsonValue(value, seen); } } return output; } -function toJsonValue(value: unknown): JsonValue { +function toJsonValue(value: unknown, seen: WeakSet): JsonValue { if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") { return value; } if (Array.isArray(value)) { - return value.map(toJsonValue); + if (seen.has(value)) { + return "[Circular]"; + } + seen.add(value); + const out = value.map((item) => toJsonValue(item, seen)); + seen.delete(value); + return out; } if (isRecord(value)) { - return stripUndefined(value); + if (seen.has(value)) { + return "[Circular]"; + } + seen.add(value); + const out = stripUndefined(value, seen); + seen.delete(value); + return out; } return String(value); } diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts index 002fae64..3f9754e4 100644 --- a/integrations/openclaw/src/hook-replay/session.ts +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { NemoFlowHookBackendConfig } from "../config.js"; +import type { AtifExporterLike } from "../modules.js"; import type { PluginHookModelCallEndedEvent } from "../openclaw-hook-types.js"; import type { JsonRecord, PluginLoggerLike } from "../types.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; @@ -28,6 +29,13 @@ export type SessionState = { resumedFrom?: string; stack: unknown; rootHandle?: unknown; + atif?: { + exporter: AtifExporterLike; + registrationName: string; + capturing: boolean; + disabled?: boolean; + leakedRegistration?: boolean; + }; }; export type PendingLlmOutputRecord = { @@ -68,12 +76,15 @@ export type SessionManager = { config: NemoFlowHookBackendConfig; logger: PluginLoggerLike; state: HookReplayBackendState; + agentVersion: string; + resolvedAtifOutputDir: string; emitCapturedUnderSession: (label: string, session: SessionState, emit: () => void) => void; replayPendingLlmOutputsForSession: ( session: SessionState, options: { allowPlaceholderRequest: boolean }, ) => void; emitUnpairedModelCallTimingMarks: (session: SessionState) => void; + markOutputDegraded: (output: "atif" | "otel" | "openInference") => void; logBoundedWarn: (key: string, message: string) => void; }; @@ -100,7 +111,7 @@ export function resolveSessionKey( } } - return input.sessionId ?? input.sessionKey ?? input.runId; + return input.sessionId ?? input.sessionKey ?? input.childSessionKey ?? input.runId; } export function rememberSessionAliases( diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts index 66f11d34..9f235044 100644 --- a/integrations/openclaw/src/hooks-backend.ts +++ b/integrations/openclaw/src/hooks-backend.ts @@ -23,7 +23,6 @@ import type { PluginHookBeforeAgentFinalizeEvent, PluginHookGatewayContext, PluginHookGatewayStartEvent, - PluginHookGatewayStopEvent, PluginHookLlmInputEvent, PluginHookLlmOutputEvent, PluginHookModelCallEndedEvent, @@ -42,12 +41,18 @@ export type HookReplayBackendOptions = { nf: NemoFlowRuntimeModule; config: NemoFlowHookBackendConfig; logger: PluginLoggerLike; + agentVersion: string; + resolvedAtifOutputDir: string; + markOutputDegraded: (output: "atif" | "otel" | "openInference") => void; }; export class HookReplayBackend { private readonly nf: NemoFlowRuntimeModule; private readonly config: NemoFlowHookBackendConfig; private readonly logger: PluginLoggerLike; + private readonly agentVersion: string; + private readonly resolvedAtifOutputDir: string; + private readonly markOutputDegradedValue: (output: "atif" | "otel" | "openInference") => void; private readonly stateValue = createHookReplayState(); private readonly warningCounts = new Map(); @@ -55,6 +60,9 @@ export class HookReplayBackend { this.nf = options.nf; this.config = options.config; this.logger = options.logger; + this.agentVersion = options.agentVersion; + this.resolvedAtifOutputDir = options.resolvedAtifOutputDir; + this.markOutputDegradedValue = options.markOutputDegraded; } state(): HookReplayBackendState { @@ -66,10 +74,6 @@ export class HookReplayBackend { // registered so later telemetry lifecycle can attach without changing the shell. } - onGatewayStop(event: PluginHookGatewayStopEvent, _ctx: PluginHookGatewayContext): void { - this.closeAllSessions({ reason: event.reason ?? "gateway_stop" }); - } - onSessionStart(event: PluginHookSessionStartEvent, ctx: PluginHookSessionContext): void { this.ensureSession({ sessionId: event.sessionId, @@ -82,7 +86,7 @@ export class HookReplayBackend { // ensureSession opens the root scope and emits openclaw.session_start for both explicit and lazy sessions. } - onSessionEnd(event: PluginHookSessionEndEvent, ctx: PluginHookSessionContext): void { + async onSessionEnd(event: PluginHookSessionEndEvent, ctx: PluginHookSessionContext): Promise { const session = this.ensureSession({ sessionId: event.sessionId, sessionKey: event.sessionKey ?? ctx.sessionKey, @@ -298,7 +302,11 @@ export class HookReplayBackend { ); } - stop(reason: string): void { + async drainForGatewayStop(reason?: string): Promise { + this.closeAllSessions({ reason: reason ?? "gateway_stop" }); + } + + async stop(reason: string): Promise { this.closeAllSessions({ reason }); } @@ -314,6 +322,22 @@ export class HookReplayBackend { } } + async safeReplayAsync( + label: string, + session: SessionState | undefined, + emit: () => Promise, + ): Promise { + try { + await emit(); + } catch (error) { + this.stateValue.counters.replayErrors += 1; + this.logBoundedWarn( + `safe-replay:${label}`, + `nemo-flow async replay failed: label=${label} session=${session?.sessionId ?? "unknown"} error=${toMessage(error)}`, + ); + } + } + emitCapturedUnderSession(label: string, session: SessionState, emit: () => void): void { this.safeReplay(label, session, () => { const previousStack = this.nf.currentScopeStack(); @@ -400,11 +424,14 @@ export class HookReplayBackend { config: this.config, logger: this.logger, state: this.stateValue, + agentVersion: this.agentVersion, + resolvedAtifOutputDir: this.resolvedAtifOutputDir, emitCapturedUnderSession: (label: string, session: SessionState, emit: () => void) => this.emitCapturedUnderSession(label, session, emit), replayPendingLlmOutputsForSession: (session: SessionState, options: { allowPlaceholderRequest: boolean }) => this.replayPendingLlmOutputsForSession(session, options), emitUnpairedModelCallTimingMarks: (session: SessionState) => this.emitUnpairedModelCallTimingMarks(session), + markOutputDegraded: (output: "atif" | "otel" | "openInference") => this.markOutputDegradedValue(output), logBoundedWarn: (key: string, message: string) => this.logBoundedWarn(key, message), }; } diff --git a/integrations/openclaw/src/modules.ts b/integrations/openclaw/src/modules.ts index 807ed772..8c9763ef 100644 --- a/integrations/openclaw/src/modules.ts +++ b/integrations/openclaw/src/modules.ts @@ -47,6 +47,62 @@ export type NemoFlowRuntimeModule = { metadata?: unknown, timestamp?: number | null, ) => void; + llmCall: ( + name: string, + request: unknown, + handle?: unknown | null, + attributes?: number | null, + data?: unknown, + metadata?: unknown, + modelName?: string | null, + timestamp?: number | null, + ) => unknown; + llmCallEnd: ( + handle: unknown, + response: unknown, + data?: unknown, + metadata?: unknown, + timestamp?: number | null, + ) => void; + toolCall: ( + name: string, + args: unknown, + handle?: unknown | null, + attributes?: number | null, + data?: unknown, + metadata?: unknown, + toolCallId?: string | null, + timestamp?: number | null, + ) => unknown; + toolCallEnd: ( + handle: unknown, + result: unknown, + data?: unknown, + metadata?: unknown, + timestamp?: number | null, + ) => void; + AtifExporter: new ( + sessionId: string, + agentName: string, + agentVersion: string, + modelName?: string | null, + ) => AtifExporterLike; + OpenTelemetrySubscriber: new (config?: Record) => NemoFlowSubscriber; + OpenInferenceSubscriber: new (config?: Record) => NemoFlowSubscriber; +}; + +export type NemoFlowSubscriber = { + register: (name: string) => void; + deregister: (name: string) => boolean; + forceFlush: () => void; + shutdown: () => void; +}; + +export type AtifExporterLike = { + register: (name: string) => void; + deregister: (name: string) => boolean; + exportJson: () => string; + clear: () => void; }; export type NemoFlowModules = { diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index 75e42ae5..fb0e4e14 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -1,7 +1,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +import * as path from "node:path"; + import { parseConfig } from "./config.js"; +import type { NemoFlowHookBackendConfig } from "./config.js"; import { createHealthSnapshot, type HookReplayBackendStatus } from "./health.js"; import { HookReplayBackend } from "./hooks-backend.js"; import { @@ -9,6 +12,7 @@ import { type ConfigDiagnostic, type NemoFlowModules, type NemoFlowModuleLoader, + type NemoFlowSubscriber, } from "./modules.js"; import type { PluginHookAfterToolCallEvent, @@ -46,14 +50,26 @@ const STATUS_METHOD = "nemoFlow.status"; export class NemoFlowRuntimeState { private readonly api: OpenClawPluginApiLike; + private readonly config: NemoFlowHookBackendConfig; private readonly moduleLoader: NemoFlowModuleLoader; + private loadPromise: Promise | undefined; private statusValue: HookReplayBackendStatus = { state: "not_initialized" }; private modulesValue?: NemoFlowModules; private backendValue: HookReplayBackend | undefined; private initializedPluginHost = false; + private started = false; + private beforeExitListener?: () => void; + private unavailableLogged = false; + private telemetrySubscribers: Array<{ + output: "otel" | "openInference"; + name: string; + subscriber: NemoFlowSubscriber; + }> = []; + private readonly degradedOutputs = new Set<"atif" | "otel" | "openInference">(); constructor(options: RuntimeStateOptions) { this.api = options.api; + this.config = options.config; this.moduleLoader = options.moduleLoader ?? defaultNemoFlowModuleLoader; } @@ -69,78 +85,100 @@ export class NemoFlowRuntimeState { } async start(ctx: StartContext): Promise { - if (this.statusValue.state === "ready" || this.statusValue.state === "degraded") { + if (this.started || this.statusValue.state === "ready" || this.statusValue.state === "degraded") { return; } let modules: NemoFlowModules; try { - modules = await this.moduleLoader(); + this.loadPromise ??= this.moduleLoader(); + modules = await this.loadPromise; this.modulesValue = modules; } catch (error) { + this.loadPromise = undefined; this.statusValue = { state: "degraded", reason: `failed to load nemo-flow-node: ${toMessage(error)}` }; - ctx.logger.warn?.(this.statusValue.reason); + if (!this.unavailableLogged) { + ctx.logger.warn?.(this.statusValue.reason); + this.unavailableLogged = true; + } return; } - const { hostConfig, degradedReason } = this.resolvePluginHostConfig(modules, ctx.logger); - if (degradedReason) { - this.statusValue = { state: "degraded", reason: degradedReason }; - } + const { hostConfig, degradedReason: configuredDegradedReason } = this.resolvePluginHostConfig( + modules, + ctx.logger, + ); + let degradedReason = configuredDegradedReason; const validationReport = validatePluginHostConfig(modules, hostConfig, ctx.logger); if (validationReport.diagnostics.some((diagnostic) => diagnostic.level === "error")) { - this.statusValue = { - state: "degraded", - reason: "NeMo Flow plugin host config validation failed", - }; - return; - } - - try { - const activationReport = await modules.pluginHost.initialize(hostConfig); - logDiagnostics(ctx.logger, activationReport.diagnostics); - this.initializedPluginHost = true; - } catch (error) { - this.statusValue = { - state: "degraded", - reason: `failed to initialize NeMo Flow plugin host: ${toMessage(error)}`, - }; - ctx.logger.warn?.(this.statusValue.reason); - return; - } + degradedReason = "NeMo Flow plugin host config validation failed"; + } else { + if ( + validationReport.diagnostics.some((diagnostic) => diagnostic.level === "warning") && + degradedReason === undefined + ) { + degradedReason = "NeMo Flow plugin host config validation produced warnings"; + } - if (!degradedReason) { - this.statusValue = { state: "ready" }; + try { + const activationReport = await modules.pluginHost.initialize(hostConfig); + logDiagnostics(ctx.logger, activationReport.diagnostics); + this.initializedPluginHost = true; + if ( + activationReport.diagnostics.some((diagnostic) => diagnostic.level === "error") && + degradedReason === undefined + ) { + degradedReason = "NeMo Flow plugin host initialization reported errors"; + } + } catch (error) { + degradedReason = `failed to initialize NeMo Flow plugin host: ${toMessage(error)}`; + ctx.logger.warn?.(degradedReason); + } } this.backendValue = new HookReplayBackend({ nf: modules.nf, - config: parseConfig(this.api.pluginConfig), + config: this.config, logger: ctx.logger, + agentVersion: ctx.agentVersion, + resolvedAtifOutputDir: resolveAtifOutputDir(this.config, ctx), + markOutputDegraded: (output) => this.markOutputDegraded(output), }); + this.started = true; + this.statusValue = degradedReason === undefined ? { state: "ready" } : { state: "degraded", reason: degradedReason }; } async stop(reason: string, logger?: PluginLoggerLike): Promise { - if (this.statusValue.state === "stopped" || this.statusValue.state === "disabled") { + if ( + this.statusValue.state === "stopped" || + this.statusValue.state === "disabled" || + this.statusValue.state === "stopping" + ) { return; } this.statusValue = { state: "stopping" }; + const log = logger ?? this.api.logger; + + try { + await this.backendValue?.drainForGatewayStop(reason); + } catch (error) { + log.warn?.(`failed to stop NeMo Flow hook backend: ${toMessage(error)}`); + } + this.backendValue = undefined; if (this.initializedPluginHost && this.modulesValue) { try { this.modulesValue.pluginHost.clear(); } catch (error) { - logger?.warn?.(`failed to clear NeMo Flow plugin host: ${toMessage(error)}`); + log.warn?.(`failed to clear NeMo Flow plugin host: ${toMessage(error)}`); } this.initializedPluginHost = false; } - this.backendValue?.stop(reason); - this.backendValue = undefined; - + this.started = false; this.statusValue = { state: "stopped", reason }; } @@ -161,17 +199,30 @@ export class NemoFlowRuntimeState { backend.safeReplay(hookName, undefined, () => handler(backend, event, ctx)); }) as OpenClawHookHandlerLike); }; + const dispatchAsync = ( + hookName: string, + handler: (backend: HookReplayBackend, event: unknown, ctx: unknown) => Promise, + ): void => { + this.api.on(hookName, (async (event: unknown, ctx: unknown) => { + const backend = this.backendValue; + if (!backend) { + return; + } + await backend.safeReplayAsync(hookName, undefined, () => handler(backend, event, ctx)); + }) as OpenClawHookHandlerLike); + }; dispatch("gateway_start", (backend, event, ctx) => backend.onGatewayStart(event as PluginHookGatewayStartEvent, ctx as PluginHookGatewayContext), ); - dispatch("gateway_stop", (backend, event, ctx) => - backend.onGatewayStop(event as PluginHookGatewayStopEvent, ctx as PluginHookGatewayContext), - ); + this.api.on("gateway_stop", (async (event: unknown) => { + const stopEvent = event as PluginHookGatewayStopEvent; + await this.stop(stopEvent.reason ?? "gateway_stop", this.api.logger); + }) as OpenClawHookHandlerLike); dispatch("session_start", (backend, event, ctx) => backend.onSessionStart(event as PluginHookSessionStartEvent, ctx as PluginHookSessionContext), ); - dispatch("session_end", (backend, event, ctx) => + dispatchAsync("session_end", (backend, event, ctx) => backend.onSessionEnd(event as PluginHookSessionEndEvent, ctx as PluginHookSessionContext), ); dispatch("llm_input", (backend, event, ctx) => @@ -213,7 +264,7 @@ export class NemoFlowRuntimeState { hostConfig: { version: number; components: unknown[]; [key: string]: unknown }; degradedReason?: string; } { - const configured = parseConfig(this.api.pluginConfig).nemoFlow.pluginConfig; + const configured = this.config.nemoFlow.pluginConfig; if (configured.components.length === 0) { return { hostConfig: modules.pluginHost.defaultConfig() }; @@ -229,6 +280,10 @@ export class NemoFlowRuntimeState { degradedReason, }; } + + private markOutputDegraded(output: "atif" | "otel" | "openInference"): void { + this.degradedOutputs.add(output); + } } export function registerNemoFlowPlugin( @@ -306,6 +361,14 @@ function logDiagnostics(logger: PluginLoggerLike, diagnostics: ConfigDiagnostic[ } } +function resolveAtifOutputDir(config: NemoFlowHookBackendConfig, ctx: StartContext): string { + const configured = config.atif.outputDir; + if (!configured) { + return path.join(ctx.stateDir, "plugins", "nemo-flow", "atif"); + } + return path.isAbsolute(configured) ? configured : ctx.resolvePath(configured); +} + function toMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); } From 80de1ff00fe443650f9283a5dc47c9d075963b13 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Wed, 6 May 2026 22:18:49 -0700 Subject: [PATCH 04/30] feat: add OpenClaw telemetry outputs Signed-off-by: mnajafian-nv --- integrations/openclaw/package.json | 3 +- .../src/__tests__/atif-capture.test.ts | 311 ++++++++++++++++++ .../openclaw/src/__tests__/config.test.ts | 261 +++++++++++++-- .../src/__tests__/hooks-backend.test.ts | 42 ++- .../openclaw/src/__tests__/live-smoke.test.ts | 154 +++++++++ .../openclaw/src/__tests__/telemetry.test.ts | 107 ++++++ integrations/openclaw/src/atif-capture.ts | 152 +++++++++ integrations/openclaw/src/health.ts | 66 ++++ .../openclaw/src/hook-replay/session.ts | 3 + integrations/openclaw/src/hooks-backend.ts | 16 +- integrations/openclaw/src/runtime-state.ts | 73 +++- integrations/openclaw/src/telemetry.ts | 126 +++++++ 12 files changed, 1263 insertions(+), 51 deletions(-) create mode 100644 integrations/openclaw/src/__tests__/atif-capture.test.ts create mode 100644 integrations/openclaw/src/__tests__/live-smoke.test.ts create mode 100644 integrations/openclaw/src/__tests__/telemetry.test.ts create mode 100644 integrations/openclaw/src/atif-capture.ts create mode 100644 integrations/openclaw/src/telemetry.ts diff --git a/integrations/openclaw/package.json b/integrations/openclaw/package.json index e1d7292e..f67cdbfc 100644 --- a/integrations/openclaw/package.json +++ b/integrations/openclaw/package.json @@ -24,7 +24,8 @@ "scripts": { "build": "tsc -p tsconfig.json", "typecheck": "tsc -p tsconfig.json --noEmit", - "test": "npm run build && node --test \"dist/src/__tests__/*.test.js\"" + "test": "npm run build && node --test \"dist/src/__tests__/*.test.js\"", + "test:live": "npm run build && NEMO_FLOW_OPENCLAW_LIVE_SMOKE=1 node --test \"dist/src/__tests__/live-smoke.test.js\"" }, "peerDependencies": { "openclaw": "*" diff --git a/integrations/openclaw/src/__tests__/atif-capture.test.ts b/integrations/openclaw/src/__tests__/atif-capture.test.ts new file mode 100644 index 00000000..50c007c9 --- /dev/null +++ b/integrations/openclaw/src/__tests__/atif-capture.test.ts @@ -0,0 +1,311 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import assert from "node:assert/strict"; +import * as fs from "node:fs/promises"; +import * as path from "node:path"; +import * as os from "node:os"; +import { describe, it } from "node:test"; + +import { + createAtifExporter, + exportAtifJson, + makeSafeSessionId, + withAtifCapture, +} from "../atif-capture.js"; +import { parseConfig } from "../config.js"; +import { createHookReplayState, type SessionManager, type SessionState } from "../hook-replay/session.js"; +import type { NemoFlowRuntimeModule } from "../modules.js"; +import type { PluginLoggerLike } from "../types.js"; + +describe("ATIF capture", () => { + it("registers and deregisters around synchronous emit", () => { + const manager = createManager(); + const session = createSession(manager, "session-1"); + + createAtifExporter(manager, session); + withAtifCapture(manager, session, () => { + manager.nf.event("test", session.rootHandle, { ok: true }); + }); + + const exporter = session.atif?.exporter as FakeAtifExporter | undefined; + assert.ok(exporter); + assert.deepEqual(exporter.actions, [ + "register:openclaw.nemo-flow.atif.c2Vzc2lvbi0x", + "deregister:openclaw.nemo-flow.atif.c2Vzc2lvbi0x", + ]); + assert.equal(manager.state.counters.replayErrors, 0); + }); + + it("disables future capture when deregister fails", () => { + const manager = createManager({ deregisterReturn: false }); + const session = createSession(manager, "session-1"); + + createAtifExporter(manager, session); + withAtifCapture(manager, session, () => {}); + + assert.equal(session.atif?.disabled, true); + assert.equal(session.atif?.leakedRegistration, true); + assert.deepEqual(manager.degradedOutputs, ["atif"]); + assert.equal(manager.state.counters.replayErrors, 1); + }); + + it("emits outside ATIF capture and skips export when register fails", async () => { + const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "nemo-flow-atif-")); + try { + const manager = createManager({ outputDir, registerThrows: true }); + const session = createSession(manager, "session-1"); + let emitted = false; + + createAtifExporter(manager, session); + withAtifCapture(manager, session, () => { + emitted = true; + }); + await exportAtifJson(manager, session); + + assert.equal(emitted, true); + assert.equal(session.atif, undefined); + assert.deepEqual(await fs.readdir(outputDir), []); + assert.deepEqual(manager.degradedOutputs, ["atif"]); + assert.equal(manager.state.counters.replayErrors, 1); + } finally { + await fs.rm(outputDir, { recursive: true, force: true }); + } + }); + + it("exports ATIF JSON after a captured window even when deregister fails", async () => { + const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "nemo-flow-atif-")); + try { + const manager = createManager({ outputDir, deregisterReturn: false }); + const session = createSession(manager, "session-1"); + + createAtifExporter(manager, session); + withAtifCapture(manager, session, () => {}); + await exportAtifJson(manager, session); + + const targetPath = path.join(outputDir, `${makeSafeSessionId("session-1")}.json`); + assert.equal(await fs.readFile(targetPath, "utf8"), "{\"ok\":true}"); + assert.equal(manager.state.counters.atifFilesWritten, 1); + assert.equal(manager.state.counters.replayErrors, 1); + assert.deepEqual(manager.degradedOutputs, ["atif"]); + assert.equal(session.atif, undefined); + } finally { + await fs.rm(outputDir, { recursive: true, force: true }); + } + }); + + it("does not block session replay when exporter construction fails", () => { + const manager = createManager({ constructorThrows: true }); + const session = createSession(manager, "session-1"); + + createAtifExporter(manager, session); + + assert.equal(session.atif, undefined); + assert.deepEqual(manager.degradedOutputs, ["atif"]); + assert.equal(manager.state.counters.replayErrors, 1); + }); + + it("exports ATIF JSON to a safe session filename and clears exporter", async () => { + const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "nemo-flow-atif-")); + try { + const manager = createManager({ outputDir }); + const session = createSession(manager, "../session:1"); + + createAtifExporter(manager, session); + await exportAtifJson(manager, session); + + const targetPath = path.join(outputDir, `${makeSafeSessionId("../session:1")}.json`); + assert.equal(await fs.readFile(targetPath, "utf8"), "{\"ok\":true}"); + assert.equal(manager.state.counters.atifFilesWritten, 1); + assert.equal(session.atif, undefined); + } finally { + await fs.rm(outputDir, { recursive: true, force: true }); + } + }); + + it("clears exporter and marks ATIF degraded when export fails", async () => { + const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "nemo-flow-atif-")); + const outputFile = path.join(outputDir, "not-a-directory"); + await fs.writeFile(outputFile, "block mkdir", "utf8"); + try { + const manager = createManager({ outputDir: outputFile }); + const session = createSession(manager, "session-1"); + + createAtifExporter(manager, session); + const exporter = session.atif?.exporter as FakeAtifExporter | undefined; + await exportAtifJson(manager, session); + + assert.ok(exporter); + assert.equal(exporter.cleared, true); + assert.deepEqual(manager.degradedOutputs, ["atif"]); + assert.equal(manager.state.counters.replayErrors, 1); + assert.equal(session.atif, undefined); + } finally { + await fs.rm(outputDir, { recursive: true, force: true }); + } + }); + + it("does not throw or retain ATIF state when exporter clear fails", async () => { + const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "nemo-flow-atif-")); + try { + const manager = createManager({ outputDir, clearThrows: true }); + const session = createSession(manager, "session-1"); + + createAtifExporter(manager, session); + await assert.doesNotReject(() => exportAtifJson(manager, session)); + + const targetPath = path.join(outputDir, `${makeSafeSessionId("session-1")}.json`); + assert.equal(await fs.readFile(targetPath, "utf8"), "{\"ok\":true}"); + assert.equal(manager.state.counters.atifFilesWritten, 1); + assert.equal(manager.state.counters.replayErrors, 1); + assert.deepEqual(manager.degradedOutputs, ["atif"]); + assert.equal(session.atif, undefined); + } finally { + await fs.rm(outputDir, { recursive: true, force: true }); + } + }); +}); + +type TestManager = SessionManager & { + degradedOutputs: Array<"atif" | "otel" | "openInference">; +}; + +function createManager(params: { + outputDir?: string; + constructorThrows?: boolean; + registerThrows?: boolean; + deregisterReturn?: boolean; + clearThrows?: boolean; +} = {}): TestManager { + const degradedOutputs: TestManager["degradedOutputs"] = []; + const nf = createNemoFlowRuntime(params); + const manager: TestManager = { + nf, + config: parseConfig({ atif: { enabled: true } }), + logger: createLogger(), + state: createHookReplayState(), + agentVersion: "test-version", + resolvedAtifOutputDir: params.outputDir ?? "/tmp/nemo-flow-atif", + degradedOutputs, + emitCapturedUnderSession: (_label, _session, emit) => emit(), + replayPendingLlmOutputsForSession: () => {}, + emitUnpairedModelCallTimingMarks: () => {}, + markOutputDegraded: (output) => degradedOutputs.push(output), + logBoundedWarn: () => {}, + }; + return manager; +} + +function createSession(manager: TestManager, sessionId: string): SessionState { + const session: SessionState = { + sessionId, + source: "session_start", + stack: manager.nf.createScopeStack(), + rootHandle: { id: "root" }, + }; + manager.state.sessions.set(sessionId, session); + return session; +} + +function createLogger(): PluginLoggerLike { + return { + info: () => {}, + warn: () => {}, + }; +} + +function createNemoFlowRuntime(params: { + constructorThrows?: boolean; + registerThrows?: boolean; + deregisterReturn?: boolean; + clearThrows?: boolean; +}): NemoFlowRuntimeModule { + const AtifExporter = params.constructorThrows + ? FailingAtifExporter + : class extends FakeAtifExporter { + constructor(sessionId: string, agentName: string, agentVersion: string, modelName?: string | null) { + super(sessionId, agentName, agentVersion, modelName, params.deregisterReturn ?? true); + this.registerThrows = params.registerThrows ?? false; + this.clearThrows = params.clearThrows ?? false; + } + }; + + return { + ScopeType: { Agent: 0 }, + createScopeStack: () => ({}), + currentScopeStack: () => ({}), + setThreadScopeStack: () => {}, + pushScope: () => ({}), + popScope: () => {}, + event: () => {}, + llmCall: () => ({}), + llmCallEnd: () => {}, + toolCall: () => ({}), + toolCallEnd: () => {}, + AtifExporter, + OpenTelemetrySubscriber: FakeSubscriber, + OpenInferenceSubscriber: FakeSubscriber, + }; +} + +class FakeAtifExporter { + readonly actions: string[] = []; + cleared = false; + protected registerThrows = false; + protected clearThrows = false; + + constructor( + readonly sessionId: string, + readonly agentName: string, + readonly agentVersion: string, + readonly modelName: string | null | undefined, + private readonly deregisterReturn: boolean, + ) {} + + register(name: string): void { + if (this.registerThrows) { + throw new Error("register failed"); + } + this.actions.push(`register:${name}`); + } + + deregister(name: string): boolean { + this.actions.push(`deregister:${name}`); + return this.deregisterReturn; + } + + exportJson(): string { + return "{\"ok\":true}"; + } + + clear(): void { + if (this.clearThrows) { + throw new Error("clear failed"); + } + this.cleared = true; + } +} + +class FailingAtifExporter { + constructor() { + throw new Error("constructor failed"); + } + + register(): void {} + deregister(): boolean { + return true; + } + exportJson(): string { + return "{}"; + } + clear(): void {} +} + +class FakeSubscriber { + register(): void {} + deregister(): boolean { + return true; + } + forceFlush(): void {} + shutdown(): void {} +} diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts index f4bd67d1..0882aba7 100644 --- a/integrations/openclaw/src/__tests__/config.test.ts +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -11,6 +11,7 @@ import { parseConfig, } from "../config.js"; import type { NemoFlowModules } from "../modules.js"; +import type { NemoFlowHealthSnapshot } from "../health.js"; import { registerNemoFlowPlugin } from "../runtime-state.js"; import type { OpenClawHookHandlerLike, OpenClawPluginApiLike, PluginLoggerLike } from "../types.js"; @@ -153,46 +154,54 @@ describe("nemo-flow OpenClaw plugin shell", () => { }); it("uses config parsed during registration when service starts", async () => { - const api = createApi({ pluginConfig: { correlation: { maxRecordsPerKey: 1 } } }); + const api = createApi({ pluginConfig: { atif: { enabled: false }, correlation: { maxRecordsPerKey: 1 } } }); registerNemoFlowPlugin(api, async () => createModules()); api.pluginConfig = { backend: "managed_execution" }; const service = api.calls.services[0]; assert.ok(service); - await assert.doesNotReject(async () => { - await service.start({ - stateDir: "/tmp/openclaw-state", - logger: api.logger, + try { + await assert.doesNotReject(async () => { + await service.start({ + stateDir: "/tmp/openclaw-state", + logger: api.logger, + }); }); - }); + } finally { + await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + } }); it("continues hook-backed telemetry when plugin host validation fails", async () => { const modules = createModules({ validateDiagnostics: [{ level: "error", code: "bad_config", message: "invalid" }], }); - const api = createApi(); + const api = createApi({ pluginConfig: { atif: { enabled: false } } }); registerNemoFlowPlugin(api, async () => modules); const service = api.calls.services[0]; assert.ok(service); - await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); - - const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); - assert.ok(sessionStart); - await sessionStart.handler({ sessionId: "session-1" }, { sessionId: "session-1" }); - - const status = api.calls.gatewayMethods[0]?.handler(); - assert.ok(status); - assert.deepEqual(modules.nf.calls.event.map((event) => event.name), ["openclaw.session_start"]); - assert.equal(status.status.state, "degraded"); - assert.equal(status.initializedPluginHost, false); + try { + await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + + const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); + assert.ok(sessionStart); + await sessionStart.handler({ sessionId: "session-1" }, { sessionId: "session-1" }); + + const status = api.calls.gatewayMethods[0]?.handler(); + assert.ok(status); + assert.deepEqual(modules.nf.calls.event.map((event) => event.name), ["openclaw.session_start"]); + assert.equal(status.status.state, "degraded"); + assert.equal(status.initializedPluginHost, false); + } finally { + await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + } }); it("routes gateway_stop through runtime stop", async () => { const modules = createModules(); - const api = createApi(); + const api = createApi({ pluginConfig: { atif: { enabled: false } } }); registerNemoFlowPlugin(api, async () => modules); const service = api.calls.services[0]; @@ -209,12 +218,134 @@ describe("nemo-flow OpenClaw plugin shell", () => { const status = api.calls.gatewayMethods[0]?.handler(); assert.ok(status); assert.equal(status.status.state, "stopped"); + assert.equal(status.counters.marksEmitted, 2); assert.deepEqual(modules.nf.calls.event.map((event) => event.name), [ "openclaw.session_start", "openclaw.session_end", ]); }); + it("registers and shuts down telemetry subscribers in order", async () => { + const modules = createModules(); + const api = createApi({ + pluginConfig: { + telemetry: { + otel: { enabled: true, endpoint: "http://otel.example" }, + openInference: { enabled: true, endpoint: "http://phoenix.example" }, + }, + }, + }); + + registerNemoFlowPlugin(api, async () => modules); + const service = api.calls.services[0]; + assert.ok(service); + await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + + assert.deepEqual( + modules.nf.calls.subscribers.map((subscriber) => [subscriber.kind, subscriber.name]), + [ + ["otel", "openclaw.nemo-flow.otel"], + ["openInference", "openclaw.nemo-flow.openinference"], + ], + ); + assert.equal(modules.nf.calls.subscribers[0]?.config.endpoint, "http://otel.example"); + assert.equal(modules.nf.calls.subscribers[1]?.config.endpoint, "http://phoenix.example"); + + await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + + for (const subscriber of modules.nf.calls.subscribers) { + assert.deepEqual(subscriber.actions, [ + `register:${subscriber.name}`, + `deregister:${subscriber.name}`, + "forceFlush", + "shutdown", + ]); + } + }); + + it("marks subscriber registration failure degraded and keeps other outputs", async () => { + const modules = createModules({ subscriberFailures: { otelRegister: true } }); + const api = createApi({ + pluginConfig: { + atif: { enabled: false }, + telemetry: { + otel: { enabled: true }, + openInference: { enabled: true }, + }, + }, + }); + + registerNemoFlowPlugin(api, async () => modules); + const service = api.calls.services[0]; + assert.ok(service); + try { + await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + + const status = api.calls.gatewayMethods[0]?.handler(); + assert.ok(status); + assert.equal(status.status.state, "degraded"); + assert.equal(status.outputs.otel, "degraded"); + assert.equal(status.outputs.openInference, "enabled"); + assert.deepEqual( + modules.nf.calls.subscribers.map((subscriber) => [subscriber.kind, subscriber.actions]), + [ + ["otel", ["shutdown"]], + ["openInference", ["register:openclaw.nemo-flow.openinference"]], + ], + ); + } finally { + await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + } + }); + + it("marks subscriber shutdown failure degraded in runtime health", async () => { + const modules = createModules({ subscriberFailures: { otelForceFlush: true } }); + const api = createApi({ + pluginConfig: { + atif: { enabled: false }, + telemetry: { + otel: { enabled: true }, + }, + }, + }); + let serviceStarted = false; + + registerNemoFlowPlugin(api, async () => modules); + const service = api.calls.services[0]; + assert.ok(service); + try { + await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + serviceStarted = true; + + await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + serviceStarted = false; + + const status = api.calls.gatewayMethods[0]?.handler(); + assert.ok(status); + assert.equal(status.status.state, "stopped"); + assert.equal(status.outputs.otel, "degraded"); + } finally { + if (serviceStarted) { + await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + } + } + }); + + it("removes beforeExit listener during normal stop", async () => { + const modules = createModules(); + const api = createApi(); + const before = process.listenerCount("beforeExit"); + + registerNemoFlowPlugin(api, async () => modules); + const service = api.calls.services[0]; + assert.ok(service); + await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + assert.equal(process.listenerCount("beforeExit"), before + 1); + + await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + assert.equal(process.listenerCount("beforeExit"), before); + }); + it("does not statically import nemo-flow-node or OpenClaw private src paths", () => { const files = [ readFileSync(new URL("../modules.js", import.meta.url), "utf8"), @@ -233,7 +364,7 @@ type TestApi = OpenClawPluginApiLike & { lifecycle: Parameters[0][]; gatewayMethods: Array<{ method: string; - handler: () => { status: { state: string }; initializedPluginHost: boolean }; + handler: () => NemoFlowHealthSnapshot; }>; hooks: Array<{ hookName: string; handler: OpenClawHookHandlerLike }>; }; @@ -287,6 +418,12 @@ function createApi(params: { type TestNemoFlowRuntime = NemoFlowModules["nf"] & { calls: { event: Array<{ name: string; handle: unknown; data: unknown }>; + subscribers: Array<{ + kind: "otel" | "openInference"; + name?: string; + config: Record; + actions: string[]; + }>; }; }; @@ -294,8 +431,11 @@ type TestModules = NemoFlowModules & { nf: TestNemoFlowRuntime; }; -function createModules(params: { validateDiagnostics?: Array<{ level: "warning" | "error"; code: string; message: string }> } = {}): TestModules { - const nf = createNemoFlowRuntime(); +function createModules(params: { + validateDiagnostics?: Array<{ level: "warning" | "error"; code: string; message: string }>; + subscriberFailures?: SubscriberFailures; +} = {}): TestModules { + const nf = createNemoFlowRuntime(params.subscriberFailures); return { nf, pluginHost: { @@ -307,10 +447,64 @@ function createModules(params: { validateDiagnostics?: Array<{ level: "warning" }; } -function createNemoFlowRuntime(): TestNemoFlowRuntime { +type SubscriberFailures = { + otelRegister?: boolean; + openInferenceRegister?: boolean; + otelForceFlush?: boolean; + openInferenceForceFlush?: boolean; + otelShutdown?: boolean; + openInferenceShutdown?: boolean; +}; + +function createNemoFlowRuntime(params: SubscriberFailures = {}): TestNemoFlowRuntime { const calls: TestNemoFlowRuntime["calls"] = { event: [], + subscribers: [], }; + const createSubscriber = ( + kind: "otel" | "openInference", + failures: { + register: boolean; + forceFlush: boolean; + shutdown: boolean; + }, + ) => + class { + private readonly record: TestNemoFlowRuntime["calls"]["subscribers"][number]; + + constructor(config?: Record) { + this.record = { kind, config: config ?? {}, actions: [] }; + calls.subscribers.push(this.record); + } + + register(name: string): void { + this.record.name = name; + if (failures.register) { + throw new Error(`${kind} register failed`); + } + this.record.actions.push(`register:${name}`); + } + + deregister(name: string): boolean { + this.record.actions.push(`deregister:${name}`); + return true; + } + + forceFlush(): void { + this.record.actions.push("forceFlush"); + if (failures.forceFlush) { + throw new Error(`${kind} forceFlush failed`); + } + } + + shutdown(): void { + this.record.actions.push("shutdown"); + if (failures.shutdown) { + throw new Error(`${kind} shutdown failed`); + } + } + }; + return { ScopeType: { Agent: 0 }, calls, @@ -325,8 +519,16 @@ function createNemoFlowRuntime(): TestNemoFlowRuntime { toolCall: () => ({}), toolCallEnd: () => {}, AtifExporter: FakeAtifExporter, - OpenTelemetrySubscriber: FakeSubscriber, - OpenInferenceSubscriber: FakeSubscriber, + OpenTelemetrySubscriber: createSubscriber("otel", { + register: params.otelRegister ?? false, + forceFlush: params.otelForceFlush ?? false, + shutdown: params.otelShutdown ?? false, + }), + OpenInferenceSubscriber: createSubscriber("openInference", { + register: params.openInferenceRegister ?? false, + forceFlush: params.openInferenceForceFlush ?? false, + shutdown: params.openInferenceShutdown ?? false, + }), }; } @@ -340,12 +542,3 @@ class FakeAtifExporter { } clear(): void {} } - -class FakeSubscriber { - register(): void {} - deregister(): boolean { - return true; - } - forceFlush(): void {} - shutdown(): void {} -} diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts index d810e252..63c571ed 100644 --- a/integrations/openclaw/src/__tests__/hooks-backend.test.ts +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -2,8 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 import assert from "node:assert/strict"; +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; import { describe, it } from "node:test"; +import { makeSafeSessionId } from "../atif-capture.js"; import { parseConfig } from "../config.js"; import { errorToJson, toJsonRecord } from "../hook-replay/marks.js"; import { HookReplayBackend } from "../hooks-backend.js"; @@ -133,6 +137,31 @@ describe("HookReplayBackend", () => { assert.equal(nf.calls.popScope.length, 1); }); + it("exports ATIF JSON through the session_end backend path", async () => { + const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "nemo-flow-backend-atif-")); + try { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, createLogger(), { + config: parseConfig({ atif: { enabled: true } }), + outputDir, + }); + + backend.onSessionStart({ sessionId: "../session:1" }, { sessionId: "../session:1" }); + await backend.onSessionEnd( + { sessionId: "../session:1", messageCount: 1, reason: "idle" }, + { sessionId: "../session:1" }, + ); + + const targetPath = path.join(outputDir, `${makeSafeSessionId("../session:1")}.json`); + assert.equal(await fs.readFile(targetPath, "utf8"), "{}"); + assert.equal(backend.state().counters.atifFilesWritten, 1); + assert.equal(backend.state().sessions.size, 0); + assert.equal(nf.calls.popScope.length, 1); + } finally { + await fs.rm(outputDir, { recursive: true, force: true }); + } + }); + it("emits blocked tool marks from after_tool_call only", () => { const nf = createNemoFlowRuntime(); const backend = createBackend(nf); @@ -292,13 +321,20 @@ type TestLogger = PluginLoggerLike & { }; }; -function createBackend(nf: TestNemoFlowRuntime, logger = createLogger()): HookReplayBackend { +function createBackend( + nf: TestNemoFlowRuntime, + logger = createLogger(), + options: { + config?: ReturnType; + outputDir?: string; + } = {}, +): HookReplayBackend { return new HookReplayBackend({ nf, - config: parseConfig(undefined), + config: options.config ?? parseConfig({ atif: { enabled: false } }), logger, agentVersion: "test-version", - resolvedAtifOutputDir: "/tmp/openclaw-state/plugins/nemo-flow/atif", + resolvedAtifOutputDir: options.outputDir ?? "/tmp/openclaw-state/plugins/nemo-flow/atif", markOutputDegraded: () => {}, }); } diff --git a/integrations/openclaw/src/__tests__/live-smoke.test.ts b/integrations/openclaw/src/__tests__/live-smoke.test.ts new file mode 100644 index 00000000..a4594d10 --- /dev/null +++ b/integrations/openclaw/src/__tests__/live-smoke.test.ts @@ -0,0 +1,154 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import assert from "node:assert/strict"; +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as path from "node:path"; +import { it } from "node:test"; + +import { makeSafeSessionId } from "../atif-capture.js"; +import { registerNemoFlowPlugin } from "../runtime-state.js"; +import type { NemoFlowHealthSnapshot } from "../health.js"; +import type { NemoFlowModules } from "../modules.js"; +import type { OpenClawHookHandlerLike, OpenClawPluginApiLike, PluginLoggerLike } from "../types.js"; + +const liveSmokeEnabled = process.env.NEMO_FLOW_OPENCLAW_LIVE_SMOKE === "1"; + +it( + "runs a live NeMo Flow binding smoke for session ATIF export", + { skip: !liveSmokeEnabled }, + async () => { + const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "nemo-flow-openclaw-live-")); + const modules = await loadRealNemoFlowModules(); + const api = createApi({ + pluginConfig: { + atif: { + enabled: true, + outputDir, + }, + telemetry: { + otel: { enabled: false }, + openInference: { enabled: false }, + }, + }, + }); + let serviceStarted = false; + + try { + registerNemoFlowPlugin(api, async () => modules); + + const service = api.calls.services[0]; + assert.ok(service, "expected OpenClaw service registration"); + await service.start({ + stateDir: outputDir, + logger: api.logger, + }); + serviceStarted = true; + + const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); + const sessionEnd = api.calls.hooks.find((hook) => hook.hookName === "session_end"); + assert.ok(sessionStart, "expected session_start hook registration"); + assert.ok(sessionEnd, "expected session_end hook registration"); + + await sessionStart.handler({ sessionId: "../live-session:1" }, { sessionId: "../live-session:1" }); + await sessionEnd.handler( + { sessionId: "../live-session:1", messageCount: 1, reason: "idle" }, + { sessionId: "../live-session:1" }, + ); + + const targetPath = path.join(outputDir, `${makeSafeSessionId("../live-session:1")}.json`); + const exported = JSON.parse(await fs.readFile(targetPath, "utf8")) as unknown; + assert.equal(typeof exported, "object"); + + const status = api.calls.gatewayMethods[0]?.handler(); + assert.ok(status); + assert.equal(status.outputs.atif, "enabled"); + assert.equal(status.counters.atifFilesWritten, 1); + + } finally { + if (serviceStarted) { + await api.calls.services[0]?.stop?.({ + stateDir: outputDir, + logger: api.logger, + }); + } + await fs.rm(outputDir, { recursive: true, force: true }); + } + }, +); + +type TestApi = OpenClawPluginApiLike & { + calls: { + services: Parameters[0][]; + lifecycle: Parameters[0][]; + gatewayMethods: Array<{ + method: string; + handler: () => NemoFlowHealthSnapshot; + }>; + hooks: Array<{ hookName: string; handler: OpenClawHookHandlerLike }>; + }; +}; + +function createApi(params: { pluginConfig: Record }): TestApi { + const calls: TestApi["calls"] = { + services: [], + lifecycle: [], + gatewayMethods: [], + hooks: [], + }; + const logger: PluginLoggerLike = { + info: () => {}, + warn: () => {}, + }; + + return { + id: "nemo-flow", + version: "live-smoke", + registrationMode: "full", + pluginConfig: params.pluginConfig, + logger, + resolvePath: (input) => input, + registerService: (service) => calls.services.push(service), + registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), + on: (hookName, handler) => calls.hooks.push({ hookName, handler }), + registerGatewayMethod: (method, handler) => + calls.gatewayMethods.push({ + method, + handler: handler as TestApi["calls"]["gatewayMethods"][number]["handler"], + }), + calls, + }; +} + +async function loadRealNemoFlowModules(): Promise { + let nf: unknown; + let pluginHost: unknown; + try { + [nf, pluginHost] = await Promise.all([ + import("nemo-flow-node"), + import("nemo-flow-node/plugin"), + ]); + } catch (error) { + if (isMissingLocalNemoFlowNode(error)) { + throw new Error( + "Live smoke requires the local nemo-flow-node native package to be built. From the NeMo-Flow repo root, run `npm --prefix crates/node run build`, then rerun `npm --prefix integrations/openclaw run test:live`.", + ); + } + throw error; + } + + return { + nf: nf as unknown as NemoFlowModules["nf"], + pluginHost: pluginHost as unknown as NemoFlowModules["pluginHost"], + }; +} + +function isMissingLocalNemoFlowNode(error: unknown): boolean { + return ( + error instanceof Error && + "code" in error && + error.code === "ERR_MODULE_NOT_FOUND" && + error.message.includes("nemo-flow-node") + ); +} diff --git a/integrations/openclaw/src/__tests__/telemetry.test.ts b/integrations/openclaw/src/__tests__/telemetry.test.ts new file mode 100644 index 00000000..bbef39aa --- /dev/null +++ b/integrations/openclaw/src/__tests__/telemetry.test.ts @@ -0,0 +1,107 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +import { shutdownTelemetrySubscribers, type TelemetrySubscriberEntry } from "../telemetry.js"; +import type { NemoFlowSubscriber } from "../modules.js"; +import type { PluginLoggerLike } from "../types.js"; + +describe("telemetry subscriber shutdown", () => { + it("continues force flush and shutdown when deregister throws", () => { + const subscriber = new TestSubscriber({ deregisterThrows: true }); + const degraded: string[] = []; + + shutdownTelemetrySubscribers({ + subscribers: [entry("otel", "otel-test", subscriber)], + logger: createLogger(), + markOutputDegraded: (output) => degraded.push(output), + }); + + assert.deepEqual(subscriber.actions, ["deregister:otel-test", "forceFlush", "shutdown"]); + assert.deepEqual(degraded, ["otel"]); + }); + + it("marks output degraded and continues shutdown when forceFlush throws", () => { + const subscriber = new TestSubscriber({ forceFlushThrows: true }); + const degraded: string[] = []; + + shutdownTelemetrySubscribers({ + subscribers: [entry("openInference", "oi-test", subscriber)], + logger: createLogger(), + markOutputDegraded: (output) => degraded.push(output), + }); + + assert.deepEqual(subscriber.actions, ["deregister:oi-test", "forceFlush", "shutdown"]); + assert.deepEqual(degraded, ["openInference"]); + }); + + it("marks output degraded and continues shutting down other subscribers when shutdown throws", () => { + const first = new TestSubscriber({ shutdownThrows: true }); + const second = new TestSubscriber(); + const degraded: string[] = []; + + shutdownTelemetrySubscribers({ + subscribers: [entry("otel", "otel-test", first), entry("openInference", "oi-test", second)], + logger: createLogger(), + markOutputDegraded: (output) => degraded.push(output), + }); + + assert.deepEqual(first.actions, ["deregister:otel-test", "forceFlush", "shutdown"]); + assert.deepEqual(second.actions, ["deregister:oi-test", "forceFlush", "shutdown"]); + assert.deepEqual(degraded, ["otel"]); + }); +}); + +function entry( + output: "otel" | "openInference", + name: string, + subscriber: NemoFlowSubscriber, +): TelemetrySubscriberEntry { + return { output, name, subscriber }; +} + +function createLogger(): PluginLoggerLike { + return { + warn: () => {}, + }; +} + +class TestSubscriber implements NemoFlowSubscriber { + readonly actions: string[] = []; + + constructor( + private readonly failures: { + deregisterThrows?: boolean; + forceFlushThrows?: boolean; + shutdownThrows?: boolean; + } = {}, + ) {} + + register(name: string): void { + this.actions.push(`register:${name}`); + } + + deregister(name: string): boolean { + this.actions.push(`deregister:${name}`); + if (this.failures.deregisterThrows) { + throw new Error("deregister failed"); + } + return true; + } + + forceFlush(): void { + this.actions.push("forceFlush"); + if (this.failures.forceFlushThrows) { + throw new Error("force flush failed"); + } + } + + shutdown(): void { + this.actions.push("shutdown"); + if (this.failures.shutdownThrows) { + throw new Error("shutdown failed"); + } + } +} diff --git a/integrations/openclaw/src/atif-capture.ts b/integrations/openclaw/src/atif-capture.ts new file mode 100644 index 00000000..4dd0db1b --- /dev/null +++ b/integrations/openclaw/src/atif-capture.ts @@ -0,0 +1,152 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import * as fs from "node:fs/promises"; +import * as path from "node:path"; + +import type { SessionManager, SessionState } from "./hook-replay/session.js"; + +export function createAtifExporter(manager: SessionManager, session: SessionState): void { + if (!manager.config.atif.enabled || session.atif) { + return; + } + + try { + session.atif = { + exporter: new manager.nf.AtifExporter( + session.sessionId, + manager.config.atif.agentName, + manager.agentVersion, + null, + ), + registrationName: `openclaw.nemo-flow.atif.${makeSafeSessionId(session.sessionId)}`, + capturing: false, + }; + } catch (error) { + manager.markOutputDegraded("atif"); + manager.state.counters.replayErrors += 1; + manager.logBoundedWarn( + `atif_constructor_failed:${session.sessionId}`, + `nemo-flow failed to construct ATIF exporter for session ${session.sessionId}: ${toMessage(error)}`, + ); + } +} + +export function withAtifCapture( + manager: SessionManager, + session: SessionState, + emit: () => void, +): void { + const { state, logBoundedWarn, markOutputDegraded } = manager; + if (!session.atif || session.atif.disabled) { + emit(); + return; + } + if (session.atif.capturing) { + emit(); + return; + } + + session.atif.capturing = true; + let registered = false; + try { + session.atif.exporter.register(session.atif.registrationName); + registered = true; + session.atif.registeredOnce = true; + emit(); + } catch (error) { + if (!registered) { + session.atif.disabled = true; + markOutputDegraded("atif"); + state.counters.replayErrors += 1; + logBoundedWarn( + `atif_register_failed:${session.atif.registrationName}`, + `nemo-flow failed to register ATIF capture ${session.atif.registrationName}; disabling ATIF for session ${session.sessionId}: ${toMessage(error)}`, + ); + emit(); + return; + } + throw error; + } finally { + if (registered) { + try { + const removed = session.atif.exporter.deregister(session.atif.registrationName); + if (!removed) { + session.atif.leakedRegistration = true; + session.atif.disabled = true; + markOutputDegraded("atif"); + state.counters.replayErrors += 1; + logBoundedWarn( + `atif_deregister_missing:${session.atif.registrationName}`, + `nemo-flow ATIF capture ${session.atif.registrationName} was already deregistered; disabling ATIF for session ${session.sessionId} to avoid duplicate global subscribers`, + ); + } + } catch (error) { + session.atif.leakedRegistration = true; + session.atif.disabled = true; + markOutputDegraded("atif"); + state.counters.replayErrors += 1; + logBoundedWarn( + `atif_deregister_failed:${session.atif.registrationName}`, + `nemo-flow failed to deregister ATIF capture ${session.atif.registrationName}; disabling ATIF for session ${session.sessionId} to avoid duplicate global subscribers: ${toMessage(error)}`, + ); + } + } + session.atif.capturing = false; + } +} + +export async function exportAtifJson(manager: SessionManager, session: SessionState): Promise { + if (!session.atif) { + return; + } + if (session.atif.disabled && !session.atif.registeredOnce) { + clearAtifExporter(manager, session, session.atif); + delete session.atif; + return; + } + + const atif = session.atif; + try { + await fs.mkdir(manager.resolvedAtifOutputDir, { recursive: true }); + const targetPath = path.join(manager.resolvedAtifOutputDir, `${makeSafeSessionId(session.sessionId)}.json`); + await fs.writeFile(targetPath, atif.exporter.exportJson(), "utf8"); + manager.state.counters.atifFilesWritten += 1; + } catch (error) { + manager.markOutputDegraded("atif"); + manager.state.counters.replayErrors += 1; + manager.logBoundedWarn( + `atif_export_failed:${session.sessionId}`, + `nemo-flow failed to export ATIF for session ${session.sessionId}: ${toMessage(error)}`, + ); + } finally { + clearAtifExporter(manager, session, atif); + delete session.atif; + } +} + +export function makeSafeSessionId(sessionId: string): string { + const encoded = Buffer.from(sessionId, "utf8").toString("base64url"); + return encoded.length > 0 ? encoded : "empty-session-id"; +} + +function toMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} + +function clearAtifExporter( + manager: SessionManager, + session: SessionState, + atif: NonNullable, +): void { + try { + atif.exporter.clear(); + } catch (error) { + manager.markOutputDegraded("atif"); + manager.state.counters.replayErrors += 1; + manager.logBoundedWarn( + `atif_clear_failed:${session.sessionId}`, + `nemo-flow failed to clear ATIF exporter for session ${session.sessionId}: ${toMessage(error)}`, + ); + } +} diff --git a/integrations/openclaw/src/health.ts b/integrations/openclaw/src/health.ts index bcc7a3cc..2a691639 100644 --- a/integrations/openclaw/src/health.ts +++ b/integrations/openclaw/src/health.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +import type { NemoFlowHookBackendConfig } from "./config.js"; +import type { HookReplayBackendState, SessionState } from "./hook-replay/session.js"; + export type HookReplayBackendStatus = | { state: "not_initialized"; reason?: string } | { state: "disabled"; reason?: string } @@ -9,21 +12,84 @@ export type HookReplayBackendStatus = | { state: "stopping" } | { state: "stopped"; reason?: string }; +export type OutputHealthState = "enabled" | "disabled" | "degraded"; + export type NemoFlowHealthSnapshot = { id: "nemo-flow"; backend: "hooks"; status: HookReplayBackendStatus; initializedPluginHost: boolean; + state: HookReplayBackendStatus["state"]; + outputs: { + atif: OutputHealthState; + otel: OutputHealthState; + openInference: OutputHealthState; + }; + counters: HookReplayBackendState["counters"]; + lastError?: string; }; export function createHealthSnapshot(params: { status: HookReplayBackendStatus; initializedPluginHost: boolean; + config: NemoFlowHookBackendConfig; + degradedOutputs: ReadonlySet<"atif" | "otel" | "openInference">; + counters?: HookReplayBackendState["counters"]; + sessions?: Iterable; }): NemoFlowHealthSnapshot { + const lastError = "reason" in params.status ? params.status.reason : undefined; return { id: "nemo-flow", backend: "hooks", status: params.status, initializedPluginHost: params.initializedPluginHost, + state: params.status.state, + outputs: { + atif: atifOutputHealth(params.config, params.degradedOutputs, params.sessions), + otel: telemetryOutputHealth(params.config.telemetry.otel.enabled, params.degradedOutputs.has("otel")), + openInference: telemetryOutputHealth( + params.config.telemetry.openInference.enabled, + params.degradedOutputs.has("openInference"), + ), + }, + counters: params.counters ?? emptyCounters(), + ...(lastError === undefined ? {} : { lastError }), + }; +} + +function atifOutputHealth( + config: NemoFlowHookBackendConfig, + degradedOutputs: ReadonlySet<"atif" | "otel" | "openInference">, + sessions: Iterable | undefined, +): OutputHealthState { + if (!config.atif.enabled) { + return "disabled"; + } + if (degradedOutputs.has("atif")) { + return "degraded"; + } + for (const session of sessions ?? []) { + if (session.atif?.disabled || session.atif?.leakedRegistration) { + return "degraded"; + } + } + return "enabled"; +} + +function telemetryOutputHealth(enabled: boolean, degraded: boolean): OutputHealthState { + if (!enabled) { + return "disabled"; + } + return degraded ? "degraded" : "enabled"; +} + +function emptyCounters(): HookReplayBackendState["counters"] { + return { + llmSpansReplayed: 0, + toolSpansReplayed: 0, + marksEmitted: 0, + atifFilesWritten: 0, + replayErrors: 0, + skippedEvents: 0, }; } diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts index 3f9754e4..57d076f4 100644 --- a/integrations/openclaw/src/hook-replay/session.ts +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { NemoFlowHookBackendConfig } from "../config.js"; +import { createAtifExporter } from "../atif-capture.js"; import type { AtifExporterLike } from "../modules.js"; import type { PluginHookModelCallEndedEvent } from "../openclaw-hook-types.js"; import type { JsonRecord, PluginLoggerLike } from "../types.js"; @@ -33,6 +34,7 @@ export type SessionState = { exporter: AtifExporterLike; registrationName: string; capturing: boolean; + registeredOnce?: boolean; disabled?: boolean; leakedRegistration?: boolean; }; @@ -180,6 +182,7 @@ export function ensureSession(manager: SessionManager, input: EnsureSessionInput session.resumedFrom = input.resumedFrom; } + createAtifExporter(manager, session); openSessionRoot(manager, session, input); manager.state.sessions.set(session.sessionId, session); rememberSessionAliases(manager.state, session, input); diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts index 9f235044..91f66606 100644 --- a/integrations/openclaw/src/hooks-backend.ts +++ b/integrations/openclaw/src/hooks-backend.ts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { NemoFlowHookBackendConfig } from "./config.js"; +import { exportAtifJson, withAtifCapture } from "./atif-capture.js"; import { emitMark, blockedToolDetails, toJsonRecord } from "./hook-replay/marks.js"; import { createHookReplayState, @@ -98,7 +99,7 @@ export class HookReplayBackend { return; } - this.closeSession(session, sessionEndSummary(event)); + await this.closeSession(session, sessionEndSummary(event)); } onLlmInput(event: PluginHookLlmInputEvent, ctx: PluginHookAgentContext): void { @@ -303,11 +304,11 @@ export class HookReplayBackend { } async drainForGatewayStop(reason?: string): Promise { - this.closeAllSessions({ reason: reason ?? "gateway_stop" }); + await this.closeAllSessions({ reason: reason ?? "gateway_stop" }); } async stop(reason: string): Promise { - this.closeAllSessions({ reason }); + await this.closeAllSessions({ reason }); } safeReplay(label: string, session: SessionState | undefined, emit: () => void): void { @@ -390,9 +391,10 @@ export class HookReplayBackend { return ensureSession(this.sessionManager(), input); } - private closeSession(session: SessionState, summary: JsonRecord): void { + private async closeSession(session: SessionState, summary: JsonRecord): Promise { drainSession(this.sessionManager(), session); closeSessionRoot(this.sessionManager(), session, summary); + await exportAtifJson(this.sessionManager(), session); deleteSession(this.stateValue, session); } @@ -408,14 +410,14 @@ export class HookReplayBackend { }); } - private closeAllSessions(summary: JsonRecord): void { + private async closeAllSessions(summary: JsonRecord): Promise { for (const session of [...this.stateValue.sessions.values()]) { - this.closeSession(session, summary); + await this.closeSession(session, summary); } } private withAtifCapture(_session: SessionState, emit: () => void): void { - emit(); + withAtifCapture(this.sessionManager(), _session, emit); } private sessionManager() { diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index fb0e4e14..ec9172fd 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -6,14 +6,19 @@ import * as path from "node:path"; import { parseConfig } from "./config.js"; import type { NemoFlowHookBackendConfig } from "./config.js"; import { createHealthSnapshot, type HookReplayBackendStatus } from "./health.js"; +import type { HookReplayCounters } from "./hook-replay/session.js"; import { HookReplayBackend } from "./hooks-backend.js"; import { defaultNemoFlowModuleLoader, type ConfigDiagnostic, type NemoFlowModules, type NemoFlowModuleLoader, - type NemoFlowSubscriber, } from "./modules.js"; +import { + registerTelemetrySubscribers, + shutdownTelemetrySubscribers, + type TelemetrySubscriberEntry, +} from "./telemetry.js"; import type { PluginHookAfterToolCallEvent, PluginHookAgentContext, @@ -60,11 +65,8 @@ export class NemoFlowRuntimeState { private started = false; private beforeExitListener?: () => void; private unavailableLogged = false; - private telemetrySubscribers: Array<{ - output: "otel" | "openInference"; - name: string; - subscriber: NemoFlowSubscriber; - }> = []; + private telemetrySubscribers: TelemetrySubscriberEntry[] = []; + private lastCounters?: HookReplayCounters; private readonly degradedOutputs = new Set<"atif" | "otel" | "openInference">(); constructor(options: RuntimeStateOptions) { @@ -78,9 +80,20 @@ export class NemoFlowRuntimeState { } health() { + const backendState = this.backendValue?.state(); return createHealthSnapshot({ status: this.statusValue, initializedPluginHost: this.initializedPluginHost, + config: this.config, + degradedOutputs: this.degradedOutputs, + ...(backendState === undefined + ? this.lastCounters === undefined + ? {} + : { counters: this.lastCounters } + : { + counters: backendState.counters, + sessions: backendState.sessions.values(), + }), }); } @@ -89,6 +102,9 @@ export class NemoFlowRuntimeState { return; } + delete this.lastCounters; + this.degradedOutputs.clear(); + let modules: NemoFlowModules; try { this.loadPromise ??= this.moduleLoader(); @@ -138,6 +154,17 @@ export class NemoFlowRuntimeState { } } + const degradedOutputCount = this.degradedOutputs.size; + this.telemetrySubscribers = registerTelemetrySubscribers({ + nf: modules.nf, + config: this.config, + logger: ctx.logger, + markOutputDegraded: (output) => this.markOutputDegraded(output), + }); + if (this.degradedOutputs.size > degradedOutputCount && degradedReason === undefined) { + degradedReason = "one or more NeMo Flow telemetry outputs failed to initialize"; + } + this.backendValue = new HookReplayBackend({ nf: modules.nf, config: this.config, @@ -146,6 +173,7 @@ export class NemoFlowRuntimeState { resolvedAtifOutputDir: resolveAtifOutputDir(this.config, ctx), markOutputDegraded: (output) => this.markOutputDegraded(output), }); + this.registerBeforeExit(ctx.logger); this.started = true; this.statusValue = degradedReason === undefined ? { state: "ready" } : { state: "degraded", reason: degradedReason }; } @@ -161,14 +189,26 @@ export class NemoFlowRuntimeState { this.statusValue = { state: "stopping" }; const log = logger ?? this.api.logger; + this.removeBeforeExitListener(); try { await this.backendValue?.drainForGatewayStop(reason); } catch (error) { log.warn?.(`failed to stop NeMo Flow hook backend: ${toMessage(error)}`); } + const backendState = this.backendValue?.state(); + if (backendState) { + this.lastCounters = { ...backendState.counters }; + } this.backendValue = undefined; + shutdownTelemetrySubscribers({ + subscribers: this.telemetrySubscribers, + logger: log, + markOutputDegraded: (output) => this.markOutputDegraded(output), + }); + this.telemetrySubscribers = []; + if (this.initializedPluginHost && this.modulesValue) { try { this.modulesValue.pluginHost.clear(); @@ -284,6 +324,27 @@ export class NemoFlowRuntimeState { private markOutputDegraded(output: "atif" | "otel" | "openInference"): void { this.degradedOutputs.add(output); } + + private registerBeforeExit(logger: PluginLoggerLike): void { + if (this.beforeExitListener) { + return; + } + const listener = () => { + void this.cleanup("beforeExit").catch((error) => { + logger.warn?.(`nemo-flow beforeExit cleanup failed: ${toMessage(error)}`); + }); + }; + process.on("beforeExit", listener); + this.beforeExitListener = listener; + } + + private removeBeforeExitListener(): void { + if (!this.beforeExitListener) { + return; + } + process.removeListener("beforeExit", this.beforeExitListener); + delete this.beforeExitListener; + } } export function registerNemoFlowPlugin( diff --git a/integrations/openclaw/src/telemetry.ts b/integrations/openclaw/src/telemetry.ts new file mode 100644 index 00000000..38f7b3da --- /dev/null +++ b/integrations/openclaw/src/telemetry.ts @@ -0,0 +1,126 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import type { NemoFlowHookBackendConfig, TelemetrySinkConfig } from "./config.js"; +import type { NemoFlowRuntimeModule, NemoFlowSubscriber } from "./modules.js"; +import type { PluginLoggerLike } from "./types.js"; + +export type TelemetrySubscriberEntry = { + output: "otel" | "openInference"; + name: string; + subscriber: NemoFlowSubscriber; +}; + +export type RegisterTelemetrySubscribersOptions = { + nf: NemoFlowRuntimeModule; + config: NemoFlowHookBackendConfig; + logger: PluginLoggerLike; + markOutputDegraded: (output: "otel" | "openInference") => void; +}; + +export function registerTelemetrySubscribers( + options: RegisterTelemetrySubscribersOptions, +): TelemetrySubscriberEntry[] { + const entries: TelemetrySubscriberEntry[] = []; + const outputs: Array<{ + name: string; + configKey: "otel" | "openInference"; + sinkConfig: TelemetrySinkConfig; + Ctor: typeof options.nf.OpenTelemetrySubscriber | typeof options.nf.OpenInferenceSubscriber; + }> = []; + + if (options.config.telemetry.otel.enabled) { + outputs.push({ + name: "openclaw.nemo-flow.otel", + configKey: "otel", + sinkConfig: options.config.telemetry.otel, + Ctor: options.nf.OpenTelemetrySubscriber, + }); + } + + if (options.config.telemetry.openInference.enabled) { + outputs.push({ + name: "openclaw.nemo-flow.openinference", + configKey: "openInference", + sinkConfig: options.config.telemetry.openInference, + Ctor: options.nf.OpenInferenceSubscriber, + }); + } + + for (const output of outputs) { + let subscriber: NemoFlowSubscriber | undefined; + try { + subscriber = new output.Ctor(toSubscriberConfig(output.sinkConfig)); + subscriber.register(output.name); + entries.push({ output: output.configKey, name: output.name, subscriber }); + } catch (error) { + options.markOutputDegraded(output.configKey); + options.logger.warn?.( + `nemo-flow failed to register subscriber ${output.name}: ${toMessage(error)}`, + ); + if (subscriber) { + try { + subscriber.shutdown(); + } catch (cleanupError) { + options.logger.warn?.( + `nemo-flow failed to cleanup subscriber ${output.name} after registration failure: ${toMessage(cleanupError)}`, + ); + } + } + } + } + + return entries; +} + +export function shutdownTelemetrySubscribers(params: { + subscribers: TelemetrySubscriberEntry[]; + logger: PluginLoggerLike; + markOutputDegraded: (output: "otel" | "openInference") => void; +}): void { + for (const { output, name, subscriber } of params.subscribers) { + try { + const removed = subscriber.deregister(name); + if (!removed) { + params.markOutputDegraded(output); + params.logger.warn?.(`nemo-flow subscriber ${name} was already deregistered before shutdown`); + } + } catch (error) { + params.markOutputDegraded(output); + params.logger.warn?.(`nemo-flow failed to deregister subscriber ${name}: ${toMessage(error)}`); + } + + try { + subscriber.forceFlush(); + } catch (error) { + params.markOutputDegraded(output); + params.logger.warn?.(`nemo-flow failed to flush subscriber ${name}: ${toMessage(error)}`); + } + + try { + subscriber.shutdown(); + } catch (error) { + params.markOutputDegraded(output); + params.logger.warn?.(`nemo-flow failed to shutdown subscriber ${name}: ${toMessage(error)}`); + } + } +} + +function toSubscriberConfig(config: TelemetrySinkConfig): Record { + const raw = { + transport: config.transport, + endpoint: config.endpoint, + headers: config.headers, + resourceAttributes: config.resourceAttributes, + serviceName: config.serviceName, + serviceNamespace: config.serviceNamespace, + serviceVersion: config.serviceVersion, + instrumentationScope: config.instrumentationScope, + timeoutMillis: config.timeoutMillis, + }; + return Object.fromEntries(Object.entries(raw).filter(([, value]) => value !== undefined)); +} + +function toMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} From 115ea3817cf1669a142e1da8640fdcad72fcc974 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Wed, 6 May 2026 23:10:19 -0700 Subject: [PATCH 05/30] feat: add OpenClaw LLM and tool replay Signed-off-by: mnajafian-nv --- .../src/__tests__/failure-model.test.ts | 106 +++ .../src/__tests__/hooks-backend.test.ts | 3 +- .../openclaw/src/__tests__/live-smoke.test.ts | 50 +- .../openclaw/src/__tests__/llm-replay.test.ts | 529 +++++++++++++++ .../src/__tests__/tool-replay.test.ts | 212 ++++++ .../openclaw/src/hook-replay/correlation.ts | 63 ++ integrations/openclaw/src/hook-replay/llm.ts | 621 ++++++++++++++++++ .../openclaw/src/hook-replay/marks.ts | 10 +- .../openclaw/src/hook-replay/session.ts | 87 ++- integrations/openclaw/src/hook-replay/tool.ts | 82 +++ integrations/openclaw/src/hooks-backend.ts | 131 +--- 11 files changed, 1773 insertions(+), 121 deletions(-) create mode 100644 integrations/openclaw/src/__tests__/failure-model.test.ts create mode 100644 integrations/openclaw/src/__tests__/llm-replay.test.ts create mode 100644 integrations/openclaw/src/__tests__/tool-replay.test.ts create mode 100644 integrations/openclaw/src/hook-replay/correlation.ts create mode 100644 integrations/openclaw/src/hook-replay/llm.ts create mode 100644 integrations/openclaw/src/hook-replay/tool.ts diff --git a/integrations/openclaw/src/__tests__/failure-model.test.ts b/integrations/openclaw/src/__tests__/failure-model.test.ts new file mode 100644 index 00000000..5842ef91 --- /dev/null +++ b/integrations/openclaw/src/__tests__/failure-model.test.ts @@ -0,0 +1,106 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +import { parseConfig } from "../config.js"; +import { HookReplayBackend } from "../hooks-backend.js"; +import type { NemoFlowRuntimeModule } from "../modules.js"; +import type { PluginLoggerLike } from "../types.js"; + +describe("Replay failure model", () => { + it("grace timer replay failure is caught and counted", async () => { + const logger = createLogger(); + const backend = new HookReplayBackend({ + nf: createThrowingLlmRuntime(), + config: parseConfig({ + atif: { enabled: false }, + correlation: { llmOutputGraceMs: 1 }, + }), + logger, + agentVersion: "test-version", + resolvedAtifOutputDir: "/tmp/openclaw-state/plugins/nemo-flow/atif", + markOutputDegraded: () => {}, + }); + + backend.onLlmOutput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + assistantTexts: ["hi"], + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + await delay(10); + + assert.equal(backend.state().counters.replayErrors, 1); + assert.equal(logger.messages.warn.length, 1); + assert.match(logger.messages.warn[0] ?? "", /llm_output/); + }); +}); + +type TestLogger = PluginLoggerLike & { + messages: { + warn: string[]; + }; +}; + +function createLogger(): TestLogger { + const messages: TestLogger["messages"] = { warn: [] }; + return { + messages, + info: () => {}, + warn: (message) => messages.warn.push(message), + }; +} + +function createThrowingLlmRuntime(): NemoFlowRuntimeModule { + let nextScopeId = 0; + const previousStack = { id: "previous" }; + return { + ScopeType: { Agent: 0 }, + createScopeStack: () => ({ id: `stack-${nextScopeId++}` }), + currentScopeStack: () => previousStack, + setThreadScopeStack: () => {}, + pushScope: () => ({ id: `scope-${nextScopeId++}` }), + popScope: () => {}, + event: () => {}, + llmCall: () => { + throw new Error("llmCall failed"); + }, + llmCallEnd: () => {}, + toolCall: () => ({}), + toolCallEnd: () => {}, + AtifExporter: FakeAtifExporter, + OpenTelemetrySubscriber: FakeSubscriber, + OpenInferenceSubscriber: FakeSubscriber, + }; +} + +function delay(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +class FakeAtifExporter { + register(): void {} + deregister(): boolean { + return true; + } + exportJson(): string { + return "{}"; + } + clear(): void {} +} + +class FakeSubscriber { + register(): void {} + deregister(): boolean { + return true; + } + forceFlush(): void {} + shutdown(): void {} +} diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts index 63c571ed..0c082fc5 100644 --- a/integrations/openclaw/src/__tests__/hooks-backend.test.ts +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -125,7 +125,8 @@ describe("HookReplayBackend", () => { assert.equal(backend.state().sessionAliases.size, 0); assert.equal(backend.state().llmInputs.size, 0); assert.equal(backend.state().llmOutputsPendingInput.size, 0); - assert.equal(backend.state().modelCallsByRun.size, 0); + assert.equal(backend.state().modelCallsByCallId.size, 0); + assert.equal(backend.state().modelTimingsByLlmKey.size, 0); assert.deepEqual( nf.calls.event.map((event) => event.name), [ diff --git a/integrations/openclaw/src/__tests__/live-smoke.test.ts b/integrations/openclaw/src/__tests__/live-smoke.test.ts index a4594d10..252b0de4 100644 --- a/integrations/openclaw/src/__tests__/live-smoke.test.ts +++ b/integrations/openclaw/src/__tests__/live-smoke.test.ts @@ -16,7 +16,7 @@ import type { OpenClawHookHandlerLike, OpenClawPluginApiLike, PluginLoggerLike } const liveSmokeEnabled = process.env.NEMO_FLOW_OPENCLAW_LIVE_SMOKE === "1"; it( - "runs a live NeMo Flow binding smoke for session ATIF export", + "runs a live NeMo Flow binding smoke for session ATIF export and hook replay", { skip: !liveSmokeEnabled }, async () => { const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "nemo-flow-openclaw-live-")); @@ -47,11 +47,57 @@ it( serviceStarted = true; const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); + const llmInput = api.calls.hooks.find((hook) => hook.hookName === "llm_input"); + const llmOutput = api.calls.hooks.find((hook) => hook.hookName === "llm_output"); + const afterToolCall = api.calls.hooks.find((hook) => hook.hookName === "after_tool_call"); const sessionEnd = api.calls.hooks.find((hook) => hook.hookName === "session_end"); assert.ok(sessionStart, "expected session_start hook registration"); + assert.ok(llmInput, "expected llm_input hook registration"); + assert.ok(llmOutput, "expected llm_output hook registration"); + assert.ok(afterToolCall, "expected after_tool_call hook registration"); assert.ok(sessionEnd, "expected session_end hook registration"); await sessionStart.handler({ sessionId: "../live-session:1" }, { sessionId: "../live-session:1" }); + await llmInput.handler( + { + runId: "live-run-1", + sessionId: "../live-session:1", + provider: "openai", + model: "gpt-live", + systemPrompt: "be concise", + prompt: "hello", + historyMessages: [], + imagesCount: 0, + }, + { runId: "live-run-1", sessionId: "../live-session:1", agentId: "agent-live" }, + ); + await llmOutput.handler( + { + runId: "live-run-1", + sessionId: "../live-session:1", + provider: "openai", + model: "gpt-live", + assistantTexts: ["hi"], + usage: { input: 1, output: 1 }, + }, + { runId: "live-run-1", sessionId: "../live-session:1", agentId: "agent-live" }, + ); + await afterToolCall.handler( + { + toolName: "read_file", + params: { path: "README.md" }, + runId: "live-run-1", + toolCallId: "tool-live-1", + result: { text: "ok" }, + durationMs: 2, + }, + { + runId: "live-run-1", + sessionId: "../live-session:1", + toolName: "read_file", + toolCallId: "tool-live-1", + }, + ); await sessionEnd.handler( { sessionId: "../live-session:1", messageCount: 1, reason: "idle" }, { sessionId: "../live-session:1" }, @@ -64,6 +110,8 @@ it( const status = api.calls.gatewayMethods[0]?.handler(); assert.ok(status); assert.equal(status.outputs.atif, "enabled"); + assert.equal(status.counters.llmSpansReplayed, 1); + assert.equal(status.counters.toolSpansReplayed, 1); assert.equal(status.counters.atifFilesWritten, 1); } finally { diff --git a/integrations/openclaw/src/__tests__/llm-replay.test.ts b/integrations/openclaw/src/__tests__/llm-replay.test.ts new file mode 100644 index 00000000..db232174 --- /dev/null +++ b/integrations/openclaw/src/__tests__/llm-replay.test.ts @@ -0,0 +1,529 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +import { parseConfig } from "../config.js"; +import { HookReplayBackend } from "../hooks-backend.js"; +import type { NemoFlowRuntimeModule } from "../modules.js"; +import type { PluginLoggerLike } from "../types.js"; + +describe("LLM replay", () => { + it("replays llm output with buffered input under the session root", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onLlmInput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + systemPrompt: "be concise", + prompt: "hello", + historyMessages: [], + imagesCount: 0, + }, + { runId: "run-1", sessionId: "session-1", agentId: "agent-1" }, + ); + backend.onLlmOutput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + assistantTexts: ["hi"], + resolvedRef: "provider/model", + harnessId: "harness-1", + usage: { input: 2, output: 3 }, + }, + { runId: "run-1", sessionId: "session-1", agentId: "agent-1" }, + ); + + assert.equal(nf.calls.llmCall.length, 1); + assert.equal(nf.calls.llmCallEnd.length, 1); + assert.equal(backend.state().counters.llmSpansReplayed, 1); + assert.equal(backend.state().llmInputs.size, 0); + const request = nf.calls.llmCall[0]?.request as ReplayRequest; + assert.deepEqual(request.content.messages, [{ role: "user", content: "hello" }]); + assert.equal(request.content.systemPrompt, "be concise"); + const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; + assert.equal(response.content, "hi"); + assert.deepEqual(response.token_usage, { + prompt_tokens: 2, + completion_tokens: 3, + total_tokens: 5, + }); + }); + + it("replays pending output when matching input arrives and cancels pending queue", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { llmOutputGraceMs: 10_000 }); + + backend.onLlmOutput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + assistantTexts: ["hi"], + }, + { runId: "run-1", sessionId: "session-1" }, + ); + assert.equal(backend.state().llmOutputsPendingInput.size, 1); + + backend.onLlmInput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + prompt: "hello", + historyMessages: [], + imagesCount: 0, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + assert.equal(backend.state().llmOutputsPendingInput.size, 0); + assert.equal(nf.calls.llmCall.length, 1); + const request = nf.calls.llmCall[0]?.request as ReplayRequest; + assert.equal(request.content.placeholderRequest, false); + assert.equal(request.content.prompt, "hello"); + }); + + it("replays placeholder request when output grace timer expires", async () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { llmOutputGraceMs: 1 }); + + backend.onLlmOutput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + assistantTexts: ["hi"], + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + await delay(10); + + assert.equal(backend.state().llmOutputsPendingInput.size, 0); + assert.equal(nf.calls.llmCall.length, 1); + const request = nf.calls.llmCall[0]?.request as ReplayRequest; + assert.equal(request.content.placeholderRequest, true); + assert.equal(request.content.prompt, ""); + }); + + it("does not keep the process alive while waiting for llm output grace", async () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { llmOutputGraceMs: 10_000 }); + + backend.onLlmOutput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + assistantTexts: ["hi"], + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + const pending = [...backend.state().llmOutputsPendingInput.values()][0]?.[0]; + assert.ok(pending?.timer); + if (isRefableTimer(pending.timer)) { + assert.equal(pending.timer.hasRef(), false); + } + await backend.onSessionEnd( + { sessionId: "session-1", messageCount: 1, reason: "idle" }, + { sessionId: "session-1" }, + ); + assert.equal(pending.timer, undefined); + }); + + it("drains pending llm output with placeholder request on session end", async () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { llmOutputGraceMs: 10_000 }); + + backend.onLlmOutput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + assistantTexts: ["hi"], + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + await backend.onSessionEnd( + { sessionId: "session-1", messageCount: 1, reason: "idle" }, + { sessionId: "session-1" }, + ); + + assert.equal(backend.state().llmOutputsPendingInput.size, 0); + assert.equal(nf.calls.llmCall.length, 1); + assert.equal(nf.calls.llmCallEnd.length, 1); + assert.equal(nf.calls.popScope.length, 1); + const request = nf.calls.llmCall[0]?.request as ReplayRequest; + assert.equal(request.content.placeholderRequest, true); + assert.equal(request.content.prompt, ""); + }); + + it("attaches model timing only when timing is unambiguous", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onModelCallStarted(modelStarted("call-1"), { runId: "run-1", sessionId: "session-1" }); + backend.onModelCallEnded(modelEnded("call-1", 42), { runId: "run-1", sessionId: "session-1" }); + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput(llmOutput(), { runId: "run-1", sessionId: "session-1" }); + + const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; + assert.equal(response.openclaw.duration_ms, 42); + assert.equal(response.openclaw.outcome, "completed"); + assert.equal(backend.state().counters.llmSpansReplayed, 1); + }); + + it("emits ambiguity mark and does not attach ambiguous timing", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onModelCallStarted(modelStarted("call-1"), { runId: "run-1", sessionId: "session-1" }); + backend.onModelCallEnded(modelEnded("call-1", 42), { runId: "run-1", sessionId: "session-1" }); + backend.onModelCallStarted(modelStarted("call-2"), { runId: "run-1", sessionId: "session-1" }); + backend.onModelCallEnded(modelEnded("call-2", 55), { runId: "run-1", sessionId: "session-1" }); + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput(llmOutput(), { runId: "run-1", sessionId: "session-1" }); + + assert.ok(nf.calls.event.some((event) => event.name === "openclaw.model_call_timing_ambiguous")); + const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; + assert.equal("duration_ms" in response.openclaw, false); + }); + + it("emits unpaired mark for model_call_started without matching end on session drain", async () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onModelCallStarted(modelStarted("call-1"), { runId: "run-1", sessionId: "session-1" }); + + await backend.onSessionEnd( + { sessionId: "session-1", messageCount: 1, reason: "idle" }, + { sessionId: "session-1" }, + ); + + const unpaired = nf.calls.event.find((event) => event.name === "openclaw.model_call_timing_unpaired"); + assert.ok(unpaired); + assert.deepEqual(unpaired.data, { + runId: "run-1", + callId: "call-1", + provider: "openai", + model: "gpt-4", + }); + }); + + it("strips prompt fields when prompt capture is disabled", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend( + nf, + {}, + { + includePrompts: false, + }, + ); + + backend.onLlmInput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + systemPrompt: "classified system", + prompt: "classified prompt", + historyMessages: [{ role: "user", content: "classified history" }], + imagesCount: 1, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + backend.onLlmOutput(llmOutput(), { runId: "run-1", sessionId: "session-1" }); + + const request = nf.calls.llmCall[0]?.request as ReplayRequest; + assert.equal("prompt" in request.content, false); + assert.equal("systemPrompt" in request.content, false); + assert.deepEqual(request.content.messages, []); + assert.equal(request.content.imagesCount, 1); + }); + + it("strips response content when response capture is disabled", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend( + nf, + {}, + { + includeResponses: false, + }, + ); + + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput( + { + ...llmOutput(), + assistantTexts: ["classified response"], + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; + assert.equal("content" in response, false); + assert.equal(response.assistant_texts_count, 1); + }); + + it("does not duplicate current prompt when history already ends with the same user message", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onLlmInput( + { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + prompt: "hello", + historyMessages: [{ role: "user", content: "hello" }], + imagesCount: 0, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + backend.onLlmOutput(llmOutput(), { runId: "run-1", sessionId: "session-1" }); + + const request = nf.calls.llmCall[0]?.request as ReplayRequest; + assert.deepEqual(request.content.messages, [{ role: "user", content: "hello" }]); + }); + + it("evicts stale expanded correlation records by TTL", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { recordTtlMs: 1 }); + const stalePendingOutput = { + sessionKey: "session-1", + sessionId: "session-1", + runId: "old-run", + provider: "openai", + model: "gpt-4", + event: llmOutput(), + ctx: { runId: "old-run", sessionId: "session-1" }, + observedAtMs: 0, + timer: setTimeout(() => {}, 10_000), + }; + + backend.state().llmInputs.set("stale-input", [ + { + sessionKey: "session-1", + sessionId: "session-1", + runId: "old-run", + provider: "openai", + model: "gpt-4", + prompt: "old", + historyMessages: [], + imagesCount: 0, + observedAtMs: 0, + }, + ]); + backend.state().llmOutputsPendingInput.set("stale-output", [stalePendingOutput]); + backend.state().modelTimingsByLlmKey.set("stale-timing", [ + { + sessionKey: "session-1", + sessionId: "session-1", + runId: "old-run", + callId: "old-call", + provider: "openai", + model: "gpt-4", + consumed: false, + observedAtMs: 0, + }, + ]); + + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + + assert.equal(backend.state().llmInputs.has("stale-input"), false); + assert.equal(backend.state().llmOutputsPendingInput.has("stale-output"), false); + assert.equal(stalePendingOutput.timer, undefined); + assert.equal(backend.state().modelTimingsByLlmKey.has("stale-timing"), false); + }); +}); + +type ReplayRequest = { + content: { + messages?: unknown[]; + prompt?: string; + systemPrompt?: string; + imagesCount?: number; + placeholderRequest?: boolean; + }; +}; + +type ReplayResponse = { + content?: string; + assistant_texts_count?: number; + token_usage?: Record; + openclaw: Record; +}; + +type TestNemoFlowRuntime = NemoFlowRuntimeModule & { + calls: { + pushScope: Array<{ name: string; scopeType: number; data: unknown }>; + popScope: Array<{ handle: unknown; output: unknown }>; + event: Array<{ name: string; handle: unknown; data: unknown }>; + setThreadScopeStack: unknown[]; + llmCall: Array<{ name: string; request: unknown; modelName: string | null | undefined }>; + llmCallEnd: Array<{ handle: unknown; response: unknown }>; + toolCall: Array<{ name: string; args: unknown }>; + toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown }>; + }; +}; + +function createBackend( + nf: TestNemoFlowRuntime, + correlation: Partial["correlation"]> = {}, + capture: Partial["capture"]> = {}, +): HookReplayBackend { + return new HookReplayBackend({ + nf, + config: parseConfig({ + atif: { enabled: false }, + correlation, + capture, + }), + logger: createLogger(), + agentVersion: "test-version", + resolvedAtifOutputDir: "/tmp/openclaw-state/plugins/nemo-flow/atif", + markOutputDegraded: () => {}, + }); +} + +function createLogger(): PluginLoggerLike { + return { + info: () => {}, + warn: () => {}, + }; +} + +function createNemoFlowRuntime(): TestNemoFlowRuntime { + let nextScopeId = 0; + const previousStack = { id: "previous" }; + const calls: TestNemoFlowRuntime["calls"] = { + pushScope: [], + popScope: [], + event: [], + setThreadScopeStack: [], + llmCall: [], + llmCallEnd: [], + toolCall: [], + toolCallEnd: [], + }; + + return { + ScopeType: { Agent: 0 }, + calls, + createScopeStack: () => ({ id: `stack-${nextScopeId++}` }), + currentScopeStack: () => previousStack, + setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), + pushScope: (name, scopeType, _handle, _attributes, data) => { + const handle = { id: `scope-${nextScopeId++}` }; + calls.pushScope.push({ name, scopeType, data }); + return handle; + }, + popScope: (handle, output) => calls.popScope.push({ handle, output }), + event: (name, handle, data) => calls.event.push({ name, handle, data }), + llmCall: (name, request, _handle, _attributes, _data, _metadata, modelName) => { + const handle = { id: `llm-${nextScopeId++}` }; + calls.llmCall.push({ name, request, modelName }); + return handle; + }, + llmCallEnd: (handle, response) => calls.llmCallEnd.push({ handle, response }), + toolCall: (name, args) => { + const handle = { id: `tool-${nextScopeId++}` }; + calls.toolCall.push({ name, args }); + return handle; + }, + toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), + AtifExporter: FakeAtifExporter, + OpenTelemetrySubscriber: FakeSubscriber, + OpenInferenceSubscriber: FakeSubscriber, + }; +} + +function llmInput() { + return { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + prompt: "hello", + historyMessages: [], + imagesCount: 0, + }; +} + +function llmOutput() { + return { + runId: "run-1", + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + assistantTexts: ["hi"], + }; +} + +function modelStarted(callId: string) { + return { + runId: "run-1", + callId, + sessionId: "session-1", + provider: "openai", + model: "gpt-4", + }; +} + +function modelEnded(callId: string, durationMs: number) { + return { + ...modelStarted(callId), + durationMs, + outcome: "completed" as const, + }; +} + +function delay(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function isRefableTimer(timer: unknown): timer is { hasRef: () => boolean } { + return ( + typeof timer === "object" && + timer !== null && + "hasRef" in timer && + typeof (timer as { hasRef?: unknown }).hasRef === "function" + ); +} + +class FakeAtifExporter { + register(): void {} + deregister(): boolean { + return true; + } + exportJson(): string { + return "{}"; + } + clear(): void {} +} + +class FakeSubscriber { + register(): void {} + deregister(): boolean { + return true; + } + forceFlush(): void {} + shutdown(): void {} +} diff --git a/integrations/openclaw/src/__tests__/tool-replay.test.ts b/integrations/openclaw/src/__tests__/tool-replay.test.ts new file mode 100644 index 00000000..65e1c3b3 --- /dev/null +++ b/integrations/openclaw/src/__tests__/tool-replay.test.ts @@ -0,0 +1,212 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; + +import { parseConfig } from "../config.js"; +import { HookReplayBackend } from "../hooks-backend.js"; +import type { NemoFlowRuntimeModule } from "../modules.js"; +import type { PluginLoggerLike } from "../types.js"; + +describe("Tool replay", () => { + it("replays after_tool_call with stripped payloads by default", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onAfterToolCall( + { + toolName: "read_file", + params: { path: "/secret", token: "value" }, + toolCallId: "tool-call-1", + runId: "run-1", + result: { text: "secret" }, + durationMs: 7, + }, + { runId: "run-1", sessionId: "session-1", toolCallId: "tool-call-1" }, + ); + + assert.equal(nf.calls.toolCall.length, 1); + assert.equal(nf.calls.toolCallEnd.length, 1); + assert.equal(backend.state().counters.toolSpansReplayed, 1); + assert.deepEqual(nf.calls.toolCall[0]?.args, { + stripped: true, + argKeys: ["path", "token"], + }); + assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { + stripped: true, + hasError: false, + }); + }); + + it("captures full tool payloads only when trusted config opts in", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { + capture: { + stripToolArgs: false, + stripToolResults: false, + }, + }); + + backend.onAfterToolCall( + { + toolName: "read_file", + params: { path: "/workspace/file.txt" }, + toolCallId: "tool-call-1", + runId: "run-1", + result: { text: "ok" }, + durationMs: 7, + }, + { runId: "run-1", sessionId: "session-1", toolCallId: "tool-call-1" }, + ); + + assert.deepEqual(nf.calls.toolCall[0]?.args, { path: "/workspace/file.txt" }); + assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { result: { text: "ok" } }); + }); + + it("passes non-null tool end payload when result and error are missing", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { + capture: { + stripToolResults: false, + }, + }); + + backend.onAfterToolCall( + { + toolName: "noop", + params: {}, + toolCallId: "tool-call-1", + runId: "run-1", + }, + { runId: "run-1", sessionId: "session-1", toolCallId: "tool-call-1" }, + ); + + assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { result: null }); + assert.deepEqual(nf.calls.toolCallEnd[0]?.data, { result: null }); + }); + + it("emits blocked tool mark instead of successful tool span", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onAfterToolCall( + { + toolName: "dangerous_tool", + params: {}, + toolCallId: "tool-call-1", + runId: "run-1", + result: { details: { status: "blocked", deniedReason: "policy" } }, + durationMs: 3, + }, + { runId: "run-1", sessionId: "session-1", toolCallId: "tool-call-1" }, + ); + + assert.equal(nf.calls.toolCall.length, 0); + assert.ok(nf.calls.event.some((event) => event.name === "openclaw.tool_blocked")); + }); +}); + +type TestNemoFlowRuntime = NemoFlowRuntimeModule & { + calls: { + pushScope: Array<{ name: string; scopeType: number; data: unknown }>; + popScope: Array<{ handle: unknown; output: unknown }>; + event: Array<{ name: string; handle: unknown; data: unknown }>; + setThreadScopeStack: unknown[]; + llmCall: Array<{ name: string; request: unknown }>; + llmCallEnd: Array<{ handle: unknown; response: unknown }>; + toolCall: Array<{ name: string; args: unknown }>; + toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown }>; + }; +}; + +function createBackend( + nf: TestNemoFlowRuntime, + overrides: { + capture?: Partial["capture"]>; + } = {}, +): HookReplayBackend { + return new HookReplayBackend({ + nf, + config: parseConfig({ + atif: { enabled: false }, + capture: overrides.capture, + }), + logger: createLogger(), + agentVersion: "test-version", + resolvedAtifOutputDir: "/tmp/openclaw-state/plugins/nemo-flow/atif", + markOutputDegraded: () => {}, + }); +} + +function createLogger(): PluginLoggerLike { + return { + info: () => {}, + warn: () => {}, + }; +} + +function createNemoFlowRuntime(): TestNemoFlowRuntime { + let nextScopeId = 0; + const previousStack = { id: "previous" }; + const calls: TestNemoFlowRuntime["calls"] = { + pushScope: [], + popScope: [], + event: [], + setThreadScopeStack: [], + llmCall: [], + llmCallEnd: [], + toolCall: [], + toolCallEnd: [], + }; + + return { + ScopeType: { Agent: 0 }, + calls, + createScopeStack: () => ({ id: `stack-${nextScopeId++}` }), + currentScopeStack: () => previousStack, + setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), + pushScope: (name, scopeType, _handle, _attributes, data) => { + const handle = { id: `scope-${nextScopeId++}` }; + calls.pushScope.push({ name, scopeType, data }); + return handle; + }, + popScope: (handle, output) => calls.popScope.push({ handle, output }), + event: (name, handle, data) => calls.event.push({ name, handle, data }), + llmCall: (name, request) => { + const handle = { id: `llm-${nextScopeId++}` }; + calls.llmCall.push({ name, request }); + return handle; + }, + llmCallEnd: (handle, response) => calls.llmCallEnd.push({ handle, response }), + toolCall: (name, args) => { + const handle = { id: `tool-${nextScopeId++}` }; + calls.toolCall.push({ name, args }); + return handle; + }, + toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), + AtifExporter: FakeAtifExporter, + OpenTelemetrySubscriber: FakeSubscriber, + OpenInferenceSubscriber: FakeSubscriber, + }; +} + +class FakeAtifExporter { + register(): void {} + deregister(): boolean { + return true; + } + exportJson(): string { + return "{}"; + } + clear(): void {} +} + +class FakeSubscriber { + register(): void {} + deregister(): boolean { + return true; + } + forceFlush(): void {} + shutdown(): void {} +} diff --git a/integrations/openclaw/src/hook-replay/correlation.ts b/integrations/openclaw/src/hook-replay/correlation.ts new file mode 100644 index 00000000..db131ba1 --- /dev/null +++ b/integrations/openclaw/src/hook-replay/correlation.ts @@ -0,0 +1,63 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +export type LlmKeyInput = { + sessionId?: string | undefined; + runId?: string | undefined; + provider?: string | undefined; + model?: string | undefined; +}; + +export type ModelTimingKeyInput = { + runId: string; + callId: string; +}; + +export type TimestampedRecord = { + observedAtMs?: number | undefined; + startedAtMs?: number | undefined; + endedAtMs?: number | undefined; +}; + +export function tupleKey(parts: unknown[]): string { + return JSON.stringify(parts.map((part) => (typeof part === "string" && part.length > 0 ? part : null))); +} + +export function llmKey(input: LlmKeyInput): string { + return tupleKey([input.sessionId, input.runId, input.provider, input.model]); +} + +export function modelTimingKey(input: ModelTimingKeyInput): string { + return tupleKey([input.runId, input.callId]); +} + +export function modelTimingLlmKey(input: LlmKeyInput): string { + return tupleKey([input.sessionId, input.runId, input.provider, input.model]); +} + +export function evictExpiredRecords( + map: Map, + nowMs: number, + ttlMs: number, +): void { + for (const [key, records] of map) { + const retained = records.filter((record) => nowMs - recordTimestamp(record) <= ttlMs); + if (retained.length === 0) { + map.delete(key); + } else { + map.set(key, retained); + } + } +} + +export function nowMicros(): number { + return Date.now() * 1000; +} + +export function startMicrosFromDuration(endMicros: number, durationMs: number | undefined): number | null { + return durationMs === undefined ? null : endMicros - Math.round(durationMs * 1000); +} + +function recordTimestamp(record: TimestampedRecord): number { + return record.observedAtMs ?? record.endedAtMs ?? record.startedAtMs ?? 0; +} diff --git a/integrations/openclaw/src/hook-replay/llm.ts b/integrations/openclaw/src/hook-replay/llm.ts new file mode 100644 index 00000000..6677b204 --- /dev/null +++ b/integrations/openclaw/src/hook-replay/llm.ts @@ -0,0 +1,621 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import type { NemoFlowHookBackendConfig } from "../config.js"; +import type { + PluginHookAgentContext, + PluginHookLlmInputEvent, + PluginHookLlmOutputEvent, + PluginHookModelCallEndedEvent, + PluginHookModelCallStartedEvent, +} from "../openclaw-hook-types.js"; +import type { JsonRecord, JsonValue } from "../types.js"; +import { emitMark, toJsonRecord, toJsonValue } from "./marks.js"; +import { + evictExpiredCorrelationRecords, + ensureSession, + insertBoundedRecord, + type LlmInputRecord, + type ModelCallRecord, + type PendingLlmOutputRecord, + type SessionManager, + type SessionState, +} from "./session.js"; +import { + llmKey, + modelTimingKey, + modelTimingLlmKey, + nowMicros, + startMicrosFromDuration, +} from "./correlation.js"; + +export function recordLlmInput( + manager: SessionManager, + event: PluginHookLlmInputEvent, + ctx: PluginHookAgentContext, +): void { + evictExpiredReplayRecords(manager); + const session = ensureSession(manager, { + sessionId: event.sessionId, + sessionKey: ctx.sessionKey, + runId: event.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + if (!session) { + return; + } + + const key = llmKey(event); + const input = createInputRecord(session, event); + insertBoundedRecord(manager.state.llmInputs, key, input, manager.config.correlation.maxRecordsPerKey); + + const pending = shiftOldest(manager.state.llmOutputsPendingInput, key, (record) => record.sessionKey === session.sessionId); + if (!pending) { + return; + } + + removeRecord(manager.state.llmInputs, key, input); + clearPendingTimer(pending); + replayLlmOutput({ + manager, + event: pending.event, + ctx: pending.ctx, + input, + timing: consumeTimingCandidate(manager, session, pending.event), + }); +} + +export function recordLlmOutput( + manager: SessionManager, + event: PluginHookLlmOutputEvent, + ctx: PluginHookAgentContext, +): void { + evictExpiredReplayRecords(manager); + const session = ensureSession(manager, { + sessionId: event.sessionId, + sessionKey: ctx.sessionKey, + runId: event.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + if (!session) { + return; + } + + const key = llmKey(event); + const input = shiftOldest(manager.state.llmInputs, key, (record) => record.sessionKey === session.sessionId); + if (input) { + replayLlmOutput({ + manager, + event, + ctx, + input, + timing: consumeTimingCandidate(manager, session, event), + }); + return; + } + + const pending: PendingLlmOutputRecord = { + sessionKey: session.sessionId, + sessionId: event.sessionId, + runId: event.runId, + provider: event.provider, + model: event.model, + event, + ctx, + observedAtMs: Date.now(), + }; + pending.timer = setTimeout( + () => replayExpiredPendingOutput(manager, key, pending), + manager.config.correlation.llmOutputGraceMs, + ); + pending.timer.unref?.(); + insertPendingOutput(manager, key, pending); +} + +export function recordModelCallStarted( + manager: SessionManager, + event: PluginHookModelCallStartedEvent, + ctx: PluginHookAgentContext, +): void { + evictExpiredReplayRecords(manager); + const session = ensureSession(manager, { + sessionId: event.sessionId ?? ctx.sessionId, + sessionKey: event.sessionKey ?? ctx.sessionKey, + runId: event.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + if (!session) { + return; + } + + insertBoundedRecord( + manager.state.modelCallsByCallId, + modelTimingKey(event), + { + sessionKey: session.sessionId, + sessionId: session.sessionId, + runId: event.runId, + callId: event.callId, + provider: event.provider, + model: event.model, + consumed: false, + observedAtMs: Date.now(), + startedAtMs: Date.now(), + ...(event.api === undefined ? {} : { api: event.api }), + ...(event.transport === undefined ? {} : { transport: event.transport }), + }, + manager.config.correlation.maxRecordsPerKey, + ); +} + +export function recordModelCallEnded( + manager: SessionManager, + event: PluginHookModelCallEndedEvent, + ctx: PluginHookAgentContext, +): void { + evictExpiredReplayRecords(manager); + const session = ensureSession(manager, { + sessionId: event.sessionId ?? ctx.sessionId, + sessionKey: event.sessionKey ?? ctx.sessionKey, + runId: event.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + if (!session) { + return; + } + + const nowMs = Date.now(); + const byCallKey = modelTimingKey(event); + const existing = latestUnendedRecord(manager.state.modelCallsByCallId.get(byCallKey), session); + const record = + existing ?? + ({ + sessionKey: session.sessionId, + sessionId: session.sessionId, + runId: event.runId, + callId: event.callId, + provider: event.provider, + model: event.model, + consumed: false, + observedAtMs: nowMs, + } satisfies ModelCallRecord); + + applyModelCallEnd(record, event, nowMs); + if (!existing) { + insertBoundedRecord( + manager.state.modelCallsByCallId, + byCallKey, + record, + manager.config.correlation.maxRecordsPerKey, + ); + } + insertBoundedRecord( + manager.state.modelTimingsByLlmKey, + modelTimingLlmKey({ sessionId: session.sessionId, runId: event.runId, provider: event.provider, model: event.model }), + record, + manager.config.correlation.maxRecordsPerKey, + ); +} + +export function replayPendingLlmOutputsForSession( + manager: SessionManager, + session: SessionState, + options: { allowPlaceholderRequest: boolean }, +): void { + if (!options.allowPlaceholderRequest) { + return; + } + for (const [key, records] of [...manager.state.llmOutputsPendingInput]) { + const remaining: PendingLlmOutputRecord[] = []; + for (const record of records) { + if (record.sessionKey !== session.sessionId) { + remaining.push(record); + continue; + } + clearPendingTimer(record); + replayLlmOutput({ + manager, + event: record.event, + ctx: record.ctx, + input: placeholderInputRecord(record), + timing: consumeTimingCandidate(manager, session, record.event), + }); + } + if (remaining.length === 0) { + manager.state.llmOutputsPendingInput.delete(key); + } else { + manager.state.llmOutputsPendingInput.set(key, remaining); + } + } +} + +export function emitUnpairedModelCallTimingMarks(manager: SessionManager, session: SessionState): void { + for (const records of manager.state.modelCallsByCallId.values()) { + for (const record of records) { + if (record.sessionKey !== session.sessionId || record.consumed || record.endedAtMs !== undefined) { + continue; + } + emitModelTimingMark(manager, session, "openclaw.model_call_timing_unpaired", record); + record.consumed = true; + } + } + + for (const records of manager.state.modelTimingsByLlmKey.values()) { + for (const record of records) { + if (record.sessionKey !== session.sessionId || record.consumed) { + continue; + } + emitModelTimingMark(manager, session, "openclaw.model_call_timing_unpaired", record); + record.consumed = true; + } + } +} + +export function buildReplayLlmRequest( + input: LlmInputRecord, + output: PluginHookLlmOutputEvent, + config: NemoFlowHookBackendConfig, +): JsonValue { + const messages = config.capture.includePrompts && Array.isArray(input.historyMessages) ? [...input.historyMessages] : []; + const replayMessages = config.capture.includePrompts ? appendPromptIfMissing(messages, input.prompt) : []; + return toJsonValue({ + headers: {}, + content: { + provider: output.provider, + model: output.model, + prompt: config.capture.includePrompts ? input.prompt : undefined, + systemPrompt: config.capture.includePrompts ? input.systemPrompt : undefined, + messages: replayMessages, + imagesCount: input.imagesCount, + placeholderRequest: input.placeholderRequest === true, + source: "openclaw.hooks", + }, + }); +} + +export function buildReplayLlmResponse( + event: PluginHookLlmOutputEvent, + timing: ModelCallRecord | undefined, + config: NemoFlowHookBackendConfig, +): JsonValue { + return toJsonValue({ + role: "assistant", + content: config.capture.includeResponses ? event.assistantTexts.join("\n") : undefined, + assistant_texts_count: event.assistantTexts.length, + resolved_ref: event.resolvedRef, + harness_id: event.harnessId, + token_usage: mapUsage(event.usage), + openclaw: { + duration_ms: timing?.durationMs, + outcome: timing?.outcome, + error_category: timing?.errorCategory, + failure_kind: timing?.failureKind, + time_to_first_byte_ms: timing?.timeToFirstByteMs, + request_payload_bytes: timing?.requestPayloadBytes, + response_stream_bytes: timing?.responseStreamBytes, + upstream_request_id_hash: timing?.upstreamRequestIdHash, + }, + }); +} + +function replayExpiredPendingOutput( + manager: SessionManager, + key: string, + record: PendingLlmOutputRecord, +): void { + try { + if (!removeRecord(manager.state.llmOutputsPendingInput, key, record)) { + return; + } + const session = manager.state.sessions.get(record.sessionKey); + if (!session) { + manager.state.counters.skippedEvents += 1; + return; + } + replayLlmOutput({ + manager, + event: record.event, + ctx: record.ctx, + input: placeholderInputRecord(record), + timing: consumeTimingCandidate(manager, session, record.event), + }); + } catch (error) { + manager.state.counters.replayErrors += 1; + manager.logBoundedWarn( + `llm_grace_timer_failed:${key}`, + `nemo-flow failed to replay pending llm_output after grace timer: ${error instanceof Error ? error.message : String(error)}`, + ); + } +} + +function replayLlmOutput(params: { + manager: SessionManager; + event: PluginHookLlmOutputEvent; + ctx: PluginHookAgentContext; + input: LlmInputRecord; + timing?: ModelCallRecord | undefined; +}): void { + const { manager, event, ctx, input, timing } = params; + const session = ensureSession(manager, { + sessionId: event.sessionId, + runId: event.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + if (!session) { + return; + } + + const endMicros = nowMicros(); + const request = buildReplayLlmRequest(input, event, manager.config); + const response = buildReplayLlmResponse(event, timing, manager.config); + const metadata = toJsonRecord({ + source: "openclaw.llm_output", + runId: event.runId, + sessionId: event.sessionId, + provider: event.provider, + model: event.model, + }); + + manager.emitCapturedUnderSession("llm_output", session, () => { + const handle = manager.nf.llmCall( + event.provider, + request, + session.rootHandle, + null, + metadata, + metadata, + event.model, + startMicrosFromDuration(endMicros, timing?.durationMs), + ); + manager.nf.llmCallEnd(handle, response, response, metadata, endMicros); + manager.state.counters.llmSpansReplayed += 1; + }); +} + +function consumeTimingCandidate( + manager: SessionManager, + session: SessionState, + event: PluginHookLlmOutputEvent, +): ModelCallRecord | undefined { + const key = modelTimingLlmKey({ + sessionId: session.sessionId, + runId: event.runId, + provider: event.provider, + model: event.model, + }); + const candidates = (manager.state.modelTimingsByLlmKey.get(key) ?? []).filter( + (record) => record.sessionKey === session.sessionId && !record.consumed, + ); + if (candidates.length === 1) { + const candidate = candidates[0]; + if (!candidate) { + return undefined; + } + candidate.consumed = true; + return candidate; + } + if (candidates.length > 1) { + const shouldEmit = candidates.some((candidate) => candidate.ambiguous !== true); + for (const candidate of candidates) { + candidate.ambiguous = true; + } + if (shouldEmit) { + emitModelTimingAmbiguousMark(manager, session, event, candidates.length); + } + } + return undefined; +} + +function emitModelTimingAmbiguousMark( + manager: SessionManager, + session: SessionState, + event: PluginHookLlmOutputEvent, + candidateCount: number, +): void { + manager.emitCapturedUnderSession("model_call_timing_ambiguous", session, () => { + emitMark({ + nf: manager.nf, + state: manager.state, + session, + name: "openclaw.model_call_timing_ambiguous", + data: toJsonRecord({ + runId: event.runId, + sessionId: event.sessionId, + provider: event.provider, + model: event.model, + candidateCount, + }), + }); + }); +} + +function emitModelTimingMark( + manager: SessionManager, + session: SessionState, + name: string, + record: ModelCallRecord, +): void { + manager.emitCapturedUnderSession(name, session, () => { + emitMark({ + nf: manager.nf, + state: manager.state, + session, + name, + data: toJsonRecord({ + runId: record.runId, + callId: record.callId, + provider: record.provider, + model: record.model, + api: record.api, + transport: record.transport, + durationMs: record.durationMs, + outcome: record.outcome, + errorCategory: record.errorCategory, + failureKind: record.failureKind, + requestPayloadBytes: record.requestPayloadBytes, + responseStreamBytes: record.responseStreamBytes, + timeToFirstByteMs: record.timeToFirstByteMs, + upstreamRequestIdHash: record.upstreamRequestIdHash, + ambiguous: record.ambiguous, + }), + }); + }); +} + +function createInputRecord(session: SessionState, event: PluginHookLlmInputEvent): LlmInputRecord { + return { + sessionKey: session.sessionId, + sessionId: event.sessionId, + runId: event.runId, + provider: event.provider, + model: event.model, + prompt: event.prompt, + historyMessages: event.historyMessages, + imagesCount: event.imagesCount, + observedAtMs: Date.now(), + ...(event.systemPrompt === undefined ? {} : { systemPrompt: event.systemPrompt }), + }; +} + +function placeholderInputRecord(record: PendingLlmOutputRecord): LlmInputRecord { + return { + sessionKey: record.sessionKey, + sessionId: record.sessionId, + runId: record.runId, + provider: record.provider, + model: record.model, + prompt: "", + historyMessages: [], + imagesCount: 0, + observedAtMs: Date.now(), + placeholderRequest: true, + }; +} + +function appendPromptIfMissing(historyMessages: unknown[], prompt: string): unknown[] { + if (!prompt) { + return historyMessages; + } + const last = historyMessages.at(-1); + if (isRecord(last) && last.role === "user" && last.content === prompt) { + return historyMessages; + } + return [...historyMessages, { role: "user", content: prompt }]; +} + +function mapUsage(usage: PluginHookLlmOutputEvent["usage"]): Record | undefined { + if (!usage) { + return undefined; + } + const mapped: Record = {}; + if (usage.input !== undefined) { + mapped.prompt_tokens = usage.input; + } + if (usage.output !== undefined) { + mapped.completion_tokens = usage.output; + } + if (usage.cacheRead !== undefined) { + mapped.cached_tokens = usage.cacheRead; + } + if (usage.cacheWrite !== undefined) { + mapped.cache_write_tokens = usage.cacheWrite; + } + if (usage.total !== undefined) { + mapped.total_tokens = usage.total; + } else if (usage.input !== undefined || usage.output !== undefined) { + mapped.total_tokens = (usage.input ?? 0) + (usage.output ?? 0); + } + return Object.keys(mapped).length > 0 ? mapped : undefined; +} + +function applyModelCallEnd(record: ModelCallRecord, event: PluginHookModelCallEndedEvent, nowMs: number): void { + record.observedAtMs = nowMs; + record.endedAtMs = nowMs; + record.durationMs = event.durationMs; + record.outcome = event.outcome; + record.api = event.api; + record.transport = event.transport; + record.errorCategory = event.errorCategory; + record.failureKind = event.failureKind; + record.requestPayloadBytes = event.requestPayloadBytes; + record.responseStreamBytes = event.responseStreamBytes; + record.timeToFirstByteMs = event.timeToFirstByteMs; + record.upstreamRequestIdHash = event.upstreamRequestIdHash; +} + +function latestUnendedRecord(records: ModelCallRecord[] | undefined, session: SessionState): ModelCallRecord | undefined { + if (!records) { + return undefined; + } + for (let index = records.length - 1; index >= 0; index -= 1) { + const record = records[index]; + if (record?.sessionKey === session.sessionId && record.endedAtMs === undefined) { + return record; + } + } + return undefined; +} + +function insertPendingOutput(manager: SessionManager, key: string, record: PendingLlmOutputRecord): void { + const records = manager.state.llmOutputsPendingInput.get(key) ?? []; + records.push(record); + while (records.length > manager.config.correlation.maxRecordsPerKey) { + const evicted = records.shift(); + if (evicted) { + clearPendingTimer(evicted); + } + } + manager.state.llmOutputsPendingInput.set(key, records); +} + +function shiftOldest(map: Map, key: string, predicate: (record: T) => boolean): T | undefined { + const records = map.get(key); + if (!records) { + return undefined; + } + const index = records.findIndex(predicate); + if (index === -1) { + return undefined; + } + const [record] = records.splice(index, 1); + if (records.length === 0) { + map.delete(key); + } + return record; +} + +function removeRecord(map: Map, key: string, record: T): boolean { + const records = map.get(key); + if (!records) { + return false; + } + const index = records.indexOf(record); + if (index === -1) { + return false; + } + records.splice(index, 1); + if (records.length === 0) { + map.delete(key); + } + return true; +} + +function clearPendingTimer(record: PendingLlmOutputRecord): void { + if (record.timer) { + clearTimeout(record.timer); + record.timer = undefined; + } +} + +function evictExpiredReplayRecords(manager: SessionManager): void { + evictExpiredCorrelationRecords(manager.state, Date.now(), manager.config.correlation.recordTtlMs); +} + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value); +} diff --git a/integrations/openclaw/src/hook-replay/marks.ts b/integrations/openclaw/src/hook-replay/marks.ts index c2aaac97..a62dc5ff 100644 --- a/integrations/openclaw/src/hook-replay/marks.ts +++ b/integrations/openclaw/src/hook-replay/marks.ts @@ -46,6 +46,10 @@ export function toJsonRecord(input: Record): JsonRecord { return stripUndefined(input, new WeakSet()); } +export function toJsonValue(input: unknown): JsonValue { + return normalizeJsonValue(input, new WeakSet()); +} + export function errorToJson(error: unknown): JsonRecord { if (error instanceof Error) { return toJsonRecord({ @@ -72,13 +76,13 @@ function stripUndefined(input: Record, seen: WeakSet): const output: JsonRecord = {}; for (const [key, value] of Object.entries(input)) { if (value !== undefined) { - output[key] = toJsonValue(value, seen); + output[key] = normalizeJsonValue(value, seen); } } return output; } -function toJsonValue(value: unknown, seen: WeakSet): JsonValue { +function normalizeJsonValue(value: unknown, seen: WeakSet): JsonValue { if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") { return value; } @@ -87,7 +91,7 @@ function toJsonValue(value: unknown, seen: WeakSet): JsonValue { return "[Circular]"; } seen.add(value); - const out = value.map((item) => toJsonValue(item, seen)); + const out = value.map((item) => normalizeJsonValue(item, seen)); seen.delete(value); return out; } diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts index 57d076f4..96b11e6a 100644 --- a/integrations/openclaw/src/hook-replay/session.ts +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -3,8 +3,13 @@ import type { NemoFlowHookBackendConfig } from "../config.js"; import { createAtifExporter } from "../atif-capture.js"; +import { evictExpiredRecords, tupleKey as tupleKeyFromCorrelation } from "./correlation.js"; import type { AtifExporterLike } from "../modules.js"; -import type { PluginHookModelCallEndedEvent } from "../openclaw-hook-types.js"; +import type { + PluginHookAgentContext, + PluginHookLlmOutputEvent, + PluginHookModelCallEndedEvent, +} from "../openclaw-hook-types.js"; import type { JsonRecord, PluginLoggerLike } from "../types.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; @@ -42,17 +47,52 @@ export type SessionState = { export type PendingLlmOutputRecord = { sessionKey: string; + sessionId: string; + runId: string; + provider: string; + model: string; + event: PluginHookLlmOutputEvent; + ctx: PluginHookAgentContext; + observedAtMs: number; timer?: ReturnType | undefined; }; export type LlmInputRecord = { sessionKey: string; + sessionId: string; + runId: string; + provider: string; + model: string; + prompt: string; + historyMessages: unknown[]; + imagesCount: number; + observedAtMs: number; + systemPrompt?: string | undefined; + placeholderRequest?: boolean | undefined; }; export type ModelCallRecord = { sessionKey: string; - event: PluginHookModelCallEndedEvent; + runId: string; + callId: string; + provider: string; + model: string; consumed: boolean; + observedAtMs: number; + sessionId?: string | undefined; + api?: string | undefined; + transport?: string | undefined; + startedAtMs?: number | undefined; + endedAtMs?: number | undefined; + durationMs?: number | undefined; + outcome?: PluginHookModelCallEndedEvent["outcome"] | undefined; + errorCategory?: string | undefined; + failureKind?: PluginHookModelCallEndedEvent["failureKind"] | undefined; + requestPayloadBytes?: number | undefined; + responseStreamBytes?: number | undefined; + timeToFirstByteMs?: number | undefined; + upstreamRequestIdHash?: string | undefined; + ambiguous?: boolean | undefined; }; export type HookReplayCounters = { @@ -69,7 +109,8 @@ export type HookReplayBackendState = { sessionAliases: Map; llmInputs: Map; llmOutputsPendingInput: Map; - modelCallsByRun: Map; + modelCallsByCallId: Map; + modelTimingsByLlmKey: Map; counters: HookReplayCounters; }; @@ -132,7 +173,8 @@ export function createHookReplayState(): HookReplayBackendState { sessionAliases: new Map(), llmInputs: new Map(), llmOutputsPendingInput: new Map(), - modelCallsByRun: new Map(), + modelCallsByCallId: new Map(), + modelTimingsByLlmKey: new Map(), counters: { llmSpansReplayed: 0, toolSpansReplayed: 0, @@ -233,7 +275,14 @@ export function insertBoundedRecord( } export function tupleKey(parts: Array): string { - return JSON.stringify(parts.map((part) => (typeof part === "string" && part.length > 0 ? part : null))); + return tupleKeyFromCorrelation(parts); +} + +export function evictExpiredCorrelationRecords(state: HookReplayBackendState, nowMs: number, ttlMs: number): void { + evictExpiredRecords(state.llmInputs, nowMs, ttlMs); + evictExpiredPendingLlmOutputs(state.llmOutputsPendingInput, nowMs, ttlMs); + evictExpiredRecords(state.modelCallsByCallId, nowMs, ttlMs); + evictExpiredRecords(state.modelTimingsByLlmKey, nowMs, ttlMs); } function openSessionRoot(manager: SessionManager, session: SessionState, input: EnsureSessionInput): void { @@ -276,7 +325,8 @@ function cancelPendingLlmOutputTimers(state: HookReplayBackendState, session: Se function evictSessionCorrelationRecords(state: HookReplayBackendState, session: SessionState): void { evictFromRecordMap(state.llmInputs, session.sessionId); evictFromRecordMap(state.llmOutputsPendingInput, session.sessionId); - evictFromRecordMap(state.modelCallsByRun, session.sessionId); + evictFromRecordMap(state.modelCallsByCallId, session.sessionId); + evictFromRecordMap(state.modelTimingsByLlmKey, session.sessionId); for (const [alias, canonical] of state.sessionAliases) { if (canonical === session.sessionId || alias === session.sessionId) { @@ -296,6 +346,31 @@ function evictFromRecordMap(map: Map, + nowMs: number, + ttlMs: number, +): void { + for (const [key, records] of map) { + const retained: PendingLlmOutputRecord[] = []; + for (const record of records) { + if (nowMs - record.observedAtMs <= ttlMs) { + retained.push(record); + continue; + } + if (record.timer) { + clearTimeout(record.timer); + record.timer = undefined; + } + } + if (retained.length === 0) { + map.delete(key); + } else { + map.set(key, retained); + } + } +} + function agentScopeType(nf: NemoFlowRuntimeModule): number { return nf.ScopeType?.Agent ?? 0; } diff --git a/integrations/openclaw/src/hook-replay/tool.ts b/integrations/openclaw/src/hook-replay/tool.ts new file mode 100644 index 00000000..71e3b745 --- /dev/null +++ b/integrations/openclaw/src/hook-replay/tool.ts @@ -0,0 +1,82 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import type { PluginHookAfterToolCallEvent, PluginHookToolContext } from "../openclaw-hook-types.js"; +import { blockedToolDetails, emitMark, errorToJson, toJsonRecord, toJsonValue } from "./marks.js"; +import { ensureSession, type SessionManager } from "./session.js"; +import { nowMicros, startMicrosFromDuration } from "./correlation.js"; + +export function replayAfterToolCall( + manager: SessionManager, + event: PluginHookAfterToolCallEvent, + ctx: PluginHookToolContext, +): void { + const session = ensureSession(manager, { + sessionId: ctx.sessionId, + sessionKey: ctx.sessionKey, + runId: event.runId ?? ctx.runId, + agentId: ctx.agentId, + source: "lazy_session", + }); + + const blockedDetails = blockedToolDetails(event, { runId: ctx.runId }); + if (session && blockedDetails) { + manager.emitCapturedUnderSession("openclaw.tool_blocked", session, () => { + emitMark({ + nf: manager.nf, + state: manager.state, + session, + name: "openclaw.tool_blocked", + data: blockedDetails, + }); + }); + return; + } + + if (!session) { + return; + } + + const endMicros = nowMicros(); + const metadata = toJsonRecord({ + source: "openclaw.after_tool_call", + runId: event.runId ?? ctx.runId, + sessionId: ctx.sessionId, + sessionKey: ctx.sessionKey, + toolCallId: event.toolCallId ?? ctx.toolCallId, + durationMs: event.durationMs, + }); + const argsPayload = toJsonValue( + manager.config.capture.stripToolArgs + ? { + stripped: true, + argKeys: + event.params && typeof event.params === "object" && !Array.isArray(event.params) + ? Object.keys(event.params) + : undefined, + } + : event.params ?? {}, + ); + const endPayload = toJsonValue( + manager.config.capture.stripToolResults + ? { stripped: true, hasError: Boolean(event.error) } + : event.error + ? { error: errorToJson(event.error), result: event.result ?? null } + : { result: event.result ?? null }, + ); + + manager.emitCapturedUnderSession("after_tool_call", session, () => { + const handle = manager.nf.toolCall( + event.toolName, + argsPayload, + session.rootHandle, + null, + metadata, + metadata, + event.toolCallId ?? ctx.toolCallId ?? null, + startMicrosFromDuration(endMicros, event.durationMs), + ); + manager.nf.toolCallEnd(handle, endPayload, endPayload, metadata, endMicros); + manager.state.counters.toolSpansReplayed += 1; + }); +} diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts index 91f66606..eb4821c9 100644 --- a/integrations/openclaw/src/hooks-backend.ts +++ b/integrations/openclaw/src/hooks-backend.ts @@ -3,16 +3,24 @@ import type { NemoFlowHookBackendConfig } from "./config.js"; import { exportAtifJson, withAtifCapture } from "./atif-capture.js"; -import { emitMark, blockedToolDetails, toJsonRecord } from "./hook-replay/marks.js"; +import { emitMark, toJsonRecord } from "./hook-replay/marks.js"; +import { llmKey } from "./hook-replay/correlation.js"; +import { + emitUnpairedModelCallTimingMarks, + recordLlmInput, + recordLlmOutput, + recordModelCallEnded, + recordModelCallStarted, + replayPendingLlmOutputsForSession, +} from "./hook-replay/llm.js"; +import { replayAfterToolCall } from "./hook-replay/tool.js"; import { createHookReplayState, drainSession, closeSessionRoot, deleteSession, ensureSession, - insertBoundedRecord, resolveSessionKey, - tupleKey, type HookReplayBackendState, type SessionState, } from "./hook-replay/session.js"; @@ -103,85 +111,23 @@ export class HookReplayBackend { } onLlmInput(event: PluginHookLlmInputEvent, ctx: PluginHookAgentContext): void { - const session = this.ensureSession({ - sessionId: event.sessionId, - sessionKey: ctx.sessionKey, - runId: event.runId, - agentId: ctx.agentId, - source: "lazy_session", - }); - - if (!session) { - return; - } - - insertBoundedRecord( - this.stateValue.llmInputs, - llmKey(event), - { sessionKey: session.sessionId }, - this.config.correlation.maxRecordsPerKey, - ); + recordLlmInput(this.sessionManager(), event, ctx); } onLlmOutput(event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void { - const session = this.ensureSession({ - sessionId: event.sessionId, - sessionKey: ctx.sessionKey, - runId: event.runId, - agentId: ctx.agentId, - source: "lazy_session", - }); - - if (!session) { - return; - } - - insertBoundedRecord( - this.stateValue.llmOutputsPendingInput, - llmKey(event), - { sessionKey: session.sessionId }, - this.config.correlation.maxRecordsPerKey, - ); + recordLlmOutput(this.sessionManager(), event, ctx); } - onModelCallStarted(_event: PluginHookModelCallStartedEvent, _ctx: PluginHookAgentContext): void { - // Phase 2 records completed model timing only. Full timing enrichment lands with LLM replay in Phase 4. + onModelCallStarted(event: PluginHookModelCallStartedEvent, ctx: PluginHookAgentContext): void { + recordModelCallStarted(this.sessionManager(), event, ctx); } onModelCallEnded(event: PluginHookModelCallEndedEvent, ctx: PluginHookAgentContext): void { - const session = this.ensureSession({ - sessionId: event.sessionId ?? ctx.sessionId, - sessionKey: event.sessionKey ?? ctx.sessionKey, - runId: event.runId, - agentId: ctx.agentId, - source: "lazy_session", - }); - - if (!session) { - return; - } - - insertBoundedRecord( - this.stateValue.modelCallsByRun, - tupleKey([session.sessionId, event.runId, event.provider, event.model]), - { sessionKey: session.sessionId, event, consumed: false }, - this.config.correlation.maxRecordsPerKey, - ); + recordModelCallEnded(this.sessionManager(), event, ctx); } onAfterToolCall(event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void { - const session = this.ensureSession({ - sessionId: ctx.sessionId, - sessionKey: ctx.sessionKey, - runId: event.runId ?? ctx.runId, - agentId: ctx.agentId, - source: "lazy_session", - }); - - const details = blockedToolDetails(event, { runId: ctx.runId }); - if (session && details) { - this.emitSessionMark("openclaw.tool_blocked", session, details); - } + replayAfterToolCall(this.sessionManager(), event, ctx); } onAgentEnd(event: PluginHookAgentEndEvent, ctx: PluginHookAgentContext): void { @@ -351,40 +297,12 @@ export class HookReplayBackend { }); } - replayPendingLlmOutputsForSession(_session: SessionState, _options: { allowPlaceholderRequest: boolean }): void { - // Phase 4 replaces this extension point with real llmCall/llmCallEnd replay. + replayPendingLlmOutputsForSession(session: SessionState, options: { allowPlaceholderRequest: boolean }): void { + replayPendingLlmOutputsForSession(this.sessionManager(), session, options); } emitUnpairedModelCallTimingMarks(session: SessionState): void { - for (const records of this.stateValue.modelCallsByRun.values()) { - for (const record of records) { - if (record.sessionKey !== session.sessionId || record.consumed) { - continue; - } - - this.emitSessionMark( - "openclaw.model_call_timing_unpaired", - session, - toJsonRecord({ - runId: record.event.runId, - callId: record.event.callId, - provider: record.event.provider, - model: record.event.model, - api: record.event.api, - transport: record.event.transport, - durationMs: record.event.durationMs, - outcome: record.event.outcome, - errorCategory: record.event.errorCategory, - failureKind: record.event.failureKind, - requestPayloadBytes: record.event.requestPayloadBytes, - responseStreamBytes: record.event.responseStreamBytes, - timeToFirstByteMs: record.event.timeToFirstByteMs, - upstreamRequestIdHash: record.event.upstreamRequestIdHash, - }), - ); - record.consumed = true; - } - } + emitUnpairedModelCallTimingMarks(this.sessionManager(), session); } private ensureSession(input: Parameters[1]): SessionState | undefined { @@ -447,14 +365,7 @@ export class HookReplayBackend { } } -export function llmKey(input: { - sessionId?: string; - runId?: string; - provider?: string; - model?: string; -}): string { - return tupleKey([input.sessionId, input.runId, input.provider, input.model]); -} +export { llmKey }; export function resolveBackendSessionKey( state: HookReplayBackendState, From c48ea238f186df0a565c87859bc1ef231ffc662e Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 09:11:01 -0700 Subject: [PATCH 06/30] Update integrations/openclaw/package.json Co-authored-by: Will Killian <2007799+willkill07@users.noreply.github.com> Signed-off-by: mnajafian-nv --- integrations/openclaw/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/openclaw/package.json b/integrations/openclaw/package.json index f67cdbfc..c9d9b0b4 100644 --- a/integrations/openclaw/package.json +++ b/integrations/openclaw/package.json @@ -1,6 +1,6 @@ { "name": "@nvidia/nemo-flow-openclaw", - "version": "0.0.0", + "version": "0.2.0", "private": true, "description": "NeMo Flow-authored observability plugin for OpenClaw.", "type": "module", From 97d9c189cd3a3264bd21e5ec38c46b82e17b1d12 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 11:00:00 -0700 Subject: [PATCH 07/30] fix: address OpenClaw observability plugin review feedback Signed-off-by: mnajafian-nv --- integrations/openclaw/openclaw.plugin.json | 179 +- integrations/openclaw/package-lock.json | 6425 ++++++++++++++++- integrations/openclaw/package.json | 11 +- .../src/__tests__/atif-capture.test.ts | 19 +- .../openclaw/src/__tests__/config.test.ts | 123 +- .../src/__tests__/failure-model.test.ts | 15 +- .../src/__tests__/hooks-backend.test.ts | 17 +- .../openclaw/src/__tests__/live-smoke.test.ts | 58 +- .../openclaw/src/__tests__/llm-replay.test.ts | 17 +- .../openclaw/src/__tests__/telemetry.test.ts | 6 +- .../src/__tests__/tool-replay.test.ts | 17 +- integrations/openclaw/src/config.ts | 2 +- .../openclaw/src/hook-replay/correlation.ts | 5 +- integrations/openclaw/src/hook-replay/llm.ts | 3 +- .../openclaw/src/hook-replay/marks.ts | 2 +- .../openclaw/src/hook-replay/session.ts | 15 +- integrations/openclaw/src/hook-replay/tool.ts | 2 +- integrations/openclaw/src/hooks-backend.ts | 7 +- integrations/openclaw/src/modules.ts | 144 +- .../openclaw/src/openclaw-plugin-entry.d.ts | 53 - integrations/openclaw/src/runtime-state.ts | 59 +- integrations/openclaw/src/telemetry.ts | 6 +- integrations/openclaw/src/types.ts | 82 +- integrations/openclaw/tsconfig.json | 18 +- 24 files changed, 6814 insertions(+), 471 deletions(-) delete mode 100644 integrations/openclaw/src/openclaw-plugin-entry.d.ts diff --git a/integrations/openclaw/openclaw.plugin.json b/integrations/openclaw/openclaw.plugin.json index 3ac51a67..ffde081f 100644 --- a/integrations/openclaw/openclaw.plugin.json +++ b/integrations/openclaw/openclaw.plugin.json @@ -11,12 +11,16 @@ "properties": { "enabled": { "type": "boolean", - "default": true + "default": true, + "description": "Enables the NeMo Flow observability plugin." }, "backend": { "type": "string", - "enum": ["hooks"], - "default": "hooks" + "enum": [ + "hooks" + ], + "default": "hooks", + "description": "Telemetry backend implementation. Only the hook-backed backend is supported." }, "nemoFlow": { "type": "object", @@ -25,9 +29,14 @@ "pluginConfig": { "type": "object", "additionalProperties": true, - "default": {} + "default": { + "version": 1, + "components": [] + }, + "description": "NeMo Flow plugin-host config. Components are rejected by the hook backend; omit this to use the default host config." } - } + }, + "description": "NeMo Flow plugin-host configuration used during startup." }, "atif": { "type": "object", @@ -35,31 +44,39 @@ "properties": { "enabled": { "type": "boolean", - "default": true + "default": true, + "description": "Writes per-session ATIF JSON files when enabled." }, "outputDir": { - "type": "string" + "type": "string", + "description": "Directory for ATIF JSON output. Relative paths are resolved through the OpenClaw plugin API." }, "agentName": { "type": "string", - "default": "openclaw" + "default": "openclaw", + "description": "Agent name recorded in ATIF exports." }, "agentVersion": { - "type": "string" + "type": "string", + "description": "Agent version recorded in ATIF exports. Defaults to the OpenClaw plugin API version when omitted." } - } + }, + "description": "ATIF file export settings." }, "telemetry": { "type": "object", "additionalProperties": false, "properties": { "openInference": { - "$ref": "#/$defs/otlpSubscriber" + "$ref": "#/$defs/openInferenceSubscriber", + "description": "OpenInference/Phoenix subscriber configuration." }, "otel": { - "$ref": "#/$defs/otlpSubscriber" + "$ref": "#/$defs/otelSubscriber", + "description": "OpenTelemetry subscriber configuration." } - } + }, + "description": "OTLP telemetry subscriber settings." }, "capture": { "type": "object", @@ -67,21 +84,26 @@ "properties": { "includePrompts": { "type": "boolean", - "default": true + "default": true, + "description": "Includes LLM prompt text in replayed telemetry when true." }, "includeResponses": { "type": "boolean", - "default": true + "default": true, + "description": "Includes LLM response text in replayed telemetry when true." }, "stripToolArgs": { "type": "boolean", - "default": true + "default": true, + "description": "Strips tool arguments from replayed tool spans by default." }, "stripToolResults": { "type": "boolean", - "default": true + "default": true, + "description": "Strips tool results from replayed tool spans by default." } - } + }, + "description": "Controls sensitive payload capture for replayed LLM and tool telemetry." }, "correlation": { "type": "object", @@ -90,72 +112,157 @@ "llmOutputGraceMs": { "type": "integer", "minimum": 0, - "default": 250 + "default": 250, + "description": "Milliseconds to wait for a matching llm_input before replaying an llm_output with a placeholder request." }, "recordTtlMs": { "type": "integer", "minimum": 0, - "default": 600000 + "default": 600000, + "description": "Maximum age in milliseconds for buffered correlation records." }, "maxRecordsPerKey": { "type": "integer", "minimum": 1, - "default": 32 + "default": 32, + "description": "Maximum buffered records per correlation key." } - } + }, + "description": "Bounded correlation settings for matching OpenClaw hook events into replay spans." } }, "$defs": { - "otlpSubscriber": { + "otelSubscriber": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "default": false, + "description": "Enables this telemetry subscriber." + }, + "transport": { + "type": "string", + "enum": [ + "http_binary", + "grpc" + ], + "default": "http_binary", + "description": "OTLP transport protocol." + }, + "endpoint": { + "type": "string", + "description": "OTLP collector endpoint. Uses subscriber defaults when omitted." + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "String-valued headers sent to the OTLP endpoint." + }, + "resourceAttributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "String-valued resource attributes attached to exported telemetry." + }, + "serviceName": { + "type": "string", + "default": "openclaw-nemo-flow", + "description": "OTLP service.name resource attribute." + }, + "serviceNamespace": { + "type": "string", + "default": "nemo-flow", + "description": "OTLP service.namespace resource attribute." + }, + "serviceVersion": { + "type": "string", + "default": "unknown", + "description": "OTLP service.version resource attribute." + }, + "instrumentationScope": { + "type": "string", + "description": "Instrumentation scope name used by this subscriber.", + "default": "nemo-flow-otel" + }, + "timeoutMillis": { + "type": "integer", + "minimum": 0, + "default": 3000, + "description": "Exporter timeout in milliseconds." + } + }, + "description": "OpenTelemetry OTLP subscriber configuration." + }, + "openInferenceSubscriber": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", - "default": false + "default": false, + "description": "Enables this telemetry subscriber." }, "transport": { "type": "string", - "enum": ["http_binary", "grpc"], - "default": "http_binary" + "enum": [ + "http_binary", + "grpc" + ], + "default": "http_binary", + "description": "OTLP transport protocol." }, "endpoint": { - "type": "string" + "type": "string", + "description": "OTLP collector endpoint. Uses subscriber defaults when omitted." }, "headers": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "String-valued headers sent to the OTLP endpoint." }, "resourceAttributes": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "String-valued resource attributes attached to exported telemetry." }, "serviceName": { "type": "string", - "default": "openclaw-nemo-flow" + "default": "openclaw-nemo-flow", + "description": "OTLP service.name resource attribute." }, "serviceNamespace": { "type": "string", - "default": "nemo-flow" + "default": "nemo-flow", + "description": "OTLP service.namespace resource attribute." }, "serviceVersion": { "type": "string", - "default": "unknown" + "default": "unknown", + "description": "OTLP service.version resource attribute." }, "instrumentationScope": { - "type": "string" + "type": "string", + "description": "Instrumentation scope name used by this subscriber.", + "default": "nemo-flow-openinference" }, "timeoutMillis": { "type": "integer", "minimum": 0, - "default": 3000 + "default": 3000, + "description": "Exporter timeout in milliseconds." } - } + }, + "description": "OpenInference/Phoenix OTLP subscriber configuration." } - } + }, + "description": "Configuration for the NeMo Flow OpenClaw observability plugin." } } diff --git a/integrations/openclaw/package-lock.json b/integrations/openclaw/package-lock.json index 68463afe..31d0b7ae 100644 --- a/integrations/openclaw/package-lock.json +++ b/integrations/openclaw/package-lock.json @@ -1,63 +1,6130 @@ { "name": "@nvidia/nemo-flow-openclaw", - "version": "0.0.0", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@nvidia/nemo-flow-openclaw", - "version": "0.0.0", + "version": "0.2.0", "license": "Apache-2.0", + "dependencies": { + "nemo-flow-node": ">=0.1.0 <0.3.0" + }, "devDependencies": { "@types/node": "^20.19.0", "typescript": "^5.8.2" }, - "optionalDependencies": { - "nemo-flow-node": "file:../../crates/node" + "peerDependencies": { + "openclaw": ">=2026.5.6" + } + }, + "node_modules/@agentclientprotocol/sdk": { + "version": "0.21.0", + "license": "Apache-2.0", + "peer": true, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.93.0", + "license": "MIT", + "peer": true, + "dependencies": { + "json-schema-to-ts": "^3.1.1" + }, + "bin": { + "anthropic-ai-sdk": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@anthropic-ai/vertex-sdk": { + "version": "0.16.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@anthropic-ai/sdk": ">=0.50.3 <1", + "google-auth-library": "^9.4.2" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock": { + "version": "3.1042.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-node": "^3.972.39", + "@aws-sdk/middleware-host-header": "^3.972.10", + "@aws-sdk/middleware-logger": "^3.972.10", + "@aws-sdk/middleware-recursion-detection": "^3.972.11", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/region-config-resolver": "^3.972.13", + "@aws-sdk/token-providers": "3.1042.0", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@aws-sdk/util-user-agent-browser": "^3.972.10", + "@aws-sdk/util-user-agent-node": "^3.973.24", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/hash-node": "^4.2.14", + "@smithy/invalid-dependency": "^4.2.14", + "@smithy/middleware-content-length": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-retry": "^4.5.7", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-body-length-node": "^4.2.3", + "@smithy/util-defaults-mode-browser": "^4.3.49", + "@smithy/util-defaults-mode-node": "^4.2.54", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.1042.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-node": "^3.972.39", + "@aws-sdk/eventstream-handler-node": "^3.972.14", + "@aws-sdk/middleware-eventstream": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.10", + "@aws-sdk/middleware-logger": "^3.972.10", + "@aws-sdk/middleware-recursion-detection": "^3.972.11", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/middleware-websocket": "^3.972.16", + "@aws-sdk/region-config-resolver": "^3.972.13", + "@aws-sdk/token-providers": "3.1042.0", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@aws-sdk/util-user-agent-browser": "^3.972.10", + "@aws-sdk/util-user-agent-node": "^3.973.24", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/eventstream-serde-browser": "^4.2.14", + "@smithy/eventstream-serde-config-resolver": "^4.3.14", + "@smithy/eventstream-serde-node": "^4.2.14", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/hash-node": "^4.2.14", + "@smithy/invalid-dependency": "^4.2.14", + "@smithy/middleware-content-length": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-retry": "^4.5.7", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-body-length-node": "^4.2.3", + "@smithy/util-defaults-mode-browser": "^4.3.49", + "@smithy/util-defaults-mode-node": "^4.2.54", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.1044.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-node": "^3.972.39", + "@aws-sdk/middleware-host-header": "^3.972.10", + "@aws-sdk/middleware-logger": "^3.972.10", + "@aws-sdk/middleware-recursion-detection": "^3.972.11", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/region-config-resolver": "^3.972.13", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@aws-sdk/util-user-agent-browser": "^3.972.10", + "@aws-sdk/util-user-agent-node": "^3.973.24", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/hash-node": "^4.2.14", + "@smithy/invalid-dependency": "^4.2.14", + "@smithy/middleware-content-length": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-retry": "^4.5.7", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-body-length-node": "^4.2.3", + "@smithy/util-defaults-mode-browser": "^4.3.49", + "@smithy/util-defaults-mode-node": "^4.2.54", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.974.8", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/xml-builder": "^3.972.22", + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.972.31", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.34", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.36", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-stream": "^4.5.25", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.972.38", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-env": "^3.972.34", + "@aws-sdk/credential-provider-http": "^3.972.36", + "@aws-sdk/credential-provider-login": "^3.972.38", + "@aws-sdk/credential-provider-process": "^3.972.34", + "@aws-sdk/credential-provider-sso": "^3.972.38", + "@aws-sdk/credential-provider-web-identity": "^3.972.38", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.38", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.39", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.34", + "@aws-sdk/credential-provider-http": "^3.972.36", + "@aws-sdk/credential-provider-ini": "^3.972.38", + "@aws-sdk/credential-provider-process": "^3.972.34", + "@aws-sdk/credential-provider-sso": "^3.972.38", + "@aws-sdk/credential-provider-web-identity": "^3.972.38", + "@aws-sdk/types": "^3.973.8", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.34", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.972.38", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/token-providers": "3.1041.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { + "version": "3.1041.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.38", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.1044.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.1044.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-cognito-identity": "^3.972.31", + "@aws-sdk/credential-provider-env": "^3.972.34", + "@aws-sdk/credential-provider-http": "^3.972.36", + "@aws-sdk/credential-provider-ini": "^3.972.38", + "@aws-sdk/credential-provider-login": "^3.972.38", + "@aws-sdk/credential-provider-node": "^3.972.39", + "@aws-sdk/credential-provider-process": "^3.972.34", + "@aws-sdk/credential-provider-sso": "^3.972.38", + "@aws-sdk/credential-provider-web-identity": "^3.972.38", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node": { + "version": "3.972.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/eventstream-codec": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-eventstream": { + "version": "3.972.10", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.972.10", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.972.10", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.972.11", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.972.37", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-arn-parser": "^3.972.3", + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.972.38", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@smithy/core": "^3.23.17", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-retry": "^4.3.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket": { + "version": "3.972.16", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-format-url": "^3.972.10", + "@smithy/eventstream-codec": "^4.2.14", + "@smithy/eventstream-serde-browser": "^4.2.14", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.997.6", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/middleware-host-header": "^3.972.10", + "@aws-sdk/middleware-logger": "^3.972.10", + "@aws-sdk/middleware-recursion-detection": "^3.972.11", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/region-config-resolver": "^3.972.13", + "@aws-sdk/signature-v4-multi-region": "^3.996.25", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@aws-sdk/util-user-agent-browser": "^3.972.10", + "@aws-sdk/util-user-agent-node": "^3.973.24", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/hash-node": "^4.2.14", + "@smithy/invalid-dependency": "^4.2.14", + "@smithy/middleware-content-length": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-retry": "^4.5.7", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-body-length-node": "^4.2.3", + "@smithy/util-defaults-mode-browser": "^4.3.49", + "@smithy/util-defaults-mode-node": "^4.2.54", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.972.13", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/config-resolver": "^4.4.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.25", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "^3.972.37", + "@aws-sdk/types": "^3.973.8", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.1042.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.973.8", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.972.3", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.996.8", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-endpoints": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.972.10", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/querystring-builder": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.5", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.972.10", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.973.24", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/types": "^3.973.8", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.22", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@nodable/entities": "2.1.0", + "@smithy/types": "^4.14.1", + "fast-xml-parser": "5.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws/bedrock-token-generator": { + "version": "1.1.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/credential-providers": "^3.525.0", + "@aws-sdk/util-format-url": ">=3.525.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/hash-node": ">=2.1.3", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": ">=3.2.1", + "@smithy/signature-v4": ">=2.1.3", + "@smithy/types": ">=2.11.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.4", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@clack/core": { + "version": "1.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@clack/prompts": { + "version": "1.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@clack/core": "1.3.0", + "fast-string-width": "^3.0.2", + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@google/genai": { + "version": "1.52.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "google-auth-library": "^10.3.0", + "p-retry": "^4.6.2", + "protobufjs": "^7.5.4", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.25.2" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@google/genai/node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@google/genai/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@google/genai/node_modules/gaxios": { + "version": "7.1.4", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google/genai/node_modules/gcp-metadata": { + "version": "8.1.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google/genai/node_modules/google-auth-library": { + "version": "10.6.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.1.4", + "gcp-metadata": "8.1.2", + "google-logging-utils": "1.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google/genai/node_modules/google-logging-utils": { + "version": "1.1.3", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google/genai/node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@google/genai/node_modules/node-fetch": { + "version": "3.3.2", + "license": "MIT", + "peer": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/@grammyjs/runner": { + "version": "2.0.3", + "license": "MIT", + "peer": true, + "dependencies": { + "abort-controller": "^3.0.0" + }, + "engines": { + "node": ">=12.20.0 || >=14.13.1" + }, + "peerDependencies": { + "grammy": "^1.13.1" + } + }, + "node_modules/@grammyjs/transformer-throttler": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "bottleneck": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || >=14.13.1" + }, + "peerDependencies": { + "grammy": "^1.0.0" + } + }, + "node_modules/@grammyjs/types": { + "version": "3.26.0", + "license": "MIT", + "peer": true + }, + "node_modules/@homebridge/ciao": { + "version": "1.3.8", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.3", + "fast-deep-equal": "^3.1.3", + "source-map-support": "^0.5.21", + "tslib": "^2.8.1" + }, + "bin": { + "ciao-bcs": "lib/bonjour-conformance-testing.js" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.14", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@lydell/node-pty": { + "version": "1.2.0-beta.12", + "license": "MIT", + "peer": true, + "optionalDependencies": { + "@lydell/node-pty-darwin-arm64": "1.2.0-beta.12", + "@lydell/node-pty-darwin-x64": "1.2.0-beta.12", + "@lydell/node-pty-linux-arm64": "1.2.0-beta.12", + "@lydell/node-pty-linux-x64": "1.2.0-beta.12", + "@lydell/node-pty-win32-arm64": "1.2.0-beta.12", + "@lydell/node-pty-win32-x64": "1.2.0-beta.12" + } + }, + "node_modules/@mariozechner/jiti": { + "version": "2.6.5", + "license": "MIT", + "peer": true, + "dependencies": { + "std-env": "^3.10.0", + "yoctocolors": "^2.1.2" + }, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@mariozechner/pi-agent-core": { + "version": "0.73.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@mariozechner/pi-ai": "^0.73.0", + "typebox": "^1.1.24" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mariozechner/pi-ai": { + "version": "0.73.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@anthropic-ai/sdk": "^0.91.1", + "@aws-sdk/client-bedrock-runtime": "^3.1030.0", + "@google/genai": "^1.40.0", + "@mistralai/mistralai": "^2.2.0", + "chalk": "^5.6.2", + "openai": "6.26.0", + "partial-json": "^0.1.7", + "proxy-agent": "^6.5.0", + "typebox": "^1.1.24", + "undici": "^7.19.1", + "zod-to-json-schema": "^3.24.6" + }, + "bin": { + "pi-ai": "dist/cli.js" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk": { + "version": "0.91.1", + "license": "MIT", + "peer": true, + "dependencies": { + "json-schema-to-ts": "^3.1.1" + }, + "bin": { + "anthropic-ai-sdk": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/degenerator": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/get-uri": { + "version": "6.0.5", + "license": "MIT", + "peer": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/http-proxy-agent": { + "version": "7.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/lru-cache": { + "version": "7.18.3", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/openai": { + "version": "6.26.0", + "license": "Apache-2.0", + "peer": true, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/pac-proxy-agent": { + "version": "7.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/pac-resolver": { + "version": "7.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/proxy-agent": { + "version": "6.5.0", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/@mariozechner/pi-ai/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@mariozechner/pi-ai/node_modules/undici": { + "version": "7.25.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/@mariozechner/pi-coding-agent": { + "version": "0.73.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@mariozechner/jiti": "^2.6.2", + "@mariozechner/pi-agent-core": "^0.73.0", + "@mariozechner/pi-ai": "^0.73.0", + "@mariozechner/pi-tui": "^0.73.0", + "@silvia-odwyer/photon-node": "^0.3.4", + "chalk": "^5.5.0", + "cli-highlight": "^2.1.11", + "diff": "^8.0.2", + "extract-zip": "^2.0.1", + "file-type": "^21.1.1", + "glob": "^13.0.1", + "hosted-git-info": "^9.0.2", + "ignore": "^7.0.5", + "marked": "^15.0.12", + "minimatch": "^10.2.3", + "proper-lockfile": "^4.1.2", + "strip-ansi": "^7.1.0", + "typebox": "^1.1.24", + "undici": "^7.19.1", + "uuid": "^14.0.0", + "yaml": "^2.8.2" + }, + "bin": { + "pi": "dist/cli.js" + }, + "engines": { + "node": ">=20.6.0" + }, + "optionalDependencies": { + "@mariozechner/clipboard": "^0.3.5" + } + }, + "node_modules/@mariozechner/pi-coding-agent/node_modules/file-type": { + "version": "21.3.4", + "license": "MIT", + "peer": true, + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/@mariozechner/pi-coding-agent/node_modules/undici": { + "version": "7.25.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/@mariozechner/pi-tui": { + "version": "0.73.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/mime-types": "^2.1.4", + "chalk": "^5.5.0", + "get-east-asian-width": "^1.3.0", + "marked": "^15.0.12", + "mime-types": "^3.0.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "optionalDependencies": { + "koffi": "^2.9.0" + } + }, + "node_modules/@mistralai/mistralai": { + "version": "2.2.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "ws": "^8.18.0", + "zod": "^3.25.0 || ^4.0.0", + "zod-to-json-schema": "^3.25.0" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@mozilla/readability": { + "version": "0.6.0", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@nodable/entities": { + "version": "2.1.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.1", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@silvia-odwyer/photon-node": { + "version": "0.3.4", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/@slack/bolt": { + "version": "4.7.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@slack/logger": "^4.0.1", + "@slack/oauth": "^3.0.5", + "@slack/socket-mode": "^2.0.7", + "@slack/types": "^2.20.1", + "@slack/web-api": "^7.15.1", + "axios": "^1.12.0", + "express": "^5.0.0", + "path-to-regexp": "^8.1.0", + "raw-body": "^3", + "tsscmp": "^1.0.6" + }, + "engines": { + "node": ">=18", + "npm": ">=8.6.0" + }, + "peerDependencies": { + "@types/express": "^5.0.0" + } + }, + "node_modules/@slack/logger": { + "version": "4.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": ">=18" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@slack/oauth": { + "version": "3.0.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@slack/logger": "^4.0.1", + "@slack/web-api": "^7.15.0", + "@types/jsonwebtoken": "^9", + "@types/node": ">=18", + "jsonwebtoken": "^9" + }, + "engines": { + "node": ">=18", + "npm": ">=8.6.0" + } + }, + "node_modules/@slack/socket-mode": { + "version": "2.0.7", + "license": "MIT", + "peer": true, + "dependencies": { + "@slack/logger": "^4.0.1", + "@slack/web-api": "^7.15.0", + "@types/node": ">=18", + "@types/ws": "^8", + "eventemitter3": "^5", + "ws": "^8" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@slack/types": { + "version": "2.21.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/web-api": { + "version": "7.15.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@slack/logger": "^4.0.1", + "@slack/types": "^2.21.0", + "@types/node": ">=18", + "@types/retry": "0.12.0", + "axios": "^1.15.0", + "eventemitter3": "^5.0.1", + "form-data": "^4.0.4", + "is-electron": "2.2.2", + "is-stream": "^2", + "p-queue": "^6", + "p-retry": "^4", + "retry": "^0.13.1" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.4.17", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.23.17", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", + "@smithy/uuid": "^1.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.14.1", + "@smithy/util-hex-encoding": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/eventstream-codec": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.17", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/protocol-http": "^5.3.14", + "@smithy/querystring-builder": "^4.2.14", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.4.32", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/core": "^3.23.17", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-middleware": "^4.2.14", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.5.7", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/service-error-classification": "^4.3.1", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/uuid": "^1.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.20", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/core": "^3.23.17", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.6.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/protocol-http": "^5.3.14", + "@smithy/querystring-builder": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.3.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "@smithy/util-uri-escape": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.3.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.9", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.3.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^4.2.2", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-uri-escape": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.12.13", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/core": "^3.23.17", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-stream": "^4.5.25", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.14.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/querystring-parser": "^4.2.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.3.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.3", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.49", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/property-provider": "^4.2.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.54", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/config-resolver": "^4.4.17", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.4.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.2.14", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.3.8", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/service-error-classification": "^4.3.1", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.5.25", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.2.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@telegraf/types": { + "version": "7.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "license": "MIT", + "peer": true + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "license": "MIT", + "peer": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "5.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "license": "MIT", + "peer": true + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "node_modules/@types/mime-types": { + "version": "2.1.4", + "license": "MIT", + "peer": true + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/@types/node": { + "version": "20.19.39", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/qs": { + "version": "6.15.1", + "license": "MIT", + "peer": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "license": "MIT", + "peer": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "license": "MIT", + "peer": true + }, + "node_modules/@types/send": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "9.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "license": "MIT", + "peer": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0", + "peer": true + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ast-types": { + "version": "0.13.4", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT", + "peer": true + }, + "node_modules/axios": { + "version": "1.16.0", + "license": "MIT", + "peer": true, + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "license": "MIT", + "peer": true, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/basic-ftp": { + "version": "5.3.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/bn.js": { + "version": "4.12.3", + "license": "MIT", + "peer": true + }, + "node_modules/body-parser": { + "version": "2.2.2", + "license": "MIT", + "peer": true, + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "license": "ISC", + "peer": true + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "license": "MIT", + "peer": true + }, + "node_modules/bowser": { + "version": "2.14.1", + "license": "MIT", + "peer": true + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT", + "peer": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "14.0.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/cors": { + "version": "2.8.6", + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/croner": { + "version": "10.0.1", + "funding": [ + { + "type": "other", + "url": "https://paypal.me/hexagonpp" + }, + { + "type": "github", + "url": "https://github.com/sponsors/hexagon" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "license": "MIT", + "peer": true + }, + "node_modules/data-uri-to-buffer": { + "version": "8.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/degenerator": { + "version": "7.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "quickjs-wasi": "^2.2.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/domhandler": { + "version": "5.0.3", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "17.4.2", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "license": "MIT", + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "license": "MIT", + "peer": true + }, + "node_modules/eventsource": { + "version": "3.0.7", + "license": "MIT", + "peer": true, + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.8", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.5.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fast-xml-builder": { + "version": "1.1.9", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "path-expression-matcher": "^1.1.3" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.7.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@nodable/entities": "^2.1.0", + "fast-xml-builder": "^1.1.5", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.2.3" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-type": { + "version": "22.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.5", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "license": "MIT", + "peer": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "6.7.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gaxios/node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "gaxios": "^6.1.1", + "google-logging-utils": "^0.0.2", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-uri": { + "version": "8.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "basic-ftp": "^5.2.0", + "data-uri-to-buffer": "8.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "license": "BlueOak-1.0.0", + "peer": true, + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-agent": { + "version": "4.1.3", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "globalthis": "^1.0.2", + "matcher": "^4.0.0", + "semver": "^7.3.5", + "serialize-error": "^8.1.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/google-auth-library": { + "version": "9.15.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-logging-utils": { + "version": "0.0.2", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC", + "peer": true + }, + "node_modules/grammy": { + "version": "1.42.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@grammyjs/types": "3.26.0", + "abort-controller": "^3.0.0", + "debug": "^4.4.3", + "node-fetch": "^2.7.0" + }, + "engines": { + "node": "^12.20.0 || >=14.13.1" + } + }, + "node_modules/gtoken": { + "version": "7.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/hono": { + "version": "4.12.18", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hosted-git-info": { + "version": "9.0.3", + "license": "ISC", + "peer": true, + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http_ece": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy-agent": { + "version": "9.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/https-proxy-agent": { + "version": "9.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/ignore": { + "version": "7.0.5", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC", + "peer": true + }, + "node_modules/ip-address": { + "version": "10.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.4.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "license": "MIT", + "peer": true + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC", + "peer": true + }, + "node_modules/jiti": { + "version": "2.7.0", + "license": "MIT", + "peer": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jose": { + "version": "6.2.3", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema-to-ts": { + "version": "3.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "license": "MIT", + "peer": true, + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "license": "(MIT OR GPL-3.0-or-later)", + "peer": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/linkedom": { + "version": "0.18.12", + "license": "ISC", + "peer": true, + "dependencies": { + "css-select": "^5.1.0", + "cssom": "^0.5.0", + "html-escaper": "^3.0.3", + "htmlparser2": "^10.0.0", + "uhyphen": "^0.2.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": ">= 2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/long": { + "version": "5.3.2", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/lru-cache": { + "version": "11.3.6", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "license": "MIT", + "peer": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/matcher": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/media-typer": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC", + "peer": true + }, + "node_modules/minimatch": { + "version": "10.2.5", + "license": "BlueOak-1.0.0", + "peer": true, + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/mz": { + "version": "2.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nemo-flow-node": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/nemo-flow-node/-/nemo-flow-node-0.1.0.tgz", + "integrity": "sha512-2SqAIm5K/4Ce0zqr0gOSzQWrFuBgGYVO4m3Kuso2Km9DAmd0Fh/I2YFEbSD6rU1cCpo5Fmmht3tROmHrJgG86A==", + "license": "Apache-2.0", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/netmask": { + "version": "2.1.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-addon-api": { + "version": "8.7.0", + "license": "MIT", + "peer": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-edge-tts": { + "version": "1.2.10", + "license": "MIT", + "peer": true, + "dependencies": { + "https-proxy-agent": "^7.0.1", + "ws": "^8.13.0", + "yargs": "^17.7.2" + }, + "bin": { + "node-edge-tts": "bin.js" + } + }, + "node_modules/node-edge-tts/node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/node-edge-tts/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-edge-tts/node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-edge-tts/node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/node-edge-tts/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-edge-tts/node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-edge-tts/node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "license": "MIT", + "peer": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openai": { + "version": "6.36.0", + "license": "Apache-2.0", + "peer": true, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/openclaw": { + "version": "2026.5.6", + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@agentclientprotocol/sdk": "0.21.0", + "@anthropic-ai/sdk": "0.93.0", + "@anthropic-ai/vertex-sdk": "^0.16.0", + "@aws-sdk/client-bedrock": "3.1042.0", + "@aws-sdk/client-bedrock-runtime": "3.1042.0", + "@aws-sdk/credential-provider-node": "3.972.39", + "@aws/bedrock-token-generator": "^1.1.0", + "@clack/prompts": "^1.3.0", + "@google/genai": "^1.51.0", + "@grammyjs/runner": "^2.0.3", + "@grammyjs/transformer-throttler": "^1.2.1", + "@homebridge/ciao": "^1.3.8", + "@lydell/node-pty": "1.2.0-beta.12", + "@mariozechner/pi-agent-core": "0.73.0", + "@mariozechner/pi-ai": "0.73.0", + "@mariozechner/pi-coding-agent": "0.73.0", + "@mariozechner/pi-tui": "0.73.0", + "@modelcontextprotocol/sdk": "1.29.0", + "@mozilla/readability": "^0.6.0", + "@slack/bolt": "^4.7.2", + "@slack/types": "^2.21.0", + "@slack/web-api": "^7.15.2", + "ajv": "^8.20.0", + "chalk": "^5.6.2", + "chokidar": "^5.0.0", + "commander": "^14.0.3", + "croner": "^10.0.1", + "dotenv": "^17.4.2", + "express": "5.2.1", + "file-type": "22.0.1", + "global-agent": "^4.1.3", + "grammy": "^1.42.0", + "https-proxy-agent": "^9.0.0", + "ipaddr.js": "^2.4.0", + "jiti": "^2.6.1", + "json5": "^2.2.3", + "jszip": "^3.10.1", + "linkedom": "^0.18.12", + "markdown-it": "14.1.1", + "minimatch": "10.2.5", + "node-edge-tts": "^1.2.10", + "openai": "^6.36.0", + "openshell": "0.1.0", + "pdfjs-dist": "^5.7.284", + "playwright-core": "1.59.1", + "proxy-agent": "^8.0.1", + "qrcode": "1.5.4", + "tar": "7.5.13", + "tokenjuice": "0.7.0", + "tree-sitter-bash": "^0.25.1", + "tslog": "^4.10.2", + "typebox": "1.1.37", + "undici": "8.2.0", + "web-push": "^3.6.7", + "web-tree-sitter": "^0.26.8", + "ws": "^8.20.0", + "yaml": "^2.8.4", + "zod": "^4.4.3" + }, + "bin": { + "openclaw": "openclaw.mjs" + }, + "engines": { + "node": ">=22.14.0" + }, + "optionalDependencies": { + "sqlite-vec": "0.1.9" + } + }, + "node_modules/openshell": { + "version": "0.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "dotenv": "^16.5.0", + "telegraf": "^4.16.3" + }, + "bin": { + "openshell": "bin/openshell.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/openshell/node_modules/dotenv": { + "version": "16.6.1", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "license": "MIT", + "peer": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "license": "MIT", + "peer": true + }, + "node_modules/p-retry": { + "version": "4.6.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "version": "9.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "get-uri": "8.0.0", + "http-proxy-agent": "9.0.0", + "https-proxy-agent": "9.0.0", + "pac-resolver": "9.0.1", + "quickjs-wasi": "^2.2.0", + "socks-proxy-agent": "10.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/pac-resolver": { + "version": "9.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "degenerator": "7.0.1", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "quickjs-wasi": "^2.2.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "license": "(MIT AND Zlib)", + "peer": true + }, + "node_modules/parse5": { + "version": "5.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/partial-json": { + "version": "0.1.7", + "license": "MIT", + "peer": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-expression-matcher": { + "version": "1.5.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "license": "BlueOak-1.0.0", + "peer": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pdfjs-dist": { + "version": "5.7.284", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=22.13.0 || >=24" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.100" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "license": "MIT", + "peer": true + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/playwright-core": { + "version": "1.59.1", + "license": "Apache-2.0", + "peer": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/protobufjs": { + "version": "7.5.6", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.1", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "peer": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-agent": { + "version": "8.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "http-proxy-agent": "9.0.0", + "https-proxy-agent": "9.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "9.0.1", + "proxy-from-env": "^2.0.0", + "socks-proxy-agent": "10.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "license": "MIT", + "peer": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.4", + "license": "MIT", + "peer": true, + "dependencies": { + "dijkstrajs": "^1.0.1", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "license": "ISC", + "peer": true + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "license": "ISC", + "peer": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.1", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quickjs-wasi": { + "version": "2.2.0", + "license": "MIT", + "peer": true + }, + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/readdirp": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "license": "ISC", + "peer": true + }, + "node_modules/retry": { + "version": "0.13.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/router": { + "version": "2.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/safe-compare": { + "version": "1.1.4", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-alloc": "^1.2.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/sandwich-stream": { + "version": "2.0.2", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC", + "peer": true + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT", + "peer": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC", + "peer": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC", + "peer": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "license": "MIT", + "peer": true + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.8", + "license": "MIT", + "peer": true, + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "10.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "license": "MIT", + "peer": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strnum": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/strtok3": { + "version": "10.3.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "7.5.13", + "license": "BlueOak-1.0.0", + "peer": true, + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/telegraf": { + "version": "4.16.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@telegraf/types": "^7.1.0", + "abort-controller": "^3.0.0", + "debug": "^4.3.4", + "mri": "^1.2.0", + "node-fetch": "^2.7.0", + "p-timeout": "^4.1.0", + "safe-compare": "^1.1.4", + "sandwich-stream": "^2.0.2" + }, + "bin": { + "telegraf": "lib/cli.mjs" + }, + "engines": { + "node": "^12.20.0 || >=14.13.1" + } + }, + "node_modules/telegraf/node_modules/p-timeout": { + "version": "4.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "license": "MIT", + "peer": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "license": "MIT", + "peer": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tokenjuice": { + "version": "0.7.0", + "license": "MIT", + "peer": true, + "bin": { + "tokenjuice": "dist/cli/main.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/vincentkoc" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/tree-sitter-bash": { + "version": "0.25.1", + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-addon-api": "^8.2.1", + "node-gyp-build": "^4.8.2" }, "peerDependencies": { - "openclaw": "*" + "tree-sitter": "^0.25.0" }, "peerDependenciesMeta": { - "openclaw": { + "tree-sitter": { "optional": true } } }, - "../../crates/node": { - "name": "nemo-flow-node", - "version": "0.2.0", - "license": "Apache-2.0", - "optional": true, - "devDependencies": { - "@napi-rs/cli": "^2", - "c8": "^11.0.0", - "prettier": "^3.8.2", - "typedoc": "^0.28.0", - "typescript": "^5.8.2" + "node_modules/ts-algebra": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD", + "peer": true + }, + "node_modules/tslog": { + "version": "4.10.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16" }, + "funding": { + "url": "https://github.com/fullstack-build/tslog?sponsor=1" + } + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "license": "MIT", + "peer": true, "engines": { - "node": ">=20.0.0" + "node": ">=0.6.x" } }, - "node_modules/@types/node": { - "version": "20.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz", - "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", - "dev": true, + "node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "2.0.1", "license": "MIT", + "peer": true, "dependencies": { - "undici-types": "~6.21.0" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/nemo-flow-node": { - "resolved": "../../crates/node", - "link": true + "node_modules/typebox": { + "version": "1.1.37", + "license": "MIT", + "peer": true }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -68,12 +6135,306 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/uhyphen": { + "version": "0.2.0", + "license": "ISC", + "peer": true + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici": { + "version": "8.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=22.19.0" + } + }, "node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/uuid": { + "version": "14.0.0", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/web-push": { + "version": "3.6.7", + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "asn1.js": "^5.3.0", + "http_ece": "1.2.0", + "https-proxy-agent": "^7.0.0", + "jws": "^4.0.0", + "minimist": "^1.2.5" + }, + "bin": { + "web-push": "src/cli.js" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/web-push/node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/web-push/node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-tree-sitter": { + "version": "0.26.8", + "license": "MIT", + "peer": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "license": "ISC", + "peer": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC", + "peer": true + }, + "node_modules/ws": { + "version": "8.20.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/yaml": { + "version": "2.8.4", + "license": "ISC", + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "license": "ISC", + "peer": true, + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } } } } diff --git a/integrations/openclaw/package.json b/integrations/openclaw/package.json index c9d9b0b4..2007bff3 100644 --- a/integrations/openclaw/package.json +++ b/integrations/openclaw/package.json @@ -28,15 +28,10 @@ "test:live": "npm run build && NEMO_FLOW_OPENCLAW_LIVE_SMOKE=1 node --test \"dist/src/__tests__/live-smoke.test.js\"" }, "peerDependencies": { - "openclaw": "*" + "openclaw": ">=2026.5.6" }, - "peerDependenciesMeta": { - "openclaw": { - "optional": true - } - }, - "optionalDependencies": { - "nemo-flow-node": "file:../../crates/node" + "dependencies": { + "nemo-flow-node": ">=0.1.0 <0.3.0" }, "devDependencies": { "@types/node": "^20.19.0", diff --git a/integrations/openclaw/src/__tests__/atif-capture.test.ts b/integrations/openclaw/src/__tests__/atif-capture.test.ts index 50c007c9..d9f15495 100644 --- a/integrations/openclaw/src/__tests__/atif-capture.test.ts +++ b/integrations/openclaw/src/__tests__/atif-capture.test.ts @@ -16,7 +16,7 @@ import { import { parseConfig } from "../config.js"; import { createHookReplayState, type SessionManager, type SessionState } from "../hook-replay/session.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; -import type { PluginLoggerLike } from "../types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; describe("ATIF capture", () => { it("registers and deregisters around synchronous emit", () => { @@ -201,16 +201,17 @@ function createSession(manager: TestManager, sessionId: string): SessionState { sessionId, source: "session_start", stack: manager.nf.createScopeStack(), - rootHandle: { id: "root" }, + rootHandle: { id: "root" } as unknown as ReturnType, }; manager.state.sessions.set(sessionId, session); return session; } -function createLogger(): PluginLoggerLike { +function createLogger(): PluginLogger { return { info: () => {}, warn: () => {}, + error: () => {}, }; } @@ -231,16 +232,16 @@ function createNemoFlowRuntime(params: { }; return { - ScopeType: { Agent: 0 }, - createScopeStack: () => ({}), - currentScopeStack: () => ({}), + ScopeType: { Agent: 0 } as NemoFlowRuntimeModule["ScopeType"], + createScopeStack: () => ({}) as unknown as ReturnType, + currentScopeStack: () => ({}) as unknown as ReturnType, setThreadScopeStack: () => {}, - pushScope: () => ({}), + pushScope: () => ({} as unknown as ReturnType), popScope: () => {}, event: () => {}, - llmCall: () => ({}), + llmCall: () => ({} as unknown as ReturnType), llmCallEnd: () => {}, - toolCall: () => ({}), + toolCall: () => ({} as unknown as ReturnType), toolCallEnd: () => {}, AtifExporter, OpenTelemetrySubscriber: FakeSubscriber, diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts index 0882aba7..d47aa58d 100644 --- a/integrations/openclaw/src/__tests__/config.test.ts +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import assert from "node:assert/strict"; -import { readFileSync } from "node:fs"; +import { readdirSync, readFileSync } from "node:fs"; import { describe, it } from "node:test"; import { @@ -10,10 +10,10 @@ import { nemoFlowConfigSchema, parseConfig, } from "../config.js"; -import type { NemoFlowModules } from "../modules.js"; +import type { NemoFlowModules, NemoFlowRuntimeModule } from "../modules.js"; import type { NemoFlowHealthSnapshot } from "../health.js"; import { registerNemoFlowPlugin } from "../runtime-state.js"; -import type { OpenClawHookHandlerLike, OpenClawPluginApiLike, PluginLoggerLike } from "../types.js"; +import type { OpenClawPluginApi, PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; describe("nemo-flow OpenClaw plugin shell", () => { it("applies hook-backend config defaults", () => { @@ -81,7 +81,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("returns without side effects outside full registration mode", () => { const api = createApi({ registrationMode: "discovery" }); - registerNemoFlowPlugin(api); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi); assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); @@ -92,7 +92,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("returns without side effects when disabled", () => { const api = createApi({ pluginConfig: { enabled: false } }); - registerNemoFlowPlugin(api); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi); assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); @@ -104,7 +104,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("returns without side effects when config parsing fails during registration", () => { const api = createApi({ pluginConfig: { backend: "managed_execution" } }); - registerNemoFlowPlugin(api); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi); assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); @@ -119,7 +119,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("registers service, lifecycle, and health surfaces in full mode", () => { const api = createApi(); - registerNemoFlowPlugin(api, async () => createModules()); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => createModules()); assert.deepEqual( api.calls.services.map((service) => service.id), @@ -156,7 +156,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("uses config parsed during registration when service starts", async () => { const api = createApi({ pluginConfig: { atif: { enabled: false }, correlation: { maxRecordsPerKey: 1 } } }); - registerNemoFlowPlugin(api, async () => createModules()); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => createModules()); api.pluginConfig = { backend: "managed_execution" }; const service = api.calls.services[0]; @@ -165,11 +165,12 @@ describe("nemo-flow OpenClaw plugin shell", () => { await assert.doesNotReject(async () => { await service.start({ stateDir: "/tmp/openclaw-state", + config: {} as never, logger: api.logger, }); }); } finally { - await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); } }); @@ -179,11 +180,11 @@ describe("nemo-flow OpenClaw plugin shell", () => { }); const api = createApi({ pluginConfig: { atif: { enabled: false } } }); - registerNemoFlowPlugin(api, async () => modules); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); const service = api.calls.services[0]; assert.ok(service); try { - await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); assert.ok(sessionStart); @@ -195,7 +196,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { assert.equal(status.status.state, "degraded"); assert.equal(status.initializedPluginHost, false); } finally { - await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); } }); @@ -203,10 +204,10 @@ describe("nemo-flow OpenClaw plugin shell", () => { const modules = createModules(); const api = createApi({ pluginConfig: { atif: { enabled: false } } }); - registerNemoFlowPlugin(api, async () => modules); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); const service = api.calls.services[0]; assert.ok(service); - await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); const gatewayStop = api.calls.hooks.find((hook) => hook.hookName === "gateway_stop"); @@ -236,10 +237,10 @@ describe("nemo-flow OpenClaw plugin shell", () => { }, }); - registerNemoFlowPlugin(api, async () => modules); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); const service = api.calls.services[0]; assert.ok(service); - await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); assert.deepEqual( modules.nf.calls.subscribers.map((subscriber) => [subscriber.kind, subscriber.name]), @@ -251,7 +252,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { assert.equal(modules.nf.calls.subscribers[0]?.config.endpoint, "http://otel.example"); assert.equal(modules.nf.calls.subscribers[1]?.config.endpoint, "http://phoenix.example"); - await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); for (const subscriber of modules.nf.calls.subscribers) { assert.deepEqual(subscriber.actions, [ @@ -275,11 +276,11 @@ describe("nemo-flow OpenClaw plugin shell", () => { }, }); - registerNemoFlowPlugin(api, async () => modules); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); const service = api.calls.services[0]; assert.ok(service); try { - await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); const status = api.calls.gatewayMethods[0]?.handler(); assert.ok(status); @@ -294,7 +295,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { ], ); } finally { - await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); } }); @@ -310,14 +311,14 @@ describe("nemo-flow OpenClaw plugin shell", () => { }); let serviceStarted = false; - registerNemoFlowPlugin(api, async () => modules); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); const service = api.calls.services[0]; assert.ok(service); try { - await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); serviceStarted = true; - await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); serviceStarted = false; const status = api.calls.gatewayMethods[0]?.handler(); @@ -326,7 +327,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { assert.equal(status.outputs.otel, "degraded"); } finally { if (serviceStarted) { - await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); } } }); @@ -336,21 +337,18 @@ describe("nemo-flow OpenClaw plugin shell", () => { const api = createApi(); const before = process.listenerCount("beforeExit"); - registerNemoFlowPlugin(api, async () => modules); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); const service = api.calls.services[0]; assert.ok(service); - await service.start({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); assert.equal(process.listenerCount("beforeExit"), before + 1); - await service.stop?.({ stateDir: "/tmp/openclaw-state", logger: api.logger }); + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); assert.equal(process.listenerCount("beforeExit"), before); }); it("does not statically import nemo-flow-node or OpenClaw private src paths", () => { - const files = [ - readFileSync(new URL("../modules.js", import.meta.url), "utf8"), - readFileSync(new URL("../../index.js", import.meta.url), "utf8"), - ].join("\n"); + const files = readBuiltJavaScriptFiles(new URL("../../", import.meta.url)); assert.doesNotMatch(files, /from ["']nemo-flow-node/); assert.doesNotMatch(files, /from ["']nemo-flow-node\/plugin/); @@ -358,15 +356,45 @@ describe("nemo-flow OpenClaw plugin shell", () => { }); }); -type TestApi = OpenClawPluginApiLike & { +function readBuiltJavaScriptFiles(directory: URL): string { + const chunks: string[] = []; + for (const entry of readdirSync(directory, { withFileTypes: true })) { + const child = new URL(`${entry.name}${entry.isDirectory() ? "/" : ""}`, directory); + if (entry.isDirectory()) { + chunks.push(readBuiltJavaScriptFiles(child)); + } else if (entry.isFile() && entry.name.endsWith(".js")) { + chunks.push(readFileSync(child, "utf8")); + } + } + return chunks.join("\n"); +} + +type HookHandler = (event: unknown, ctx: unknown) => void | Promise; + +type TestApi = { + id: string; + version?: string; + registrationMode: OpenClawPluginApi["registrationMode"]; + pluginConfig?: Record; + logger: PluginLogger; + resolvePath: OpenClawPluginApi["resolvePath"]; + registerService: (service: Parameters[0]) => void; + registerRuntimeLifecycle: (lifecycle: Parameters[0]) => void; + registerHook: (hookName: string | string[], handler: HookHandler) => void; + on: (hookName: string, handler: HookHandler) => void; + registerGatewayMethod: ( + method: string, + handler: (request?: unknown) => unknown, + opts?: { scope?: string }, + ) => void; calls: { - services: Parameters[0][]; - lifecycle: Parameters[0][]; + services: Parameters[0][]; + lifecycle: Parameters[0][]; gatewayMethods: Array<{ method: string; - handler: () => NemoFlowHealthSnapshot; + handler: (request?: unknown) => NemoFlowHealthSnapshot; }>; - hooks: Array<{ hookName: string; handler: OpenClawHookHandlerLike }>; + hooks: Array<{ hookName: string; handler: HookHandler }>; }; messages: { info: string[]; @@ -375,7 +403,7 @@ type TestApi = OpenClawPluginApiLike & { }; function createApi(params: { - registrationMode?: string; + registrationMode?: OpenClawPluginApi["registrationMode"]; pluginConfig?: Record; } = {}): TestApi { const messages: TestApi["messages"] = { info: [], warn: [] }; @@ -385,9 +413,10 @@ function createApi(params: { gatewayMethods: [], hooks: [], }; - const logger: PluginLoggerLike = { + const logger: PluginLogger = { info: (message) => messages.info.push(message), warn: (message) => messages.warn.push(message), + error: () => {}, }; const api: TestApi = { @@ -398,11 +427,13 @@ function createApi(params: { resolvePath: (input) => input, registerService: (service) => calls.services.push(service), registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), - on: (hookName, handler) => calls.hooks.push({ hookName, handler }), + registerHook: (hookName: string | string[], handler: HookHandler) => + calls.hooks.push({ hookName: String(hookName), handler }), + on: (hookName: string, handler: HookHandler) => calls.hooks.push({ hookName, handler }), registerGatewayMethod: (method, handler) => calls.gatewayMethods.push({ method, - handler: handler as TestApi["calls"]["gatewayMethods"][number]["handler"], + handler: handler as unknown as TestApi["calls"]["gatewayMethods"][number]["handler"], }), calls, messages, @@ -506,17 +537,17 @@ function createNemoFlowRuntime(params: SubscriberFailures = {}): TestNemoFlowRun }; return { - ScopeType: { Agent: 0 }, + ScopeType: { Agent: 0 } as NemoFlowRuntimeModule["ScopeType"], calls, - createScopeStack: () => ({ type: "stack" }), - currentScopeStack: () => ({ type: "previous-stack" }), + createScopeStack: () => ({ type: "stack" }) as unknown as ReturnType, + currentScopeStack: () => ({ type: "previous-stack" }) as unknown as ReturnType, setThreadScopeStack: () => {}, - pushScope: () => ({ type: "scope" }), + pushScope: () => ({ type: "scope" } as unknown as ReturnType), popScope: () => {}, event: (name, handle, data) => calls.event.push({ name, handle, data }), - llmCall: () => ({}), + llmCall: () => ({} as unknown as ReturnType), llmCallEnd: () => {}, - toolCall: () => ({}), + toolCall: () => ({} as unknown as ReturnType), toolCallEnd: () => {}, AtifExporter: FakeAtifExporter, OpenTelemetrySubscriber: createSubscriber("otel", { diff --git a/integrations/openclaw/src/__tests__/failure-model.test.ts b/integrations/openclaw/src/__tests__/failure-model.test.ts index 5842ef91..a22a8fe4 100644 --- a/integrations/openclaw/src/__tests__/failure-model.test.ts +++ b/integrations/openclaw/src/__tests__/failure-model.test.ts @@ -7,7 +7,7 @@ import { describe, it } from "node:test"; import { parseConfig } from "../config.js"; import { HookReplayBackend } from "../hooks-backend.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; -import type { PluginLoggerLike } from "../types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; describe("Replay failure model", () => { it("grace timer replay failure is caught and counted", async () => { @@ -43,7 +43,7 @@ describe("Replay failure model", () => { }); }); -type TestLogger = PluginLoggerLike & { +type TestLogger = PluginLogger & { messages: { warn: string[]; }; @@ -55,6 +55,7 @@ function createLogger(): TestLogger { messages, info: () => {}, warn: (message) => messages.warn.push(message), + error: () => {}, }; } @@ -62,18 +63,18 @@ function createThrowingLlmRuntime(): NemoFlowRuntimeModule { let nextScopeId = 0; const previousStack = { id: "previous" }; return { - ScopeType: { Agent: 0 }, - createScopeStack: () => ({ id: `stack-${nextScopeId++}` }), - currentScopeStack: () => previousStack, + ScopeType: { Agent: 0 } as NemoFlowRuntimeModule["ScopeType"], + createScopeStack: () => ({ id: `stack-${nextScopeId++}` }) as unknown as ReturnType, + currentScopeStack: () => previousStack as unknown as ReturnType, setThreadScopeStack: () => {}, - pushScope: () => ({ id: `scope-${nextScopeId++}` }), + pushScope: () => ({ id: `scope-${nextScopeId++}` } as unknown as ReturnType), popScope: () => {}, event: () => {}, llmCall: () => { throw new Error("llmCall failed"); }, llmCallEnd: () => {}, - toolCall: () => ({}), + toolCall: () => ({} as unknown as ReturnType), toolCallEnd: () => {}, AtifExporter: FakeAtifExporter, OpenTelemetrySubscriber: FakeSubscriber, diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts index 0c082fc5..fdfeca8d 100644 --- a/integrations/openclaw/src/__tests__/hooks-backend.test.ts +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -12,7 +12,7 @@ import { parseConfig } from "../config.js"; import { errorToJson, toJsonRecord } from "../hook-replay/marks.js"; import { HookReplayBackend } from "../hooks-backend.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; -import type { PluginLoggerLike } from "../types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; describe("HookReplayBackend", () => { it("opens a session root and records aliases on session_start", () => { @@ -316,7 +316,7 @@ type TestNemoFlowRuntime = NemoFlowRuntimeModule & { }; }; -type TestLogger = PluginLoggerLike & { +type TestLogger = PluginLogger & { messages: { warn: string[]; }; @@ -346,6 +346,7 @@ function createLogger(): TestLogger { messages, info: () => {}, warn: (message) => messages.warn.push(message), + error: () => {}, }; } @@ -360,22 +361,22 @@ function createNemoFlowRuntime(): TestNemoFlowRuntime { }; return { - ScopeType: { Agent: 0 }, + ScopeType: { Agent: 0 } as NemoFlowRuntimeModule["ScopeType"], previousStack, calls, - createScopeStack: () => ({ id: `stack-${nextScopeId++}` }), - currentScopeStack: () => previousStack, + createScopeStack: () => ({ id: `stack-${nextScopeId++}` }) as unknown as ReturnType, + currentScopeStack: () => previousStack as unknown as ReturnType, setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), pushScope: (name, scopeType, _handle, _attributes, data) => { const handle = { id: `scope-${nextScopeId++}` }; calls.pushScope.push({ name, scopeType, data }); - return handle; + return handle as unknown as ReturnType; }, popScope: (handle, output) => calls.popScope.push({ handle, output }), event: (name, handle, data) => calls.event.push({ name, handle, data }), - llmCall: () => ({}), + llmCall: () => ({} as unknown as ReturnType), llmCallEnd: () => {}, - toolCall: () => ({}), + toolCall: () => ({} as unknown as ReturnType), toolCallEnd: () => {}, AtifExporter: FakeAtifExporter, OpenTelemetrySubscriber: FakeSubscriber, diff --git a/integrations/openclaw/src/__tests__/live-smoke.test.ts b/integrations/openclaw/src/__tests__/live-smoke.test.ts index 252b0de4..78806884 100644 --- a/integrations/openclaw/src/__tests__/live-smoke.test.ts +++ b/integrations/openclaw/src/__tests__/live-smoke.test.ts @@ -10,8 +10,8 @@ import { it } from "node:test"; import { makeSafeSessionId } from "../atif-capture.js"; import { registerNemoFlowPlugin } from "../runtime-state.js"; import type { NemoFlowHealthSnapshot } from "../health.js"; -import type { NemoFlowModules } from "../modules.js"; -import type { OpenClawHookHandlerLike, OpenClawPluginApiLike, PluginLoggerLike } from "../types.js"; +import { defaultNemoFlowModuleLoader, type NemoFlowModules } from "../modules.js"; +import type { OpenClawPluginApi, PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; const liveSmokeEnabled = process.env.NEMO_FLOW_OPENCLAW_LIVE_SMOKE === "1"; @@ -36,12 +36,13 @@ it( let serviceStarted = false; try { - registerNemoFlowPlugin(api, async () => modules); + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); const service = api.calls.services[0]; assert.ok(service, "expected OpenClaw service registration"); await service.start({ stateDir: outputDir, + config: {} as never, logger: api.logger, }); serviceStarted = true; @@ -118,6 +119,7 @@ it( if (serviceStarted) { await api.calls.services[0]?.stop?.({ stateDir: outputDir, + config: {} as never, logger: api.logger, }); } @@ -126,15 +128,32 @@ it( }, ); -type TestApi = OpenClawPluginApiLike & { +type HookHandler = (event: unknown, ctx: unknown) => void | Promise; + +type TestApi = { + id: string; + version?: string; + registrationMode: OpenClawPluginApi["registrationMode"]; + pluginConfig?: Record; + logger: PluginLogger; + resolvePath: OpenClawPluginApi["resolvePath"]; + registerService: (service: Parameters[0]) => void; + registerRuntimeLifecycle: (lifecycle: Parameters[0]) => void; + registerHook: (hookName: string | string[], handler: HookHandler) => void; + on: (hookName: string, handler: HookHandler) => void; + registerGatewayMethod: ( + method: string, + handler: (request?: unknown) => unknown, + opts?: { scope?: string }, + ) => void; calls: { - services: Parameters[0][]; - lifecycle: Parameters[0][]; + services: Parameters[0][]; + lifecycle: Parameters[0][]; gatewayMethods: Array<{ method: string; - handler: () => NemoFlowHealthSnapshot; + handler: (request?: unknown) => NemoFlowHealthSnapshot; }>; - hooks: Array<{ hookName: string; handler: OpenClawHookHandlerLike }>; + hooks: Array<{ hookName: string; handler: HookHandler }>; }; }; @@ -145,9 +164,10 @@ function createApi(params: { pluginConfig: Record }): TestApi { gatewayMethods: [], hooks: [], }; - const logger: PluginLoggerLike = { + const logger: PluginLogger = { info: () => {}, warn: () => {}, + error: () => {}, }; return { @@ -159,37 +179,29 @@ function createApi(params: { pluginConfig: Record }): TestApi { resolvePath: (input) => input, registerService: (service) => calls.services.push(service), registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), - on: (hookName, handler) => calls.hooks.push({ hookName, handler }), + registerHook: (hookName: string | string[], handler: HookHandler) => + calls.hooks.push({ hookName: String(hookName), handler }), + on: (hookName: string, handler: HookHandler) => calls.hooks.push({ hookName, handler }), registerGatewayMethod: (method, handler) => calls.gatewayMethods.push({ method, - handler: handler as TestApi["calls"]["gatewayMethods"][number]["handler"], + handler: handler as unknown as TestApi["calls"]["gatewayMethods"][number]["handler"], }), calls, }; } async function loadRealNemoFlowModules(): Promise { - let nf: unknown; - let pluginHost: unknown; try { - [nf, pluginHost] = await Promise.all([ - import("nemo-flow-node"), - import("nemo-flow-node/plugin"), - ]); + return await defaultNemoFlowModuleLoader(); } catch (error) { if (isMissingLocalNemoFlowNode(error)) { throw new Error( - "Live smoke requires the local nemo-flow-node native package to be built. From the NeMo-Flow repo root, run `npm --prefix crates/node run build`, then rerun `npm --prefix integrations/openclaw run test:live`.", + "Live smoke requires the nemo-flow-node native package for this platform. Install integration dependencies, or build local bindings when testing an unpublished version, then rerun `npm --prefix integrations/openclaw run test:live`.", ); } throw error; } - - return { - nf: nf as unknown as NemoFlowModules["nf"], - pluginHost: pluginHost as unknown as NemoFlowModules["pluginHost"], - }; } function isMissingLocalNemoFlowNode(error: unknown): boolean { diff --git a/integrations/openclaw/src/__tests__/llm-replay.test.ts b/integrations/openclaw/src/__tests__/llm-replay.test.ts index db232174..259e8b50 100644 --- a/integrations/openclaw/src/__tests__/llm-replay.test.ts +++ b/integrations/openclaw/src/__tests__/llm-replay.test.ts @@ -7,7 +7,7 @@ import { describe, it } from "node:test"; import { parseConfig } from "../config.js"; import { HookReplayBackend } from "../hooks-backend.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; -import type { PluginLoggerLike } from "../types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; describe("LLM replay", () => { it("replays llm output with buffered input under the session root", () => { @@ -403,10 +403,11 @@ function createBackend( }); } -function createLogger(): PluginLoggerLike { +function createLogger(): PluginLogger { return { info: () => {}, warn: () => {}, + error: () => {}, }; } @@ -425,28 +426,28 @@ function createNemoFlowRuntime(): TestNemoFlowRuntime { }; return { - ScopeType: { Agent: 0 }, + ScopeType: { Agent: 0 } as NemoFlowRuntimeModule["ScopeType"], calls, - createScopeStack: () => ({ id: `stack-${nextScopeId++}` }), - currentScopeStack: () => previousStack, + createScopeStack: () => ({ id: `stack-${nextScopeId++}` }) as unknown as ReturnType, + currentScopeStack: () => previousStack as unknown as ReturnType, setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), pushScope: (name, scopeType, _handle, _attributes, data) => { const handle = { id: `scope-${nextScopeId++}` }; calls.pushScope.push({ name, scopeType, data }); - return handle; + return handle as unknown as ReturnType; }, popScope: (handle, output) => calls.popScope.push({ handle, output }), event: (name, handle, data) => calls.event.push({ name, handle, data }), llmCall: (name, request, _handle, _attributes, _data, _metadata, modelName) => { const handle = { id: `llm-${nextScopeId++}` }; calls.llmCall.push({ name, request, modelName }); - return handle; + return handle as unknown as ReturnType; }, llmCallEnd: (handle, response) => calls.llmCallEnd.push({ handle, response }), toolCall: (name, args) => { const handle = { id: `tool-${nextScopeId++}` }; calls.toolCall.push({ name, args }); - return handle; + return handle as unknown as ReturnType; }, toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), AtifExporter: FakeAtifExporter, diff --git a/integrations/openclaw/src/__tests__/telemetry.test.ts b/integrations/openclaw/src/__tests__/telemetry.test.ts index bbef39aa..673324b8 100644 --- a/integrations/openclaw/src/__tests__/telemetry.test.ts +++ b/integrations/openclaw/src/__tests__/telemetry.test.ts @@ -6,7 +6,7 @@ import { describe, it } from "node:test"; import { shutdownTelemetrySubscribers, type TelemetrySubscriberEntry } from "../telemetry.js"; import type { NemoFlowSubscriber } from "../modules.js"; -import type { PluginLoggerLike } from "../types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; describe("telemetry subscriber shutdown", () => { it("continues force flush and shutdown when deregister throws", () => { @@ -62,9 +62,11 @@ function entry( return { output, name, subscriber }; } -function createLogger(): PluginLoggerLike { +function createLogger(): PluginLogger { return { + info: () => {}, warn: () => {}, + error: () => {}, }; } diff --git a/integrations/openclaw/src/__tests__/tool-replay.test.ts b/integrations/openclaw/src/__tests__/tool-replay.test.ts index 65e1c3b3..e899ee97 100644 --- a/integrations/openclaw/src/__tests__/tool-replay.test.ts +++ b/integrations/openclaw/src/__tests__/tool-replay.test.ts @@ -7,7 +7,7 @@ import { describe, it } from "node:test"; import { parseConfig } from "../config.js"; import { HookReplayBackend } from "../hooks-backend.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; -import type { PluginLoggerLike } from "../types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; describe("Tool replay", () => { it("replays after_tool_call with stripped payloads by default", () => { @@ -139,10 +139,11 @@ function createBackend( }); } -function createLogger(): PluginLoggerLike { +function createLogger(): PluginLogger { return { info: () => {}, warn: () => {}, + error: () => {}, }; } @@ -161,28 +162,28 @@ function createNemoFlowRuntime(): TestNemoFlowRuntime { }; return { - ScopeType: { Agent: 0 }, + ScopeType: { Agent: 0 } as NemoFlowRuntimeModule["ScopeType"], calls, - createScopeStack: () => ({ id: `stack-${nextScopeId++}` }), - currentScopeStack: () => previousStack, + createScopeStack: () => ({ id: `stack-${nextScopeId++}` }) as unknown as ReturnType, + currentScopeStack: () => previousStack as unknown as ReturnType, setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), pushScope: (name, scopeType, _handle, _attributes, data) => { const handle = { id: `scope-${nextScopeId++}` }; calls.pushScope.push({ name, scopeType, data }); - return handle; + return handle as unknown as ReturnType; }, popScope: (handle, output) => calls.popScope.push({ handle, output }), event: (name, handle, data) => calls.event.push({ name, handle, data }), llmCall: (name, request) => { const handle = { id: `llm-${nextScopeId++}` }; calls.llmCall.push({ name, request }); - return handle; + return handle as unknown as ReturnType; }, llmCallEnd: (handle, response) => calls.llmCallEnd.push({ handle, response }), toolCall: (name, args) => { const handle = { id: `tool-${nextScopeId++}` }; calls.toolCall.push({ name, args }); - return handle; + return handle as unknown as ReturnType; }, toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), AtifExporter: FakeAtifExporter, diff --git a/integrations/openclaw/src/config.ts b/integrations/openclaw/src/config.ts index c801f28a..23572c0d 100644 --- a/integrations/openclaw/src/config.ts +++ b/integrations/openclaw/src/config.ts @@ -259,7 +259,7 @@ function asRecord(value: unknown, path: string, optional: boolean): Record; } throw new Error(`${path} must be an object`); diff --git a/integrations/openclaw/src/hook-replay/correlation.ts b/integrations/openclaw/src/hook-replay/correlation.ts index db131ba1..81166395 100644 --- a/integrations/openclaw/src/hook-replay/correlation.ts +++ b/integrations/openclaw/src/hook-replay/correlation.ts @@ -31,9 +31,8 @@ export function modelTimingKey(input: ModelTimingKeyInput): string { return tupleKey([input.runId, input.callId]); } -export function modelTimingLlmKey(input: LlmKeyInput): string { - return tupleKey([input.sessionId, input.runId, input.provider, input.model]); -} +// Model timing fallback uses the same provider/model tuple as LLM replay. +export const modelTimingLlmKey = llmKey; export function evictExpiredRecords( map: Map, diff --git a/integrations/openclaw/src/hook-replay/llm.ts b/integrations/openclaw/src/hook-replay/llm.ts index 6677b204..fda5bcbb 100644 --- a/integrations/openclaw/src/hook-replay/llm.ts +++ b/integrations/openclaw/src/hook-replay/llm.ts @@ -9,7 +9,7 @@ import type { PluginHookModelCallEndedEvent, PluginHookModelCallStartedEvent, } from "../openclaw-hook-types.js"; -import type { JsonRecord, JsonValue } from "../types.js"; +import type { JsonObject as JsonRecord, JsonValue } from "nemo-flow-node/typed"; import { emitMark, toJsonRecord, toJsonValue } from "./marks.js"; import { evictExpiredCorrelationRecords, @@ -342,6 +342,7 @@ function replayLlmOutput(params: { const { manager, event, ctx, input, timing } = params; const session = ensureSession(manager, { sessionId: event.sessionId, + sessionKey: ctx.sessionKey, runId: event.runId, agentId: ctx.agentId, source: "lazy_session", diff --git a/integrations/openclaw/src/hook-replay/marks.ts b/integrations/openclaw/src/hook-replay/marks.ts index a62dc5ff..45bd9f65 100644 --- a/integrations/openclaw/src/hook-replay/marks.ts +++ b/integrations/openclaw/src/hook-replay/marks.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { PluginHookAfterToolCallEvent } from "../openclaw-hook-types.js"; -import type { JsonRecord, JsonValue } from "../types.js"; +import type { JsonObject as JsonRecord, JsonValue } from "nemo-flow-node/typed"; import type { HookReplayBackendState, SessionState } from "./session.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts index 96b11e6a..dd408d0f 100644 --- a/integrations/openclaw/src/hook-replay/session.ts +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -10,7 +10,8 @@ import type { PluginHookLlmOutputEvent, PluginHookModelCallEndedEvent, } from "../openclaw-hook-types.js"; -import type { JsonRecord, PluginLoggerLike } from "../types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; +import type { JsonObject as JsonRecord } from "nemo-flow-node/typed"; import type { NemoFlowRuntimeModule } from "../modules.js"; export type SessionLookupInput = { @@ -33,8 +34,8 @@ export type SessionState = { agentId?: string; source: "session_start" | "lazy_session"; resumedFrom?: string; - stack: unknown; - rootHandle?: unknown; + stack: ReturnType; + rootHandle?: ReturnType; atif?: { exporter: AtifExporterLike; registrationName: string; @@ -117,7 +118,7 @@ export type HookReplayBackendState = { export type SessionManager = { nf: NemoFlowRuntimeModule; config: NemoFlowHookBackendConfig; - logger: PluginLoggerLike; + logger: PluginLogger; state: HookReplayBackendState; agentVersion: string; resolvedAtifOutputDir: string; @@ -252,7 +253,7 @@ export function closeSessionRoot( manager.nf.event("openclaw.session_end", session.rootHandle, summary, null, timestamp ?? null); manager.state.counters.marksEmitted += 1; manager.nf.popScope(session.rootHandle, summary, timestamp ?? null); - session.rootHandle = undefined; + delete session.rootHandle; }); } @@ -371,6 +372,6 @@ function evictExpiredPendingLlmOutputs( } } -function agentScopeType(nf: NemoFlowRuntimeModule): number { - return nf.ScopeType?.Agent ?? 0; +function agentScopeType(nf: NemoFlowRuntimeModule): Parameters[1] { + return (nf.ScopeType?.Agent ?? 0) as Parameters[1]; } diff --git a/integrations/openclaw/src/hook-replay/tool.ts b/integrations/openclaw/src/hook-replay/tool.ts index 71e3b745..dcbc5ece 100644 --- a/integrations/openclaw/src/hook-replay/tool.ts +++ b/integrations/openclaw/src/hook-replay/tool.ts @@ -19,7 +19,7 @@ export function replayAfterToolCall( source: "lazy_session", }); - const blockedDetails = blockedToolDetails(event, { runId: ctx.runId }); + const blockedDetails = blockedToolDetails(event, { runId: event.runId ?? ctx.runId }); if (session && blockedDetails) { manager.emitCapturedUnderSession("openclaw.tool_blocked", session, () => { emitMark({ diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts index eb4821c9..cdd27af9 100644 --- a/integrations/openclaw/src/hooks-backend.ts +++ b/integrations/openclaw/src/hooks-backend.ts @@ -44,12 +44,13 @@ import type { PluginHookSubagentSpawnedEvent, PluginHookToolContext, } from "./openclaw-hook-types.js"; -import type { JsonRecord, PluginLoggerLike } from "./types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; +import type { JsonObject as JsonRecord } from "nemo-flow-node/typed"; export type HookReplayBackendOptions = { nf: NemoFlowRuntimeModule; config: NemoFlowHookBackendConfig; - logger: PluginLoggerLike; + logger: PluginLogger; agentVersion: string; resolvedAtifOutputDir: string; markOutputDegraded: (output: "atif" | "otel" | "openInference") => void; @@ -58,7 +59,7 @@ export type HookReplayBackendOptions = { export class HookReplayBackend { private readonly nf: NemoFlowRuntimeModule; private readonly config: NemoFlowHookBackendConfig; - private readonly logger: PluginLoggerLike; + private readonly logger: PluginLogger; private readonly agentVersion: string; private readonly resolvedAtifOutputDir: string; private readonly markOutputDegradedValue: (output: "atif" | "otel" | "openInference") => void; diff --git a/integrations/openclaw/src/modules.ts b/integrations/openclaw/src/modules.ts index 8c9763ef..eb4ae8d4 100644 --- a/integrations/openclaw/src/modules.ts +++ b/integrations/openclaw/src/modules.ts @@ -1,109 +1,57 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -export type ConfigDiagnostic = { - level: "warning" | "error"; - code: string; - component?: string; - field?: string; - message: string; -}; +import type * as NemoFlowRuntime from "nemo-flow-node"; +import type * as NemoFlowPluginHost from "nemo-flow-node/plugin"; -export type ConfigReport = { - diagnostics: ConfigDiagnostic[]; -}; +type NemoFlowRuntimeKeys = + | "ScopeType" + | "createScopeStack" + | "currentScopeStack" + | "setThreadScopeStack" + | "pushScope" + | "popScope" + | "event" + | "llmCall" + | "llmCallEnd" + | "toolCall" + | "toolCallEnd" + | "AtifExporter" + | "OpenTelemetrySubscriber" + | "OpenInferenceSubscriber"; -export type NemoFlowPluginHostModule = { - defaultConfig: () => { version: number; components: unknown[]; [key: string]: unknown }; - validate: (config: { version: number; components: unknown[]; [key: string]: unknown }) => ConfigReport; - initialize: ( - config: { version: number; components: unknown[]; [key: string]: unknown }, - ) => Promise; - clear: () => void; -}; +type NemoFlowPluginHostKeys = "defaultConfig" | "validate" | "initialize" | "clear"; -export type NemoFlowRuntimeModule = { - ScopeType?: { - Agent?: number; - }; - createScopeStack: () => unknown; - currentScopeStack: () => unknown; - setThreadScopeStack: (stack: unknown) => void; - pushScope: ( - name: string, - scopeType: number, - handle?: unknown | null, - attributes?: number | null, - data?: unknown, - metadata?: unknown, - input?: unknown, - timestamp?: number | null, - ) => unknown; - popScope: (handle: unknown, output?: unknown, timestamp?: number | null) => void; - event: ( - name: string, - handle?: unknown | null, - data?: unknown, - metadata?: unknown, - timestamp?: number | null, - ) => void; - llmCall: ( - name: string, - request: unknown, - handle?: unknown | null, - attributes?: number | null, - data?: unknown, - metadata?: unknown, - modelName?: string | null, - timestamp?: number | null, - ) => unknown; - llmCallEnd: ( - handle: unknown, - response: unknown, - data?: unknown, - metadata?: unknown, - timestamp?: number | null, - ) => void; - toolCall: ( - name: string, - args: unknown, - handle?: unknown | null, - attributes?: number | null, - data?: unknown, - metadata?: unknown, - toolCallId?: string | null, - timestamp?: number | null, - ) => unknown; - toolCallEnd: ( - handle: unknown, - result: unknown, - data?: unknown, - metadata?: unknown, - timestamp?: number | null, - ) => void; - AtifExporter: new ( - sessionId: string, - agentName: string, - agentVersion: string, - modelName?: string | null, - ) => AtifExporterLike; - OpenTelemetrySubscriber: new (config?: Record) => NemoFlowSubscriber; - OpenInferenceSubscriber: new (config?: Record) => NemoFlowSubscriber; -}; +export type ConfigDiagnostic = NemoFlowPluginHost.ConfigDiagnostic; +export type ConfigReport = NemoFlowPluginHost.ConfigReport; -export type NemoFlowSubscriber = { - register: (name: string) => void; - deregister: (name: string) => boolean; - forceFlush: () => void; - shutdown: () => void; +/** + * @internal Package-owned subset of the dynamically imported `nemo-flow-node` + * namespace used by this integration. + */ +export type NemoFlowRuntimeModule = Omit, "ScopeType"> & { + ScopeType: { + Agent?: Parameters[1]; + } | undefined; }; -export type AtifExporterLike = { - register: (name: string) => void; - deregister: (name: string) => boolean; - exportJson: () => string; - clear: () => void; -}; +/** + * @internal Package-owned subset of the dynamically imported + * `nemo-flow-node/plugin` namespace used by this integration. + */ +export type NemoFlowPluginHostModule = Pick; + +/** @internal Subscriber surface used by runtime shutdown and health tracking. */ +export type NemoFlowSubscriber = Pick< + InstanceType, + "register" | "deregister" | "forceFlush" | "shutdown" +>; + +/** @internal ATIF exporter surface used by per-session capture/export. */ +export type AtifExporterLike = Pick< + InstanceType, + "register" | "deregister" | "exportJson" | "clear" +>; export type NemoFlowModules = { nf: NemoFlowRuntimeModule; @@ -119,7 +67,7 @@ export const defaultNemoFlowModuleLoader: NemoFlowModuleLoader = async () => { ]); return { - nf: nf as unknown as NemoFlowRuntimeModule, + nf: nf as NemoFlowRuntimeModule, pluginHost: pluginHost as NemoFlowPluginHostModule, }; }; diff --git a/integrations/openclaw/src/openclaw-plugin-entry.d.ts b/integrations/openclaw/src/openclaw-plugin-entry.d.ts deleted file mode 100644 index 5380afd0..00000000 --- a/integrations/openclaw/src/openclaw-plugin-entry.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -declare module "openclaw/plugin-sdk/plugin-entry" { - export type OpenClawPluginApi = - import("./types.js").OpenClawPluginApiLike; - - export type OpenClawPluginConfigSchema = - import("./types.js").OpenClawPluginConfigSchemaLike; - - export function definePluginEntry(params: { - id: string; - name: string; - description: string; - configSchema?: OpenClawPluginConfigSchema; - register: (api: OpenClawPluginApi) => void; - }): unknown; -} - -declare module "nemo-flow-node" { - const runtimeModule: Record; - export default runtimeModule; -} - -declare module "nemo-flow-node/plugin" { - export type ConfigDiagnostic = { - level: "warning" | "error"; - code: string; - component?: string; - field?: string; - message: string; - }; - - export type ConfigReport = { - diagnostics: ConfigDiagnostic[]; - }; - - export function defaultConfig(): { version: number; components: unknown[]; [key: string]: unknown }; - - export function validate(config: { - version: number; - components: unknown[]; - [key: string]: unknown; - }): ConfigReport; - - export function initialize(config: { - version: number; - components: unknown[]; - [key: string]: unknown; - }): Promise; - - export function clear(): void; -} diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index ec9172fd..99617df3 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -3,6 +3,8 @@ import * as path from "node:path"; +import type { OpenClawPluginApi, OpenClawPluginServiceContext, PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; + import { parseConfig } from "./config.js"; import type { NemoFlowHookBackendConfig } from "./config.js"; import { createHealthSnapshot, type HookReplayBackendStatus } from "./health.js"; @@ -39,14 +41,7 @@ import type { PluginHookSubagentSpawnedEvent, PluginHookToolContext, } from "./openclaw-hook-types.js"; -import type { - OpenClawPluginApiLike, - OpenClawHookHandlerLike, - OpenClawPluginServiceContextLike, - PluginLoggerLike, - RuntimeStateOptions, - StartContext, -} from "./types.js"; +import type { RuntimeStateOptions, StartContext } from "./types.js"; const PLUGIN_ID = "nemo-flow"; const SERVICE_ID = "nemo-flow-observability"; @@ -54,7 +49,7 @@ const LIFECYCLE_ID = "nemo-flow-observability-cleanup"; const STATUS_METHOD = "nemoFlow.status"; export class NemoFlowRuntimeState { - private readonly api: OpenClawPluginApiLike; + private readonly api: OpenClawPluginApi; private readonly config: NemoFlowHookBackendConfig; private readonly moduleLoader: NemoFlowModuleLoader; private loadPromise: Promise | undefined; @@ -178,7 +173,7 @@ export class NemoFlowRuntimeState { this.statusValue = degradedReason === undefined ? { state: "ready" } : { state: "degraded", reason: degradedReason }; } - async stop(reason: string, logger?: PluginLoggerLike): Promise { + async stop(reason: string, logger?: PluginLogger): Promise { if ( this.statusValue.state === "stopped" || this.statusValue.state === "disabled" || @@ -228,7 +223,7 @@ export class NemoFlowRuntimeState { registerHooks(): void { const dispatch = ( - hookName: string, + hookName: Parameters[0], handler: (backend: HookReplayBackend, event: unknown, ctx: unknown) => void, ): void => { this.api.on(hookName, ((event: unknown, ctx: unknown) => { @@ -237,10 +232,10 @@ export class NemoFlowRuntimeState { return; } backend.safeReplay(hookName, undefined, () => handler(backend, event, ctx)); - }) as OpenClawHookHandlerLike); + }) as never); }; const dispatchAsync = ( - hookName: string, + hookName: Parameters[0], handler: (backend: HookReplayBackend, event: unknown, ctx: unknown) => Promise, ): void => { this.api.on(hookName, (async (event: unknown, ctx: unknown) => { @@ -249,7 +244,7 @@ export class NemoFlowRuntimeState { return; } await backend.safeReplayAsync(hookName, undefined, () => handler(backend, event, ctx)); - }) as OpenClawHookHandlerLike); + }) as never); }; dispatch("gateway_start", (backend, event, ctx) => @@ -258,7 +253,7 @@ export class NemoFlowRuntimeState { this.api.on("gateway_stop", (async (event: unknown) => { const stopEvent = event as PluginHookGatewayStopEvent; await this.stop(stopEvent.reason ?? "gateway_stop", this.api.logger); - }) as OpenClawHookHandlerLike); + }) as never); dispatch("session_start", (backend, event, ctx) => backend.onSessionStart(event as PluginHookSessionStartEvent, ctx as PluginHookSessionContext), ); @@ -299,9 +294,9 @@ export class NemoFlowRuntimeState { private resolvePluginHostConfig( modules: NemoFlowModules, - logger: PluginLoggerLike, + logger: PluginLogger, ): { - hostConfig: { version: number; components: unknown[]; [key: string]: unknown }; + hostConfig: Parameters[0]; degradedReason?: string; } { const configured = this.config.nemoFlow.pluginConfig; @@ -310,7 +305,11 @@ export class NemoFlowRuntimeState { return { hostConfig: modules.pluginHost.defaultConfig() }; } - const validationReport = validatePluginHostConfig(modules, configured, logger); + const validationReport = validatePluginHostConfig( + modules, + configured as Parameters[0], + logger, + ); const degradedReason = "nemoFlow.pluginConfig.components is not supported by the hook backend; using default NeMo Flow plugin host config"; logger.warn?.(degradedReason); @@ -325,7 +324,7 @@ export class NemoFlowRuntimeState { this.degradedOutputs.add(output); } - private registerBeforeExit(logger: PluginLoggerLike): void { + private registerBeforeExit(logger: PluginLogger): void { if (this.beforeExitListener) { return; } @@ -348,7 +347,7 @@ export class NemoFlowRuntimeState { } export function registerNemoFlowPlugin( - api: OpenClawPluginApiLike, + api: OpenClawPluginApi, moduleLoader?: NemoFlowModuleLoader, ): void { if (api.registrationMode !== "full") { @@ -376,7 +375,7 @@ export function registerNemoFlowPlugin( api.registerService({ id: SERVICE_ID, - start: (ctx: OpenClawPluginServiceContextLike) => + start: (ctx: OpenClawPluginServiceContext) => runtime.start({ stateDir: ctx.stateDir, logger: ctx.logger, @@ -384,7 +383,7 @@ export function registerNemoFlowPlugin( agentVersion: config.atif.agentVersion ?? api.version ?? "unknown", ...(ctx.workspaceDir === undefined ? {} : { workspaceDir: ctx.workspaceDir }), }), - stop: (ctx: OpenClawPluginServiceContextLike) => runtime.stop("service_stop", ctx.logger), + stop: (ctx: OpenClawPluginServiceContext) => runtime.stop("service_stop", ctx.logger), }); api.registerRuntimeLifecycle({ @@ -393,24 +392,28 @@ export function registerNemoFlowPlugin( cleanup: (ctx) => runtime.cleanup(ctx.reason), }); - api.registerGatewayMethod?.(STATUS_METHOD, () => runtime.health(), { - scope: "operator.admin", - }); + api.registerGatewayMethod?.( + STATUS_METHOD, + (() => runtime.health()) as unknown as Parameters[1], + { + scope: "operator.admin", + }, + ); runtime.registerHooks(); } function validatePluginHostConfig( modules: NemoFlowModules, - config: { version: number; components: unknown[]; [key: string]: unknown }, - logger: PluginLoggerLike, + config: Parameters[0], + logger: PluginLogger, ) { const report = modules.pluginHost.validate(config); logDiagnostics(logger, report.diagnostics); return report; } -function logDiagnostics(logger: PluginLoggerLike, diagnostics: ConfigDiagnostic[]): void { +function logDiagnostics(logger: PluginLogger, diagnostics: ConfigDiagnostic[]): void { for (const diagnostic of diagnostics) { const prefix = diagnostic.component ? `${diagnostic.component}: ` : ""; const message = `${prefix}${diagnostic.code}: ${diagnostic.message}`; diff --git a/integrations/openclaw/src/telemetry.ts b/integrations/openclaw/src/telemetry.ts index 38f7b3da..8d80a0c3 100644 --- a/integrations/openclaw/src/telemetry.ts +++ b/integrations/openclaw/src/telemetry.ts @@ -3,7 +3,7 @@ import type { NemoFlowHookBackendConfig, TelemetrySinkConfig } from "./config.js"; import type { NemoFlowRuntimeModule, NemoFlowSubscriber } from "./modules.js"; -import type { PluginLoggerLike } from "./types.js"; +import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; export type TelemetrySubscriberEntry = { output: "otel" | "openInference"; @@ -14,7 +14,7 @@ export type TelemetrySubscriberEntry = { export type RegisterTelemetrySubscribersOptions = { nf: NemoFlowRuntimeModule; config: NemoFlowHookBackendConfig; - logger: PluginLoggerLike; + logger: PluginLogger; markOutputDegraded: (output: "otel" | "openInference") => void; }; @@ -75,7 +75,7 @@ export function registerTelemetrySubscribers( export function shutdownTelemetrySubscribers(params: { subscribers: TelemetrySubscriberEntry[]; - logger: PluginLoggerLike; + logger: PluginLogger; markOutputDegraded: (output: "otel" | "openInference") => void; }): void { for (const { output, name, subscriber } of params.subscribers) { diff --git a/integrations/openclaw/src/types.ts b/integrations/openclaw/src/types.ts index 01aa3071..0fce4ca6 100644 --- a/integrations/openclaw/src/types.ts +++ b/integrations/openclaw/src/types.ts @@ -1,84 +1,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +import type { OpenClawPluginApi, OpenClawPluginServiceContext } from "openclaw/plugin-sdk/plugin-entry"; + import type { NemoFlowHookBackendConfig } from "./config.js"; -import type { HookReplayBackendStatus, NemoFlowHealthSnapshot } from "./health.js"; +import type { HookReplayBackendStatus } from "./health.js"; import type { NemoFlowModuleLoader } from "./modules.js"; -export type JsonPrimitive = string | number | boolean | null; -export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue }; -export type JsonRecord = { [key: string]: JsonValue }; - -export type PluginConfigValidation = - | { ok: true; value?: unknown } - | { ok: false; errors: string[] }; - -export type OpenClawPluginConfigSchemaLike = { - safeParse?: (value: unknown) => { - success: boolean; - data?: unknown; - error?: { - issues?: Array<{ path: Array; message: string }>; - }; - }; - parse?: (value: unknown) => unknown; - validate?: (value: unknown) => PluginConfigValidation; - uiHints?: Record; - jsonSchema?: JsonRecord; -}; - -export type PluginLoggerLike = { - debug?: (message: string) => void; - info?: (message: string) => void; - warn?: (message: string) => void; - error?: (message: string) => void; -}; - -export type OpenClawPluginServiceContextLike = { - stateDir: string; - workspaceDir?: string; - logger: PluginLoggerLike; - config?: unknown; -}; - -export type OpenClawPluginServiceLike = { - id: string; - start: (ctx: OpenClawPluginServiceContextLike) => void | Promise; - stop?: (ctx: OpenClawPluginServiceContextLike) => void | Promise; -}; - -export type OpenClawHookHandlerLike = (event: unknown, ctx: unknown) => void | Promise; - -export type OpenClawRuntimeCleanupContextLike = { - reason: string; - sessionKey?: string; - runId?: string; -}; - -export type OpenClawPluginApiLike = { - id: string; - name?: string; - version?: string; - registrationMode: string; - pluginConfig?: Record; - logger: PluginLoggerLike; - resolvePath: (input: string) => string; - registerService: (service: OpenClawPluginServiceLike) => void; - registerRuntimeLifecycle: (lifecycle: { - id: string; - description?: string; - cleanup: (ctx: OpenClawRuntimeCleanupContextLike) => void | Promise; - }) => void; - on: (hookName: string, handler: OpenClawHookHandlerLike, opts?: { priority?: number; timeoutMs?: number }) => void; - registerGatewayMethod?: ( - method: string, - handler: () => NemoFlowHealthSnapshot | Promise, - opts?: { scope?: string }, - ) => void; -}; - export type RuntimeStateOptions = { - api: OpenClawPluginApiLike; + api: OpenClawPluginApi; config: NemoFlowHookBackendConfig; moduleLoader?: NemoFlowModuleLoader; }; @@ -86,8 +16,8 @@ export type RuntimeStateOptions = { export type StartContext = { stateDir: string; workspaceDir?: string; - logger: PluginLoggerLike; - resolvePath: (input: string) => string; + logger: OpenClawPluginServiceContext["logger"]; + resolvePath: OpenClawPluginApi["resolvePath"]; agentVersion: string; }; diff --git a/integrations/openclaw/tsconfig.json b/integrations/openclaw/tsconfig.json index 46856dc1..0bfbc654 100644 --- a/integrations/openclaw/tsconfig.json +++ b/integrations/openclaw/tsconfig.json @@ -10,16 +10,16 @@ "rootDir": ".", "outDir": "dist", "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "openclaw/plugin-sdk/plugin-entry": ["./src/openclaw-plugin-entry.d.ts"], - "nemo-flow-node": ["./src/openclaw-plugin-entry.d.ts"], - "nemo-flow-node/plugin": ["./src/openclaw-plugin-entry.d.ts"] - }, - "types": ["node"], - "skipLibCheck": false, + "types": [ + "node" + ], + "skipLibCheck": true, "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true }, - "include": ["index.ts", "src/**/*.ts", "src/**/*.d.ts"] + "include": [ + "index.ts", + "src/**/*.ts", + "src/**/*.d.ts" + ] } From 65a4feed9fdddc860e58092fcf9bc1437c34fc3a Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 11:18:24 -0700 Subject: [PATCH 08/30] test: harden OpenClaw replay edge cases Signed-off-by: mnajafian-nv --- .../openclaw/src/__tests__/failure-model.test.ts | 12 +++++++++--- .../openclaw/src/__tests__/hooks-backend.test.ts | 11 +++++++++++ integrations/openclaw/src/hook-replay/marks.ts | 5 ++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/integrations/openclaw/src/__tests__/failure-model.test.ts b/integrations/openclaw/src/__tests__/failure-model.test.ts index a22a8fe4..08b74d7a 100644 --- a/integrations/openclaw/src/__tests__/failure-model.test.ts +++ b/integrations/openclaw/src/__tests__/failure-model.test.ts @@ -35,7 +35,7 @@ describe("Replay failure model", () => { { runId: "run-1", sessionId: "session-1" }, ); - await delay(10); + await waitFor(() => backend.state().counters.replayErrors === 1 && logger.messages.warn.length >= 1); assert.equal(backend.state().counters.replayErrors, 1); assert.equal(logger.messages.warn.length, 1); @@ -82,8 +82,14 @@ function createThrowingLlmRuntime(): NemoFlowRuntimeModule { }; } -function delay(ms: number): Promise { - return new Promise((resolve) => setTimeout(resolve, ms)); +async function waitFor(predicate: () => boolean, timeoutMs = 1000): Promise { + const started = Date.now(); + while (!predicate()) { + if (Date.now() - started > timeoutMs) { + throw new Error("timed out waiting for replay failure state"); + } + await new Promise((resolve) => setTimeout(resolve, 5)); + } } class FakeAtifExporter { diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts index fdfeca8d..cf1cec35 100644 --- a/integrations/openclaw/src/__tests__/hooks-backend.test.ts +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -302,6 +302,17 @@ describe("HookReplayBackend", () => { ok: true, self: { ok: true, self: "[Circular]" }, }); + assert.deepEqual(toJsonRecord({ + finite: 42, + nan: Number.NaN, + positiveInfinity: Number.POSITIVE_INFINITY, + negativeInfinity: Number.NEGATIVE_INFINITY, + }), { + finite: 42, + nan: null, + positiveInfinity: null, + negativeInfinity: null, + }); assert.deepEqual(errorToJson(new Error("boom")).message, "boom"); }); }); diff --git a/integrations/openclaw/src/hook-replay/marks.ts b/integrations/openclaw/src/hook-replay/marks.ts index 45bd9f65..77eb3750 100644 --- a/integrations/openclaw/src/hook-replay/marks.ts +++ b/integrations/openclaw/src/hook-replay/marks.ts @@ -83,9 +83,12 @@ function stripUndefined(input: Record, seen: WeakSet): } function normalizeJsonValue(value: unknown, seen: WeakSet): JsonValue { - if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + if (value === null || typeof value === "string" || typeof value === "boolean") { return value; } + if (typeof value === "number") { + return Number.isFinite(value) ? value : null; + } if (Array.isArray(value)) { if (seen.has(value)) { return "[Circular]"; From bd66d54ae8b947684b9448d307d037464ddddf11 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 11:31:43 -0700 Subject: [PATCH 09/30] refactor: narrow OpenClaw plugin public surface Signed-off-by: mnajafian-nv --- integrations/openclaw/index.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/integrations/openclaw/index.ts b/integrations/openclaw/index.ts index 3a5085ef..ded0cacc 100644 --- a/integrations/openclaw/index.ts +++ b/integrations/openclaw/index.ts @@ -9,12 +9,6 @@ import { import { nemoFlowConfigSchema } from "./src/config.js"; import { registerNemoFlowPlugin } from "./src/runtime-state.js"; -export { NEMO_FLOW_OPENCLAW_JSON_SCHEMA, nemoFlowConfigSchema, parseConfig } from "./src/config.js"; -export type { NemoFlowHookBackendConfig } from "./src/config.js"; -export { createHealthSnapshot } from "./src/health.js"; -export { registerNemoFlowPlugin, NemoFlowRuntimeState } from "./src/runtime-state.js"; -export type { HookReplayBackendStatus, NemoFlowHealthSnapshot } from "./src/health.js"; - export default definePluginEntry({ id: "nemo-flow", name: "NeMo Flow Observability", From b9962f57a57837ab02ca4be23ee6e8c2c530e5f7 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 11:46:27 -0700 Subject: [PATCH 10/30] fix: harden OpenClaw JSON normalization Signed-off-by: mnajafian-nv --- .../openclaw/src/__tests__/hooks-backend.test.ts | 14 ++++++++++++++ integrations/openclaw/src/hook-replay/marks.ts | 12 +++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts index cf1cec35..67f3d0bc 100644 --- a/integrations/openclaw/src/__tests__/hooks-backend.test.ts +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -315,6 +315,20 @@ describe("HookReplayBackend", () => { }); assert.deepEqual(errorToJson(new Error("boom")).message, "boom"); }); + + it("normalizes prototype keys without mutating output prototypes", () => { + const payload: Record = {}; + Object.defineProperty(payload, "__proto__", { + enumerable: true, + value: { polluted: true }, + }); + + const normalized = toJsonRecord(payload); + + assert.equal(Object.getPrototypeOf(normalized), Object.prototype); + assert.deepEqual(normalized["__proto__"], { polluted: true }); + assert.equal(({} as Record).polluted, undefined); + }); }); type TestNemoFlowRuntime = NemoFlowRuntimeModule & { diff --git a/integrations/openclaw/src/hook-replay/marks.ts b/integrations/openclaw/src/hook-replay/marks.ts index 77eb3750..4542e610 100644 --- a/integrations/openclaw/src/hook-replay/marks.ts +++ b/integrations/openclaw/src/hook-replay/marks.ts @@ -76,7 +76,17 @@ function stripUndefined(input: Record, seen: WeakSet): const output: JsonRecord = {}; for (const [key, value] of Object.entries(input)) { if (value !== undefined) { - output[key] = normalizeJsonValue(value, seen); + const normalized = normalizeJsonValue(value, seen); + if (key === "__proto__") { + Object.defineProperty(output, key, { + configurable: true, + enumerable: true, + value: normalized, + writable: true, + }); + } else { + output[key] = normalized; + } } } return output; From e4f0b180296efd1ff05e40a6a9566ee8d7d8e372 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 12:55:27 -0700 Subject: [PATCH 11/30] fix: align OpenClaw plugin metadata Signed-off-by: mnajafian-nv --- integrations/openclaw/package.json | 13 ++++++++++++- integrations/openclaw/src/openclaw-hook-types.ts | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/integrations/openclaw/package.json b/integrations/openclaw/package.json index 2007bff3..19864da5 100644 --- a/integrations/openclaw/package.json +++ b/integrations/openclaw/package.json @@ -18,8 +18,19 @@ ], "openclaw": { "extensions": [ + "./index.ts" + ], + "runtimeExtensions": [ "./dist/index.js" - ] + ], + "compat": { + "pluginApi": ">=2026.5.6", + "minGatewayVersion": "2026.5.6" + }, + "build": { + "openclawVersion": "2026.5.6", + "pluginSdkVersion": "2026.5.6" + } }, "scripts": { "build": "tsc -p tsconfig.json", diff --git a/integrations/openclaw/src/openclaw-hook-types.ts b/integrations/openclaw/src/openclaw-hook-types.ts index ce26802b..5e1e4d7f 100644 --- a/integrations/openclaw/src/openclaw-hook-types.ts +++ b/integrations/openclaw/src/openclaw-hook-types.ts @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +// OpenClaw 2026.5.6 does not expose these plugin hook payload types through a public package subpath. +// Keep these aliases structural and remove them once the hook contracts are exported by OpenClaw. export type PluginHookAgentContext = { runId?: string; agentId?: string; From fbd33d51196b27d1d71d5ee1dc3599d1b5fedd30 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 14:29:08 -0700 Subject: [PATCH 12/30] fix(openclaw): align package payload and docs Signed-off-by: mnajafian-nv --- .gitignore | 1 + integrations/openclaw/README.md | 181 ++++++++++++++++++ integrations/openclaw/package.json | 29 ++- integrations/openclaw/scripts/build-test.mjs | 21 ++ integrations/openclaw/scripts/build.mjs | 21 ++ .../openclaw/scripts/check-pack-payload.mjs | 122 ++++++++++++ integrations/openclaw/tsconfig.build.json | 16 ++ integrations/openclaw/tsconfig.json | 5 +- integrations/openclaw/tsconfig.test.json | 14 ++ 9 files changed, 401 insertions(+), 9 deletions(-) create mode 100644 integrations/openclaw/README.md create mode 100644 integrations/openclaw/scripts/build-test.mjs create mode 100644 integrations/openclaw/scripts/build.mjs create mode 100644 integrations/openclaw/scripts/check-pack-payload.mjs create mode 100644 integrations/openclaw/tsconfig.build.json create mode 100644 integrations/openclaw/tsconfig.test.json diff --git a/.gitignore b/.gitignore index f0d12d23..e8b31f22 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ crates/node/index.d.ts crates/node/coverage/ crates/node/junit.xml integrations/openclaw/dist/ +integrations/openclaw/.test-dist/ # WebAssembly crates/wasm/pkg/ diff --git a/integrations/openclaw/README.md b/integrations/openclaw/README.md new file mode 100644 index 00000000..d02ead82 --- /dev/null +++ b/integrations/openclaw/README.md @@ -0,0 +1,181 @@ +# NeMo Flow OpenClaw Observability + +This package provides the `nemo-flow` OpenClaw plugin. It replays OpenClaw hook +events through NeMo Flow manual lifecycle APIs so OpenClaw sessions can emit ATIF +JSON, OpenTelemetry, and OpenInference telemetry without patching OpenClaw. + +The package declares both OpenClaw entrypoint styles: + +- `openclaw.extensions`: `./index.ts` for source-based plugin workflows. +- `openclaw.runtimeExtensions`: `./dist/index.js` for built runtime workflows. + +## Build And Validate + +```bash +npm --prefix integrations/openclaw install +npm --prefix integrations/openclaw run typecheck +npm --prefix integrations/openclaw test +npm --prefix integrations/openclaw run build +npm --prefix integrations/openclaw run pack:check +``` + +`npm run build` emits production files under `dist/`. Tests compile to +`.test-dist/` so test artifacts do not enter the installable package. + +The optional live smoke test requires a working installed `nemo-flow-node` binding: + +```bash +npm --prefix integrations/openclaw run test:live +``` + +## Enablement + +Allow the plugin id and grant conversation hook access when OpenClaw runs with a +restrictive plugin configuration: + +```json +{ + "plugins": { + "allow": ["nemo-flow"], + "entries": { + "nemo-flow": { + "enabled": true, + "hooks": { + "allowConversationAccess": true + }, + "config": {} + } + } + } +} +``` + +`plugins.allow` controls plugin trust and loading. `hooks.allowConversationAccess` +lets trusted non-bundled plugins receive conversation-sensitive hook payloads such +as LLM prompts, LLM responses, agent finalization messages, and tool payloads. + +## Configuration + +ATIF export is enabled by default. OTel and OpenInference subscribers are disabled +until explicitly configured. + +ATIF-only local export: + +```json +{ + "atif": { + "enabled": true, + "outputDir": "./nemo-flow-atif" + }, + "telemetry": { + "otel": { + "enabled": false + }, + "openInference": { + "enabled": false + } + } +} +``` + +OpenTelemetry OTLP export: + +```json +{ + "telemetry": { + "otel": { + "enabled": true, + "transport": "http_binary", + "endpoint": "http://localhost:4318/v1/traces", + "serviceName": "openclaw-nemo-flow" + } + } +} +``` + +OpenInference/Phoenix OTLP export: + +```json +{ + "telemetry": { + "openInference": { + "enabled": true, + "transport": "http_binary", + "endpoint": "http://localhost:6006/v1/traces", + "serviceName": "openclaw-nemo-flow" + } + } +} +``` + +Privacy defaults: + +```json +{ + "capture": { + "includePrompts": true, + "includeResponses": true, + "stripToolArgs": true, + "stripToolResults": true + } +} +``` + +Prompts and responses are captured by default. Tool arguments and tool results are +stripped by default because they often contain user data, local paths, tokens, or +large payloads. + +## Event Mapping + +| OpenClaw hook | NeMo Flow behavior | +| --- | --- | +| `gateway_start` | Emits a gateway lifecycle mark. | +| `gateway_stop` | Stops the runtime, drains sessions, shuts down subscribers, and clears the NeMo Flow plugin host. | +| `session_start` | Opens or aliases a NeMo Flow session scope. | +| `session_end` | Closes the session, flushes pending replay state, and exports ATIF if enabled. | +| `llm_input` / `llm_output` | Replays an LLM span through `llmCall` and `llmCallEnd` with bounded FIFO correlation. | +| `model_call_started` / `model_call_ended` | Enriches matching LLM spans with provider timing when correlation is unambiguous. | +| `after_tool_call` | Replays successful tool calls through `toolCall` and `toolCallEnd`; blocked tools emit marks. | +| `agent_end` | Emits an agent lifecycle mark and closes any remaining session state for the run. | +| `before_agent_finalize` | Emits a lifecycle mark and does not mutate the finalization payload. | +| `subagent_spawned` / `subagent_ended` | Emits subagent lifecycle marks under the best available parent or child session. | + +## Health + +The plugin registers the admin-scoped gateway method `nemoFlow.status`. + +The response reports: + +- backend status: `not_initialized`, `disabled`, `ready`, `degraded`, `stopping`, or `stopped` +- output health for `atif`, `otel`, and `openInference` +- replay counters, including replayed LLM spans, replayed tool spans, emitted marks, + ATIF files written, replay errors, and skipped events +- last degraded or unavailable reason when present + +Use the output health independently: + +- ATIF: confirm JSON files appear in the configured `atif.outputDir`. +- OTel: confirm spans arrive at the configured OTLP collector. +- OpenInference: confirm spans arrive at the configured OpenInference/Phoenix endpoint. + +## Packaging + +`npm run pack:check` builds a fresh production `dist/`, runs `npm pack --dry-run`, +and verifies that: + +- declared OpenClaw source and runtime entrypoints are present +- production source files needed by `index.ts` are present +- compiled tests and `.test-dist/` files are absent +- packed `dist/**` matches the fresh production build + +The package is currently marked `private` while the in-tree integration and +distribution path are finalized. + +## Hook Type Surface + +OpenClaw's public `api.on(...)` typing infers hook event and context types at hook +registration sites. The concrete hook payload/context types are not directly +exported through a public package subpath in `openclaw@2026.5.6`, so +`src/openclaw-hook-types.ts` keeps narrow structural aliases for backend method +boundaries. Those aliases should be replaced with package imports if OpenClaw +publishes hook contract types through a public subpath. diff --git a/integrations/openclaw/package.json b/integrations/openclaw/package.json index 19864da5..957d9cc4 100644 --- a/integrations/openclaw/package.json +++ b/integrations/openclaw/package.json @@ -13,8 +13,24 @@ } }, "files": [ - "dist", - "openclaw.plugin.json" + "dist/**", + "index.ts", + "src/atif-capture.ts", + "src/config.ts", + "src/health.ts", + "src/hook-replay/correlation.ts", + "src/hook-replay/llm.ts", + "src/hook-replay/marks.ts", + "src/hook-replay/session.ts", + "src/hook-replay/tool.ts", + "src/hooks-backend.ts", + "src/modules.ts", + "src/openclaw-hook-types.ts", + "src/runtime-state.ts", + "src/telemetry.ts", + "src/types.ts", + "openclaw.plugin.json", + "README.md" ], "openclaw": { "extensions": [ @@ -33,10 +49,13 @@ } }, "scripts": { - "build": "tsc -p tsconfig.json", + "build": "node scripts/build.mjs", + "build:test": "node scripts/build-test.mjs", + "pack:check": "node scripts/check-pack-payload.mjs", + "prepack": "npm run build", "typecheck": "tsc -p tsconfig.json --noEmit", - "test": "npm run build && node --test \"dist/src/__tests__/*.test.js\"", - "test:live": "npm run build && NEMO_FLOW_OPENCLAW_LIVE_SMOKE=1 node --test \"dist/src/__tests__/live-smoke.test.js\"" + "test": "npm run build:test && node --test \".test-dist/src/__tests__/*.test.js\"", + "test:live": "npm run build:test && NEMO_FLOW_OPENCLAW_LIVE_SMOKE=1 node --test \".test-dist/src/__tests__/live-smoke.test.js\"" }, "peerDependencies": { "openclaw": ">=2026.5.6" diff --git a/integrations/openclaw/scripts/build-test.mjs b/integrations/openclaw/scripts/build-test.mjs new file mode 100644 index 00000000..3f35701f --- /dev/null +++ b/integrations/openclaw/scripts/build-test.mjs @@ -0,0 +1,21 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { spawnSync } from "node:child_process"; +import { rmSync } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const tsc = path.join(packageRoot, "node_modules", "typescript", "bin", "tsc"); + +rmSync(path.join(packageRoot, ".test-dist"), { recursive: true, force: true }); + +const result = spawnSync(process.execPath, [tsc, "-p", "tsconfig.test.json"], { + cwd: packageRoot, + stdio: "inherit", +}); + +process.exit(result.status ?? 1); diff --git a/integrations/openclaw/scripts/build.mjs b/integrations/openclaw/scripts/build.mjs new file mode 100644 index 00000000..461ae74f --- /dev/null +++ b/integrations/openclaw/scripts/build.mjs @@ -0,0 +1,21 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { spawnSync } from "node:child_process"; +import { rmSync } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const tsc = path.join(packageRoot, "node_modules", "typescript", "bin", "tsc"); + +rmSync(path.join(packageRoot, "dist"), { recursive: true, force: true }); + +const result = spawnSync(process.execPath, [tsc, "-p", "tsconfig.build.json"], { + cwd: packageRoot, + stdio: "inherit", +}); + +process.exit(result.status ?? 1); diff --git a/integrations/openclaw/scripts/check-pack-payload.mjs b/integrations/openclaw/scripts/check-pack-payload.mjs new file mode 100644 index 00000000..d0dd05ce --- /dev/null +++ b/integrations/openclaw/scripts/check-pack-payload.mjs @@ -0,0 +1,122 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { spawnSync } from "node:child_process"; +import { readdirSync, readFileSync, statSync } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const npm = process.platform === "win32" ? "npm.cmd" : "npm"; + +function assert(condition, message) { + if (!condition) { + throw new Error(message); + } +} + +function run(command, args, options = {}) { + const result = spawnSync(command, args, { + cwd: packageRoot, + encoding: "utf8", + ...options, + }); + if (result.status !== 0) { + process.stderr.write(result.stderr ?? ""); + throw new Error(`${command} ${args.join(" ")} failed`); + } + return result; +} + +function normalizePackagePath(value) { + return value.replace(/^\.\//, "").replaceAll("\\", "/"); +} + +function walkFiles(root, prefix = "") { + const absoluteRoot = path.join(packageRoot, root, prefix); + const output = []; + for (const entry of readdirSync(absoluteRoot)) { + const relative = path.posix.join(prefix, entry); + const absolute = path.join(packageRoot, root, relative); + if (statSync(absolute).isDirectory()) { + output.push(...walkFiles(root, relative)); + } else { + output.push(path.posix.join(root, relative)); + } + } + return output.sort(); +} + +run(npm, ["run", "build"], { stdio: "inherit" }); + +const pack = run(npm, ["pack", "--dry-run", "--json", "--ignore-scripts"]); +const packInfo = JSON.parse(pack.stdout)[0]; +assert(packInfo, "npm pack did not return package metadata"); + +const productionSources = walkFiles("src").filter( + (file) => file.endsWith(".ts") && !file.includes("/__tests__/") && !file.endsWith(".test.ts"), +); +const packedFiles = new Set(packInfo.files.map((file) => normalizePackagePath(file.path))); +const packageJson = JSON.parse(readFileSync(path.join(packageRoot, "package.json"), "utf8")); +const declaredFiles = new Set(packageJson.files ?? []); + +for (const entry of declaredFiles) { + assert( + !(entry.startsWith("src/") && entry.includes("*")), + `package files should explicitly allowlist production sources, not ${entry}`, + ); +} + +for (const source of productionSources) { + assert(declaredFiles.has(source), `package files allowlist is missing ${source}`); + assert(packedFiles.has(source), `packed package is missing source file ${source}`); +} + +const requiredFiles = [ + "package.json", + "README.md", + "index.ts", + "openclaw.plugin.json", + "dist/index.js", + "dist/index.d.ts", +]; + +for (const file of requiredFiles) { + assert(packedFiles.has(file), `packed package is missing ${file}`); +} + +for (const entry of packageJson.openclaw?.extensions ?? []) { + const file = normalizePackagePath(entry); + assert(packedFiles.has(file), `openclaw.extensions entry ${entry} is not packed`); +} + +for (const entry of packageJson.openclaw?.runtimeExtensions ?? []) { + const file = normalizePackagePath(entry); + assert(packedFiles.has(file), `openclaw.runtimeExtensions entry ${entry} is not packed`); +} + +assert(packageJson.openclaw?.compat?.pluginApi, "openclaw.compat.pluginApi is required"); +assert(packageJson.openclaw?.compat?.minGatewayVersion, "openclaw.compat.minGatewayVersion is required"); +assert(packageJson.openclaw?.build?.openclawVersion, "openclaw.build.openclawVersion is required"); +assert(packageJson.openclaw?.build?.pluginSdkVersion, "openclaw.build.pluginSdkVersion is required"); + +for (const file of packedFiles) { + assert(!file.includes("__tests__"), `packed package includes test artifact ${file}`); + assert(!file.startsWith(".test-dist/"), `packed package includes test output ${file}`); + assert(!file.endsWith(".map"), `packed package includes source/declaration map ${file}`); +} + +const builtDistFiles = new Set(walkFiles("dist")); +for (const file of builtDistFiles) { + assert(packedFiles.has(file), `built dist file ${file} is not packed`); +} + +for (const file of packedFiles) { + if (file.startsWith("dist/")) { + assert(builtDistFiles.has(file), `packed dist file ${file} was not produced by the fresh build`); + } +} + +console.log(`pack payload ok: ${packedFiles.size} files`); diff --git a/integrations/openclaw/tsconfig.build.json b/integrations/openclaw/tsconfig.build.json new file mode 100644 index 00000000..bb982554 --- /dev/null +++ b/integrations/openclaw/tsconfig.build.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "declaration": true, + "declarationMap": false, + "sourceMap": false, + "outDir": "dist" + }, + "exclude": [ + "src/__tests__/**", + "src/**/*.test.ts", + ".test-dist/**", + "dist/**" + ] +} diff --git a/integrations/openclaw/tsconfig.json b/integrations/openclaw/tsconfig.json index 0bfbc654..a2aa149f 100644 --- a/integrations/openclaw/tsconfig.json +++ b/integrations/openclaw/tsconfig.json @@ -4,11 +4,8 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "strict": true, - "declaration": true, - "declarationMap": true, - "sourceMap": true, "rootDir": ".", - "outDir": "dist", + "noEmit": true, "resolveJsonModule": true, "types": [ "node" diff --git a/integrations/openclaw/tsconfig.test.json b/integrations/openclaw/tsconfig.test.json new file mode 100644 index 00000000..2338c352 --- /dev/null +++ b/integrations/openclaw/tsconfig.test.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "declaration": false, + "declarationMap": false, + "sourceMap": false, + "outDir": ".test-dist" + }, + "exclude": [ + ".test-dist/**", + "dist/**" + ] +} From f701652e9f4546d15a9dc70cc43dc72a526b94f2 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 14:47:56 -0700 Subject: [PATCH 13/30] fix(openclaw): add README license header Signed-off-by: mnajafian-nv --- integrations/openclaw/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/integrations/openclaw/README.md b/integrations/openclaw/README.md index d02ead82..db0c2760 100644 --- a/integrations/openclaw/README.md +++ b/integrations/openclaw/README.md @@ -1,3 +1,8 @@ + + # NeMo Flow OpenClaw Observability This package provides the `nemo-flow` OpenClaw plugin. It replays OpenClaw hook From 1b557e140c281af3957d60bbb6ba8aed68ae9213 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 15:43:15 -0700 Subject: [PATCH 14/30] refactor(openclaw): use typed plugin API handlers Signed-off-by: mnajafian-nv --- .../openclaw/src/__tests__/config.test.ts | 55 +++--- .../openclaw/src/__tests__/gateway-status.ts | 35 ++++ .../openclaw/src/__tests__/live-smoke.test.ts | 30 +-- integrations/openclaw/src/runtime-state.ts | 174 +++++++++--------- 4 files changed, 160 insertions(+), 134 deletions(-) create mode 100644 integrations/openclaw/src/__tests__/gateway-status.ts diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts index d47aa58d..5c1b72c5 100644 --- a/integrations/openclaw/src/__tests__/config.test.ts +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -10,10 +10,10 @@ import { nemoFlowConfigSchema, parseConfig, } from "../config.js"; -import type { NemoFlowModules, NemoFlowRuntimeModule } from "../modules.js"; -import type { NemoFlowHealthSnapshot } from "../health.js"; +import type { NemoFlowModuleLoader, NemoFlowModules, NemoFlowRuntimeModule } from "../modules.js"; import { registerNemoFlowPlugin } from "../runtime-state.js"; import type { OpenClawPluginApi, PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; +import { callGatewayStatus, type TestGatewayMethodHandler } from "./gateway-status.js"; describe("nemo-flow OpenClaw plugin shell", () => { it("applies hook-backend config defaults", () => { @@ -81,7 +81,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("returns without side effects outside full registration mode", () => { const api = createApi({ registrationMode: "discovery" }); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi); + registerPlugin(api); assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); @@ -92,7 +92,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("returns without side effects when disabled", () => { const api = createApi({ pluginConfig: { enabled: false } }); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi); + registerPlugin(api); assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); @@ -104,7 +104,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("returns without side effects when config parsing fails during registration", () => { const api = createApi({ pluginConfig: { backend: "managed_execution" } }); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi); + registerPlugin(api); assert.equal(api.calls.services.length, 0); assert.equal(api.calls.lifecycle.length, 0); @@ -119,7 +119,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("registers service, lifecycle, and health surfaces in full mode", () => { const api = createApi(); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => createModules()); + registerPlugin(api, async () => createModules()); assert.deepEqual( api.calls.services.map((service) => service.id), @@ -156,7 +156,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { it("uses config parsed during registration when service starts", async () => { const api = createApi({ pluginConfig: { atif: { enabled: false }, correlation: { maxRecordsPerKey: 1 } } }); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => createModules()); + registerPlugin(api, async () => createModules()); api.pluginConfig = { backend: "managed_execution" }; const service = api.calls.services[0]; @@ -180,7 +180,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { }); const api = createApi({ pluginConfig: { atif: { enabled: false } } }); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); + registerPlugin(api, async () => modules); const service = api.calls.services[0]; assert.ok(service); try { @@ -190,8 +190,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { assert.ok(sessionStart); await sessionStart.handler({ sessionId: "session-1" }, { sessionId: "session-1" }); - const status = api.calls.gatewayMethods[0]?.handler(); - assert.ok(status); + const status = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); assert.deepEqual(modules.nf.calls.event.map((event) => event.name), ["openclaw.session_start"]); assert.equal(status.status.state, "degraded"); assert.equal(status.initializedPluginHost, false); @@ -204,7 +203,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { const modules = createModules(); const api = createApi({ pluginConfig: { atif: { enabled: false } } }); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); + registerPlugin(api, async () => modules); const service = api.calls.services[0]; assert.ok(service); await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); @@ -216,8 +215,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { await sessionStart.handler({ sessionId: "session-1" }, { sessionId: "session-1" }); await gatewayStop.handler({ reason: "test_stop" }, {}); - const status = api.calls.gatewayMethods[0]?.handler(); - assert.ok(status); + const status = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); assert.equal(status.status.state, "stopped"); assert.equal(status.counters.marksEmitted, 2); assert.deepEqual(modules.nf.calls.event.map((event) => event.name), [ @@ -237,7 +235,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { }, }); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); + registerPlugin(api, async () => modules); const service = api.calls.services[0]; assert.ok(service); await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); @@ -276,14 +274,13 @@ describe("nemo-flow OpenClaw plugin shell", () => { }, }); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); + registerPlugin(api, async () => modules); const service = api.calls.services[0]; assert.ok(service); try { await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); - const status = api.calls.gatewayMethods[0]?.handler(); - assert.ok(status); + const status = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); assert.equal(status.status.state, "degraded"); assert.equal(status.outputs.otel, "degraded"); assert.equal(status.outputs.openInference, "enabled"); @@ -311,7 +308,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { }); let serviceStarted = false; - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); + registerPlugin(api, async () => modules); const service = api.calls.services[0]; assert.ok(service); try { @@ -321,8 +318,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); serviceStarted = false; - const status = api.calls.gatewayMethods[0]?.handler(); - assert.ok(status); + const status = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); assert.equal(status.status.state, "stopped"); assert.equal(status.outputs.otel, "degraded"); } finally { @@ -337,7 +333,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { const api = createApi(); const before = process.listenerCount("beforeExit"); - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); + registerPlugin(api, async () => modules); const service = api.calls.services[0]; assert.ok(service); await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); @@ -380,11 +376,10 @@ type TestApi = { resolvePath: OpenClawPluginApi["resolvePath"]; registerService: (service: Parameters[0]) => void; registerRuntimeLifecycle: (lifecycle: Parameters[0]) => void; - registerHook: (hookName: string | string[], handler: HookHandler) => void; on: (hookName: string, handler: HookHandler) => void; registerGatewayMethod: ( method: string, - handler: (request?: unknown) => unknown, + handler: TestGatewayMethodHandler, opts?: { scope?: string }, ) => void; calls: { @@ -392,7 +387,7 @@ type TestApi = { lifecycle: Parameters[0][]; gatewayMethods: Array<{ method: string; - handler: (request?: unknown) => NemoFlowHealthSnapshot; + handler: TestGatewayMethodHandler; }>; hooks: Array<{ hookName: string; handler: HookHandler }>; }; @@ -427,14 +422,8 @@ function createApi(params: { resolvePath: (input) => input, registerService: (service) => calls.services.push(service), registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), - registerHook: (hookName: string | string[], handler: HookHandler) => - calls.hooks.push({ hookName: String(hookName), handler }), on: (hookName: string, handler: HookHandler) => calls.hooks.push({ hookName, handler }), - registerGatewayMethod: (method, handler) => - calls.gatewayMethods.push({ - method, - handler: handler as unknown as TestApi["calls"]["gatewayMethods"][number]["handler"], - }), + registerGatewayMethod: (method, handler) => calls.gatewayMethods.push({ method, handler }), calls, messages, }; @@ -446,6 +435,10 @@ function createApi(params: { return api; } +function registerPlugin(api: TestApi, moduleLoader?: NemoFlowModuleLoader): void { + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, moduleLoader); +} + type TestNemoFlowRuntime = NemoFlowModules["nf"] & { calls: { event: Array<{ name: string; handle: unknown; data: unknown }>; diff --git a/integrations/openclaw/src/__tests__/gateway-status.ts b/integrations/openclaw/src/__tests__/gateway-status.ts new file mode 100644 index 00000000..79c38c8b --- /dev/null +++ b/integrations/openclaw/src/__tests__/gateway-status.ts @@ -0,0 +1,35 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import assert from "node:assert/strict"; + +import type { OpenClawPluginApi } from "openclaw/plugin-sdk/plugin-entry"; + +import type { NemoFlowHealthSnapshot } from "../health.js"; + +export type TestGatewayMethodHandler = Parameters[1]; + +export async function callGatewayStatus( + handler: TestGatewayMethodHandler | undefined, +): Promise { + assert.ok(handler); + let status: NemoFlowHealthSnapshot | undefined; + + await handler({ + req: {} as never, + params: {}, + client: null, + isWebchatConnect: () => false, + respond: (ok, payload, error) => { + assert.equal(ok, true); + assert.equal(error, undefined); + status = payload as NemoFlowHealthSnapshot; + }, + context: {} as never, + }); + + assert.ok(status); + return status; +} diff --git a/integrations/openclaw/src/__tests__/live-smoke.test.ts b/integrations/openclaw/src/__tests__/live-smoke.test.ts index 78806884..64436435 100644 --- a/integrations/openclaw/src/__tests__/live-smoke.test.ts +++ b/integrations/openclaw/src/__tests__/live-smoke.test.ts @@ -9,9 +9,13 @@ import { it } from "node:test"; import { makeSafeSessionId } from "../atif-capture.js"; import { registerNemoFlowPlugin } from "../runtime-state.js"; -import type { NemoFlowHealthSnapshot } from "../health.js"; -import { defaultNemoFlowModuleLoader, type NemoFlowModules } from "../modules.js"; +import { + defaultNemoFlowModuleLoader, + type NemoFlowModuleLoader, + type NemoFlowModules, +} from "../modules.js"; import type { OpenClawPluginApi, PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; +import { callGatewayStatus, type TestGatewayMethodHandler } from "./gateway-status.js"; const liveSmokeEnabled = process.env.NEMO_FLOW_OPENCLAW_LIVE_SMOKE === "1"; @@ -36,7 +40,7 @@ it( let serviceStarted = false; try { - registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, async () => modules); + registerPlugin(api, async () => modules); const service = api.calls.services[0]; assert.ok(service, "expected OpenClaw service registration"); @@ -108,8 +112,7 @@ it( const exported = JSON.parse(await fs.readFile(targetPath, "utf8")) as unknown; assert.equal(typeof exported, "object"); - const status = api.calls.gatewayMethods[0]?.handler(); - assert.ok(status); + const status = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); assert.equal(status.outputs.atif, "enabled"); assert.equal(status.counters.llmSpansReplayed, 1); assert.equal(status.counters.toolSpansReplayed, 1); @@ -139,11 +142,10 @@ type TestApi = { resolvePath: OpenClawPluginApi["resolvePath"]; registerService: (service: Parameters[0]) => void; registerRuntimeLifecycle: (lifecycle: Parameters[0]) => void; - registerHook: (hookName: string | string[], handler: HookHandler) => void; on: (hookName: string, handler: HookHandler) => void; registerGatewayMethod: ( method: string, - handler: (request?: unknown) => unknown, + handler: TestGatewayMethodHandler, opts?: { scope?: string }, ) => void; calls: { @@ -151,7 +153,7 @@ type TestApi = { lifecycle: Parameters[0][]; gatewayMethods: Array<{ method: string; - handler: (request?: unknown) => NemoFlowHealthSnapshot; + handler: TestGatewayMethodHandler; }>; hooks: Array<{ hookName: string; handler: HookHandler }>; }; @@ -179,18 +181,16 @@ function createApi(params: { pluginConfig: Record }): TestApi { resolvePath: (input) => input, registerService: (service) => calls.services.push(service), registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), - registerHook: (hookName: string | string[], handler: HookHandler) => - calls.hooks.push({ hookName: String(hookName), handler }), on: (hookName: string, handler: HookHandler) => calls.hooks.push({ hookName, handler }), - registerGatewayMethod: (method, handler) => - calls.gatewayMethods.push({ - method, - handler: handler as unknown as TestApi["calls"]["gatewayMethods"][number]["handler"], - }), + registerGatewayMethod: (method, handler) => calls.gatewayMethods.push({ method, handler }), calls, }; } +function registerPlugin(api: TestApi, moduleLoader: NemoFlowModuleLoader): void { + registerNemoFlowPlugin(api as unknown as OpenClawPluginApi, moduleLoader); +} + async function loadRealNemoFlowModules(): Promise { try { return await defaultNemoFlowModuleLoader(); diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index 99617df3..ec0b0212 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -21,26 +21,6 @@ import { shutdownTelemetrySubscribers, type TelemetrySubscriberEntry, } from "./telemetry.js"; -import type { - PluginHookAfterToolCallEvent, - PluginHookAgentContext, - PluginHookAgentEndEvent, - PluginHookBeforeAgentFinalizeEvent, - PluginHookGatewayContext, - PluginHookGatewayStartEvent, - PluginHookGatewayStopEvent, - PluginHookLlmInputEvent, - PluginHookLlmOutputEvent, - PluginHookModelCallEndedEvent, - PluginHookModelCallStartedEvent, - PluginHookSessionContext, - PluginHookSessionEndEvent, - PluginHookSessionStartEvent, - PluginHookSubagentContext, - PluginHookSubagentEndedEvent, - PluginHookSubagentSpawnedEvent, - PluginHookToolContext, -} from "./openclaw-hook-types.js"; import type { RuntimeStateOptions, StartContext } from "./types.js"; const PLUGIN_ID = "nemo-flow"; @@ -221,75 +201,91 @@ export class NemoFlowRuntimeState { return this.stop(reason, this.api.logger); } + private replayWithBackend(label: string, emit: (backend: HookReplayBackend) => void): void { + const backend = this.backendValue; + if (!backend) { + return; + } + + backend.safeReplay(label, undefined, () => emit(backend)); + } + + private async replayWithBackendAsync( + label: string, + emit: (backend: HookReplayBackend) => Promise, + ): Promise { + const backend = this.backendValue; + if (!backend) { + return; + } + + await backend.safeReplayAsync(label, undefined, () => emit(backend)); + } + registerHooks(): void { - const dispatch = ( - hookName: Parameters[0], - handler: (backend: HookReplayBackend, event: unknown, ctx: unknown) => void, - ): void => { - this.api.on(hookName, ((event: unknown, ctx: unknown) => { - const backend = this.backendValue; - if (!backend) { - return; - } - backend.safeReplay(hookName, undefined, () => handler(backend, event, ctx)); - }) as never); - }; - const dispatchAsync = ( - hookName: Parameters[0], - handler: (backend: HookReplayBackend, event: unknown, ctx: unknown) => Promise, - ): void => { - this.api.on(hookName, (async (event: unknown, ctx: unknown) => { - const backend = this.backendValue; - if (!backend) { - return; - } - await backend.safeReplayAsync(hookName, undefined, () => handler(backend, event, ctx)); - }) as never); - }; + this.api.on("gateway_start", (event, ctx) => { + this.replayWithBackend("gateway_start", (backend) => backend.onGatewayStart(event, ctx)); + }); - dispatch("gateway_start", (backend, event, ctx) => - backend.onGatewayStart(event as PluginHookGatewayStartEvent, ctx as PluginHookGatewayContext), - ); - this.api.on("gateway_stop", (async (event: unknown) => { - const stopEvent = event as PluginHookGatewayStopEvent; - await this.stop(stopEvent.reason ?? "gateway_stop", this.api.logger); - }) as never); - dispatch("session_start", (backend, event, ctx) => - backend.onSessionStart(event as PluginHookSessionStartEvent, ctx as PluginHookSessionContext), - ); - dispatchAsync("session_end", (backend, event, ctx) => - backend.onSessionEnd(event as PluginHookSessionEndEvent, ctx as PluginHookSessionContext), - ); - dispatch("llm_input", (backend, event, ctx) => - backend.onLlmInput(event as PluginHookLlmInputEvent, ctx as PluginHookAgentContext), - ); - dispatch("llm_output", (backend, event, ctx) => - backend.onLlmOutput(event as PluginHookLlmOutputEvent, ctx as PluginHookAgentContext), - ); - dispatch("model_call_started", (backend, event, ctx) => - backend.onModelCallStarted(event as PluginHookModelCallStartedEvent, ctx as PluginHookAgentContext), - ); - dispatch("model_call_ended", (backend, event, ctx) => - backend.onModelCallEnded(event as PluginHookModelCallEndedEvent, ctx as PluginHookAgentContext), - ); - dispatch("after_tool_call", (backend, event, ctx) => - backend.onAfterToolCall(event as PluginHookAfterToolCallEvent, ctx as PluginHookToolContext), - ); - dispatch("agent_end", (backend, event, ctx) => - backend.onAgentEnd(event as PluginHookAgentEndEvent, ctx as PluginHookAgentContext), - ); - dispatch("before_agent_finalize", (backend, event, ctx) => - backend.onBeforeAgentFinalize( - event as PluginHookBeforeAgentFinalizeEvent, - ctx as PluginHookAgentContext, - ), - ); - dispatch("subagent_spawned", (backend, event, ctx) => - backend.onSubagentSpawned(event as PluginHookSubagentSpawnedEvent, ctx as PluginHookSubagentContext), - ); - dispatch("subagent_ended", (backend, event, ctx) => - backend.onSubagentEnded(event as PluginHookSubagentEndedEvent, ctx as PluginHookSubagentContext), - ); + this.api.on("gateway_stop", async (event) => { + await this.stop(event.reason ?? "gateway_stop", this.api.logger); + }); + + this.api.on("session_start", (event, ctx) => { + this.replayWithBackend("session_start", (backend) => backend.onSessionStart(event, ctx)); + }); + + this.api.on("session_end", async (event, ctx) => { + await this.replayWithBackendAsync("session_end", (backend) => backend.onSessionEnd(event, ctx)); + }); + + this.api.on("llm_input", (event, ctx) => { + this.replayWithBackend("llm_input", (backend) => backend.onLlmInput(event, ctx)); + }); + + this.api.on("llm_output", (event, ctx) => { + this.replayWithBackend("llm_output", (backend) => backend.onLlmOutput(event, ctx)); + }); + + this.api.on("model_call_started", (event, ctx) => { + this.replayWithBackend("model_call_started", (backend) => + backend.onModelCallStarted(event, ctx), + ); + }); + + this.api.on("model_call_ended", (event, ctx) => { + this.replayWithBackend("model_call_ended", (backend) => + backend.onModelCallEnded(event, ctx), + ); + }); + + this.api.on("after_tool_call", (event, ctx) => { + this.replayWithBackend("after_tool_call", (backend) => + backend.onAfterToolCall(event, ctx), + ); + }); + + this.api.on("agent_end", (event, ctx) => { + this.replayWithBackend("agent_end", (backend) => backend.onAgentEnd(event, ctx)); + }); + + this.api.on("before_agent_finalize", (event, ctx) => { + this.replayWithBackend("before_agent_finalize", (backend) => + backend.onBeforeAgentFinalize(event, ctx), + ); + }); + + this.api.on("subagent_spawned", (event, ctx) => { + this.replayWithBackend("subagent_spawned", (backend) => + backend.onSubagentSpawned(event, ctx), + ); + }); + + this.api.on("subagent_ended", (event, ctx) => { + this.replayWithBackend("subagent_ended", (backend) => + backend.onSubagentEnded(event, ctx), + ); + }); } private resolvePluginHostConfig( @@ -394,7 +390,9 @@ export function registerNemoFlowPlugin( api.registerGatewayMethod?.( STATUS_METHOD, - (() => runtime.health()) as unknown as Parameters[1], + ({ respond }) => { + respond(true, runtime.health()); + }, { scope: "operator.admin", }, From 4df12b3bd19200a7267c2e2714b4e99f407fba79 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 19:04:15 -0700 Subject: [PATCH 15/30] fix: harden OpenClaw runtime lifecycle Signed-off-by: mnajafian-nv --- .../openclaw/src/__tests__/config.test.ts | 92 ++++++++++ integrations/openclaw/src/hooks-backend.ts | 15 ++ integrations/openclaw/src/runtime-state.ts | 173 ++++++++++++++---- 3 files changed, 248 insertions(+), 32 deletions(-) diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts index 5c1b72c5..6aef2307 100644 --- a/integrations/openclaw/src/__tests__/config.test.ts +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -224,6 +224,92 @@ describe("nemo-flow OpenClaw plugin shell", () => { ]); }); + it("keeps the runtime running for scoped lifecycle cleanup", async () => { + const modules = createModules(); + const api = createApi({ pluginConfig: { atif: { enabled: false } } }); + + registerPlugin(api, async () => modules); + const service = api.calls.services[0]; + const lifecycle = api.calls.lifecycle[0]; + assert.ok(service); + assert.ok(lifecycle?.cleanup); + await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); + + const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); + assert.ok(sessionStart); + await sessionStart.handler({ sessionId: "session-1", sessionKey: "agent:main:session-1" }, { + sessionId: "session-1", + sessionKey: "agent:main:session-1", + }); + + await lifecycle.cleanup({ reason: "restart", sessionKey: "agent:main:session-1" }); + + const statusAfterScopedCleanup = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); + assert.equal(statusAfterScopedCleanup.status.state, "ready"); + assert.equal(statusAfterScopedCleanup.counters.marksEmitted, 2); + + await sessionStart.handler({ sessionId: "session-2" }, { sessionId: "session-2" }); + + const statusAfterNextHook = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); + assert.equal(statusAfterNextHook.status.state, "ready"); + assert.equal(statusAfterNextHook.counters.marksEmitted, 3); + assert.deepEqual(modules.nf.calls.event.map((event) => event.name), [ + "openclaw.session_start", + "openclaw.session_end", + "openclaw.session_start", + ]); + + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); + }); + + it("restarts hook replay after unscoped runtime restart cleanup", async () => { + const modules = createModules(); + const api = createApi({ pluginConfig: { atif: { enabled: false } } }); + + registerPlugin(api, async () => modules); + const service = api.calls.services[0]; + const lifecycle = api.calls.lifecycle[0]; + assert.ok(service); + assert.ok(lifecycle?.cleanup); + await service.start({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); + + await lifecycle.cleanup({ reason: "restart" }); + const statusAfterRestart = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); + assert.equal(statusAfterRestart.status.state, "not_initialized"); + assert.equal(statusAfterRestart.status.reason, "restart"); + + const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); + assert.ok(sessionStart); + await sessionStart.handler({ sessionId: "session-1" }, { sessionId: "session-1" }); + + const statusAfterNextHook = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); + assert.equal(statusAfterNextHook.status.state, "ready"); + assert.equal(statusAfterNextHook.counters.marksEmitted, 1); + assert.deepEqual(modules.nf.calls.event.map((event) => event.name), ["openclaw.session_start"]); + + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); + }); + + it("starts hook replay from the OpenClaw runtime when service start has not run", async () => { + const modules = createModules(); + const api = createApi({ pluginConfig: { atif: { enabled: false } } }); + + registerPlugin(api, async () => modules); + const sessionStart = api.calls.hooks.find((hook) => hook.hookName === "session_start"); + assert.ok(sessionStart); + + await sessionStart.handler({ sessionId: "session-1" }, { sessionId: "session-1" }); + + const statusAfterHook = await callGatewayStatus(api.calls.gatewayMethods[0]?.handler); + assert.equal(statusAfterHook.status.state, "ready"); + assert.equal(statusAfterHook.counters.marksEmitted, 1); + assert.deepEqual(modules.nf.calls.event.map((event) => event.name), ["openclaw.session_start"]); + + const service = api.calls.services[0]; + assert.ok(service); + await service.stop?.({ stateDir: "/tmp/openclaw-state", config: {} as never, logger: api.logger }); + }); + it("registers and shuts down telemetry subscribers in order", async () => { const modules = createModules(); const api = createApi({ @@ -373,6 +459,7 @@ type TestApi = { registrationMode: OpenClawPluginApi["registrationMode"]; pluginConfig?: Record; logger: PluginLogger; + runtime: OpenClawPluginApi["runtime"]; resolvePath: OpenClawPluginApi["resolvePath"]; registerService: (service: Parameters[0]) => void; registerRuntimeLifecycle: (lifecycle: Parameters[0]) => void; @@ -419,6 +506,11 @@ function createApi(params: { version: "1.2.3", registrationMode: params.registrationMode ?? "full", logger, + runtime: { + state: { + resolveStateDir: () => "/tmp/openclaw-state", + }, + } as unknown as OpenClawPluginApi["runtime"], resolvePath: (input) => input, registerService: (service) => calls.services.push(service), registerRuntimeLifecycle: (lifecycle) => calls.lifecycle.push(lifecycle), diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts index cdd27af9..42797384 100644 --- a/integrations/openclaw/src/hooks-backend.ts +++ b/integrations/openclaw/src/hooks-backend.ts @@ -22,6 +22,7 @@ import { ensureSession, resolveSessionKey, type HookReplayBackendState, + type SessionLookupInput, type SessionState, } from "./hook-replay/session.js"; import type { NemoFlowRuntimeModule } from "./modules.js"; @@ -254,6 +255,20 @@ export class HookReplayBackend { await this.closeAllSessions({ reason: reason ?? "gateway_stop" }); } + async cleanupSession(input: SessionLookupInput & { reason: string }): Promise { + const key = resolveSessionKey(this.stateValue, input); + if (!key) { + return; + } + + const session = this.stateValue.sessions.get(key); + if (!session) { + return; + } + + await this.closeSession(session, { reason: input.reason }); + } + async stop(reason: string): Promise { await this.closeAllSessions({ reason }); } diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index ec0b0212..d855f98d 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -3,7 +3,12 @@ import * as path from "node:path"; -import type { OpenClawPluginApi, OpenClawPluginServiceContext, PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; +import type { + OpenClawPluginApi, + OpenClawPluginServiceContext, + PluginLogger, + PluginRuntimeLifecycleRegistration, +} from "openclaw/plugin-sdk/plugin-entry"; import { parseConfig } from "./config.js"; import type { NemoFlowHookBackendConfig } from "./config.js"; @@ -27,12 +32,14 @@ const PLUGIN_ID = "nemo-flow"; const SERVICE_ID = "nemo-flow-observability"; const LIFECYCLE_ID = "nemo-flow-observability-cleanup"; const STATUS_METHOD = "nemoFlow.status"; +type RuntimeCleanupContext = Parameters>[0]; export class NemoFlowRuntimeState { private readonly api: OpenClawPluginApi; private readonly config: NemoFlowHookBackendConfig; private readonly moduleLoader: NemoFlowModuleLoader; private loadPromise: Promise | undefined; + private startPromise: Promise | undefined; private statusValue: HookReplayBackendStatus = { state: "not_initialized" }; private modulesValue?: NemoFlowModules; private backendValue: HookReplayBackend | undefined; @@ -40,7 +47,9 @@ export class NemoFlowRuntimeState { private started = false; private beforeExitListener?: () => void; private unavailableLogged = false; + private missingStartContextLogged = false; private telemetrySubscribers: TelemetrySubscriberEntry[] = []; + private lastStartContext?: StartContext; private lastCounters?: HookReplayCounters; private readonly degradedOutputs = new Set<"atif" | "otel" | "openInference">(); @@ -73,10 +82,27 @@ export class NemoFlowRuntimeState { } async start(ctx: StartContext): Promise { + this.lastStartContext = copyStartContext(ctx); + this.missingStartContextLogged = false; + if (this.started || this.statusValue.state === "ready" || this.statusValue.state === "degraded") { return; } + if (this.startPromise) { + await this.startPromise; + return; + } + + this.startPromise = this.startInternal(ctx); + try { + await this.startPromise; + } finally { + this.startPromise = undefined; + } + } + + private async startInternal(ctx: StartContext): Promise { delete this.lastCounters; this.degradedOutputs.clear(); @@ -154,6 +180,14 @@ export class NemoFlowRuntimeState { } async stop(reason: string, logger?: PluginLogger): Promise { + await this.stopWithStatus(reason, logger, { state: "stopped", reason }); + } + + private async stopWithStatus( + reason: string, + logger: PluginLogger | undefined, + finalStatus: HookReplayBackendStatus, + ): Promise { if ( this.statusValue.state === "stopped" || this.statusValue.state === "disabled" || @@ -162,6 +196,13 @@ export class NemoFlowRuntimeState { return; } + if (this.startPromise) { + await this.startPromise.catch((error) => { + const log = logger ?? this.api.logger; + log.warn?.(`failed to finish NeMo Flow startup before stop: ${toMessage(error)}`); + }); + } + this.statusValue = { state: "stopping" }; const log = logger ?? this.api.logger; this.removeBeforeExitListener(); @@ -194,15 +235,54 @@ export class NemoFlowRuntimeState { } this.started = false; - this.statusValue = { state: "stopped", reason }; + this.statusValue = finalStatus; + } + + async cleanup(ctx: RuntimeCleanupContext): Promise { + if (ctx.sessionKey !== undefined || ctx.runId !== undefined) { + await this.backendValue?.cleanupSession({ + reason: ctx.reason, + ...(ctx.sessionKey === undefined ? {} : { sessionKey: ctx.sessionKey }), + ...(ctx.runId === undefined ? {} : { runId: ctx.runId }), + }); + return; + } + + await this.stopWithStatus( + ctx.reason, + this.api.logger, + ctx.reason === "restart" ? { state: "not_initialized", reason: "restart" } : { state: "stopped", reason: ctx.reason }, + ); } - cleanup(reason: string): Promise { - return this.stop(reason, this.api.logger); + private async backendForHook(workspaceDir?: string): Promise { + if (this.backendValue) { + return this.backendValue; + } + + if (this.statusValue.state === "disabled" || this.statusValue.state === "stopping") { + return undefined; + } + + const startContext = this.lastStartContext ?? this.startContextFromRuntime(workspaceDir); + if (!startContext) { + if (!this.missingStartContextLogged) { + this.api.logger.warn?.("nemo-flow skipped hook replay because OpenClaw service start context is unavailable"); + this.missingStartContextLogged = true; + } + return undefined; + } + + await this.start(startContext); + return this.backendValue; } - private replayWithBackend(label: string, emit: (backend: HookReplayBackend) => void): void { - const backend = this.backendValue; + private async replayWithBackend( + label: string, + workspaceDir: string | undefined, + emit: (backend: HookReplayBackend) => void, + ): Promise { + const backend = await this.backendForHook(workspaceDir); if (!backend) { return; } @@ -212,9 +292,10 @@ export class NemoFlowRuntimeState { private async replayWithBackendAsync( label: string, + workspaceDir: string | undefined, emit: (backend: HookReplayBackend) => Promise, ): Promise { - const backend = this.backendValue; + const backend = await this.backendForHook(workspaceDir); if (!backend) { return; } @@ -223,66 +304,68 @@ export class NemoFlowRuntimeState { } registerHooks(): void { - this.api.on("gateway_start", (event, ctx) => { - this.replayWithBackend("gateway_start", (backend) => backend.onGatewayStart(event, ctx)); + this.api.on("gateway_start", async (event, ctx) => { + await this.replayWithBackend("gateway_start", ctx.workspaceDir, (backend) => + backend.onGatewayStart(event, ctx), + ); }); this.api.on("gateway_stop", async (event) => { await this.stop(event.reason ?? "gateway_stop", this.api.logger); }); - this.api.on("session_start", (event, ctx) => { - this.replayWithBackend("session_start", (backend) => backend.onSessionStart(event, ctx)); + this.api.on("session_start", async (event, ctx) => { + await this.replayWithBackend("session_start", undefined, (backend) => backend.onSessionStart(event, ctx)); }); this.api.on("session_end", async (event, ctx) => { - await this.replayWithBackendAsync("session_end", (backend) => backend.onSessionEnd(event, ctx)); + await this.replayWithBackendAsync("session_end", undefined, (backend) => backend.onSessionEnd(event, ctx)); }); - this.api.on("llm_input", (event, ctx) => { - this.replayWithBackend("llm_input", (backend) => backend.onLlmInput(event, ctx)); + this.api.on("llm_input", async (event, ctx) => { + await this.replayWithBackend("llm_input", ctx.workspaceDir, (backend) => backend.onLlmInput(event, ctx)); }); - this.api.on("llm_output", (event, ctx) => { - this.replayWithBackend("llm_output", (backend) => backend.onLlmOutput(event, ctx)); + this.api.on("llm_output", async (event, ctx) => { + await this.replayWithBackend("llm_output", ctx.workspaceDir, (backend) => backend.onLlmOutput(event, ctx)); }); - this.api.on("model_call_started", (event, ctx) => { - this.replayWithBackend("model_call_started", (backend) => + this.api.on("model_call_started", async (event, ctx) => { + await this.replayWithBackend("model_call_started", ctx.workspaceDir, (backend) => backend.onModelCallStarted(event, ctx), ); }); - this.api.on("model_call_ended", (event, ctx) => { - this.replayWithBackend("model_call_ended", (backend) => + this.api.on("model_call_ended", async (event, ctx) => { + await this.replayWithBackend("model_call_ended", ctx.workspaceDir, (backend) => backend.onModelCallEnded(event, ctx), ); }); - this.api.on("after_tool_call", (event, ctx) => { - this.replayWithBackend("after_tool_call", (backend) => + this.api.on("after_tool_call", async (event, ctx) => { + await this.replayWithBackend("after_tool_call", undefined, (backend) => backend.onAfterToolCall(event, ctx), ); }); - this.api.on("agent_end", (event, ctx) => { - this.replayWithBackend("agent_end", (backend) => backend.onAgentEnd(event, ctx)); + this.api.on("agent_end", async (event, ctx) => { + await this.replayWithBackend("agent_end", ctx.workspaceDir, (backend) => backend.onAgentEnd(event, ctx)); }); - this.api.on("before_agent_finalize", (event, ctx) => { - this.replayWithBackend("before_agent_finalize", (backend) => + this.api.on("before_agent_finalize", async (event, ctx) => { + await this.replayWithBackend("before_agent_finalize", ctx.workspaceDir, (backend) => backend.onBeforeAgentFinalize(event, ctx), ); }); - this.api.on("subagent_spawned", (event, ctx) => { - this.replayWithBackend("subagent_spawned", (backend) => + this.api.on("subagent_spawned", async (event, ctx) => { + await this.replayWithBackend("subagent_spawned", undefined, (backend) => backend.onSubagentSpawned(event, ctx), ); }); - this.api.on("subagent_ended", (event, ctx) => { - this.replayWithBackend("subagent_ended", (backend) => + this.api.on("subagent_ended", async (event, ctx) => { + await this.replayWithBackend("subagent_ended", undefined, (backend) => backend.onSubagentEnded(event, ctx), ); }); @@ -320,12 +403,28 @@ export class NemoFlowRuntimeState { this.degradedOutputs.add(output); } + private startContextFromRuntime(workspaceDir?: string): StartContext | undefined { + try { + const stateDir = this.api.runtime.state.resolveStateDir(); + return { + stateDir, + logger: this.api.logger, + resolvePath: this.api.resolvePath, + agentVersion: this.config.atif.agentVersion ?? this.api.version ?? "unknown", + ...(workspaceDir === undefined ? {} : { workspaceDir }), + }; + } catch (error) { + this.api.logger.warn?.(`nemo-flow could not resolve OpenClaw runtime state dir: ${toMessage(error)}`); + return undefined; + } + } + private registerBeforeExit(logger: PluginLogger): void { if (this.beforeExitListener) { return; } const listener = () => { - void this.cleanup("beforeExit").catch((error) => { + void this.stop("beforeExit", logger).catch((error) => { logger.warn?.(`nemo-flow beforeExit cleanup failed: ${toMessage(error)}`); }); }; @@ -385,7 +484,7 @@ export function registerNemoFlowPlugin( api.registerRuntimeLifecycle({ id: LIFECYCLE_ID, description: "Clean up NeMo Flow OpenClaw observability plugin state", - cleanup: (ctx) => runtime.cleanup(ctx.reason), + cleanup: (ctx) => runtime.cleanup(ctx), }); api.registerGatewayMethod?.( @@ -431,6 +530,16 @@ function resolveAtifOutputDir(config: NemoFlowHookBackendConfig, ctx: StartConte return path.isAbsolute(configured) ? configured : ctx.resolvePath(configured); } +function copyStartContext(ctx: StartContext): StartContext { + return { + stateDir: ctx.stateDir, + logger: ctx.logger, + resolvePath: ctx.resolvePath, + agentVersion: ctx.agentVersion, + ...(ctx.workspaceDir === undefined ? {} : { workspaceDir: ctx.workspaceDir }), + }; +} + function toMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); } From 7a812fb787e88d152c3a46ce07914c722c14c588 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 19:04:33 -0700 Subject: [PATCH 16/30] fix: preserve LLM usage in OpenInference export Signed-off-by: mnajafian-nv --- .../core/src/observability/openinference.rs | 103 +++++++++++++++++- .../unit/observability/openinference_tests.rs | 56 ++++++++++ .../openclaw/src/__tests__/llm-replay.test.ts | 34 +++++- integrations/openclaw/src/hook-replay/llm.ts | 12 +- .../openclaw/src/openclaw-hook-types.ts | 3 + 5 files changed, 200 insertions(+), 8 deletions(-) diff --git a/crates/core/src/observability/openinference.rs b/crates/core/src/observability/openinference.rs index c050eab3..89fbb9e9 100644 --- a/crates/core/src/observability/openinference.rs +++ b/crates/core/src/observability/openinference.rs @@ -24,7 +24,9 @@ use crate::api::event::{Event, ScopeCategory}; use crate::api::runtime::EventSubscriberFn; use crate::api::scope::ScopeType; use crate::api::subscriber::{deregister_subscriber, register_subscriber}; +use crate::codec::response::Usage; use crate::error::FlowError; +use crate::json::Json; use chrono::{DateTime, Utc}; use openinference_semantic_conventions::SpanKind as OpenInferenceSpanKind; use openinference_semantic_conventions::attributes as oi; @@ -682,10 +684,22 @@ fn end_attributes(event: &Event) -> Vec { attributes.push(KeyValue::new(oi::output::VALUE, output)); attributes.push(KeyValue::new(oi::output::MIME_TYPE, "application/json")); } + let fallback_usage = if event + .category() + .is_some_and(|category| category.as_str() == "llm") + { + usage_from_manual_llm_output(event.output()) + } else { + None + }; + let usage = event + .annotated_response() + .and_then(|response| response.usage.as_ref()) + .or(fallback_usage.as_ref()); if event .category() .is_some_and(|category| category.as_str() == "llm") - && let Some(usage) = event.annotated_response().and_then(|r| r.usage.as_ref()) + && let Some(usage) = usage { if let Some(v) = usage.prompt_tokens { attributes.push(KeyValue::new(oi::llm::token_count::PROMPT, v as i64)); @@ -712,6 +726,93 @@ fn end_attributes(event: &Event) -> Vec { attributes } +fn usage_from_manual_llm_output(output: Option<&Json>) -> Option { + let object = output?.as_object()?; + let usage = object.get("usage").and_then(Json::as_object); + let token_usage = object.get("token_usage").and_then(Json::as_object); + if usage.is_none() && token_usage.is_none() { + return None; + } + + let prompt_tokens = first_u64_from_manual_usage( + usage, + token_usage, + &["prompt_tokens", "input_tokens", "inputTokens", "input"], + ); + let completion_tokens = first_u64_from_manual_usage( + usage, + token_usage, + &[ + "completion_tokens", + "output_tokens", + "completionTokens", + "outputTokens", + "output", + ], + ); + let total_tokens = first_u64_from_manual_usage( + usage, + token_usage, + &["total_tokens", "totalTokens", "total"], + ); + let cache_read_tokens = first_u64_from_manual_usage( + usage, + token_usage, + &[ + "cache_read_tokens", + "cached_tokens", + "cache_read_input_tokens", + "cacheReadTokens", + "cachedTokens", + "cacheReadInputTokens", + "cacheRead", + ], + ); + let cache_write_tokens = first_u64_from_manual_usage( + usage, + token_usage, + &[ + "cache_write_tokens", + "cache_creation_input_tokens", + "cacheWriteTokens", + "cacheCreationInputTokens", + "cacheWrite", + ], + ); + + if prompt_tokens.is_none() + && completion_tokens.is_none() + && total_tokens.is_none() + && cache_read_tokens.is_none() + && cache_write_tokens.is_none() + { + return None; + } + + Some(Usage { + prompt_tokens, + completion_tokens, + total_tokens, + cache_read_tokens, + cache_write_tokens, + }) +} + +fn first_u64_from_manual_usage( + usage: Option<&serde_json::Map>, + token_usage: Option<&serde_json::Map>, + keys: &[&str], +) -> Option { + usage + .and_then(|value| first_u64(value, keys)) + .or_else(|| token_usage.and_then(|value| first_u64(value, keys))) +} + +fn first_u64(usage: &serde_json::Map, keys: &[&str]) -> Option { + keys.iter() + .find_map(|key| usage.get(*key).and_then(Json::as_u64)) +} + fn mark_attributes(event: &Event) -> Vec { let handle_attributes = event.attributes(); let mut attributes = vec![ diff --git a/crates/core/tests/unit/observability/openinference_tests.rs b/crates/core/tests/unit/observability/openinference_tests.rs index 7d24f005..48b0174c 100644 --- a/crates/core/tests/unit/observability/openinference_tests.rs +++ b/crates/core/tests/unit/observability/openinference_tests.rs @@ -1091,6 +1091,62 @@ fn llm_end_with_usage_emits_token_count_attributes() { ); } +#[test] +fn llm_end_with_manual_usage_payload_emits_token_count_attributes() { + let (provider, exporter) = make_provider(); + let mut processor = + OpenInferenceEventProcessor::new(provider.clone(), "test-scope".to_string()); + let uuid = Uuid::now_v7(); + + processor.process(&make_start_event(uuid, None, "chat", ScopeType::Llm, None)); + processor.process(&make_scope_event_with_profile( + ScopeCategory::End, + uuid, + None, + "chat", + ScopeType::Llm, + Some(json!({ + "content": "hello", + "usage": { + "prompt_tokens": 100 + }, + "token_usage": { + "completion_tokens": 50, + "total_tokens": 150, + "cached_tokens": 25, + "cache_write_tokens": 10 + } + })), + Some(CategoryProfile::builder().model_name("gpt-4").build()), + )); + + processor.force_flush().unwrap(); + + let spans = exporter.get_finished_spans().unwrap(); + assert_eq!(spans.len(), 1); + let attributes = attr_map(&spans[0].attributes); + assert_eq!( + attributes.get("llm.token_count.prompt"), + Some(&"100".to_string()) + ); + assert_eq!( + attributes.get("llm.token_count.completion"), + Some(&"50".to_string()) + ); + assert_eq!( + attributes.get("llm.token_count.total"), + Some(&"150".to_string()) + ); + assert_eq!( + attributes.get("llm.token_count.prompt_details.cache_read"), + Some(&"25".to_string()) + ); + assert_eq!( + attributes.get("llm.token_count.prompt_details.cache_write"), + Some(&"10".to_string()) + ); +} + #[test] fn llm_end_without_usage_omits_token_count_attributes() { let (provider, exporter) = make_provider(); diff --git a/integrations/openclaw/src/__tests__/llm-replay.test.ts b/integrations/openclaw/src/__tests__/llm-replay.test.ts index 259e8b50..7bb083f2 100644 --- a/integrations/openclaw/src/__tests__/llm-replay.test.ts +++ b/integrations/openclaw/src/__tests__/llm-replay.test.ts @@ -50,6 +50,11 @@ describe("LLM replay", () => { assert.equal(request.content.systemPrompt, "be concise"); const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; assert.equal(response.content, "hi"); + assert.deepEqual(response.usage, { + prompt_tokens: 2, + completion_tokens: 3, + total_tokens: 5, + }); assert.deepEqual(response.token_usage, { prompt_tokens: 2, completion_tokens: 3, @@ -57,6 +62,24 @@ describe("LLM replay", () => { }); }); + it("uses the observed input time as the fallback llm span start time", () => { + const now = Date.now; + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + try { + Date.now = () => 1_000; + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + Date.now = () => 1_250; + backend.onLlmOutput(llmOutput(), { runId: "run-1", sessionId: "session-1" }); + } finally { + Date.now = now; + } + + assert.equal(nf.calls.llmCall[0]?.timestamp, 1_000_000); + assert.equal(nf.calls.llmCallEnd[0]?.timestamp, 1_250_000); + }); + it("replays pending output when matching input arrives and cancels pending queue", () => { const nf = createNemoFlowRuntime(); const backend = createBackend(nf, { llmOutputGraceMs: 10_000 }); @@ -368,6 +391,7 @@ type ReplayResponse = { content?: string; assistant_texts_count?: number; token_usage?: Record; + usage?: Record; openclaw: Record; }; @@ -377,8 +401,8 @@ type TestNemoFlowRuntime = NemoFlowRuntimeModule & { popScope: Array<{ handle: unknown; output: unknown }>; event: Array<{ name: string; handle: unknown; data: unknown }>; setThreadScopeStack: unknown[]; - llmCall: Array<{ name: string; request: unknown; modelName: string | null | undefined }>; - llmCallEnd: Array<{ handle: unknown; response: unknown }>; + llmCall: Array<{ name: string; request: unknown; modelName: string | null | undefined; timestamp: number | null | undefined }>; + llmCallEnd: Array<{ handle: unknown; response: unknown; timestamp: number | null | undefined }>; toolCall: Array<{ name: string; args: unknown }>; toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown }>; }; @@ -438,12 +462,12 @@ function createNemoFlowRuntime(): TestNemoFlowRuntime { }, popScope: (handle, output) => calls.popScope.push({ handle, output }), event: (name, handle, data) => calls.event.push({ name, handle, data }), - llmCall: (name, request, _handle, _attributes, _data, _metadata, modelName) => { + llmCall: (name, request, _handle, _attributes, _data, _metadata, modelName, timestamp) => { const handle = { id: `llm-${nextScopeId++}` }; - calls.llmCall.push({ name, request, modelName }); + calls.llmCall.push({ name, request, modelName, timestamp }); return handle as unknown as ReturnType; }, - llmCallEnd: (handle, response) => calls.llmCallEnd.push({ handle, response }), + llmCallEnd: (handle, response, _data, _metadata, timestamp) => calls.llmCallEnd.push({ handle, response, timestamp }), toolCall: (name, args) => { const handle = { id: `tool-${nextScopeId++}` }; calls.toolCall.push({ name, args }); diff --git a/integrations/openclaw/src/hook-replay/llm.ts b/integrations/openclaw/src/hook-replay/llm.ts index fda5bcbb..1a633352 100644 --- a/integrations/openclaw/src/hook-replay/llm.ts +++ b/integrations/openclaw/src/hook-replay/llm.ts @@ -282,13 +282,15 @@ export function buildReplayLlmResponse( timing: ModelCallRecord | undefined, config: NemoFlowHookBackendConfig, ): JsonValue { + const usage = mapUsage(event.usage); return toJsonValue({ role: "assistant", content: config.capture.includeResponses ? event.assistantTexts.join("\n") : undefined, assistant_texts_count: event.assistantTexts.length, resolved_ref: event.resolvedRef, harness_id: event.harnessId, - token_usage: mapUsage(event.usage), + usage, + token_usage: usage, openclaw: { duration_ms: timing?.durationMs, outcome: timing?.outcome, @@ -352,6 +354,8 @@ function replayLlmOutput(params: { } const endMicros = nowMicros(); + const observedStartMicros = Math.min(input.observedAtMs * 1000, endMicros); + const startMicros = startMicrosFromDuration(endMicros, timing?.durationMs) ?? observedStartMicros; const request = buildReplayLlmRequest(input, event, manager.config); const response = buildReplayLlmResponse(event, timing, manager.config); const metadata = toJsonRecord({ @@ -371,7 +375,7 @@ function replayLlmOutput(params: { metadata, metadata, event.model, - startMicrosFromDuration(endMicros, timing?.durationMs), + startMicros, ); manager.nf.llmCallEnd(handle, response, response, metadata, endMicros); manager.state.counters.llmSpansReplayed += 1; @@ -522,6 +526,7 @@ function mapUsage(usage: PluginHookLlmOutputEvent["usage"]): Record 0 ? mapped : undefined; } diff --git a/integrations/openclaw/src/openclaw-hook-types.ts b/integrations/openclaw/src/openclaw-hook-types.ts index 5e1e4d7f..010dfbfe 100644 --- a/integrations/openclaw/src/openclaw-hook-types.ts +++ b/integrations/openclaw/src/openclaw-hook-types.ts @@ -54,6 +54,9 @@ export type PluginHookLlmOutputEvent = { cacheRead?: number; cacheWrite?: number; total?: number; + cost?: { + total?: number; + }; }; }; From 66645b88765ac435cb118e75a7ab225fd042a0f0 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 20:11:59 -0700 Subject: [PATCH 17/30] build: manage Node packages with npm workspaces Signed-off-by: mnajafian-nv --- .github/ci-path-filters.yml | 4 +- .github/workflows/ci_docs.yml | 2 +- .github/workflows/ci_node.yml | 4 + .pre-commit-config.yaml | 8 +- AGENTS.md | 1 - ATTRIBUTIONS-Node.md | 39101 +++++++++++++++- RELEASING.md | 11 +- crates/node/package-lock.json | 969 - docs/conf.py | 2 +- docs/contribute/testing-and-docs.md | 3 +- docs/getting-started/installation.md | 7 +- docs/getting-started/nodejs.md | 3 +- docs/getting-started/prerequisites.md | 1 - docs/resources/support-and-faqs.md | 2 +- docs/troubleshooting/troubleshooting-guide.md | 5 +- integrations/openclaw/src/runtime-state.ts | 1 - justfile | 86 +- .../package-lock.json => package-lock.json | 1936 +- package.json | 8 + scripts/licensing/attributions_lockfile_md.py | 8 +- 20 files changed, 39112 insertions(+), 3050 deletions(-) delete mode 100644 crates/node/package-lock.json rename integrations/openclaw/package-lock.json => package-lock.json (71%) create mode 100644 package.json diff --git a/.github/ci-path-filters.yml b/.github/ci-path-filters.yml index d99f8160..0e26e733 100644 --- a/.github/ci-path-filters.yml +++ b/.github/ci-path-filters.yml @@ -44,14 +44,16 @@ go: - 'go/**/!(*.md)' node: + - 'package.json' + - 'package-lock.json' - 'crates/node/Cargo.toml' - 'crates/node/build.rs' - 'crates/node/package.json' - - 'crates/node/package-lock.json' - 'crates/node/*.d.ts' - 'crates/node/*.js' - 'crates/node/src/**' - 'crates/node/tests/**/*.mjs' + - 'integrations/openclaw/**' - 'scripts/test-support/**' python: diff --git a/.github/workflows/ci_docs.yml b/.github/workflows/ci_docs.yml index 044bc051..196602b2 100644 --- a/.github/workflows/ci_docs.yml +++ b/.github/workflows/ci_docs.yml @@ -86,7 +86,7 @@ jobs: run: uv sync --no-default-groups --group docs --no-install-project - name: Install Node.js Documentation Dependencies - working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }}/crates/node + working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} run: npm ci --ignore-scripts - name: Materialize Main Branch For Versioned Docs diff --git a/.github/workflows/ci_node.yml b/.github/workflows/ci_node.yml index 5e141a84..1ec08dd9 100644 --- a/.github/workflows/ci_node.yml +++ b/.github/workflows/ci_node.yml @@ -85,6 +85,10 @@ jobs: working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} run: just --set ci true --set output_dir "${{ github.workspace }}" test-node + - name: Run OpenClaw integration checks + working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} + run: just --set ci true test-openclaw + - name: Upload Node coverage to Codecov uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6 if: ${{ !startsWith(matrix.platform, 'windows') }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cae34edd..cc010f7c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -93,9 +93,9 @@ repos: - id: node-lockfile-check name: package-lock.json is up to date - entry: bash -c 'cd crates/node && npm install --package-lock-only --ignore-scripts --audit=false --fund=false' + entry: bash -c 'npm install --package-lock-only --ignore-scripts --audit=false --fund=false' language: system - files: '^crates/node/package(?:-lock)?\.json$' + files: '^(package(?:-lock)?\.json|crates/node/package\.json|integrations/openclaw/package\.json)$' pass_filenames: false # Rust — fmt + clippy + cargo-deny @@ -151,10 +151,10 @@ repos: pass_filenames: false - id: attributions-node - name: ATTRIBUTIONS-Node.md (crates/node/package-lock.json) + name: ATTRIBUTIONS-Node.md (package-lock.json) entry: bash scripts/generate_attributions.sh node language: system - files: '^(crates/node/package-lock\.json|ATTRIBUTIONS-Node\.md)$' + files: '^(package-lock\.json|ATTRIBUTIONS-Node\.md)$' pass_filenames: false # Go — fmt + vet diff --git a/AGENTS.md b/AGENTS.md index e5c712b7..a3fcff59 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -73,7 +73,6 @@ cargo install wasm-pack --version 0.14.0 --locked uv sync uv run pre-commit install -cd crates/node npm install --ignore-scripts ``` diff --git a/ATTRIBUTIONS-Node.md b/ATTRIBUTIONS-Node.md index e6b6721c..dc624f16 100644 --- a/ATTRIBUTIONS-Node.md +++ b/ATTRIBUTIONS-Node.md @@ -11,6 +11,8348 @@ Each package is open-source and licensed under the terms indicated below. This file is automatically generated from **package-lock.json** Please do not edit it directly. Regenerate with `./scripts/generate_attributions.sh node` +## @agentclientprotocol/sdk - 0.21.0 +**Repository URL**: https://github.com/agentclientprotocol/typescript-sdk +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2025 Zed Industries, Inc. and contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @anthropic-ai/sdk - 0.91.1 +**Repository URL**: https://github.com/anthropics/anthropic-sdk-typescript +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2023 Anthropic, PBC. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @anthropic-ai/sdk - 0.93.0 +**Repository URL**: https://github.com/anthropics/anthropic-sdk-typescript +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2023 Anthropic, PBC. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @anthropic-ai/vertex-sdk - 0.16.0 +**Repository URL**: https://github.com/anthropics/anthropic-sdk-typescript +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2023 Anthropic, PBC. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @aws-crypto/crc32 - 5.2.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-crypto/sha256-browser - 5.2.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-crypto/sha256-js - 5.2.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-crypto/supports-web-crypto - 5.2.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-crypto/util - 5.2.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/client-bedrock-runtime - 3.1042.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/client-bedrock - 3.1042.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/client-cognito-identity - 3.1044.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/core - 3.974.8 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/credential-provider-cognito-identity - 3.972.31 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/credential-provider-env - 3.972.34 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/credential-provider-http - 3.972.36 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +# @aws-sdk/credential-provider-http + +[![NPM version](https://img.shields.io/npm/v/@aws-sdk/credential-provider-http/latest.svg)](https://www.npmjs.com/package/@aws-sdk/credential-provider-http) +[![NPM downloads](https://img.shields.io/npm/dm/@aws-sdk/credential-provider-http.svg)](https://www.npmjs.com/package/@aws-sdk/credential-provider-http) + +> An internal transitively required package. + +## Usage + +See https://www.npmjs.com/package/@aws-sdk/credential-providers``` + +## @aws-sdk/credential-provider-ini - 3.972.38 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/credential-provider-login - 3.972.38 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +# @aws-sdk/credential-provider-login + +### :warning: Internal API :warning: + +> This is an internal package. +> That means this is used as a dependency for other, public packages, but +> should not be taken directly as a dependency in your application's `package.json`. + +> If you are updating the version of this package, for example to bring in a +> bug-fix, you should do so by updating your application lockfile with +> e.g. `npm up @scope/package` or equivalent command in another +> package manager, rather than taking a direct dependency. + +--- + +Please use [@aws-sdk/credential-providers](https://www.npmjs.com/package/@aws-sdk/credential-providers) instead.``` + +## @aws-sdk/credential-provider-node - 3.972.39 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/credential-provider-process - 3.972.34 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/credential-provider-sso - 3.972.38 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/credential-provider-web-identity - 3.972.38 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/credential-providers - 3.1044.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/eventstream-handler-node - 3.972.14 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/middleware-eventstream - 3.972.10 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/middleware-host-header - 3.972.10 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/middleware-logger - 3.972.10 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/middleware-recursion-detection - 3.972.11 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/middleware-sdk-s3 - 3.972.37 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/middleware-user-agent - 3.972.38 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/middleware-websocket - 3.972.16 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/nested-clients - 3.997.6 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +# @aws-sdk/nested-clients + +## Description + +This is an internal package. Do not install this as a direct dependency. + +This package contains separate internal implementations of the STS and SSO-OIDC AWS SDK clients +to be used by the AWS SDK credential providers to break a cyclic dependency. + +### Bundlers + +This package may be marked as external if you do not use STS nor SSO-OIDC +in your credential resolution process.``` + +## @aws-sdk/region-config-resolver - 3.972.13 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/signature-v4-multi-region - 3.996.25 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/token-providers - 3.1041.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/token-providers - 3.1042.0 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/types - 3.973.8 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/util-arn-parser - 3.972.3 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/util-endpoints - 3.996.8 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/util-format-url - 3.972.10 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/util-locate-window - 3.965.5 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/util-user-agent-browser - 3.972.10 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/util-user-agent-node - 3.973.24 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws-sdk/xml-builder - 3.972.22 +**Repository URL**: https://github.com/aws/aws-sdk-js-v3 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @aws/bedrock-token-generator - 1.1.0 +**Repository URL**: https://github.com/aws/aws-bedrock-token-generator-js +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(which shall not include communications that are clearly marked or +otherwise designated in writing by the copyright owner as "Not a Work"). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based upon (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and derivative works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control +systems, and issue tracking systems that are managed by, or on behalf +of, the Licensor for the purpose of discussing and improving the Work, +but excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to use, reproduce, modify, distribute, and prepare +Derivative Works of, publicly display, publicly perform, sublicense, +and distribute the Work and such Derivative Works in Source or Object +form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, trademark, patent, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright notice to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Support. You may choose to offer, and to +charge a fee for, warranty, support, indemnity or other liability +obligations and/or rights consistent with this License. However, in +accepting such obligations, You may act only on Your own behalf and on +Your sole responsibility, not on behalf of any other Contributor, and +only if You agree to indemnify, defend, and hold each Contributor +harmless for any liability incurred by, or claims asserted against, +such Contributor by reason of your accepting any such warranty or support. + +END OF TERMS AND CONDITIONS + +Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.``` + +## @aws/lambda-invoke-store - 0.2.4 +**Repository URL**: https://github.com/awslabs/aws-lambda-invoke-store +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability.``` + +## @babel/runtime - 7.29.2 +**Repository URL**: https://github.com/babel/babel +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + ## @bcoe/v8-coverage - 1.0.2 **Repository URL**: https://github.com/bcoe/v8-coverage **License Type(s)**: MIT @@ -18,7 +8360,27575 @@ Please do not edit it directly. Regenerate with `./scripts/generate_attributions ``` The MIT License (MIT) -Copyright © 2015-2017 Charles Samborski +Copyright © 2015-2017 Charles Samborski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @borewit/text-codec - 0.2.2 +**Repository URL**: https://github.com/Borewit/text-codec +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright © 2025 Borewit + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @clack/core - 1.3.0 +**Repository URL**: https://github.com/bombshell-dev/clack +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Nate Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @clack/prompts - 1.3.0 +**Repository URL**: https://github.com/bombshell-dev/clack +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Nate Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @gerrit0/mini-shiki - 3.23.0 +**Repository URL**: https://github.com/Gerrit0/mini-shiki +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 Gerrit Birkeland + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @google/genai - 1.52.0 +**Repository URL**: https://github.com/googleapis/js-genai +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @grammyjs/runner - 2.0.3 +**Repository URL**: https://github.com/grammyjs/runner +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021-2023 KnorpelSenf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @grammyjs/transformer-throttler - 1.2.1 +**Repository URL**: https://github.com/grammyjs/transformer-throttler +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2022 grammyjs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @grammyjs/types - 3.26.0 +**Repository URL**: https://github.com/grammyjs/types +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021-2024 KnorpelSenf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @homebridge/ciao - 1.3.8 +**Repository URL**: https://github.com/homebridge/ciao +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2020 Andreas Bauer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @hono/node-server - 1.19.14 +**Repository URL**: https://github.com/honojs/node-server +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2022 - present, Yusuke Wada and Hono contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @isaacs/fs-minipass - 4.0.1 +**Repository URL**: https://github.com/npm/fs-minipass +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## @istanbuljs/schema - 0.1.3 +**Repository URL**: https://github.com/istanbuljs/schema +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2019 CFWare, LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @jridgewell/resolve-uri - 3.1.2 +**Repository URL**: https://github.com/jridgewell/resolve-uri +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2019 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @jridgewell/sourcemap-codec - 1.5.5 +**Repository URL**: https://github.com/jridgewell/sourcemaps +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @jridgewell/trace-mapping - 0.3.31 +**Repository URL**: https://github.com/jridgewell/sourcemaps +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @lydell/node-pty - 1.2.0-beta.12 +**Repository URL**: https://github.com/lydell/node-pty +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2026 Simon Lydell + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @mariozechner/jiti - 2.6.5 +**Repository URL**: https://github.com/badlogic/jiti +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @mariozechner/pi-agent-core - 0.73.0 +**Repository URL**: https://github.com/badlogic/pi-mono +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# @mariozechner/pi-agent-core + +Stateful agent with tool execution and event streaming. Built on `@mariozechner/pi-ai`. + +## Installation + +```bash +npm install @mariozechner/pi-agent-core +``` + +## Quick Start + +```typescript +import { Agent } from "@mariozechner/pi-agent-core"; +import { getModel } from "@mariozechner/pi-ai"; + +const agent = new Agent({ + initialState: { + systemPrompt: "You are a helpful assistant.", + model: getModel("anthropic", "claude-sonnet-4-20250514"), + }, +}); + +agent.subscribe((event) => { + if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") { + // Stream just the new text chunk + process.stdout.write(event.assistantMessageEvent.delta); + } +}); + +await agent.prompt("Hello!"); +``` + +## Core Concepts + +### AgentMessage vs LLM Message + +The agent works with `AgentMessage`, a flexible type that can include: +- Standard LLM messages (`user`, `assistant`, `toolResult`) +- Custom app-specific message types via declaration merging + +LLMs only understand `user`, `assistant`, and `toolResult`. The `convertToLlm` function bridges this gap by filtering and transforming messages before each LLM call. + +### Message Flow + +``` +AgentMessage[] → transformContext() → AgentMessage[] → convertToLlm() → Message[] → LLM + (optional) (required) +``` + +1. **transformContext**: Prune old messages, inject external context +2. **convertToLlm**: Filter out UI-only messages, convert custom types to LLM format + +## Event Flow + +The agent emits events for UI updates. Understanding the event sequence helps build responsive interfaces. + +### prompt() Event Sequence + +When you call `prompt("Hello")`: + +``` +prompt("Hello") +├─ agent_start +├─ turn_start +├─ message_start { message: userMessage } // Your prompt +├─ message_end { message: userMessage } +├─ message_start { message: assistantMessage } // LLM starts responding +├─ message_update { message: partial... } // Streaming chunks +├─ message_update { message: partial... } +├─ message_end { message: assistantMessage } // Complete response +├─ turn_end { message, toolResults: [] } +└─ agent_end { messages: [...] } +``` + +### With Tool Calls + +If the assistant calls tools, the loop continues: + +``` +prompt("Read config.json") +├─ agent_start +├─ turn_start +├─ message_start/end { userMessage } +├─ message_start { assistantMessage with toolCall } +├─ message_update... +├─ message_end { assistantMessage } +├─ tool_execution_start { toolCallId, toolName, args } +├─ tool_execution_update { partialResult } // If tool streams +├─ tool_execution_end { toolCallId, result } +├─ message_start/end { toolResultMessage } +├─ turn_end { message, toolResults: [toolResult] } +│ +├─ turn_start // Next turn +├─ message_start { assistantMessage } // LLM responds to tool result +├─ message_update... +├─ message_end +├─ turn_end +└─ agent_end +``` + +Tool execution mode is configurable: + +- `parallel` (default): preflight tool calls sequentially, execute allowed tools concurrently, emit `tool_execution_end` as soon as each tool is finalized, then emit toolResult messages and `turn_end.toolResults` in assistant source order +- `sequential`: execute tool calls one by one, matching the historical behavior + +In parallel mode, tool completion events follow tool completion order, but persisted toolResult messages still follow assistant source order. + +The mode can be set globally via `toolExecution` in the agent config, or per-tool via `executionMode` on `AgentTool`. If any tool call in a batch targets a tool with `executionMode: "sequential"`, the entire batch executes sequentially regardless of the global setting. + +The `beforeToolCall` hook runs after `tool_execution_start` and validated argument parsing. It can block execution. The `afterToolCall` hook runs after tool execution finishes and before `tool_execution_end` and final tool result message events are emitted. + +Tools can also return `terminate: true` to hint that the automatic follow-up LLM call should be skipped. The loop only stops early when every finalized tool result in that batch sets `terminate: true`. Mixed batches continue normally. + +Low-level loop callers can set `shouldStopAfterTurn` to stop gracefully after the current turn completes: + +```typescript +const stream = agentLoop(prompts, context, { + model, + convertToLlm, + shouldStopAfterTurn: async ({ message, toolResults, context, newMessages }) => { + return shouldCompactBeforeNextTurn(context.messages); + }, +}); +``` + +`shouldStopAfterTurn` runs after `turn_end` is emitted and after the assistant response and any tool executions have completed normally. If it returns `true`, the loop emits `agent_end` and exits before polling steering or follow-up queues, and before starting another LLM call. It does not abort the provider stream, does not cancel running tools, and does not alter the assistant message stop reason. + +When you use the `Agent` class, assistant `message_end` processing is treated as a barrier before tool preflight begins. That means `beforeToolCall` sees agent state that already includes the assistant message that requested the tool call. + +### continue() Event Sequence + +`continue()` resumes from existing context without adding a new message. Use it for retries after errors. + +```typescript +// After an error, retry from current state +await agent.continue(); +``` + +The last message in context must be `user` or `toolResult` (not `assistant`). + +### Event Types + +| Event | Description | +|-------|-------------| +| `agent_start` | Agent begins processing | +| `agent_end` | Final event for the run. Awaited subscribers for this event still count toward settlement | +| `turn_start` | New turn begins (one LLM call + tool executions) | +| `turn_end` | Turn completes with assistant message and tool results | +| `message_start` | Any message begins (user, assistant, toolResult) | +| `message_update` | **Assistant only.** Includes `assistantMessageEvent` with delta | +| `message_end` | Message completes | +| `tool_execution_start` | Tool begins | +| `tool_execution_update` | Tool streams progress | +| `tool_execution_end` | Tool completes | + +`Agent.subscribe()` listeners are awaited in registration order. `agent_end` means no more loop events will be emitted, but `await agent.waitForIdle()` and `await agent.prompt(...)` only settle after awaited `agent_end` listeners finish. + +## Agent Options + +```typescript +const agent = new Agent({ + // Initial state + initialState: { + systemPrompt: string, + model: Model, + thinkingLevel: "off" | "minimal" | "low" | "medium" | "high" | "xhigh", + tools: AgentTool[], + messages: AgentMessage[], + }, + + // Convert AgentMessage[] to LLM Message[] (required for custom message types) + convertToLlm: (messages) => messages.filter(...), + + // Transform context before convertToLlm (for pruning, compaction) + transformContext: async (messages, signal) => pruneOldMessages(messages), + + // Steering mode: "one-at-a-time" (default) or "all" + steeringMode: "one-at-a-time", + + // Follow-up mode: "one-at-a-time" (default) or "all" + followUpMode: "one-at-a-time", + + // Custom stream function (for proxy backends) + streamFn: streamProxy, + + // Session ID for provider caching + sessionId: "session-123", + + // Dynamic API key resolution (for expiring OAuth tokens) + getApiKey: async (provider) => refreshToken(), + + // Tool execution mode: "parallel" (default) or "sequential" + toolExecution: "parallel", + + // Preflight each tool call after args are validated. Can block execution. + beforeToolCall: async ({ toolCall, args, context }) => { + if (toolCall.name === "bash") { + return { block: true, reason: "bash is disabled" }; + } + }, + + // Postprocess each tool result before final tool events are emitted. + afterToolCall: async ({ toolCall, result, isError, context }) => { + if (toolCall.name === "notify_done" && !isError) { + return { terminate: true }; + } + if (!isError) { + return { details: { ...result.details, audited: true } }; + } + }, + + // Custom thinking budgets for token-based providers + thinkingBudgets: { + minimal: 128, + low: 512, + medium: 1024, + high: 2048, + }, +}); +``` + +## Agent State + +```typescript +interface AgentState { + systemPrompt: string; + model: Model; + thinkingLevel: ThinkingLevel; + tools: AgentTool[]; + messages: AgentMessage[]; + readonly isStreaming: boolean; + readonly streamingMessage?: AgentMessage; + readonly pendingToolCalls: ReadonlySet; + readonly errorMessage?: string; +} +``` + +Access state via `agent.state`. + +Assigning `agent.state.tools = [...]` or `agent.state.messages = [...]` copies the top-level array before storing it. Mutating the returned array mutates the current agent state. + +During streaming, `agent.state.streamingMessage` contains the current partial assistant message. + +`agent.state.isStreaming` remains `true` until the run fully settles, including awaited `agent_end` subscribers. + +## Methods + +### Prompting + +```typescript +// Text prompt +await agent.prompt("Hello"); + +// With images +await agent.prompt("What's in this image?", [ + { type: "image", data: base64Data, mimeType: "image/jpeg" } +]); + +// AgentMessage directly +await agent.prompt({ role: "user", content: "Hello", timestamp: Date.now() }); + +// Continue from current context (last message must be user or toolResult) +await agent.continue(); +``` + +### State Management + +```typescript +agent.state.systemPrompt = "New prompt"; +agent.state.model = getModel("openai", "gpt-4o"); +agent.state.thinkingLevel = "medium"; +agent.state.tools = [myTool]; +agent.toolExecution = "sequential"; +agent.beforeToolCall = async ({ toolCall }) => undefined; +agent.afterToolCall = async ({ toolCall, result }) => undefined; +agent.state.messages = newMessages; // top-level array is copied +agent.state.messages.push(message); +agent.reset(); +``` + +### Session and Thinking Budgets + +```typescript +agent.sessionId = "session-123"; + +agent.thinkingBudgets = { + minimal: 128, + low: 512, + medium: 1024, + high: 2048, +}; +``` + +### Control + +```typescript +agent.abort(); // Cancel current operation +await agent.waitForIdle(); // Wait for completion +``` + +### Events + +```typescript +const unsubscribe = agent.subscribe(async (event, signal) => { + if (event.type === "agent_end") { + // Final barrier work for the run + await flushSessionState(signal); + } +}); +unsubscribe(); +``` + +## Steering and Follow-up + +Steering messages let you interrupt the agent while tools are running. Follow-up messages let you queue work after the agent would otherwise stop. + +```typescript +agent.steeringMode = "one-at-a-time"; +agent.followUpMode = "one-at-a-time"; + +// While agent is running tools +agent.steer({ + role: "user", + content: "Stop! Do this instead.", + timestamp: Date.now(), +}); + +// After the agent finishes its current work +agent.followUp({ + role: "user", + content: "Also summarize the result.", + timestamp: Date.now(), +}); + +const steeringMode = agent.steeringMode; +const followUpMode = agent.followUpMode; + +agent.clearSteeringQueue(); +agent.clearFollowUpQueue(); +agent.clearAllQueues(); +``` + +Use clearSteeringQueue, clearFollowUpQueue, or clearAllQueues to drop queued messages. + +When steering messages are detected after a turn completes: +1. All tool calls from the current assistant message have already finished +2. Steering messages are injected +3. The LLM responds on the next turn + +Follow-up messages are checked only when there are no more tool calls and no steering messages. If any are queued, they are injected and another turn runs. + +## Custom Message Types + +Extend `AgentMessage` via declaration merging: + +```typescript +declare module "@mariozechner/pi-agent-core" { + interface CustomAgentMessages { + notification: { role: "notification"; text: string; timestamp: number }; + } +} + +// Now valid +const msg: AgentMessage = { role: "notification", text: "Info", timestamp: Date.now() }; +``` + +Handle custom types in `convertToLlm`: + +```typescript +const agent = new Agent({ + convertToLlm: (messages) => messages.flatMap(m => { + if (m.role === "notification") return []; // Filter out + return [m]; + }), +}); +``` + +## Tools + +Define tools using `AgentTool`: + +```typescript +import { Type } from "typebox"; + +const readFileTool: AgentTool = { + name: "read_file", + label: "Read File", // For UI display + description: "Read a file's contents", + parameters: Type.Object({ + path: Type.String({ description: "File path" }), + }), + // Override execution mode for this tool (optional). + // "sequential" forces the entire batch to run one at a time. + // "parallel" allows concurrent execution with other tool calls. + // If omitted, the global toolExecution config applies. + executionMode: "sequential", + execute: async (toolCallId, params, signal, onUpdate) => { + const content = await fs.readFile(params.path, "utf-8"); + + // Optional: stream progress + onUpdate?.({ content: [{ type: "text", text: "Reading..." }], details: {} }); + + // Optional: add `terminate: true` here to skip the automatic follow-up LLM call + // when every finalized tool result in the batch does the same. + return { + content: [{ type: "text", text: content }], + details: { path: params.path, size: content.length }, + }; + }, +}; + +agent.state.tools = [readFileTool]; +``` + +### Error Handling + +**Throw an error** when a tool fails. Do not return error messages as content. + +```typescript +execute: async (toolCallId, params, signal, onUpdate) => { + if (!fs.existsSync(params.path)) { + throw new Error(`File not found: ${params.path}`); + } + // Return content only on success + return { content: [{ type: "text", text: "..." }] }; +} +``` + +Thrown errors are caught by the agent and reported to the LLM as tool errors with `isError: true`. + +Return `terminate: true` from `execute()` or `afterToolCall` to hint that the agent should stop after the current tool batch. This only takes effect when every finalized tool result in the batch is terminating. The hint is runtime-only; emitted `toolResult` transcript messages remain standard LLM tool results. + +## Proxy Usage + +For browser apps that proxy through a backend: + +```typescript +import { Agent, streamProxy } from "@mariozechner/pi-agent-core"; + +const agent = new Agent({ + streamFn: (model, context, options) => + streamProxy(model, context, { + ...options, + authToken: "...", + proxyUrl: "https://your-server.com", + }), +}); +``` + +## Low-Level API + +For direct control without the Agent class: + +```typescript +import { agentLoop, agentLoopContinue } from "@mariozechner/pi-agent-core"; + +const context: AgentContext = { + systemPrompt: "You are helpful.", + messages: [], + tools: [], +}; + +const config: AgentLoopConfig = { + model: getModel("openai", "gpt-4o"), + convertToLlm: (msgs) => msgs.filter(m => ["user", "assistant", "toolResult"].includes(m.role)), + toolExecution: "parallel", // overridden by per-tool executionMode if set + beforeToolCall: async ({ toolCall, args, context }) => undefined, + afterToolCall: async ({ toolCall, result, isError, context }) => undefined, +}; + +const userMessage = { role: "user", content: "Hello", timestamp: Date.now() }; + +for await (const event of agentLoop([userMessage], context, config)) { + console.log(event.type); +} + +// Continue from existing context +for await (const event of agentLoopContinue(context, config)) { + console.log(event.type); +} +``` + +These low-level streams are observational. They preserve event order, but they do not wait for your async event handling to settle before later producer phases continue. If you need message processing to act as a barrier before tool preflight, use the `Agent` class instead of raw `agentLoop()` or `agentLoopContinue()`. + +## License + +MIT``` + +## @mariozechner/pi-ai - 0.73.0 +**Repository URL**: https://github.com/badlogic/pi-mono +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# @mariozechner/pi-ai + +Unified LLM API with automatic model discovery, provider configuration, token and cost tracking, and simple context persistence and hand-off to other models mid-session. + +**Note**: This library only includes models that support tool calling (function calling), as this is essential for agentic workflows. + +## Table of Contents + +- [Supported Providers](#supported-providers) +- [Installation](#installation) +- [Quick Start](#quick-start) +- [Tools](#tools) + - [Defining Tools](#defining-tools) + - [Handling Tool Calls](#handling-tool-calls) + - [Streaming Tool Calls with Partial JSON](#streaming-tool-calls-with-partial-json) + - [Validating Tool Arguments](#validating-tool-arguments) + - [Complete Event Reference](#complete-event-reference) +- [Image Input](#image-input) +- [Thinking/Reasoning](#thinkingreasoning) + - [Unified Interface](#unified-interface-streamsimplecompletesimple) + - [Provider-Specific Options](#provider-specific-options-streamcomplete) + - [Streaming Thinking Content](#streaming-thinking-content) +- [Stop Reasons](#stop-reasons) +- [Error Handling](#error-handling) + - [Aborting Requests](#aborting-requests) + - [Continuing After Abort](#continuing-after-abort) +- [APIs, Models, and Providers](#apis-models-and-providers) + - [Providers and Models](#providers-and-models) + - [Querying Providers and Models](#querying-providers-and-models) + - [Custom Models](#custom-models) + - [OpenAI Compatibility Settings](#openai-compatibility-settings) + - [Type Safety](#type-safety) +- [Cross-Provider Handoffs](#cross-provider-handoffs) +- [Context Serialization](#context-serialization) +- [Browser Usage](#browser-usage) + - [Browser Compatibility Notes](#browser-compatibility-notes) + - [Environment Variables](#environment-variables-nodejs-only) + - [Checking Environment Variables](#checking-environment-variables) +- [OAuth Providers](#oauth-providers) + - [Vertex AI](#vertex-ai) + - [CLI Login](#cli-login) + - [Programmatic OAuth](#programmatic-oauth) + - [Login Flow Example](#login-flow-example) + - [Using OAuth Tokens](#using-oauth-tokens) + - [Provider Notes](#provider-notes) +- [License](#license) + +## Supported Providers + +- **OpenAI** +- **Azure OpenAI (Responses)** +- **OpenAI Codex** (ChatGPT Plus/Pro subscription, requires OAuth, see below) +- **DeepSeek** +- **Anthropic** +- **Google** +- **Vertex AI** (Gemini via Vertex AI) +- **Mistral** +- **Groq** +- **Cerebras** +- **Cloudflare AI Gateway** +- **Cloudflare Workers AI** +- **xAI** +- **OpenRouter** +- **Vercel AI Gateway** +- **MiniMax** +- **GitHub Copilot** (requires OAuth, see below) +- **Amazon Bedrock** +- **OpenCode Zen** +- **OpenCode Go** +- **Fireworks** (uses Anthropic-compatible API) +- **Kimi For Coding** (Moonshot AI, uses Anthropic-compatible API) +- **Xiaomi MiMo** (uses Anthropic-compatible API; defaults to API billing endpoint, with separate Token Plan providers for `cn`/`ams`/`sgp` regions) +- **Any OpenAI-compatible API**: Ollama, vLLM, LM Studio, etc. + +## Installation + +```bash +npm install @mariozechner/pi-ai +``` + +TypeBox exports are re-exported from `@mariozechner/pi-ai`: `Type`, `Static`, and `TSchema`. + +## Quick Start + +```typescript +import { Type, getModel, stream, complete, Context, Tool, StringEnum } from '@mariozechner/pi-ai'; + +// Fully typed with auto-complete support for both providers and models +const model = getModel('openai', 'gpt-4o-mini'); + +// Define tools with TypeBox schemas for type safety and validation +const tools: Tool[] = [{ + name: 'get_time', + description: 'Get the current time', + parameters: Type.Object({ + timezone: Type.Optional(Type.String({ description: 'Optional timezone (e.g., America/New_York)' })) + }) +}]; + +// Build a conversation context (easily serializable and transferable between models) +const context: Context = { + systemPrompt: 'You are a helpful assistant.', + messages: [{ role: 'user', content: 'What time is it?' }], + tools +}; + +// Option 1: Streaming with all event types +const s = stream(model, context); + +for await (const event of s) { + switch (event.type) { + case 'start': + console.log(`Starting with ${event.partial.model}`); + break; + case 'text_start': + console.log('\n[Text started]'); + break; + case 'text_delta': + process.stdout.write(event.delta); + break; + case 'text_end': + console.log('\n[Text ended]'); + break; + case 'thinking_start': + console.log('[Model is thinking...]'); + break; + case 'thinking_delta': + process.stdout.write(event.delta); + break; + case 'thinking_end': + console.log('[Thinking complete]'); + break; + case 'toolcall_start': + console.log(`\n[Tool call started: index ${event.contentIndex}]`); + break; + case 'toolcall_delta': + // Partial tool arguments are being streamed + const partialCall = event.partial.content[event.contentIndex]; + if (partialCall.type === 'toolCall') { + console.log(`[Streaming args for ${partialCall.name}]`); + } + break; + case 'toolcall_end': + console.log(`\nTool called: ${event.toolCall.name}`); + console.log(`Arguments: ${JSON.stringify(event.toolCall.arguments)}`); + break; + case 'done': + console.log(`\nFinished: ${event.reason}`); + break; + case 'error': + console.error(`Error: ${event.error}`); + break; + } +} + +// Get the final message after streaming, add it to the context +const finalMessage = await s.result(); +context.messages.push(finalMessage); + +// Handle tool calls if any +const toolCalls = finalMessage.content.filter(b => b.type === 'toolCall'); +for (const call of toolCalls) { + // Execute the tool + const result = call.name === 'get_time' + ? new Date().toLocaleString('en-US', { + timeZone: call.arguments.timezone || 'UTC', + dateStyle: 'full', + timeStyle: 'long' + }) + : 'Unknown tool'; + + // Add tool result to context (supports text and images) + context.messages.push({ + role: 'toolResult', + toolCallId: call.id, + toolName: call.name, + content: [{ type: 'text', text: result }], + isError: false, + timestamp: Date.now() + }); +} + +// Continue if there were tool calls +if (toolCalls.length > 0) { + const continuation = await complete(model, context); + context.messages.push(continuation); + console.log('After tool execution:', continuation.content); +} + +console.log(`Total tokens: ${finalMessage.usage.input} in, ${finalMessage.usage.output} out`); +console.log(`Cost: $${finalMessage.usage.cost.total.toFixed(4)}`); + +// Option 2: Get complete response without streaming +const response = await complete(model, context); + +for (const block of response.content) { + if (block.type === 'text') { + console.log(block.text); + } else if (block.type === 'toolCall') { + console.log(`Tool: ${block.name}(${JSON.stringify(block.arguments)})`); + } +} +``` + +## Tools + +Tools enable LLMs to interact with external systems. This library uses TypeBox schemas for type-safe tool definitions with automatic validation using TypeBox's built-in validator and value conversion utilities. TypeBox schemas can be serialized and deserialized as plain JSON, making them ideal for distributed systems. + +### Defining Tools + +```typescript +import { Type, Tool, StringEnum } from '@mariozechner/pi-ai'; + +// Define tool parameters with TypeBox +const weatherTool: Tool = { + name: 'get_weather', + description: 'Get current weather for a location', + parameters: Type.Object({ + location: Type.String({ description: 'City name or coordinates' }), + units: StringEnum(['celsius', 'fahrenheit'], { default: 'celsius' }) + }) +}; + +// Note: For Google API compatibility, use StringEnum helper instead of Type.Enum +// Type.Enum generates anyOf/const patterns that Google doesn't support + +const bookMeetingTool: Tool = { + name: 'book_meeting', + description: 'Schedule a meeting', + parameters: Type.Object({ + title: Type.String({ minLength: 1 }), + startTime: Type.String({ format: 'date-time' }), + endTime: Type.String({ format: 'date-time' }), + attendees: Type.Array(Type.String({ format: 'email' }), { minItems: 1 }) + }) +}; +``` + +### Handling Tool Calls + +Tool results use content blocks and can include both text and images: + +```typescript +import { readFileSync } from 'fs'; + +const context: Context = { + messages: [{ role: 'user', content: 'What is the weather in London?' }], + tools: [weatherTool] +}; + +const response = await complete(model, context); + +// Check for tool calls in the response +for (const block of response.content) { + if (block.type === 'toolCall') { + // Execute your tool with the arguments + // See "Validating Tool Arguments" section for validation + const result = await executeWeatherApi(block.arguments); + + // Add tool result with text content + context.messages.push({ + role: 'toolResult', + toolCallId: block.id, + toolName: block.name, + content: [{ type: 'text', text: JSON.stringify(result) }], + isError: false, + timestamp: Date.now() + }); + } +} + +// Tool results can also include images (for vision-capable models) +const imageBuffer = readFileSync('chart.png'); +context.messages.push({ + role: 'toolResult', + toolCallId: 'tool_xyz', + toolName: 'generate_chart', + content: [ + { type: 'text', text: 'Generated chart showing temperature trends' }, + { type: 'image', data: imageBuffer.toString('base64'), mimeType: 'image/png' } + ], + isError: false, + timestamp: Date.now() +}); +``` + +### Streaming Tool Calls with Partial JSON + +During streaming, tool call arguments are progressively parsed as they arrive. This enables real-time UI updates before the complete arguments are available: + +```typescript +const s = stream(model, context); + +for await (const event of s) { + if (event.type === 'toolcall_delta') { + const toolCall = event.partial.content[event.contentIndex]; + + // toolCall.arguments contains partially parsed JSON during streaming + // This allows for progressive UI updates + if (toolCall.type === 'toolCall' && toolCall.arguments) { + // BE DEFENSIVE: arguments may be incomplete + // Example: Show file path being written even before content is complete + if (toolCall.name === 'write_file' && toolCall.arguments.path) { + console.log(`Writing to: ${toolCall.arguments.path}`); + + // Content might be partial or missing + if (toolCall.arguments.content) { + console.log(`Content preview: ${toolCall.arguments.content.substring(0, 100)}...`); + } + } + } + } + + if (event.type === 'toolcall_end') { + // Here toolCall.arguments is complete (but not yet validated) + const toolCall = event.toolCall; + console.log(`Tool completed: ${toolCall.name}`, toolCall.arguments); + } +} +``` + +**Important notes about partial tool arguments:** +- During `toolcall_delta` events, `arguments` contains the best-effort parse of partial JSON +- Fields may be missing or incomplete - always check for existence before use +- String values may be truncated mid-word +- Arrays may be incomplete +- Nested objects may be partially populated +- At minimum, `arguments` will be an empty object `{}`, never `undefined` +- The Google provider does not support function call streaming. Instead, you will receive a single `toolcall_delta` event with the full arguments. + +### Validating Tool Arguments + +When using `agentLoop`, tool arguments are automatically validated against your TypeBox schemas before execution. If validation fails, the error is returned to the model as a tool result, allowing it to retry. + +When implementing your own tool execution loop with `stream()` or `complete()`, use `validateToolCall` to validate arguments before passing them to your tools: + +```typescript +import { stream, validateToolCall, Tool } from '@mariozechner/pi-ai'; + +const tools: Tool[] = [weatherTool, calculatorTool]; +const s = stream(model, { messages, tools }); + +for await (const event of s) { + if (event.type === 'toolcall_end') { + const toolCall = event.toolCall; + + try { + // Validate arguments against the tool's schema (throws on invalid args) + const validatedArgs = validateToolCall(tools, toolCall); + const result = await executeMyTool(toolCall.name, validatedArgs); + // ... add tool result to context + } catch (error) { + // Validation failed - return error as tool result so model can retry + context.messages.push({ + role: 'toolResult', + toolCallId: toolCall.id, + toolName: toolCall.name, + content: [{ type: 'text', text: error.message }], + isError: true, + timestamp: Date.now() + }); + } + } +} +``` + +### Complete Event Reference + +All streaming events emitted during assistant message generation: + +| Event Type | Description | Key Properties | +|------------|-------------|----------------| +| `start` | Stream begins | `partial`: Initial assistant message structure | +| `text_start` | Text block starts | `contentIndex`: Position in content array | +| `text_delta` | Text chunk received | `delta`: New text, `contentIndex`: Position | +| `text_end` | Text block complete | `content`: Full text, `contentIndex`: Position | +| `thinking_start` | Thinking block starts | `contentIndex`: Position in content array | +| `thinking_delta` | Thinking chunk received | `delta`: New text, `contentIndex`: Position | +| `thinking_end` | Thinking block complete | `content`: Full thinking, `contentIndex`: Position | +| `toolcall_start` | Tool call begins | `contentIndex`: Position in content array | +| `toolcall_delta` | Tool arguments streaming | `delta`: JSON chunk, `partial.content[contentIndex].arguments`: Partial parsed args | +| `toolcall_end` | Tool call complete | `toolCall`: Complete validated tool call with `id`, `name`, `arguments` | +| `done` | Stream complete | `reason`: Stop reason ("stop", "length", "toolUse"), `message`: Final assistant message | +| `error` | Error occurred | `reason`: Error type ("error" or "aborted"), `error`: AssistantMessage with partial content | + +## Image Input + +Models with vision capabilities can process images. You can check if a model supports images via the `input` property. If you pass images to a non-vision model, they are silently ignored. + +```typescript +import { readFileSync } from 'fs'; +import { getModel, complete } from '@mariozechner/pi-ai'; + +const model = getModel('openai', 'gpt-4o-mini'); + +// Check if model supports images +if (model.input.includes('image')) { + console.log('Model supports vision'); +} + +const imageBuffer = readFileSync('image.png'); +const base64Image = imageBuffer.toString('base64'); + +const response = await complete(model, { + messages: [{ + role: 'user', + content: [ + { type: 'text', text: 'What is in this image?' }, + { type: 'image', data: base64Image, mimeType: 'image/png' } + ] + }] +}); + +// Access the response +for (const block of response.content) { + if (block.type === 'text') { + console.log(block.text); + } +} +``` + +## Thinking/Reasoning + +Many models support thinking/reasoning capabilities where they can show their internal thought process. You can check if a model supports reasoning via the `reasoning` property. If you pass reasoning options to a non-reasoning model, they are silently ignored. + +### Unified Interface (streamSimple/completeSimple) + +```typescript +import { getModel, streamSimple, completeSimple } from '@mariozechner/pi-ai'; + +// Many models across providers support thinking/reasoning +const model = getModel('anthropic', 'claude-sonnet-4-20250514'); +// or getModel('openai', 'gpt-5-mini'); +// or getModel('google', 'gemini-2.5-flash'); +// or getModel('xai', 'grok-code-fast-1'); +// or getModel('groq', 'openai/gpt-oss-20b'); +// or getModel('cerebras', 'gpt-oss-120b'); +// or getModel('openrouter', 'z-ai/glm-4.5v'); + +// Check if model supports reasoning +if (model.reasoning) { + console.log('Model supports reasoning/thinking'); +} + +// Use the simplified reasoning option +const response = await completeSimple(model, { + messages: [{ role: 'user', content: 'Solve: 2x + 5 = 13' }] +}, { + reasoning: 'medium' // 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' +}); + +// Access thinking and text blocks +for (const block of response.content) { + if (block.type === 'thinking') { + console.log('Thinking:', block.thinking); + } else if (block.type === 'text') { + console.log('Response:', block.text); + } +} +``` + +### Provider-Specific Options (stream/complete) + +For fine-grained control, use the provider-specific options: + +```typescript +import { getModel, complete } from '@mariozechner/pi-ai'; + +// OpenAI Reasoning (o1, o3, gpt-5) +const openaiModel = getModel('openai', 'gpt-5-mini'); +await complete(openaiModel, context, { + reasoningEffort: 'medium', + reasoningSummary: 'detailed' // OpenAI Responses API only +}); + +// Anthropic Thinking (Claude Sonnet 4) +const anthropicModel = getModel('anthropic', 'claude-sonnet-4-20250514'); +await complete(anthropicModel, context, { + thinkingEnabled: true, + thinkingBudgetTokens: 8192 // Optional token limit +}); + +// Google Gemini Thinking +const googleModel = getModel('google', 'gemini-2.5-flash'); +await complete(googleModel, context, { + thinking: { + enabled: true, + budgetTokens: 8192 // -1 for dynamic, 0 to disable + } +}); +``` + +### Streaming Thinking Content + +When streaming, thinking content is delivered through specific events: + +```typescript +const s = streamSimple(model, context, { reasoning: 'high' }); + +for await (const event of s) { + switch (event.type) { + case 'thinking_start': + console.log('[Model started thinking]'); + break; + case 'thinking_delta': + process.stdout.write(event.delta); // Stream thinking content + break; + case 'thinking_end': + console.log('\n[Thinking complete]'); + break; + } +} +``` + +## Stop Reasons + +Every `AssistantMessage` includes a `stopReason` field that indicates how the generation ended: + +- `"stop"` - Normal completion, the model finished its response +- `"length"` - Output hit the maximum token limit +- `"toolUse"` - Model is calling tools and expects tool results +- `"error"` - An error occurred during generation +- `"aborted"` - Request was cancelled via abort signal + +`AssistantMessage` may also include `responseId`, a provider-specific upstream response or message identifier when the underlying API exposes one. Do not assume it is always present across providers. + +## Error Handling + +When a request ends with an error (including aborts and tool call validation errors), the streaming API emits an error event: + +```typescript +// In streaming +for await (const event of stream) { + if (event.type === 'error') { + // event.reason is either "error" or "aborted" + // event.error is the AssistantMessage with partial content + console.error(`Error (${event.reason}):`, event.error.errorMessage); + console.log('Partial content:', event.error.content); + } +} + +// The final message will have the error details +const message = await stream.result(); +if (message.stopReason === 'error' || message.stopReason === 'aborted') { + console.error('Request failed:', message.errorMessage); + // message.content contains any partial content received before the error + // message.usage contains partial token counts and costs +} +``` + +### Aborting Requests + +The abort signal allows you to cancel in-progress requests. Aborted requests have `stopReason === 'aborted'`: + +```typescript +import { getModel, stream } from '@mariozechner/pi-ai'; + +const model = getModel('openai', 'gpt-4o-mini'); +const controller = new AbortController(); + +// Abort after 2 seconds +setTimeout(() => controller.abort(), 2000); + +const s = stream(model, { + messages: [{ role: 'user', content: 'Write a long story' }] +}, { + signal: controller.signal +}); + +for await (const event of s) { + if (event.type === 'text_delta') { + process.stdout.write(event.delta); + } else if (event.type === 'error') { + // event.reason tells you if it was "error" or "aborted" + console.log(`${event.reason === 'aborted' ? 'Aborted' : 'Error'}:`, event.error.errorMessage); + } +} + +// Get results (may be partial if aborted) +const response = await s.result(); +if (response.stopReason === 'aborted') { + console.log('Request was aborted:', response.errorMessage); + console.log('Partial content received:', response.content); + console.log('Tokens used:', response.usage); +} +``` + +### Continuing After Abort + +Aborted messages can be added to the conversation context and continued in subsequent requests: + +```typescript +const context = { + messages: [ + { role: 'user', content: 'Explain quantum computing in detail' } + ] +}; + +// First request gets aborted after 2 seconds +const controller1 = new AbortController(); +setTimeout(() => controller1.abort(), 2000); + +const partial = await complete(model, context, { signal: controller1.signal }); + +// Add the partial response to context +context.messages.push(partial); +context.messages.push({ role: 'user', content: 'Please continue' }); + +// Continue the conversation +const continuation = await complete(model, context); +``` + +### Debugging Provider Payloads + +Use the `onPayload` callback to inspect the request payload sent to the provider. This is useful for debugging request formatting issues or provider validation errors. + +```typescript +const response = await complete(model, context, { + onPayload: (payload) => { + console.log('Provider payload:', JSON.stringify(payload, null, 2)); + } +}); +``` + +The callback is supported by `stream`, `complete`, `streamSimple`, and `completeSimple`. + +## APIs, Models, and Providers + +The library uses a registry of API implementations. Built-in APIs include: + +- **`anthropic-messages`**: Anthropic Messages API (`streamAnthropic`, `AnthropicOptions`) +- **`google-generative-ai`**: Google Generative AI API (`streamGoogle`, `GoogleOptions`) +- **`google-vertex`**: Google Vertex AI API (`streamGoogleVertex`, `GoogleVertexOptions`) +- **`mistral-conversations`**: Mistral Conversations API (`streamMistral`, `MistralOptions`) +- **`openai-completions`**: OpenAI Chat Completions API (`streamOpenAICompletions`, `OpenAICompletionsOptions`) +- **`openai-responses`**: OpenAI Responses API (`streamOpenAIResponses`, `OpenAIResponsesOptions`) +- **`openai-codex-responses`**: OpenAI Codex Responses API (`streamOpenAICodexResponses`, `OpenAICodexResponsesOptions`) +- **`azure-openai-responses`**: Azure OpenAI Responses API (`streamAzureOpenAIResponses`, `AzureOpenAIResponsesOptions`) +- **`bedrock-converse-stream`**: Amazon Bedrock Converse API (`streamBedrock`, `BedrockOptions`) + +### Faux provider for tests + +`registerFauxProvider()` registers a temporary in-memory provider for tests and demos. It is opt-in and not part of the built-in provider set. + +```typescript +import { + complete, + fauxAssistantMessage, + fauxText, + fauxThinking, + fauxToolCall, + registerFauxProvider, + stream, +} from '@mariozechner/pi-ai'; + +const registration = registerFauxProvider({ + tokensPerSecond: 50 // optional +}); + +const model = registration.getModel(); +const context = { + messages: [{ role: 'user', content: 'Summarize package.json and then call echo', timestamp: Date.now() }] +}; + +registration.setResponses([ + fauxAssistantMessage([ + fauxThinking('Need to inspect package metadata first.'), + fauxToolCall('echo', { text: 'package.json' }) + ], { stopReason: 'toolUse' }) +]); + +const first = await complete(model, context, { + sessionId: 'session-1', + cacheRetention: 'short' +}); +context.messages.push(first); + +context.messages.push({ + role: 'toolResult', + toolCallId: first.content.find((block) => block.type === 'toolCall')!.id, + toolName: 'echo', + content: [{ type: 'text', text: 'package.json contents here' }], + isError: false, + timestamp: Date.now() +}); + +registration.setResponses([ + fauxAssistantMessage([ + fauxThinking('Now I can summarize the tool output.'), + fauxText('Here is the summary.') + ]) +]); + +const s = stream(model, context); +for await (const event of s) { + console.log(event.type); +} + +// Optional: register multiple faux models for model-switching tests +const multiModel = registerFauxProvider({ + models: [ + { id: 'faux-fast', reasoning: false }, + { id: 'faux-thinker', reasoning: true } + ] +}); +const thinker = multiModel.getModel('faux-thinker'); + +console.log(thinker?.reasoning); +console.log(registration.getPendingResponseCount()); +console.log(registration.state.callCount); +registration.unregister(); +multiModel.unregister(); +``` + +Notes: +- Responses are consumed from a queue in request start order. +- If the queue is empty, the faux provider returns an assistant error message with `errorMessage: "No more faux responses queued"`. +- Use `registration.setResponses([...])` to replace the remaining queue and `registration.appendResponses([...])` to add more responses. +- `registration.models` exposes all registered faux models. `registration.getModel()` returns the first one, and `registration.getModel(id)` returns a specific one. +- Use `fauxAssistantMessage(...)` for scripted assistant replies. Use `fauxText(...)`, `fauxThinking(...)`, and `fauxToolCall(...)` to build content blocks without filling in low-level fields manually. +- `registration.unregister()` removes the temporary provider from the global API registry. +- Usage is estimated at roughly 1 token per 4 characters. When `sessionId` is present and `cacheRetention` is not `"none"`, prompt cache reads and writes are simulated automatically. +- Tool call arguments stream incrementally via `toolcall_delta` chunks. +- By default, each streamed chunk is emitted on its own microtask. Set `tokensPerSecond` to pace chunk delivery in real time. +- The intended use is one deterministic scripted flow per registration. If you need independent concurrent flows, register separate faux providers. + +### Providers and Models + +A **provider** offers models through a specific API. For example: +- **Anthropic** models use the `anthropic-messages` API +- **Google** models use the `google-generative-ai` API +- **OpenAI** models use the `openai-responses` API +- **Mistral** models use the `mistral-conversations` API +- **xAI, Cerebras, Groq, etc.** models use the `openai-completions` API (OpenAI-compatible) + +### Querying Providers and Models + +```typescript +import { getProviders, getModels, getModel } from '@mariozechner/pi-ai'; + +// Get all available providers +const providers = getProviders(); +console.log(providers); // ['openai', 'anthropic', 'google', 'xai', 'groq', ...] + +// Get all models from a provider (fully typed) +const anthropicModels = getModels('anthropic'); +for (const model of anthropicModels) { + console.log(`${model.id}: ${model.name}`); + console.log(` API: ${model.api}`); // 'anthropic-messages' + console.log(` Context: ${model.contextWindow} tokens`); + console.log(` Vision: ${model.input.includes('image')}`); + console.log(` Reasoning: ${model.reasoning}`); +} + +// Get a specific model (both provider and model ID are auto-completed in IDEs) +const model = getModel('openai', 'gpt-4o-mini'); +console.log(`Using ${model.name} via ${model.api} API`); +``` + +### Custom Models + +You can create custom models for local inference servers or custom endpoints: + +```typescript +import { Model, stream } from '@mariozechner/pi-ai'; + +// Example: Ollama using OpenAI-compatible API +const ollamaModel: Model<'openai-completions'> = { + id: 'llama-3.1-8b', + name: 'Llama 3.1 8B (Ollama)', + api: 'openai-completions', + provider: 'ollama', + baseUrl: 'http://localhost:11434/v1', + reasoning: false, + input: ['text'], + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + contextWindow: 128000, + maxTokens: 32000 +}; + +// Example: LiteLLM proxy with explicit compat settings +const litellmModel: Model<'openai-completions'> = { + id: 'gpt-4o', + name: 'GPT-4o (via LiteLLM)', + api: 'openai-completions', + provider: 'litellm', + baseUrl: 'http://localhost:4000/v1', + reasoning: false, + input: ['text', 'image'], + cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, + contextWindow: 128000, + maxTokens: 16384, + compat: { + supportsStore: false, // LiteLLM doesn't support the store field + } +}; + +// Example: Custom endpoint with headers (bypassing Cloudflare bot detection) +const proxyModel: Model<'anthropic-messages'> = { + id: 'claude-sonnet-4', + name: 'Claude Sonnet 4 (Proxied)', + api: 'anthropic-messages', + provider: 'custom-proxy', + baseUrl: 'https://proxy.example.com/v1', + reasoning: true, + input: ['text', 'image'], + cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, + contextWindow: 200000, + maxTokens: 8192, + headers: { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36', + 'X-Custom-Auth': 'bearer-token-here' + } +}; + +// Use the custom model +const response = await stream(ollamaModel, context, { + apiKey: 'dummy' // Ollama doesn't need a real key +}); +``` + +Some OpenAI-compatible servers do not understand the `developer` role used for reasoning-capable models. For those providers, set `compat.supportsDeveloperRole` to `false` so the system prompt is sent as a `system` message instead. If the server also does not support `reasoning_effort`, set `compat.supportsReasoningEffort` to `false` too. + +Use model-level `thinkingLevelMap` to describe model-specific thinking controls. Keys are pi thinking levels (`off`, `minimal`, `low`, `medium`, `high`, `xhigh`). Missing keys use provider defaults, string values are sent to the provider, and `null` marks a level unsupported. + +This commonly applies to Ollama, vLLM, SGLang, and similar OpenAI-compatible servers. You can set `compat` at the provider level or per model. + +```typescript +const ollamaReasoningModel: Model<'openai-completions'> = { + id: 'gpt-oss:20b', + name: 'GPT-OSS 20B (Ollama)', + api: 'openai-completions', + provider: 'ollama', + baseUrl: 'http://localhost:11434/v1', + reasoning: true, + input: ['text'], + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + contextWindow: 131072, + maxTokens: 32000, + thinkingLevelMap: { + minimal: null, + low: null, + medium: null, + high: 'high', + xhigh: null, + }, + compat: { + supportsDeveloperRole: false, + supportsReasoningEffort: false, + } +}; +``` + +### OpenAI Compatibility Settings + +The `openai-completions` API is implemented by many providers with minor differences. By default, the library auto-detects compatibility settings based on `baseUrl` for a small set of known OpenAI-compatible providers (Cerebras, xAI, Chutes, DeepSeek, zAi, OpenCode, Cloudflare Workers AI, etc.). For custom proxies or unknown endpoints, you can override these settings via the `compat` field. For `openai-responses` models, the compat field only supports Responses-specific flags. + +```typescript +interface OpenAICompletionsCompat { + supportsStore?: boolean; // Whether provider supports the `store` field (default: true) + supportsDeveloperRole?: boolean; // Whether provider supports `developer` role vs `system` (default: true) + supportsReasoningEffort?: boolean; // Whether provider supports `reasoning_effort` (default: true) + supportsUsageInStreaming?: boolean; // Whether provider supports `stream_options: { include_usage: true }` (default: true) + supportsStrictMode?: boolean; // Whether provider supports `strict` in tool definitions (default: true) + sendSessionAffinityHeaders?: boolean; // Whether to send `session_id`, `x-client-request-id`, and `x-session-affinity` from `sessionId` when caching is enabled (default: false) + maxTokensField?: 'max_completion_tokens' | 'max_tokens'; // Which field name to use (default: max_completion_tokens) + requiresToolResultName?: boolean; // Whether tool results require the `name` field (default: false) + requiresAssistantAfterToolResult?: boolean; // Whether tool results must be followed by an assistant message (default: false) + requiresThinkingAsText?: boolean; // Whether thinking blocks must be converted to text (default: false) + requiresReasoningContentOnAssistantMessages?: boolean; // Whether all replayed assistant messages must include empty reasoning_content when reasoning is enabled (default: auto-detected for DeepSeek) + thinkingFormat?: 'openai' | 'deepseek' | 'zai' | 'qwen' | 'qwen-chat-template'; // Format for reasoning param: 'openai' uses reasoning_effort, 'deepseek' uses thinking: { type } plus reasoning_effort, 'zai' uses enable_thinking, 'qwen' uses enable_thinking, 'qwen-chat-template' uses chat_template_kwargs.enable_thinking (default: openai) + cacheControlFormat?: 'anthropic'; // Anthropic-style cache_control on system prompt, last tool, and last user/assistant text content + openRouterRouting?: OpenRouterRouting; // OpenRouter routing preferences (default: {}) + vercelGatewayRouting?: VercelGatewayRouting; // Vercel AI Gateway routing preferences (default: {}) +} + +interface OpenAIResponsesCompat { + // Reserved for future use +} +``` + +If `compat` is not set, the library falls back to URL-based detection. If `compat` is partially set, unspecified fields use the detected defaults. This is useful for: + +- **LiteLLM proxies**: May not support `store` field +- **Custom inference servers**: May use non-standard field names +- **Self-hosted endpoints**: May have different feature support + +### Type Safety + +Models are typed by their API, which keeps the model metadata accurate. Provider-specific option types are enforced when you call the provider functions directly. The generic `stream` and `complete` functions accept `StreamOptions` with additional provider fields. + +```typescript +import { streamAnthropic, type AnthropicOptions } from '@mariozechner/pi-ai'; + +// TypeScript knows this is an Anthropic model +const claude = getModel('anthropic', 'claude-sonnet-4-20250514'); + +const options: AnthropicOptions = { + thinkingEnabled: true, + thinkingBudgetTokens: 2048 +}; + +await streamAnthropic(claude, context, options); +``` + +## Cross-Provider Handoffs + +The library supports seamless handoffs between different LLM providers within the same conversation. This allows you to switch models mid-conversation while preserving context, including thinking blocks, tool calls, and tool results. + +### How It Works + +When messages from one provider are sent to a different provider, the library automatically transforms them for compatibility: + +- **User and tool result messages** are passed through unchanged +- **Assistant messages from the same provider/API** are preserved as-is +- **Assistant messages from different providers** have their thinking blocks converted to text with `` tags +- **Tool calls and regular text** are preserved unchanged + +### Example: Multi-Provider Conversation + +```typescript +import { getModel, complete, Context } from '@mariozechner/pi-ai'; + +// Start with Claude +const claude = getModel('anthropic', 'claude-sonnet-4-20250514'); +const context: Context = { + messages: [] +}; + +context.messages.push({ role: 'user', content: 'What is 25 * 18?' }); +const claudeResponse = await complete(claude, context, { + thinkingEnabled: true +}); +context.messages.push(claudeResponse); + +// Switch to GPT-5 - it will see Claude's thinking as tagged text +const gpt5 = getModel('openai', 'gpt-5-mini'); +context.messages.push({ role: 'user', content: 'Is that calculation correct?' }); +const gptResponse = await complete(gpt5, context); +context.messages.push(gptResponse); + +// Switch to Gemini +const gemini = getModel('google', 'gemini-2.5-flash'); +context.messages.push({ role: 'user', content: 'What was the original question?' }); +const geminiResponse = await complete(gemini, context); +``` + +### Provider Compatibility + +All providers can handle messages from other providers, including: +- Text content +- Tool calls and tool results (including images in tool results) +- Thinking/reasoning blocks (transformed to tagged text for cross-provider compatibility) +- Aborted messages with partial content + +This enables flexible workflows where you can: +- Start with a fast model for initial responses +- Switch to a more capable model for complex reasoning +- Use specialized models for specific tasks +- Maintain conversation continuity across provider outages + +## Context Serialization + +The `Context` object can be easily serialized and deserialized using standard JSON methods, making it simple to persist conversations, implement chat history, or transfer contexts between services: + +```typescript +import { Context, getModel, complete } from '@mariozechner/pi-ai'; + +// Create and use a context +const context: Context = { + systemPrompt: 'You are a helpful assistant.', + messages: [ + { role: 'user', content: 'What is TypeScript?' } + ] +}; + +const model = getModel('openai', 'gpt-4o-mini'); +const response = await complete(model, context); +context.messages.push(response); + +// Serialize the entire context +const serialized = JSON.stringify(context); +console.log('Serialized context size:', serialized.length, 'bytes'); + +// Save to database, localStorage, file, etc. +localStorage.setItem('conversation', serialized); + +// Later: deserialize and continue the conversation +const restored: Context = JSON.parse(localStorage.getItem('conversation')!); +restored.messages.push({ role: 'user', content: 'Tell me more about its type system' }); + +// Continue with any model +const newModel = getModel('anthropic', 'claude-3-5-haiku-20241022'); +const continuation = await complete(newModel, restored); +``` + +> **Note**: If the context contains images (encoded as base64 as shown in the Image Input section), those will also be serialized. + +## Browser Usage + +The library supports browser environments. You must pass the API key explicitly since environment variables are not available in browsers: + +```typescript +import { getModel, complete } from '@mariozechner/pi-ai'; + +// API key must be passed explicitly in browser +const model = getModel('anthropic', 'claude-3-5-haiku-20241022'); + +const response = await complete(model, { + messages: [{ role: 'user', content: 'Hello!' }] +}, { + apiKey: 'your-api-key' +}); +``` + +> **Security Warning**: Exposing API keys in frontend code is dangerous. Anyone can extract and abuse your keys. Only use this approach for internal tools or demos. For production applications, use a backend proxy that keeps your API keys secure. + +### Browser Compatibility Notes + +- Amazon Bedrock (`bedrock-converse-stream`) is not supported in browser environments. +- OAuth login flows are not supported in browser environments. Use the `@mariozechner/pi-ai/oauth` entry point in Node.js. +- In browser builds, Bedrock can still appear in model lists. Calls to Bedrock models fail at runtime. +- Use a server-side proxy or backend service if you need Bedrock or OAuth-based auth from a web app. + +### Environment Variables (Node.js only) + +In Node.js environments, you can set environment variables to avoid passing API keys: + +| Provider | Environment Variable(s) | +|----------|------------------------| +| OpenAI | `OPENAI_API_KEY` | +| Azure OpenAI | `AZURE_OPENAI_API_KEY` + `AZURE_OPENAI_BASE_URL` (e.g. `https://{resource}.openai.azure.com`) or `AZURE_OPENAI_RESOURCE_NAME`. Supports `*.openai.azure.com` and `*.cognitiveservices.azure.com`; root endpoints auto-normalize to `/openai/v1`. Optional: `AZURE_OPENAI_API_VERSION` (default `v1`), `AZURE_OPENAI_DEPLOYMENT_NAME_MAP`. | +| Anthropic | `ANTHROPIC_API_KEY` or `ANTHROPIC_OAUTH_TOKEN` | +| DeepSeek | `DEEPSEEK_API_KEY` | +| Google | `GEMINI_API_KEY` | +| Vertex AI | `GOOGLE_CLOUD_API_KEY` or `GOOGLE_CLOUD_PROJECT` (or `GCLOUD_PROJECT`) + `GOOGLE_CLOUD_LOCATION` + ADC | +| Mistral | `MISTRAL_API_KEY` | +| Groq | `GROQ_API_KEY` | +| Cerebras | `CEREBRAS_API_KEY` | +| Cloudflare AI Gateway | `CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_GATEWAY_ID` | +| Cloudflare Workers AI | `CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID` | +| xAI | `XAI_API_KEY` | +| Fireworks | `FIREWORKS_API_KEY` | +| OpenRouter | `OPENROUTER_API_KEY` | +| Vercel AI Gateway | `AI_GATEWAY_API_KEY` | +| zAI | `ZAI_API_KEY` | +| MiniMax | `MINIMAX_API_KEY` | +| OpenCode Zen / OpenCode Go | `OPENCODE_API_KEY` | +| Kimi For Coding | `KIMI_API_KEY` | +| Xiaomi MiMo (API billing) | `XIAOMI_API_KEY` | +| Xiaomi MiMo Token Plan (China) | `XIAOMI_TOKEN_PLAN_CN_API_KEY` | +| Xiaomi MiMo Token Plan (Amsterdam) | `XIAOMI_TOKEN_PLAN_AMS_API_KEY` | +| Xiaomi MiMo Token Plan (Singapore) | `XIAOMI_TOKEN_PLAN_SGP_API_KEY` | +| GitHub Copilot | `COPILOT_GITHUB_TOKEN` or `GH_TOKEN` or `GITHUB_TOKEN` | + +When set, the library automatically uses these keys: + +```typescript +// Uses OPENAI_API_KEY from environment +const model = getModel('openai', 'gpt-4o-mini'); +const response = await complete(model, context); + +// Or override with explicit key +const response = await complete(model, context, { + apiKey: 'sk-different-key' +}); +``` + +### Checking Environment Variables + +```typescript +import { getEnvApiKey } from '@mariozechner/pi-ai'; + +// Check if an API key is set in environment variables +const key = getEnvApiKey('openai'); // checks OPENAI_API_KEY +``` + +## OAuth Providers + +Several providers require OAuth authentication instead of static API keys: + +- **Anthropic** (Claude Pro/Max subscription) +- **OpenAI Codex** (ChatGPT Plus/Pro subscription, access to GPT-5.x Codex models) +- **GitHub Copilot** (Copilot subscription) + +For paid Cloud Code Assist subscriptions, set `GOOGLE_CLOUD_PROJECT` or `GOOGLE_CLOUD_PROJECT_ID` to your project ID. + +### Vertex AI + +Vertex AI models support either a Google Cloud API key or Application Default Credentials (ADC): + +- **API key**: Set `GOOGLE_CLOUD_API_KEY` or pass `apiKey` in the call options. +- **Local development (ADC)**: Run `gcloud auth application-default login` +- **CI/Production (ADC)**: Set `GOOGLE_APPLICATION_CREDENTIALS` to point to a service account JSON key file + +When using ADC, also set `GOOGLE_CLOUD_PROJECT` (or `GCLOUD_PROJECT`) and `GOOGLE_CLOUD_LOCATION`. You can also pass `project`/`location` in the call options. When using `GOOGLE_CLOUD_API_KEY`, `project` and `location` are not required. + +Example: + +```bash +# Local (uses your user credentials) +gcloud auth application-default login +export GOOGLE_CLOUD_PROJECT="my-project" +export GOOGLE_CLOUD_LOCATION="us-central1" + +# CI/Production (service account key file) +export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json" +``` + +```typescript +import { getModel, complete } from '@mariozechner/pi-ai'; + +(async () => { + const model = getModel('google-vertex', 'gemini-2.5-flash'); + const response = await complete(model, { + messages: [{ role: 'user', content: 'Hello from Vertex AI' }] + }, { + apiKey: process.env.GOOGLE_CLOUD_API_KEY, + }); + + for (const block of response.content) { + if (block.type === 'text') console.log(block.text); + } +})().catch(console.error); +``` + +Official docs: [Application Default Credentials](https://cloud.google.com/docs/authentication/application-default-credentials) + +### CLI Login + +The quickest way to authenticate: + +```bash +npx @mariozechner/pi-ai login # interactive provider selection +npx @mariozechner/pi-ai login anthropic # login to specific provider +npx @mariozechner/pi-ai list # list available providers +``` + +Credentials are saved to `auth.json` in the current directory. + +### Programmatic OAuth + +The library provides login and token refresh functions via the `@mariozechner/pi-ai/oauth` entry point. Credential storage is the caller's responsibility. + +```typescript +import { + // Login functions (return credentials, do not store) + loginAnthropic, + loginOpenAICodex, + loginGitHubCopilot, + loginGeminiCli, + + // Token management + refreshOAuthToken, // (provider, credentials) => new credentials + getOAuthApiKey, // (provider, credentialsMap) => { newCredentials, apiKey } | null + + // Types + type OAuthProvider, + type OAuthCredentials, +} from '@mariozechner/pi-ai/oauth'; +``` + +### Login Flow Example + +```typescript +import { loginGitHubCopilot } from '@mariozechner/pi-ai/oauth'; +import { writeFileSync } from 'fs'; + +const credentials = await loginGitHubCopilot({ + onAuth: (url, instructions) => { + console.log(`Open: ${url}`); + if (instructions) console.log(instructions); + }, + onPrompt: async (prompt) => { + return await getUserInput(prompt.message); + }, + onProgress: (message) => console.log(message) +}); + +// Store credentials yourself +const auth = { 'github-copilot': { type: 'oauth', ...credentials } }; +writeFileSync('auth.json', JSON.stringify(auth, null, 2)); +``` + +### Using OAuth Tokens + +Use `getOAuthApiKey()` to get an API key, automatically refreshing if expired: + +```typescript +import { getModel, complete } from '@mariozechner/pi-ai'; +import { getOAuthApiKey } from '@mariozechner/pi-ai/oauth'; +import { readFileSync, writeFileSync } from 'fs'; + +// Load your stored credentials +const auth = JSON.parse(readFileSync('auth.json', 'utf-8')); + +// Get API key (refreshes if expired) +const result = await getOAuthApiKey('github-copilot', auth); +if (!result) throw new Error('Not logged in'); + +// Save refreshed credentials +auth['github-copilot'] = { type: 'oauth', ...result.newCredentials }; +writeFileSync('auth.json', JSON.stringify(auth, null, 2)); + +// Use the API key +const model = getModel('github-copilot', 'gpt-4o'); +const response = await complete(model, { + messages: [{ role: 'user', content: 'Hello!' }] +}, { apiKey: result.apiKey }); +``` + +### Provider Notes + +**OpenAI Codex**: Requires a ChatGPT Plus or Pro subscription. Provides access to GPT-5.x Codex models with extended context windows and reasoning capabilities. The library automatically handles session-based prompt caching when `sessionId` is provided in stream options. You can set `transport` in stream options to `"sse"`, `"websocket"`, or `"auto"` for Codex Responses transport selection. When using WebSocket with a `sessionId`, connections are reused per session and expire after 5 minutes of inactivity. + +**Azure OpenAI (Responses)**: Uses the Responses API only. Set `AZURE_OPENAI_API_KEY` and either `AZURE_OPENAI_BASE_URL` or `AZURE_OPENAI_RESOURCE_NAME`. `AZURE_OPENAI_BASE_URL` supports both `https://.openai.azure.com` and `https://.cognitiveservices.azure.com`; root endpoints are normalized to `.../openai/v1` automatically. Use `AZURE_OPENAI_API_VERSION` (defaults to `v1`) to override the API version if needed. Deployment names are treated as model IDs by default, override with `azureDeploymentName` or `AZURE_OPENAI_DEPLOYMENT_NAME_MAP` using comma-separated `model-id=deployment` pairs (for example `gpt-4o-mini=my-deployment,gpt-4o=prod`). Legacy deployment-based URLs are intentionally unsupported. + +**GitHub Copilot**: If you get "The requested model is not supported" error, enable the model manually in VS Code: open Copilot Chat, click the model selector, select the model (warning icon), and click "Enable". + +## Development + +### Adding a New Provider + +Adding a new LLM provider requires changes across multiple files. This checklist covers all necessary steps: + +#### 1. Core Types (`src/types.ts`) + +- Add the API identifier to `KnownApi` (for example `"bedrock-converse-stream"`) +- Create an options interface extending `StreamOptions` (for example `BedrockOptions`) +- Add the provider name to `KnownProvider` (for example `"amazon-bedrock"`) + +#### 2. Provider Implementation (`src/providers/`) + +Create a new provider file (for example `amazon-bedrock.ts`) that exports: + +- `stream()` function returning `AssistantMessageEventStream` +- `streamSimple()` for `SimpleStreamOptions` mapping +- Provider-specific options interface +- Message conversion functions to transform `Context` to provider format +- Tool conversion if the provider supports tools +- Response parsing to emit standardized events (`text`, `tool_call`, `thinking`, `usage`, `stop`) + +#### 3. API Registry Integration (`src/providers/register-builtins.ts`) + +- Register the API with `registerApiProvider()` +- Add a package subpath export in `package.json` for the provider module (`./dist/providers/.js`) +- Add lazy loader wrappers in `src/providers/register-builtins.ts`, do not statically import provider implementation modules there +- Add any root-level `export type` re-exports in `src/index.ts` that should remain available from `@mariozechner/pi-ai` +- Add credential detection in `env-api-keys.ts` for the new provider +- Ensure `streamSimple` handles auth lookup via `getEnvApiKey()` or provider-specific auth + +#### 4. Model Generation (`scripts/generate-models.ts`) + +- Add logic to fetch and parse models from the provider's source (e.g., models.dev API) +- Map provider model data to the standardized `Model` interface +- Handle provider-specific quirks (pricing format, capability flags, model ID transformations) + +#### 5. Tests (`test/`) + +Create or update test files to cover the new provider: + +- `stream.test.ts` - Basic streaming and tool use +- `tokens.test.ts` - Token usage reporting +- `abort.test.ts` - Request cancellation +- `empty.test.ts` - Empty message handling +- `context-overflow.test.ts` - Context limit errors +- `image-limits.test.ts` - Image support (if applicable) +- `unicode-surrogate.test.ts` - Unicode handling +- `tool-call-without-result.test.ts` - Orphaned tool calls +- `image-tool-result.test.ts` - Images in tool results +- `total-tokens.test.ts` - Token counting accuracy +- `cross-provider-handoff.test.ts` - Cross-provider context replay + +For `cross-provider-handoff.test.ts`, add at least one provider/model pair. If the provider exposes multiple model families (for example GPT and Claude), add at least one pair per family. + +For providers with non-standard auth (AWS, Google Vertex), create a utility like `bedrock-utils.ts` with credential detection helpers. + +#### 6. Coding Agent Integration (`../coding-agent/`) + +Update `src/core/model-resolver.ts`: + +- Add a default model ID for the provider in `DEFAULT_MODELS` + +Update `src/cli/args.ts`: + +- Add environment variable documentation in the help text + +Update `README.md`: + +- Add the provider to the providers section with setup instructions + +#### 7. Documentation + +Update `packages/ai/README.md`: + +- Add to the Supported Providers table +- Document any provider-specific options or authentication requirements +- Add environment variable to the Environment Variables section + +#### 8. Changelog + +Add an entry to `packages/ai/CHANGELOG.md` under `## [Unreleased]`: + +```markdown +### Added +- Added support for [Provider Name] provider ([#PR](link) by [@author](link)) +``` + +## License + +MIT``` + +## @mariozechner/pi-coding-agent - 0.73.0 +**Repository URL**: https://github.com/badlogic/pi-mono +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +

+ + + + + pi logo + + +

+

+ Discord + npm + Build status +

+

+ pi.dev domain graciously donated by +

+ Exy mascot
exe.dev
+

+ +> New issues and PRs from new contributors are auto-closed by default. Maintainers review auto-closed issues daily. See [CONTRIBUTING.md](../../CONTRIBUTING.md). + +--- + +Pi is a minimal terminal coding harness. Adapt pi to your workflows, not the other way around, without having to fork and modify pi internals. Extend it with TypeScript [Extensions](#extensions), [Skills](#skills), [Prompt Templates](#prompt-templates), and [Themes](#themes). Put your extensions, skills, prompt templates, and themes in [Pi Packages](#pi-packages) and share them with others via npm or git. + +Pi ships with powerful defaults but skips features like sub agents and plan mode. Instead, you can ask pi to build what you want or install a third party pi package that matches your workflow. + +Pi runs in four modes: interactive, print or JSON, RPC for process integration, and an SDK for embedding in your own apps. See [openclaw/openclaw](https://github.com/openclaw/openclaw) for a real-world SDK integration. + +## Share your OSS coding agent sessions + +If you use pi for open source work, please share your coding agent sessions. + +Public OSS session data helps improve models, prompts, tools, and evaluations using real development workflows. + +For the full explanation, see [this post on X](https://x.com/badlogicgames/status/2037811643774652911). + +To publish sessions, use [`badlogic/pi-share-hf`](https://github.com/badlogic/pi-share-hf). Read its README.md for setup instructions. All you need is a Hugging Face account, the Hugging Face CLI, and `pi-share-hf`. + +You can also watch [this video](https://x.com/badlogicgames/status/2041151967695634619), where I show how I publish my `pi-mono` sessions. + +I regularly publish my own `pi-mono` work sessions here: + +- [badlogicgames/pi-mono on Hugging Face](https://huggingface.co/datasets/badlogicgames/pi-mono) + +## Table of Contents + +- [Quick Start](#quick-start) +- [Providers & Models](#providers--models) +- [Interactive Mode](#interactive-mode) + - [Editor](#editor) + - [Commands](#commands) + - [Keyboard Shortcuts](#keyboard-shortcuts) + - [Message Queue](#message-queue) +- [Sessions](#sessions) + - [Branching](#branching) + - [Compaction](#compaction) +- [Settings](#settings) +- [Context Files](#context-files) +- [Customization](#customization) + - [Prompt Templates](#prompt-templates) + - [Skills](#skills) + - [Extensions](#extensions) + - [Themes](#themes) + - [Pi Packages](#pi-packages) +- [Programmatic Usage](#programmatic-usage) +- [Philosophy](#philosophy) +- [CLI Reference](#cli-reference) + +--- + +## Quick Start + +```bash +npm install -g @mariozechner/pi-coding-agent +``` + +Authenticate with an API key: + +```bash +export ANTHROPIC_API_KEY=sk-ant-... +pi +``` + +Or use your existing subscription: + +```bash +pi +/login # Then select provider +``` + +Then just talk to pi. By default, pi gives the model four tools: `read`, `write`, `edit`, and `bash`. The model uses these to fulfill your requests. Add capabilities via [skills](#skills), [prompt templates](#prompt-templates), [extensions](#extensions), or [pi packages](#pi-packages). + +**Platform notes:** [Windows](docs/windows.md) | [Termux (Android)](docs/termux.md) | [tmux](docs/tmux.md) | [Terminal setup](docs/terminal-setup.md) | [Shell aliases](docs/shell-aliases.md) + +--- + +## Providers & Models + +For each built-in provider, pi maintains a list of tool-capable models, updated with every release. Authenticate via subscription (`/login`) or API key, then select any model from that provider via `/model` (or Ctrl+L). + +**Subscriptions:** +- Anthropic Claude Pro/Max +- OpenAI ChatGPT Plus/Pro (Codex) +- GitHub Copilot + +**API keys:** +- Anthropic +- OpenAI +- Azure OpenAI +- DeepSeek +- Google Gemini +- Google Vertex +- Amazon Bedrock +- Mistral +- Groq +- Cerebras +- Cloudflare AI Gateway +- Cloudflare Workers AI +- xAI +- OpenRouter +- Vercel AI Gateway +- ZAI +- OpenCode Zen +- OpenCode Go +- Hugging Face +- Fireworks +- Kimi For Coding +- MiniMax +- Xiaomi MiMo +- Xiaomi MiMo Token Plan (China) +- Xiaomi MiMo Token Plan (Amsterdam) +- Xiaomi MiMo Token Plan (Singapore) + +See [docs/providers.md](docs/providers.md) for detailed setup instructions. + +**Custom providers & models:** Add providers via `~/.pi/agent/models.json` if they speak a supported API (OpenAI, Anthropic, Google). For custom APIs or OAuth, use extensions. See [docs/models.md](docs/models.md) and [docs/custom-provider.md](docs/custom-provider.md). + +--- + +## Interactive Mode + +

Interactive Mode

+ +The interface from top to bottom: + +- **Startup header** - Shows shortcuts (`/hotkeys` for all), loaded AGENTS.md files, prompt templates, skills, and extensions +- **Messages** - Your messages, assistant responses, tool calls and results, notifications, errors, and extension UI +- **Editor** - Where you type; border color indicates thinking level +- **Footer** - Working directory, session name, total token/cache usage, cost, context usage, current model + +The editor can be temporarily replaced by other UI, like built-in `/settings` or custom UI from extensions (e.g., a Q&A tool that lets the user answer model questions in a structured format). [Extensions](#extensions) can also replace the editor, add widgets above/below it, a status line, custom footer, or overlays. + +### Editor + +| Feature | How | +|---------|-----| +| File reference | Type `@` to fuzzy-search project files | +| Path completion | Tab to complete paths | +| Multi-line | Shift+Enter (or Ctrl+Enter on Windows Terminal) | +| Images | Ctrl+V to paste (Alt+V on Windows), or drag onto terminal | +| Bash commands | `!command` runs and sends output to LLM, `!!command` runs without sending | + +Standard editing keybindings for delete word, undo, etc. See [docs/keybindings.md](docs/keybindings.md). + +### Commands + +Type `/` in the editor to trigger commands. [Extensions](#extensions) can register custom commands, [skills](#skills) are available as `/skill:name`, and [prompt templates](#prompt-templates) expand via `/templatename`. + +| Command | Description | +|---------|-------------| +| `/login`, `/logout` | OAuth authentication | +| `/model` | Switch models | +| `/scoped-models` | Enable/disable models for Ctrl+P cycling | +| `/settings` | Thinking level, theme, message delivery, transport | +| `/resume` | Pick from previous sessions | +| `/new` | Start a new session | +| `/name ` | Set session display name | +| `/session` | Show session info (file, ID, messages, tokens, cost) | +| `/tree` | Jump to any point in the session and continue from there | +| `/fork` | Create a new session from a previous user message | +| `/clone` | Duplicate the current active branch into a new session | +| `/compact [prompt]` | Manually compact context, optional custom instructions | +| `/copy` | Copy last assistant message to clipboard | +| `/export [file]` | Export session to HTML file | +| `/share` | Upload as private GitHub gist with shareable HTML link | +| `/reload` | Reload keybindings, extensions, skills, prompts, and context files (themes hot-reload automatically) | +| `/hotkeys` | Show all keyboard shortcuts | +| `/changelog` | Display version history | +| `/quit` | Quit pi | + +### Keyboard Shortcuts + +See `/hotkeys` for the full list. Customize via `~/.pi/agent/keybindings.json`. See [docs/keybindings.md](docs/keybindings.md). + +**Commonly used:** + +| Key | Action | +|-----|--------| +| Ctrl+C | Clear editor | +| Ctrl+C twice | Quit | +| Escape | Cancel/abort | +| Escape twice | Open `/tree` | +| Ctrl+L | Open model selector | +| Ctrl+P / Shift+Ctrl+P | Cycle scoped models forward/backward | +| Shift+Tab | Cycle thinking level | +| Ctrl+O | Collapse/expand tool output | +| Ctrl+T | Collapse/expand thinking blocks | + +### Message Queue + +Submit messages while the agent is working: + +- **Enter** queues a *steering* message, delivered after the current assistant turn finishes executing its tool calls +- **Alt+Enter** queues a *follow-up* message, delivered only after the agent finishes all work +- **Escape** aborts and restores queued messages to editor +- **Alt+Up** retrieves queued messages back to editor + +On Windows Terminal, `Alt+Enter` is fullscreen by default. Remap it in [docs/terminal-setup.md](docs/terminal-setup.md) so pi can receive the follow-up shortcut. + +Configure delivery in [settings](docs/settings.md): `steeringMode` and `followUpMode` can be `"one-at-a-time"` (default, waits for response) or `"all"` (delivers all queued at once). `transport` selects provider transport preference (`"sse"`, `"websocket"`, or `"auto"`) for providers that support multiple transports. + +--- + +## Sessions + +Sessions are stored as JSONL files with a tree structure. Each entry has an `id` and `parentId`, enabling in-place branching without creating new files. See [docs/session-format.md](docs/session-format.md) for file format. + +### Management + +Sessions auto-save to `~/.pi/agent/sessions/` organized by working directory. + +```bash +pi -c # Continue most recent session +pi -r # Browse and select from past sessions +pi --no-session # Ephemeral mode (don't save) +pi --session # Use specific session file or ID +pi --fork # Fork specific session file or ID into a new session +``` + +Use `/session` in interactive mode to see the current session ID before reusing it with `--session ` or `--fork `. + +### Branching + +**`/tree`** - Navigate the session tree in-place. Select any previous point, continue from there, and switch between branches. All history preserved in a single file. + +

Tree View

+ +- Search by typing, fold/unfold and jump between branches with Ctrl+←/Ctrl+→ or Alt+←/Alt+→, page with ←/→ +- Filter modes (Ctrl+O): default → no-tools → user-only → labeled-only → all +- Press Shift+L to label entries as bookmarks and Shift+T to toggle label timestamps + +**`/fork`** - Create a new session file from a previous user message on the active branch. Opens a selector, copies the active path up to that point, and places the selected prompt in the editor for modification. + +**`/clone`** - Duplicate the current active branch into a new session file at the current position. The new session keeps the full active-path history and opens with an empty editor. + +**`--fork `** - Fork an existing session file or partial session UUID directly from the CLI. This copies the full source session into a new session file in the current project. + +### Compaction + +Long sessions can exhaust context windows. Compaction summarizes older messages while keeping recent ones. + +**Manual:** `/compact` or `/compact ` + +**Automatic:** Enabled by default. Triggers on context overflow (recovers and retries) or when approaching the limit (proactive). Configure via `/settings` or `settings.json`. + +Compaction is lossy. The full history remains in the JSONL file; use `/tree` to revisit. Customize compaction behavior via [extensions](#extensions). See [docs/compaction.md](docs/compaction.md) for internals. + +--- + +## Settings + +Use `/settings` to modify common options, or edit JSON files directly: + +| Location | Scope | +|----------|-------| +| `~/.pi/agent/settings.json` | Global (all projects) | +| `.pi/settings.json` | Project (overrides global) | + +See [docs/settings.md](docs/settings.md) for all options. + +### Telemetry and update checks + +Pi has two separate startup features: + +- **Update check:** fetches `https://pi.dev/api/latest-version` to check whether a newer Pi version exists. Disable it with `PI_SKIP_VERSION_CHECK=1`. Disabling update checks only turns off this check. +- **Install/update telemetry:** after first install or a changelog-detected update, sends an anonymous version ping to `https://pi.dev/api/report-install`. Opt out by setting `enableInstallTelemetry` to `false` in `settings.json`, or by setting `PI_TELEMETRY=0`. This does not disable update checks; Pi may still contact `pi.dev` for the latest version unless update checks are disabled or offline mode is enabled. + +Use `--offline` or `PI_OFFLINE=1` to disable all startup network operations described here, including update checks, package update checks, and install/update telemetry. + +--- + +## Context Files + +Pi loads `AGENTS.md` (or `CLAUDE.md`) at startup from: +- `~/.pi/agent/AGENTS.md` (global) +- Parent directories (walking up from cwd) +- Current directory + +Use for project instructions, conventions, common commands. All matching files are concatenated. + +Disable context file loading with `--no-context-files` (or `-nc`). + +### System Prompt + +Replace the default system prompt with `.pi/SYSTEM.md` (project) or `~/.pi/agent/SYSTEM.md` (global). Append without replacing via `APPEND_SYSTEM.md`. + +--- + +## Customization + +### Prompt Templates + +Reusable prompts as Markdown files. Type `/name` to expand. + +```markdown + +Review this code for bugs, security issues, and performance problems. +Focus on: {{focus}} +``` + +Place in `~/.pi/agent/prompts/`, `.pi/prompts/`, or a [pi package](#pi-packages) to share with others. See [docs/prompt-templates.md](docs/prompt-templates.md). + +### Skills + +On-demand capability packages following the [Agent Skills standard](https://agentskills.io). Invoke via `/skill:name` or let the agent load them automatically. + +```markdown + +# My Skill +Use this skill when the user asks about X. + +## Steps +1. Do this +2. Then that +``` + +Place in `~/.pi/agent/skills/`, `~/.agents/skills/`, `.pi/skills/`, or `.agents/skills/` (from `cwd` up through parent directories) or a [pi package](#pi-packages) to share with others. See [docs/skills.md](docs/skills.md). + +### Extensions + +

Doom Extension

+ +TypeScript modules that extend pi with custom tools, commands, keyboard shortcuts, event handlers, and UI components. + +```typescript +export default function (pi: ExtensionAPI) { + pi.registerTool({ name: "deploy", ... }); + pi.registerCommand("stats", { ... }); + pi.on("tool_call", async (event, ctx) => { ... }); +} +``` + +The default export can also be `async`. pi waits for async extension factories before startup continues, which is useful for one-time initialization such as fetching remote model lists before calling `pi.registerProvider()`. + +**What's possible:** +- Custom tools (or replace built-in tools entirely) +- Sub-agents and plan mode +- Custom compaction and summarization +- Permission gates and path protection +- Custom editors and UI components +- Status lines, headers, footers +- Git checkpointing and auto-commit +- SSH and sandbox execution +- MCP server integration +- Make pi look like Claude Code +- Games while waiting (yes, Doom runs) +- ...anything you can dream up + +Place in `~/.pi/agent/extensions/`, `.pi/extensions/`, or a [pi package](#pi-packages) to share with others. See [docs/extensions.md](docs/extensions.md) and [examples/extensions/](examples/extensions/). + +### Themes + +Built-in: `dark`, `light`. Themes hot-reload: modify the active theme file and pi immediately applies changes. + +Place in `~/.pi/agent/themes/`, `.pi/themes/`, or a [pi package](#pi-packages) to share with others. See [docs/themes.md](docs/themes.md). + +### Pi Packages + +Bundle and share extensions, skills, prompts, and themes via npm or git. Find packages on [npmjs.com](https://www.npmjs.com/search?q=keywords%3Api-package) or [Discord](https://discord.com/channels/1456806362351669492/1457744485428629628). + +> **Security:** Pi packages run with full system access. Extensions execute arbitrary code, and skills can instruct the model to perform any action including running executables. Review source code before installing third-party packages. + +```bash +pi install npm:@foo/pi-tools +pi install npm:@foo/pi-tools@1.2.3 # pinned version +pi install git:github.com/user/repo +pi install git:github.com/user/repo@v1 # tag or commit +pi install git:git@github.com:user/repo +pi install git:git@github.com:user/repo@v1 # tag or commit +pi install https://github.com/user/repo +pi install https://github.com/user/repo@v1 # tag or commit +pi install ssh://git@github.com/user/repo +pi install ssh://git@github.com/user/repo@v1 # tag or commit +pi remove npm:@foo/pi-tools +pi uninstall npm:@foo/pi-tools # alias for remove +pi list +pi update # update pi and packages (skips pinned packages) +pi update --extensions # update packages only +pi update --self # update pi only +pi update --self --force # reinstall pi even if current +pi update npm:@foo/pi-tools # update one package +pi config # enable/disable extensions, skills, prompts, themes +``` + +Packages install to `~/.pi/agent/git/` (git) or global npm. Use `-l` for project-local installs (`.pi/git/`, `.pi/npm/`). Git packages install dependencies with `npm install --omit=dev` by default, so runtime deps must be listed under `dependencies`; when `npmCommand` is configured, git packages use plain `install` for compatibility with wrappers. If you use a Node version manager and want package installs to reuse a stable npm context, set `npmCommand` in `settings.json`, for example `["mise", "exec", "node@20", "--", "npm"]`. + +Create a package by adding a `pi` key to `package.json`: + +```json +{ + "name": "my-pi-package", + "keywords": ["pi-package"], + "pi": { + "extensions": ["./extensions"], + "skills": ["./skills"], + "prompts": ["./prompts"], + "themes": ["./themes"] + } +} +``` + +Without a `pi` manifest, pi auto-discovers from conventional directories (`extensions/`, `skills/`, `prompts/`, `themes/`). + +See [docs/packages.md](docs/packages.md). + +--- + +## Programmatic Usage + +### SDK + +```typescript +import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from "@mariozechner/pi-coding-agent"; + +const authStorage = AuthStorage.create(); +const modelRegistry = ModelRegistry.create(authStorage); +const { session } = await createAgentSession({ + sessionManager: SessionManager.inMemory(), + authStorage, + modelRegistry, +}); + +await session.prompt("What files are in the current directory?"); +``` + +For advanced multi-session runtime replacement, use `createAgentSessionRuntime()` and `AgentSessionRuntime`. + +See [docs/sdk.md](docs/sdk.md) and [examples/sdk/](examples/sdk/). + +### RPC Mode + +For non-Node.js integrations, use RPC mode over stdin/stdout: + +```bash +pi --mode rpc +``` + +RPC mode uses strict LF-delimited JSONL framing. Clients must split records on `\n` only. Do not use generic line readers like Node `readline`, which also split on Unicode separators inside JSON payloads. + +See [docs/rpc.md](docs/rpc.md) for the protocol. + +--- + +## Philosophy + +Pi is aggressively extensible so it doesn't have to dictate your workflow. Features that other tools bake in can be built with [extensions](#extensions), [skills](#skills), or installed from third-party [pi packages](#pi-packages). This keeps the core minimal while letting you shape pi to fit how you work. + +**No MCP.** Build CLI tools with READMEs (see [Skills](#skills)), or build an extension that adds MCP support. [Why?](https://mariozechner.at/posts/2025-11-02-what-if-you-dont-need-mcp/) + +**No sub-agents.** There's many ways to do this. Spawn pi instances via tmux, or build your own with [extensions](#extensions), or install a package that does it your way. + +**No permission popups.** Run in a container, or build your own confirmation flow with [extensions](#extensions) inline with your environment and security requirements. + +**No plan mode.** Write plans to files, or build it with [extensions](#extensions), or install a package. + +**No built-in to-dos.** They confuse models. Use a TODO.md file, or build your own with [extensions](#extensions). + +**No background bash.** Use tmux. Full observability, direct interaction. + +Read the [blog post](https://mariozechner.at/posts/2025-11-30-pi-coding-agent/) for the full rationale. + +--- + +## CLI Reference + +```bash +pi [options] [@files...] [messages...] +``` + +### Package Commands + +```bash +pi install [-l] # Install package, -l for project-local +pi remove [-l] # Remove package +pi uninstall [-l] # Alias for remove +pi update [source|self|pi] # Update pi and packages (skips pinned packages) +pi update --extensions # Update packages only +pi update --self # Update pi only +pi update --self --force # Reinstall pi even if current +pi update --extension # Update one package +pi list # List installed packages +pi config # Enable/disable package resources +``` + +### Modes + +| Flag | Description | +|------|-------------| +| (default) | Interactive mode | +| `-p`, `--print` | Print response and exit | +| `--mode json` | Output all events as JSON lines (see [docs/json.md](docs/json.md)) | +| `--mode rpc` | RPC mode for process integration (see [docs/rpc.md](docs/rpc.md)) | +| `--export [out]` | Export session to HTML | + +In print mode, pi also reads piped stdin and merges it into the initial prompt: + +```bash +cat README.md | pi -p "Summarize this text" +``` + +### Model Options + +| Option | Description | +|--------|-------------| +| `--provider ` | Provider (anthropic, openai, google, etc.) | +| `--model ` | Model pattern or ID (supports `provider/id` and optional `:`) | +| `--api-key ` | API key (overrides env vars) | +| `--thinking ` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh` | +| `--models ` | Comma-separated patterns for Ctrl+P cycling | +| `--list-models [search]` | List available models | + +### Session Options + +| Option | Description | +|--------|-------------| +| `-c`, `--continue` | Continue most recent session | +| `-r`, `--resume` | Browse and select session | +| `--session ` | Use specific session file or partial UUID | +| `--fork ` | Fork specific session file or partial UUID into a new session | +| `--session-dir ` | Custom session storage directory | +| `--no-session` | Ephemeral mode (don't save) | + +### Tool Options + +| Option | Description | +|--------|-------------| +| `--tools `, `-t ` | Allowlist specific tool names across built-in, extension, and custom tools | +| `--no-builtin-tools`, `-nbt` | Disable built-in tools by default but keep extension/custom tools enabled | +| `--no-tools`, `-nt` | Disable all tools by default | + +Available built-in tools: `read`, `bash`, `edit`, `write`, `grep`, `find`, `ls` + +### Resource Options + +| Option | Description | +|--------|-------------| +| `-e`, `--extension ` | Load extension from path, npm, or git (repeatable) | +| `--no-extensions` | Disable extension discovery | +| `--skill ` | Load skill (repeatable) | +| `--no-skills` | Disable skill discovery | +| `--prompt-template ` | Load prompt template (repeatable) | +| `--no-prompt-templates` | Disable prompt template discovery | +| `--theme ` | Load theme (repeatable) | +| `--no-themes` | Disable theme discovery | +| `--no-context-files`, `-nc` | Disable AGENTS.md and CLAUDE.md context file discovery | + +Combine `--no-*` with explicit flags to load exactly what you need, ignoring settings.json (e.g., `--no-extensions -e ./my-ext.ts`). + +### Other Options + +| Option | Description | +|--------|-------------| +| `--system-prompt ` | Replace default prompt (context files and skills still appended) | +| `--append-system-prompt ` | Append to system prompt | +| `--verbose` | Force verbose startup | +| `-h`, `--help` | Show help | +| `-v`, `--version` | Show version | + +### File Arguments + +Prefix files with `@` to include in the message: + +```bash +pi @prompt.md "Answer this" +pi -p @screenshot.png "What's in this image?" +pi @code.ts @test.ts "Review these files" +``` + +### Examples + +```bash +# Interactive with initial prompt +pi "List all .ts files in src/" + +# Non-interactive +pi -p "Summarize this codebase" + +# Non-interactive with piped stdin +cat README.md | pi -p "Summarize this text" + +# Different model +pi --provider openai --model gpt-4o "Help me refactor" + +# Model with provider prefix (no --provider needed) +pi --model openai/gpt-4o "Help me refactor" + +# Model with thinking level shorthand +pi --model sonnet:high "Solve this complex problem" + +# Limit model cycling +pi --models "claude-*,gpt-4o" + +# Read-only mode +pi --tools read,grep,find,ls -p "Review the code" + +# High thinking level +pi --thinking high "Solve this complex problem" +``` + +### Environment Variables + +| Variable | Description | +|----------|-------------| +| `PI_CODING_AGENT_DIR` | Override config directory (default: `~/.pi/agent`) | +| `PI_CODING_AGENT_SESSION_DIR` | Override session storage directory (overridden by `--session-dir`) | +| `PI_PACKAGE_DIR` | Override package directory (useful for Nix/Guix where store paths tokenize poorly) | +| `PI_OFFLINE` | Disable startup network operations, including update checks, package update checks, and install/update telemetry | +| `PI_SKIP_VERSION_CHECK` | Skip the Pi version update check at startup. This prevents the `pi.dev` latest-version request | +| `PI_TELEMETRY` | Override install/update telemetry. Use `1`/`true`/`yes` to enable or `0`/`false`/`no` to disable. This does not disable update checks | +| `PI_CACHE_RETENTION` | Set to `long` for extended prompt cache (Anthropic: 1h, OpenAI: 24h) | +| `VISUAL`, `EDITOR` | External editor for Ctrl+G | + +--- + +## Contributing & Development + +See [CONTRIBUTING.md](../../CONTRIBUTING.md) for guidelines and [docs/development.md](docs/development.md) for setup, forking, and debugging. + +--- + +## License + +MIT + +## See Also + +- [@mariozechner/pi-ai](https://www.npmjs.com/package/@mariozechner/pi-ai): Core LLM toolkit +- [@mariozechner/pi-agent-core](https://www.npmjs.com/package/@mariozechner/pi-agent-core): Agent framework +- [@mariozechner/pi-tui](https://www.npmjs.com/package/@mariozechner/pi-tui): Terminal UI components``` + +## @mariozechner/pi-tui - 0.73.0 +**Repository URL**: https://github.com/badlogic/pi-mono +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# @mariozechner/pi-tui + +Minimal terminal UI framework with differential rendering and synchronized output for flicker-free interactive CLI applications. + +## Features + +- **Differential Rendering**: Three-strategy rendering system that only updates what changed +- **Synchronized Output**: Uses CSI 2026 for atomic screen updates (no flicker) +- **Bracketed Paste Mode**: Handles large pastes correctly with markers for >10 line pastes +- **Component-based**: Simple Component interface with render() method +- **Theme Support**: Components accept theme interfaces for customizable styling +- **Built-in Components**: Text, TruncatedText, Input, Editor, Markdown, Loader, SelectList, SettingsList, Spacer, Image, Box, Container +- **Inline Images**: Renders images in terminals that support Kitty or iTerm2 graphics protocols +- **Autocomplete Support**: File paths and slash commands + +## Quick Start + +```typescript +import { TUI, Text, Editor, ProcessTerminal, matchesKey } from "@mariozechner/pi-tui"; + +// Create terminal +const terminal = new ProcessTerminal(); + +// Create TUI +const tui = new TUI(terminal); + +// Add components +tui.addChild(new Text("Welcome to my app!")); + +import { defaultEditorTheme as editorTheme } from './test/test-themes.ts'; +const editor = new Editor(tui, editorTheme); +editor.onSubmit = (text) => { + console.log("Submitted:", text); + tui.addChild(new Text(`You said: ${text}`)); +}; +tui.addChild(editor); + +// Focus the editor so it receives keyboard input +tui.setFocus(editor); + +// In raw mode Ctrl+C doesn't send SIGINT — intercept it here to allow exit +tui.addInputListener((data) => { + if (matchesKey(data, 'ctrl+c')) { + tui.stop(); + process.exit(0); + } +}); + +// Start +tui.start(); +``` + +## Core API + +### TUI + +Main container that manages components and rendering. + +```typescript +const tui = new TUI(terminal); +tui.addChild(component); +tui.removeChild(component); +tui.start(); +tui.stop(); +tui.requestRender(); // Request a re-render + +// Global debug key handler (Shift+Ctrl+D) +tui.onDebug = () => console.log("Debug triggered"); +``` + +### Overlays + +Overlays render components on top of existing content without replacing it. Useful for dialogs, menus, and modal UI. + +```typescript +// Show overlay with default options (centered, max 80 cols) +const handle = tui.showOverlay(component); + +// Show overlay with custom positioning and sizing +// Values can be numbers (absolute) or percentage strings (e.g., "50%") +const handle = tui.showOverlay(component, { + // Sizing + width: 60, // Fixed width in columns + width: "80%", // Width as percentage of terminal + minWidth: 40, // Minimum width floor + maxHeight: 20, // Maximum height in rows + maxHeight: "50%", // Maximum height as percentage of terminal + + // Anchor-based positioning (default: 'center') + anchor: 'bottom-right', // Position relative to anchor point + offsetX: 2, // Horizontal offset from anchor + offsetY: -1, // Vertical offset from anchor + + // Percentage-based positioning (alternative to anchor) + row: "25%", // Vertical position (0%=top, 100%=bottom) + col: "50%", // Horizontal position (0%=left, 100%=right) + + // Absolute positioning (overrides anchor/percent) + row: 5, // Exact row position + col: 10, // Exact column position + + // Margin from terminal edges + margin: 2, // All sides + margin: { top: 1, right: 2, bottom: 1, left: 2 }, + + // Responsive visibility + visible: (termWidth, termHeight) => termWidth >= 100 // Hide on narrow terminals + + // Focus behavior + nonCapturing: true // Don't auto-focus when shown +}); + +// OverlayHandle methods +handle.hide(); // Permanently remove the overlay +handle.setHidden(true); // Temporarily hide (can show again) +handle.setHidden(false); // Show again after hiding +handle.isHidden(); // Check if temporarily hidden +handle.focus(); // Focus and bring to visual front +handle.unfocus(); // Release focus to previous target +handle.isFocused(); // Check if overlay has focus + +// Hide topmost overlay +tui.hideOverlay(); + +// Check if any visible overlay is active +tui.hasOverlay(); +``` + +**Anchor values**: `'center'`, `'top-left'`, `'top-right'`, `'bottom-left'`, `'bottom-right'`, `'top-center'`, `'bottom-center'`, `'left-center'`, `'right-center'` + +**Resolution order**: +1. `minWidth` is applied as a floor after width calculation +2. For position: absolute `row`/`col` > percentage `row`/`col` > `anchor` +3. `margin` clamps final position to stay within terminal bounds +4. `visible` callback controls whether overlay renders (called each frame) + +### Component Interface + +All components implement: + +```typescript +interface Component { + render(width: number): string[]; + handleInput?(data: string): void; + invalidate?(): void; +} +``` + +| Method | Description | +|--------|-------------| +| `render(width)` | Returns an array of strings, one per line. Each line **must not exceed `width`** or the TUI will error. Use `truncateToWidth()` or manual wrapping to ensure this. | +| `handleInput?(data)` | Called when the component has focus and receives keyboard input. The `data` string contains raw terminal input (may include ANSI escape sequences). | +| `invalidate?()` | Called to clear any cached render state. Components should re-render from scratch on the next `render()` call. | + +The TUI appends a full SGR reset and OSC 8 reset at the end of each rendered line. Styles do not carry across lines. If you emit multi-line text with styling, reapply styles per line or use `wrapTextWithAnsi()` so styles are preserved for each wrapped line. + +### Focusable Interface (IME Support) + +Components that display a text cursor and need IME (Input Method Editor) support should implement the `Focusable` interface: + +```typescript +import { CURSOR_MARKER, type Component, type Focusable } from "@mariozechner/pi-tui"; + +class MyInput implements Component, Focusable { + focused: boolean = false; // Set by TUI when focus changes + + render(width: number): string[] { + const marker = this.focused ? CURSOR_MARKER : ""; + // Emit marker right before the fake cursor + return [`> ${beforeCursor}${marker}\x1b[7m${atCursor}\x1b[27m${afterCursor}`]; + } +} +``` + +When a `Focusable` component has focus, TUI: +1. Sets `focused = true` on the component +2. Scans rendered output for `CURSOR_MARKER` (a zero-width APC escape sequence) +3. Positions the hardware terminal cursor at that location +4. Shows the hardware cursor + +This enables IME candidate windows to appear at the correct position for CJK input methods. The `Editor` and `Input` built-in components already implement this interface. + +**Container components with embedded inputs:** When a container component (dialog, selector, etc.) contains an `Input` or `Editor` child, the container must implement `Focusable` and propagate the focus state to the child: + +```typescript +import { Container, type Focusable, Input } from "@mariozechner/pi-tui"; + +class SearchDialog extends Container implements Focusable { + private searchInput: Input; + + // Propagate focus to child input for IME cursor positioning + private _focused = false; + get focused(): boolean { return this._focused; } + set focused(value: boolean) { + this._focused = value; + this.searchInput.focused = value; + } + + constructor() { + super(); + this.searchInput = new Input(); + this.addChild(this.searchInput); + } +} +``` + +Without this propagation, typing with an IME (Chinese, Japanese, Korean, etc.) will show the candidate window in the wrong position. + +## Built-in Components + +### Container + +Groups child components. + +```typescript +const container = new Container(); +container.addChild(component); +container.removeChild(component); +``` + +### Box + +Container that applies padding and background color to all children. + +```typescript +const box = new Box( + 1, // paddingX (default: 1) + 1, // paddingY (default: 1) + (text) => chalk.bgGray(text) // optional background function +); +box.addChild(new Text("Content")); +box.setBgFn((text) => chalk.bgBlue(text)); // Change background dynamically +``` + +### Text + +Displays multi-line text with word wrapping and padding. + +```typescript +const text = new Text( + "Hello World", // text content + 1, // paddingX (default: 1) + 1, // paddingY (default: 1) + (text) => chalk.bgGray(text) // optional background function +); +text.setText("Updated text"); +text.setCustomBgFn((text) => chalk.bgBlue(text)); +``` + +### TruncatedText + +Single-line text that truncates to fit viewport width. Useful for status lines and headers. + +```typescript +const truncated = new TruncatedText( + "This is a very long line that will be truncated...", + 0, // paddingX (default: 0) + 0 // paddingY (default: 0) +); +``` + +### Input + +Single-line text input with horizontal scrolling. + +```typescript +const input = new Input(); +input.onSubmit = (value) => console.log(value); +input.setValue("initial"); +input.getValue(); +``` + +**Key Bindings:** +- `Enter` - Submit +- `Ctrl+A` / `Ctrl+E` - Line start/end +- `Ctrl+W` or `Alt+Backspace` - Delete word backwards +- `Ctrl+U` - Delete to start of line +- `Ctrl+K` - Delete to end of line +- `Ctrl+Left` / `Ctrl+Right` - Word navigation +- `Alt+Left` / `Alt+Right` - Word navigation +- Arrow keys, Backspace, Delete work as expected + +### Editor + +Multi-line text editor with autocomplete, file completion, paste handling, and vertical scrolling when content exceeds terminal height. + +```typescript +interface EditorTheme { + borderColor: (str: string) => string; + selectList: SelectListTheme; +} + +interface EditorOptions { + paddingX?: number; // Horizontal padding (default: 0) +} + +const editor = new Editor(tui, theme, options?); // tui is required for height-aware scrolling +editor.onSubmit = (text) => console.log(text); +editor.onChange = (text) => console.log("Changed:", text); +editor.disableSubmit = true; // Disable submit temporarily +editor.setAutocompleteProvider(provider); +editor.borderColor = (s) => chalk.blue(s); // Change border dynamically +editor.setPaddingX(1); // Update horizontal padding dynamically +editor.getPaddingX(); // Get current padding +``` + +**Features:** +- Multi-line editing with word wrap +- Slash command autocomplete (type `/`) +- File path autocomplete (press `Tab`) +- Large paste handling (>10 lines creates `[paste #1 +50 lines]` marker) +- Horizontal lines above/below editor +- Fake cursor rendering (hidden real cursor) + +**Key Bindings:** +- `Enter` - Submit +- `Shift+Enter`, `Ctrl+Enter`, or `Alt+Enter` - New line (terminal-dependent, Alt+Enter most reliable) +- `Tab` - Autocomplete +- `Ctrl+K` - Delete to end of line +- `Ctrl+U` - Delete to start of line +- `Ctrl+W` or `Alt+Backspace` - Delete word backwards +- `Alt+D` or `Alt+Delete` - Delete word forwards +- `Ctrl+A` / `Ctrl+E` - Line start/end +- `Ctrl+]` - Jump forward to character (awaits next keypress, then moves cursor to first occurrence) +- `Ctrl+Alt+]` - Jump backward to character +- Arrow keys, Backspace, Delete work as expected + +### Markdown + +Renders markdown with syntax highlighting and theming support. + +```typescript +interface MarkdownTheme { + heading: (text: string) => string; + link: (text: string) => string; + linkUrl: (text: string) => string; + code: (text: string) => string; + codeBlock: (text: string) => string; + codeBlockBorder: (text: string) => string; + quote: (text: string) => string; + quoteBorder: (text: string) => string; + hr: (text: string) => string; + listBullet: (text: string) => string; + bold: (text: string) => string; + italic: (text: string) => string; + strikethrough: (text: string) => string; + underline: (text: string) => string; + highlightCode?: (code: string, lang?: string) => string[]; +} + +interface DefaultTextStyle { + color?: (text: string) => string; + bgColor?: (text: string) => string; + bold?: boolean; + italic?: boolean; + strikethrough?: boolean; + underline?: boolean; +} + +const md = new Markdown( + "# Hello\n\nSome **bold** text", + 1, // paddingX + 1, // paddingY + theme, // MarkdownTheme + defaultStyle // optional DefaultTextStyle +); +md.setText("Updated markdown"); +``` + +**Features:** +- Headings, bold, italic, code blocks, lists, links, blockquotes +- HTML tags rendered as plain text +- Optional syntax highlighting via `highlightCode` +- Padding support +- Render caching for performance + +### Loader + +Animated loading spinner. + +```typescript +const loader = new Loader( + tui, // TUI instance for render updates + (s) => chalk.cyan(s), // spinner color function + (s) => chalk.gray(s), // message color function + "Loading..." // message (default: "Loading...") +); +loader.start(); +loader.setMessage("Still loading..."); +loader.stop(); +``` + +### CancellableLoader + +Extends Loader with Escape key handling and an AbortSignal for cancelling async operations. + +```typescript +const loader = new CancellableLoader( + tui, // TUI instance for render updates + (s) => chalk.cyan(s), // spinner color function + (s) => chalk.gray(s), // message color function + "Working..." // message +); +loader.onAbort = () => done(null); // Called when user presses Escape +doAsyncWork(loader.signal).then(done); +``` + +**Properties:** +- `signal: AbortSignal` - Aborted when user presses Escape +- `aborted: boolean` - Whether the loader was aborted +- `onAbort?: () => void` - Callback when user presses Escape + +### SelectList + +Interactive selection list with keyboard navigation. + +```typescript +interface SelectItem { + value: string; + label: string; + description?: string; +} + +interface SelectListTheme { + selectedPrefix: (text: string) => string; + selectedText: (text: string) => string; + description: (text: string) => string; + scrollInfo: (text: string) => string; + noMatch: (text: string) => string; +} + +const list = new SelectList( + [ + { value: "opt1", label: "Option 1", description: "First option" }, + { value: "opt2", label: "Option 2", description: "Second option" }, + ], + 5, // maxVisible + theme // SelectListTheme +); + +list.onSelect = (item) => console.log("Selected:", item); +list.onCancel = () => console.log("Cancelled"); +list.onSelectionChange = (item) => console.log("Highlighted:", item); +list.setFilter("opt"); // Filter items +``` + +**Controls:** +- Arrow keys: Navigate +- Enter: Select +- Escape: Cancel + +### SettingsList + +Settings panel with value cycling and submenus. + +```typescript +interface SettingItem { + id: string; + label: string; + description?: string; + currentValue: string; + values?: string[]; // If provided, Enter/Space cycles through these + submenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component; +} + +interface SettingsListTheme { + label: (text: string, selected: boolean) => string; + value: (text: string, selected: boolean) => string; + description: (text: string) => string; + cursor: string; + hint: (text: string) => string; +} + +const settings = new SettingsList( + [ + { id: "theme", label: "Theme", currentValue: "dark", values: ["dark", "light"] }, + { id: "model", label: "Model", currentValue: "gpt-4", submenu: (val, done) => modelSelector }, + ], + 10, // maxVisible + theme, // SettingsListTheme + (id, newValue) => console.log(`${id} changed to ${newValue}`), + () => console.log("Cancelled") +); +settings.updateValue("theme", "light"); +``` + +**Controls:** +- Arrow keys: Navigate +- Enter/Space: Activate (cycle value or open submenu) +- Escape: Cancel + +### Spacer + +Empty lines for vertical spacing. + +```typescript +const spacer = new Spacer(2); // 2 empty lines (default: 1) +``` + +### Image + +Renders images inline for terminals that support the Kitty graphics protocol (Kitty, Ghostty, WezTerm) or iTerm2 inline images. Falls back to a text placeholder on unsupported terminals. + +```typescript +interface ImageTheme { + fallbackColor: (str: string) => string; +} + +interface ImageOptions { + maxWidthCells?: number; + maxHeightCells?: number; + filename?: string; +} + +const image = new Image( + base64Data, // base64-encoded image data + "image/png", // MIME type + theme, // ImageTheme + options // optional ImageOptions +); +tui.addChild(image); +``` + +Supported formats: PNG, JPEG, GIF, WebP. Dimensions are parsed from the image headers automatically. + +## Autocomplete + +### CombinedAutocompleteProvider + +Supports both slash commands and file paths. + +```typescript +import { CombinedAutocompleteProvider } from "@mariozechner/pi-tui"; + +const provider = new CombinedAutocompleteProvider( + [ + { name: "help", description: "Show help" }, + { name: "clear", description: "Clear screen" }, + { name: "delete", description: "Delete last message" }, + ], + process.cwd() // base path for file completion +); + +editor.setAutocompleteProvider(provider); +``` + +**Features:** +- Type `/` to see slash commands +- Press `Tab` for file path completion +- Works with `~/`, `./`, `../`, and `@` prefix +- Filters to attachable files for `@` prefix + +## Key Detection + +Use `matchesKey()` with the `Key` helper for detecting keyboard input (supports Kitty keyboard protocol): + +```typescript +import { matchesKey, Key } from "@mariozechner/pi-tui"; + +if (matchesKey(data, Key.ctrl("c"))) { + process.exit(0); +} + +if (matchesKey(data, Key.enter)) { + submit(); +} else if (matchesKey(data, Key.escape)) { + cancel(); +} else if (matchesKey(data, Key.up)) { + moveUp(); +} +``` + +**Key identifiers** (use `Key.*` for autocomplete, or string literals): +- Basic keys: `Key.enter`, `Key.escape`, `Key.tab`, `Key.space`, `Key.backspace`, `Key.delete`, `Key.home`, `Key.end` +- Arrow keys: `Key.up`, `Key.down`, `Key.left`, `Key.right` +- With modifiers: `Key.ctrl("c")`, `Key.shift("tab")`, `Key.alt("left")`, `Key.ctrlShift("p")` +- String format also works: `"enter"`, `"ctrl+c"`, `"shift+tab"`, `"ctrl+shift+p"` + +## Differential Rendering + +The TUI uses three rendering strategies: + +1. **First Render**: Output all lines without clearing scrollback +2. **Width Changed or Change Above Viewport**: Clear screen and full re-render +3. **Normal Update**: Move cursor to first changed line, clear to end, render changed lines + +All updates are wrapped in **synchronized output** (`\x1b[?2026h` ... `\x1b[?2026l`) for atomic, flicker-free rendering. + +## Terminal Interface + +The TUI works with any object implementing the `Terminal` interface: + +```typescript +interface Terminal { + start(onInput: (data: string) => void, onResize: () => void): void; + stop(): void; + write(data: string): void; + get columns(): number; + get rows(): number; + moveBy(lines: number): void; + hideCursor(): void; + showCursor(): void; + clearLine(): void; + clearFromCursor(): void; + clearScreen(): void; +} +``` + +**Built-in implementations:** +- `ProcessTerminal` - Uses `process.stdin/stdout` +- `VirtualTerminal` - For testing (uses `@xterm/headless`) + +## Utilities + +```typescript +import { visibleWidth, truncateToWidth, wrapTextWithAnsi } from "@mariozechner/pi-tui"; + +// Get visible width of string (ignoring ANSI codes) +const width = visibleWidth("\x1b[31mHello\x1b[0m"); // 5 + +// Truncate string to width (preserving ANSI codes, adds ellipsis) +const truncated = truncateToWidth("Hello World", 8); // "Hello..." + +// Truncate without ellipsis +const truncatedNoEllipsis = truncateToWidth("Hello World", 8, ""); // "Hello Wo" + +// Wrap text to width (preserving ANSI codes across line breaks) +const lines = wrapTextWithAnsi("This is a long line that needs wrapping", 20); +// ["This is a long line", "that needs wrapping"] +``` + +## Creating Custom Components + +When creating custom components, **each line returned by `render()` must not exceed the `width` parameter**. The TUI will error if any line is wider than the terminal. + +### Handling Input + +Use `matchesKey()` with the `Key` helper for keyboard input: + +```typescript +import { matchesKey, Key, truncateToWidth } from "@mariozechner/pi-tui"; +import type { Component } from "@mariozechner/pi-tui"; + +class MyInteractiveComponent implements Component { + private selectedIndex = 0; + private items = ["Option 1", "Option 2", "Option 3"]; + + public onSelect?: (index: number) => void; + public onCancel?: () => void; + + handleInput(data: string): void { + if (matchesKey(data, Key.up)) { + this.selectedIndex = Math.max(0, this.selectedIndex - 1); + } else if (matchesKey(data, Key.down)) { + this.selectedIndex = Math.min(this.items.length - 1, this.selectedIndex + 1); + } else if (matchesKey(data, Key.enter)) { + this.onSelect?.(this.selectedIndex); + } else if (matchesKey(data, Key.escape) || matchesKey(data, Key.ctrl("c"))) { + this.onCancel?.(); + } + } + + render(width: number): string[] { + return this.items.map((item, i) => { + const prefix = i === this.selectedIndex ? "> " : " "; + return truncateToWidth(prefix + item, width); + }); + } +} +``` + +### Handling Line Width + +Use the provided utilities to ensure lines fit: + +```typescript +import { visibleWidth, truncateToWidth } from "@mariozechner/pi-tui"; +import type { Component } from "@mariozechner/pi-tui"; + +class MyComponent implements Component { + private text: string; + + constructor(text: string) { + this.text = text; + } + + render(width: number): string[] { + // Option 1: Truncate long lines + return [truncateToWidth(this.text, width)]; + + // Option 2: Check and pad to exact width + const line = this.text; + const visible = visibleWidth(line); + if (visible > width) { + return [truncateToWidth(line, width)]; + } + // Pad to exact width (optional, for backgrounds) + return [line + " ".repeat(width - visible)]; + } +} +``` + +### ANSI Code Considerations + +Both `visibleWidth()` and `truncateToWidth()` correctly handle ANSI escape codes: + +- `visibleWidth()` ignores ANSI codes when calculating width +- `truncateToWidth()` preserves ANSI codes and properly closes them when truncating + +```typescript +import chalk from "chalk"; + +const styled = chalk.red("Hello") + " " + chalk.blue("World"); +const width = visibleWidth(styled); // 11 (not counting ANSI codes) +const truncated = truncateToWidth(styled, 8); // Red "Hello" + " W..." with proper reset +``` + +### Caching + +For performance, components should cache their rendered output and only re-render when necessary: + +```typescript +class CachedComponent implements Component { + private text: string; + private cachedWidth?: number; + private cachedLines?: string[]; + + render(width: number): string[] { + if (this.cachedLines && this.cachedWidth === width) { + return this.cachedLines; + } + + const lines = [truncateToWidth(this.text, width)]; + + this.cachedWidth = width; + this.cachedLines = lines; + return lines; + } + + invalidate(): void { + this.cachedWidth = undefined; + this.cachedLines = undefined; + } +} +``` + +## Example + +See `test/chat-simple.ts` for a complete chat interface example with: +- Markdown messages with custom background colors +- Loading spinner during responses +- Editor with autocomplete and slash commands +- Spacers between messages + +Run it: +```bash +npx tsx test/chat-simple.ts +``` + +## Development + +```bash +# Install dependencies (from monorepo root) +npm install + +# Run type checking +npm run check + +# Run the demo +npx tsx test/chat-simple.ts +``` + +### Debug logging + +Set `PI_TUI_WRITE_LOG` to capture the raw ANSI stream written to stdout. + +```bash +PI_TUI_WRITE_LOG=/tmp/tui-ansi.log npx tsx test/chat-simple.ts +`````` + +## @mistralai/mistralai - 2.2.1 +**Repository URL**: https://github.com/mistralai/client-ts +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2024 Mistral AI + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @modelcontextprotocol/sdk - 1.29.0 +**Repository URL**: https://github.com/modelcontextprotocol/typescript-sdk +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 Anthropic, PBC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @mozilla/readability - 0.6.0 +**Repository URL**: https://github.com/mozilla/readability +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Copyright (c) 2010 Arc90 Inc + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License.``` + +## @napi-rs/cli - 2.18.4 +**Repository URL**: https://github.com/napi-rs/napi-rs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2020 LongYinan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @nodable/entities - 2.1.0 +**Repository URL**: https://github.com/nodable/val-parsers +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# @nodable/entities + +Fast, zero-dependency XML/HTML entity encoder and decoder for Node.js. + +## Install + +```bash +npm install @nodable/entities +``` + +## Quick start + +```js +import { EntityEncoder, EntityDecoder, ALL_ENTITIES } from '@nodable/entities'; + +// Encode: plain text → entity references +const enc = new EntityEncoder(); +enc.encode('Hello © 2024 & '); +// → 'Hello © 2024 & <stuff>' + +// Decode: entity references → plain text +const dec = new EntityDecoder({ namedEntities: ALL_ENTITIES }); +dec.decode('Hello © 2024 & <stuff>'); +// → 'Hello © 2024 & ' +``` + +## Performance + +| | encode | decode | +|---|---|---| +| `entities` (npm) | 3.65 M req/s | 1.76 M req/s | +| `@nodable/entities` | 3.33 M req/s | **5.19 M req/s** | + +## Documentation + +- [EntityEncoder](docs/EntityEncoder.md) — options, API, recipes +- [EntityDecoder](docs/EntityDecoder.md) — options, API, security limits, entity sets + +## License + +MIT``` + +## @protobufjs/aspromise - 1.1.2 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/base64 - 1.1.2 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/codegen - 2.0.5 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/eventemitter - 1.1.0 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/fetch - 1.1.0 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/float - 1.0.2 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/inquire - 1.1.1 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/path - 1.1.2 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/pool - 1.1.0 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @protobufjs/utf8 - 1.1.1 +**Repository URL**: https://github.com/dcodeIO/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## @shikijs/engine-oniguruma - 3.23.0 +**Repository URL**: https://github.com/shikijs/shiki +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021 Pine Wu +Copyright (c) 2023 Anthony Fu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @shikijs/langs - 3.23.0 +**Repository URL**: https://github.com/shikijs/shiki +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021 Pine Wu +Copyright (c) 2023 Anthony Fu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @shikijs/themes - 3.23.0 +**Repository URL**: https://github.com/shikijs/shiki +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021 Pine Wu +Copyright (c) 2023 Anthony Fu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @shikijs/types - 3.23.0 +**Repository URL**: https://github.com/shikijs/shiki +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021 Pine Wu +Copyright (c) 2023 Anthony Fu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @shikijs/vscode-textmate - 10.0.2 +**Repository URL**: https://github.com/shikijs/vscode-textmate +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @silvia-odwyer/photon-node - 0.3.4 +**Repository URL**: https://github.com/silvia-odwyer/photon +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023, Silvia O'Dwyer + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @slack/bolt - 4.7.2 +**Repository URL**: https://github.com/slackapi/bolt-js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2016-2018 Robots & Pencils +Copyright (c) 2019- Slack Technologies, LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @slack/logger - 4.0.1 +**Repository URL**: https://github.com/slackapi/node-slack-sdk +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2014- Slack Technologies, LLC + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @slack/oauth - 3.0.5 +**Repository URL**: https://github.com/slackapi/node-slack-sdk +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2014- Slack Technologies, LLC + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @slack/socket-mode - 2.0.7 +**Repository URL**: https://github.com/slackapi/node-slack-sdk +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2014- Slack Technologies, LLC + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @slack/types - 2.21.0 +**Repository URL**: https://github.com/slackapi/node-slack-sdk +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2014- Slack Technologies, LLC + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @slack/web-api - 7.15.2 +**Repository URL**: https://github.com/slackapi/node-slack-sdk +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2014- Slack Technologies, LLC + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @smithy/config-resolver - 4.4.17 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/core - 3.23.17 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/credential-provider-imds - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/eventstream-codec - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/eventstream-serde-browser - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/eventstream-serde-config-resolver - 4.3.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/eventstream-serde-node - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/eventstream-serde-universal - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/fetch-http-handler - 5.3.17 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/hash-node - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/invalid-dependency - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/is-array-buffer - 2.2.0 +**Repository URL**: https://github.com/awslabs/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/is-array-buffer - 4.2.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/middleware-content-length - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/middleware-endpoint - 4.4.32 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/middleware-retry - 4.5.7 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/middleware-serde - 4.2.20 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/middleware-stack - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/node-config-provider - 4.3.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/node-http-handler - 4.6.1 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/property-provider - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/protocol-http - 5.3.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/querystring-builder - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/querystring-parser - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/service-error-classification - 4.3.1 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/shared-ini-file-loader - 4.4.9 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/signature-v4 - 5.3.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/smithy-client - 4.12.13 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/types - 4.14.1 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/url-parser - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-base64 - 4.3.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-body-length-browser - 4.2.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-body-length-node - 4.2.3 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-buffer-from - 2.2.0 +**Repository URL**: https://github.com/awslabs/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-buffer-from - 4.2.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-config-provider - 4.2.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-defaults-mode-browser - 4.3.49 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-defaults-mode-node - 4.2.54 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-endpoints - 3.4.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-hex-encoding - 4.2.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-middleware - 4.2.14 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-retry - 4.3.8 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-stream - 4.5.25 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-uri-escape - 4.2.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-utf8 - 2.3.0 +**Repository URL**: https://github.com/awslabs/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/util-utf8 - 4.2.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @smithy/uuid - 1.1.2 +**Repository URL**: https://github.com/smithy-lang/smithy-typescript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## @telegraf/types - 7.1.0 +**Repository URL**: https://github.com/telegraf/types +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) KnorpelSenf & Telegraf contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @tokenizer/inflate - 0.4.1 +**Repository URL**: https://github.com/Borewit/tokenizer-inflate +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2024, Borewit +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @tokenizer/token - 0.3.0 +**Repository URL**: https://github.com/Borewit/tokenizer-token +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +[![npm version](https://badge.fury.io/js/%40tokenizer%2Ftoken.svg)](https://www.npmjs.com/package/@tokenizer/token) +[![npm downloads](http://img.shields.io/npm/dm/@tokenizer/token.svg)](https://npmcharts.com/compare/@tokenizer/token?interval=30) + +# @tokenizer/token + +TypeScript definition of an [strtok3](https://github.com/Borewit/strtok3) token. + +## Licence + +(The MIT License) + +Copyright (c) 2020 Borewit + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## @tootallnate/quickjs-emscripten - 0.23.0 +**Repository URL**: https://github.com/justjake/quickjs-emscripten +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +quickjs-emscripten copyright (c) 2019 Jake Teton-Landis + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## @types/body-parser - 1.19.6 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/connect - 3.4.38 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/express-serve-static-core - 5.1.1 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/express - 5.0.6 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/hast - 3.0.4 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/http-errors - 2.0.5 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/istanbul-lib-coverage - 2.0.6 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/jsonwebtoken - 9.0.10 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/mime-types - 2.1.4 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/ms - 2.1.0 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/node - 20.19.39 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/qs - 6.15.1 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/range-parser - 1.2.7 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/retry - 0.12.0 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/send - 1.2.1 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/serve-static - 2.2.0 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/unist - 3.0.3 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## @types/ws - 8.18.1 +**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE``` + +## abort-controller - 3.0.0 +**Repository URL**: https://github.com/mysticatea/abort-controller +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2017 Toru Nagashima + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## accepts - 2.0.0 +**Repository URL**: https://github.com/jshttp/accepts +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## agent-base - 7.1.4 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## agent-base - 9.0.0 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## ajv-formats - 3.0.1 +**Repository URL**: https://github.com/ajv-validator/ajv-formats +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2020 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## ajv - 8.20.0 +**Repository URL**: https://github.com/ajv-validator/ajv +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2015-2021 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## ansi-regex - 5.0.1 +**Repository URL**: https://github.com/chalk/ansi-regex +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## ansi-regex - 6.2.2 +**Repository URL**: https://github.com/chalk/ansi-regex +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## ansi-styles - 4.3.0 +**Repository URL**: https://github.com/chalk/ansi-styles +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## any-promise - 1.3.0 +**Repository URL**: https://github.com/kevinbeaty/any-promise +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (C) 2014-2016 Kevin Beaty + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## argparse - 2.0.1 +**Repository URL**: https://github.com/nodeca/argparse +**License Type(s)**: Python-2.0 +### License: https://spdx.org/licenses/Python-2.0.html +``` +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, 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.``` + +## asn1.js - 5.4.1 +**Repository URL**: https://github.com/indutny/asn1.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2017 Fedor Indutny + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## ast-types - 0.13.4 +**Repository URL**: https://github.com/benjamn/ast-types +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2013 Ben Newman + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## asynckit - 0.4.0 +**Repository URL**: https://github.com/alexindigo/asynckit +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2016 Alex Indigo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## axios - 1.16.0 +**Repository URL**: https://github.com/axios/axios +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# Copyright (c) 2014-present Matt Zabriskie & Collaborators + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## balanced-match - 4.0.4 +**Repository URL**: https://github.com/juliangruber/balanced-match +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(MIT) + +Original code Copyright Julian Gruber + +Port to TypeScript Copyright Isaac Z. Schlueter + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## base64-js - 1.5.1 +**Repository URL**: https://github.com/beatgammit/base64-js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Jameson Little + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## basic-ftp - 5.3.1 +**Repository URL**: https://github.com/patrickjuchli/basic-ftp +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2019 Patrick Juchli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## bignumber.js - 9.3.1 +**Repository URL**: https://github.com/MikeMcl/bignumber.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) +===================== + +Copyright © `<2025>` `Michael Mclaughlin` + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the “Software”), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE.``` + +## bn.js - 4.12.3 +**Repository URL**: https://github.com/indutny/bn.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright Fedor Indutny, 2015. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## body-parser - 2.2.2 +**Repository URL**: https://github.com/expressjs/body-parser +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## boolbase - 1.0.0 +**Repository URL**: https://github.com/fb55/boolbase +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +#boolbase +This very simple module provides two basic functions, one that always returns true (`trueFunc`) and one that always returns false (`falseFunc`). + +###WTF? + +By having only a single instance of these functions around, it's possible to do some nice optimizations. Eg. [`CSSselect`](https://github.com/fb55/CSSselect) uses these functions to determine whether a selector won't match any elements. If that's the case, the DOM doesn't even have to be touched. + +###And why is this a separate module? + +I'm trying to modularize `CSSselect` and most modules depend on these functions. IMHO, having a separate module is the easiest solution to this problem.``` + +## bottleneck - 2.19.5 +**Repository URL**: https://github.com/SGrondin/bottleneck +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Simon Grondin + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## bowser - 2.14.1 +**Repository URL**: https://github.com/bowser-js/bowser +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2015, Dustin Diaz (the "Original Author") +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +Distributions of all or part of the Software intended to be used +by the recipients as they would use the unmodified Software, +containing modifications that substantially alter, remove, or +disable functionality of the Software, outside of the documented +configuration mechanisms provided by the Software, shall be +modified such that the Original Author's bug reporting email +addresses and urls are either replaced with the contact information +of the parties responsible for the changes, or removed entirely. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +Except where noted, this license applies to any and all software +programs and associated documentation files created by the +Original Author, when distributed with the Software.``` + +## brace-expansion - 5.0.5 +**Repository URL**: https://github.com/juliangruber/brace-expansion +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright Julian Gruber + +TypeScript port Copyright Isaac Z. Schlueter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## buffer-alloc-unsafe - 1.1.0 +**Repository URL**: https://github.com/LinusU/buffer-alloc-unsafe +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# Buffer Alloc Unsafe + +A [ponyfill](https://ponyfill.com) for `Buffer.allocUnsafe`. + +Works as Node.js: `v7.0.0`
+Works on Node.js: `v0.10.0` + +## Installation + +```sh +npm install --save buffer-alloc-unsafe +``` + +## Usage + +```js +const allocUnsafe = require('buffer-alloc-unsafe') + +console.log(allocUnsafe(10)) +//=> + +console.log(allocUnsafe(10)) +//=> + +console.log(allocUnsafe(10)) +//=> + +allocUnsafe(-10) +//=> RangeError: "size" argument must not be negative +``` + +## API + +### allocUnsafe(size) + +- `size` <Integer> The desired length of the new `Buffer` + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must be +less than or equal to the value of `buffer.kMaxLength` and greater than or equal +to zero. Otherwise, a `RangeError` is thrown. + +## See also + +- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc` +- [buffer-fill](https://github.com/LinusU/buffer-fill) A ponyfill for `Buffer.fill` +- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from```` + +## buffer-alloc - 1.2.0 +**Repository URL**: https://github.com/LinusU/buffer-alloc +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# Buffer Alloc + +A [ponyfill](https://ponyfill.com) for `Buffer.alloc`. + +Works as Node.js: `v7.0.0`
+Works on Node.js: `v0.10.0` + +## Installation + +```sh +npm install --save buffer-alloc +``` + +## Usage + +```js +const alloc = require('buffer-alloc') + +console.log(alloc(4)) +//=> + +console.log(alloc(6, 0x41)) +//=> + +console.log(alloc(10, 'linus', 'utf8')) +//=> +``` + +## API + +### alloc(size[, fill[, encoding]]) + +- `size` <Integer> The desired length of the new `Buffer` +- `fill` <String> | <Buffer> | <Integer> A value to pre-fill the new `Buffer` with. **Default:** `0` +- `encoding` <String> If `fill` is a string, this is its encoding. **Default:** `'utf8'` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the `Buffer` will be zero-filled. + +## See also + +- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe` +- [buffer-fill](https://github.com/LinusU/buffer-fill) A ponyfill for `Buffer.fill` +- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from```` + +## buffer-crc32 - 0.2.13 +**Repository URL**: https://github.com/brianloveswords/buffer-crc32 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License + +Copyright (c) 2013 Brian J. Brennan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## buffer-equal-constant-time - 1.0.1 +**Repository URL**: https://github.com/goinstant/buffer-equal-constant-time +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2013, GoInstant Inc., a salesforce.com company +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +* Neither the name of salesforce.com, nor GoInstant, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## buffer-fill - 1.0.0 +**Repository URL**: https://github.com/LinusU/buffer-fill +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# Buffer Fill + +A [ponyfill](https://ponyfill.com) for `Buffer.fill`. + +Works as Node.js: `v6.4.0`
+Works on Node.js: `v0.10.0` + +## Installation + +```sh +npm install --save buffer-fill +``` + +## Usage + +```js +const fill = require('buffer-fill') +const buf = Buffer.allocUnsafe(5) + +console.log(buf.fill(8)) +//=> + +console.log(buf.fill(9, 2, 4)) +//=> + +console.log(buf.fill('linus', 'latin1')) +//=> + +console.log(buf.fill('\u0222')) +//=> +``` + +## API + +### fill(buf, value[, offset[, end]][, encoding]) + +- `value` <String> | <Buffer> | <Integer> The value to fill `buf` with +- `offset` <Integer> Where to start filling `buf`. **Default:** `0` +- `end` <Integer> Where to stop filling `buf` (not inclusive). **Default:** `buf.length` +- `encoding` <String> If `value` is a string, this is its encoding. **Default:** `'utf8'` +- Return: <Buffer> A reference to `buf` + +Fills `buf` with the specified `value`. If the `offset` and `end` are not given, +the entire `buf` will be filled. This is meant to be a small simplification to +allow the creation and filling of a `Buffer` to be done on a single line. + +If the final write of a `fill()` operation falls on a multi-byte character, then +only the first bytes of that character that fit into `buf` are written. + +## See also + +- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe` +- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc` +- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from```` + +## buffer-from - 1.1.2 +**Repository URL**: https://github.com/LinusU/buffer-from +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2016, 2018 Linus Unnebäck + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## bytes - 3.1.2 +**Repository URL**: https://github.com/visionmedia/bytes.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2012-2014 TJ Holowaychuk +Copyright (c) 2015 Jed Watson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## c8 - 11.0.0 +**Repository URL**: https://github.com/bcoe/c8 +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2017, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +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.``` + +## call-bind-apply-helpers - 1.0.2 +**Repository URL**: https://github.com/ljharb/call-bind-apply-helpers +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## call-bound - 1.0.4 +**Repository URL**: https://github.com/ljharb/call-bound +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## camelcase - 5.3.1 +**Repository URL**: https://github.com/sindresorhus/camelcase +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## chalk - 4.1.2 +**Repository URL**: https://github.com/chalk/chalk +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## chalk - 5.6.2 +**Repository URL**: https://github.com/chalk/chalk +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## chokidar - 5.0.0 +**Repository URL**: https://github.com/paulmillr/chokidar +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2012 Paul Miller (https://paulmillr.com), Elan Shanker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the “Software”), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## chownr - 3.0.0 +**Repository URL**: https://github.com/isaacs/chownr +**License Type(s)**: BlueOak-1.0.0 +### License: https://spdx.org/licenses/BlueOak-1.0.0.html +``` +All packages under `src/` are licensed according to the terms in +their respective `LICENSE` or `LICENSE.md` files. + +The remainder of this project is licensed under the Blue Oak +Model License, as follows: + +----- + +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.***``` + +## cli-highlight - 2.1.11 +**Repository URL**: https://github.com/felixfbecker/cli-highlight +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +ISC License + +Copyright (c) 2016, Felix Frederick Becker + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## cliui - 6.0.0 +**Repository URL**: https://github.com/yargs/cliui +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +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.``` + +## cliui - 7.0.4 +**Repository URL**: https://github.com/yargs/cliui +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +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.``` + +## cliui - 8.0.1 +**Repository URL**: https://github.com/yargs/cliui +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +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.``` + +## color-convert - 2.0.1 +**Repository URL**: https://github.com/Qix-/color-convert +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2011-2016 Heather Arthur + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## color-name - 1.1.4 +**Repository URL**: https://github.com/colorjs/color-name +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) +Copyright (c) 2015 Dmitry Ivanov + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## combined-stream - 1.0.8 +**Repository URL**: https://github.com/felixge/node-combined-stream +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2011 Debuggable Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## commander - 14.0.3 +**Repository URL**: https://github.com/tj/commander.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## content-disposition - 1.1.0 +**Repository URL**: https://github.com/jshttp/content-disposition +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014-2017 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## content-type - 1.0.5 +**Repository URL**: https://github.com/jshttp/content-type +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## convert-source-map - 2.0.0 +**Repository URL**: https://github.com/thlorenz/convert-source-map +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2013 Thorsten Lorenz. +All rights reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE.``` + +## cookie-signature - 1.2.2 +**Repository URL**: https://github.com/visionmedia/node-cookie-signature +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2012–2024 LearnBoost and other contributors; + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## cookie - 0.7.2 +**Repository URL**: https://github.com/jshttp/cookie +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2012-2014 Roman Shtylman +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## core-util-is - 1.0.3 +**Repository URL**: https://github.com/isaacs/core-util-is +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE.``` + +## cors - 2.8.6 +**Repository URL**: https://github.com/expressjs/cors +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Troy Goode + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## croner - 10.0.1 +**Repository URL**: https://github.com/hexagon/croner +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2015-2021 Hexagon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## cross-spawn - 7.0.6 +**Repository URL**: https://github.com/moxystudio/node-cross-spawn +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2018 Made With MOXY Lda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## css-select - 5.2.2 +**Repository URL**: https://github.com/fb55/css-select +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## css-what - 6.2.2 +**Repository URL**: https://github.com/fb55/css-what +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## cssom - 0.5.0 +**Repository URL**: https://github.com/NV/CSSOM +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) Nikita Vasilyev + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## data-uri-to-buffer - 4.0.1 +**Repository URL**: https://github.com/TooTallNate/node-data-uri-to-buffer +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +data-uri-to-buffer +================== +### Generate a Buffer instance from a [Data URI][rfc] string +[![Build Status](https://travis-ci.org/TooTallNate/node-data-uri-to-buffer.svg?branch=master)](https://travis-ci.org/TooTallNate/node-data-uri-to-buffer) + +This module accepts a ["data" URI][rfc] String of data, and returns a +node.js `Buffer` instance with the decoded data. + + +Installation +------------ + +Install with `npm`: + +``` bash +$ npm install data-uri-to-buffer +``` + + +Example +------- + +``` js +import dataUriToBuffer from 'data-uri-to-buffer'; + +// plain-text data is supported +let uri = 'data:,Hello%2C%20World!'; +let decoded = dataUriToBuffer(uri); +console.log(decoded.toString()); +// 'Hello, World!' + +// base64-encoded data is supported +uri = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D'; +decoded = dataUriToBuffer(uri); +console.log(decoded.toString()); +// 'Hello, World!' +``` + + +API +--- + +### dataUriToBuffer(String uri) → Buffer + +The `type` property on the Buffer instance gets set to the main type portion of +the "mediatype" portion of the "data" URI, or defaults to `"text/plain"` if not +specified. + +The `typeFull` property on the Buffer instance gets set to the entire +"mediatype" portion of the "data" URI (including all parameters), or defaults +to `"text/plain;charset=US-ASCII"` if not specified. + +The `charset` property on the Buffer instance gets set to the Charset portion of +the "mediatype" portion of the "data" URI, or defaults to `"US-ASCII"` if the +entire type is not specified, or defaults to `""` otherwise. + +*Note*: If the only the main type is specified but not the charset, e.g. +`"data:text/plain,abc"`, the charset is set to the empty string. The spec only +defaults to US-ASCII as charset if the entire type is not specified. + + +License +------- + +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +[rfc]: http://tools.ietf.org/html/rfc2397``` + +## data-uri-to-buffer - 6.0.2 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## data-uri-to-buffer - 8.0.0 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## debug - 4.4.3 +**Repository URL**: https://github.com/debug-js/debug +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk +Copyright (c) 2018-2021 Josh Junon + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## decamelize - 1.2.0 +**Repository URL**: https://github.com/sindresorhus/decamelize +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## define-data-property - 1.1.4 +**Repository URL**: https://github.com/ljharb/define-data-property +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2023 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## define-properties - 1.2.1 +**Repository URL**: https://github.com/ljharb/define-properties +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (C) 2015 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## degenerator - 5.0.1 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +degenerator +=========== +### Compiles sync functions into async functions + +Sometimes you need to write sync looking code that's really async under the hood. +This module takes a String to one or more synchronous JavaScript functions, and +returns a new String that with those JS functions transpiled into `async` +functions. + +So this: + +```js +function foo() { + return a('bar') || b(); +} +``` + +Gets compiled into: + +```js +async function foo() { + return await a('bar') || await b(); +} +``` + +With the compiled output code, you can evaluate the code using the `vm` module +in Node.js, or save the code to a file and require it, or whatever. + +Example +------- + +You must explicitly specify the names of the functions that should be +"asyncified". So say we wanted to expose a `get(url)` function that did +and HTTP request and returned the response body. + +The user has provided us with this implementation: + +``` js +function myFn() { + const one = get('https://google.com'); + const two = get('http://nodejs.org'); + const three = JSON.parse(get('http://jsonip.org')); + return [one, two, three]; +} +``` + +Now we can compile this into an asyncronous function, implement the +async `get()` function, and finally evaluate it into a real JavaScript function +instance with the `vm` module: + + +```typescript +import vm from 'vm'; +import { degenerator } from 'degenerator'; + +// The `get()` function is Promise-based (error handling omitted for brevity) +function get(endpoint: string) { + return new Promise((resolve, reject) => { + var mod = 0 == endpoint.indexOf('https:') ? require('https') : require('http'); + var req = mod.get(endpoint); + req.on('response', function (res) { + var data = ''; + res.setEncoding('utf8'); + res.on('data', function (b) { data += b; }); + res.on('end', function () { + resolve(data); + }); + }); + }); +} + +// Convert the JavaScript string provided from the user (assumed to be `str` var) +str = degenerator(str, [ 'get' ]); + +// Turn the JS String into a real async function instance +const asyncFn = vm.runInNewContext(`(${str})`, { get }); + +// Now we can invoke the function asynchronously +asyncFn().then((res) => { + // Do something with `res`... +}); +``` + + +API +--- + +### degenerator(code: string, names: Array): String + +Returns a "degeneratorified" JavaScript string, with `async`/`await` transplanted. + + +License +------- + +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## degenerator - 7.0.1 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## delayed-stream - 1.0.0 +**Repository URL**: https://github.com/felixge/node-delayed-stream +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2011 Debuggable Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## depd - 2.0.0 +**Repository URL**: https://github.com/dougwilson/nodejs-depd +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014-2018 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## diff - 8.0.4 +**Repository URL**: https://github.com/kpdecker/jsdiff +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +BSD 3-Clause License + +Copyright (c) 2009-2015, Kevin Decker +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## dijkstrajs - 1.0.3 +**Repository URL**: https://github.com/tcort/dijkstrajs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +``` +Dijkstra path-finding functions. Adapted from the Dijkstar Python project. + +Copyright (C) 2008 + Wyatt Baldwin + All rights reserved + +Licensed under the MIT license. + + http://www.opensource.org/licenses/mit-license.php + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +`````` + +## dom-serializer - 2.0.0 +**Repository URL**: https://github.com/cheeriojs/dom-serializer +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +License + +(The MIT License) + +Copyright (c) 2014 The cheeriojs contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## domelementtype - 2.3.0 +**Repository URL**: https://github.com/fb55/domelementtype +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## domhandler - 5.0.3 +**Repository URL**: https://github.com/fb55/domhandler +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## domutils - 3.2.2 +**Repository URL**: https://github.com/fb55/domutils +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## dotenv - 16.6.1 +**Repository URL**: https://github.com/motdotla/dotenv +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) 2015, Scott Motte +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## dotenv - 17.4.2 +**Repository URL**: https://github.com/motdotla/dotenv +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) 2015, Scott Motte +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## dunder-proto - 1.0.1 +**Repository URL**: https://github.com/es-shims/dunder-proto +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## ecdsa-sig-formatter - 1.0.11 +**Repository URL**: https://github.com/Brightspace/node-ecdsa-sig-formatter +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 D2L Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## ee-first - 1.1.1 +**Repository URL**: https://github.com/jonathanong/ee-first +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## emoji-regex - 8.0.0 +**Repository URL**: https://github.com/mathiasbynens/emoji-regex +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## encodeurl - 2.0.0 +**Repository URL**: https://github.com/pillarjs/encodeurl +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## end-of-stream - 1.4.5 +**Repository URL**: https://github.com/mafintosh/end-of-stream +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## entities - 4.5.0 +**Repository URL**: https://github.com/fb55/entities +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## entities - 7.0.1 +**Repository URL**: https://github.com/fb55/entities +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## es-define-property - 1.0.1 +**Repository URL**: https://github.com/ljharb/es-define-property +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## es-errors - 1.3.0 +**Repository URL**: https://github.com/ljharb/es-errors +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## es-object-atoms - 1.1.1 +**Repository URL**: https://github.com/ljharb/es-object-atoms +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## es-set-tostringtag - 2.1.0 +**Repository URL**: https://github.com/es-shims/es-set-tostringtag +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2022 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## escalade - 3.2.0 +**Repository URL**: https://github.com/lukeed/escalade +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Luke Edwards (lukeed.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## escape-html - 1.0.3 +**Repository URL**: https://github.com/component/escape-html +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2012-2013 TJ Holowaychuk +Copyright (c) 2015 Andreas Lubbe +Copyright (c) 2015 Tiancheng "Timothy" Gu + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## escape-string-regexp - 4.0.0 +**Repository URL**: https://github.com/sindresorhus/escape-string-regexp +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## escodegen - 2.1.0 +**Repository URL**: https://github.com/estools/escodegen +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (C) 2012 Yusuke Suzuki (twitter: @Constellation) and other contributors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## esprima - 4.0.1 +**Repository URL**: https://github.com/jquery/esprima +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright JS Foundation and other contributors, https://js.foundation/ + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## estraverse - 5.3.0 +**Repository URL**: https://github.com/estools/estraverse +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## esutils - 2.0.3 +**Repository URL**: https://github.com/estools/esutils +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## etag - 1.8.1 +**Repository URL**: https://github.com/jshttp/etag +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014-2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## event-target-shim - 5.0.1 +**Repository URL**: https://github.com/mysticatea/event-target-shim +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2015 Toru Nagashima + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## eventemitter3 - 4.0.7 +**Repository URL**: https://github.com/primus/eventemitter3 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Arnout Kazemier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## eventemitter3 - 5.0.4 +**Repository URL**: https://github.com/primus/eventemitter3 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Arnout Kazemier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## eventsource-parser - 3.0.8 +**Repository URL**: https://github.com/rexxars/eventsource-parser +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2026 Espen Hovlandsdal + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## eventsource - 3.0.7 +**Repository URL**: git://git@github.com/EventSource/eventsource +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License + +Copyright (c) EventSource GitHub organisation + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## express-rate-limit - 8.5.1 +**Repository URL**: https://github.com/express-rate-limit/express-rate-limit +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# MIT License + +Copyright 2023 Nathan Friedly, Vedant K + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## express - 5.2.1 +**Repository URL**: https://github.com/expressjs/express +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2009-2014 TJ Holowaychuk +Copyright (c) 2013-2014 Roman Shtylman +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## extend - 3.0.2 +**Repository URL**: https://github.com/justmoon/node-extend +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Stefan Thomas + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## extract-zip - 2.0.1 +**Repository URL**: https://github.com/maxogden/extract-zip +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) 2014 Max Ogden and other contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## fast-deep-equal - 3.1.3 +**Repository URL**: https://github.com/epoberezkin/fast-deep-equal +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2017 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## fast-string-truncated-width - 3.0.3 +**Repository URL**: https://github.com/fabiospampinato/fast-string-truncated-width +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2024-present Fabio Spampinato + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE.``` + +## fast-string-width - 3.0.2 +**Repository URL**: https://github.com/fabiospampinato/fast-string-width +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2024-present Fabio Spampinato + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE.``` + +## fast-uri - 3.1.2 +**Repository URL**: https://github.com/fastify/fast-uri +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2011-2021, Gary Court until https://github.com/garycourt/uri-js/commit/a1acf730b4bba3f1097c9f52e7d9d3aba8cdcaae +Copyright (c) 2021-present The Fastify team +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The names of any contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * * * + +The complete list of contributors can be found at: +- https://github.com/garycourt/uri-js/graphs/contributors``` + +## fast-wrap-ansi - 0.2.0 +**Repository URL**: https://github.com/43081j/fast-wrap-ansi +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2025 James Garbutt + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## fast-xml-builder - 1.1.9 +**Repository URL**: https://github.com/NaturalIntelligence/fast-xml-builder +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2026 Natural Intelligence + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## fast-xml-parser - 5.7.2 +**Repository URL**: https://github.com/NaturalIntelligence/fast-xml-parser +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2017 Amit Kumar Gupta + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## fd-slicer - 1.1.0 +**Repository URL**: https://github.com/andrewrk/node-fd-slicer +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2014 Andrew Kelley + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## fetch-blob - 3.2.0 +**Repository URL**: https://github.com/node-fetch/fetch-blob +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2019 David Frank + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## file-type - 21.3.4 +**Repository URL**: https://github.com/sindresorhus/file-type +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## file-type - 22.0.1 +**Repository URL**: https://github.com/sindresorhus/file-type +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## finalhandler - 2.1.1 +**Repository URL**: https://github.com/pillarjs/finalhandler +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## find-up - 4.1.0 +**Repository URL**: https://github.com/sindresorhus/find-up +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## find-up - 5.0.0 +**Repository URL**: https://github.com/sindresorhus/find-up +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## follow-redirects - 1.16.0 +**Repository URL**: https://github.com/follow-redirects/follow-redirects +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2014–present Olivier Lalonde , James Talmage , Ruben Verborgh + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## foreground-child - 3.3.1 +**Repository URL**: https://github.com/tapjs/foreground-child +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License + +Copyright (c) 2015-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## form-data - 4.0.5 +**Repository URL**: https://github.com/form-data/form-data +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE.``` + +## formdata-polyfill - 4.0.10 +**Repository URL**: git+https://jimmywarting@github.com/jimmywarting/FormData +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2016 Jimmy Karl Roland Wärting + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## forwarded - 0.2.0 +**Repository URL**: https://github.com/jshttp/forwarded +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014-2017 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## fresh - 2.0.0 +**Repository URL**: https://github.com/jshttp/fresh +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk +Copyright (c) 2016-2017 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## function-bind - 1.1.2 +**Repository URL**: https://github.com/Raynos/function-bind +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2013 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## gaxios - 6.7.1 +**Repository URL**: https://github.com/googleapis/gaxios +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## gaxios - 7.1.4 +**Repository URL**: https://github.com/googleapis/google-cloud-node-core +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## gcp-metadata - 6.1.1 +**Repository URL**: https://github.com/googleapis/gcp-metadata +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## gcp-metadata - 8.1.2 +**Repository URL**: https://github.com/googleapis/google-cloud-node-core +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## get-caller-file - 2.0.5 +**Repository URL**: https://github.com/stefanpenner/get-caller-file +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +ISC License (ISC) +Copyright 2018 Stefan Penner + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +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.``` + +## get-east-asian-width - 1.5.0 +**Repository URL**: https://github.com/sindresorhus/get-east-asian-width +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## get-intrinsic - 1.3.0 +**Repository URL**: https://github.com/ljharb/get-intrinsic +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2020 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## get-proto - 1.0.1 +**Repository URL**: https://github.com/ljharb/get-proto +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2025 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## get-stream - 5.2.0 +**Repository URL**: https://github.com/sindresorhus/get-stream +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## get-uri - 6.0.5 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## get-uri - 8.0.0 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## glob - 13.0.6 +**Repository URL**: https://github.com/isaacs/node-glob +**License Type(s)**: BlueOak-1.0.0 +### License: https://spdx.org/licenses/BlueOak-1.0.0.html +``` +All packages under `src/` are licensed according to the terms in +their respective `LICENSE` or `LICENSE.md` files. + +The remainder of this project is licensed under the Blue Oak +Model License, as follows: + +----- + +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.***``` + +## global-agent - 4.1.3 +**Repository URL**: https://github.com/gajus/global-agent +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2026, Gajus Kuizinas (https://gajus.com/) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Gajus Kuizinas (https://gajus.com/) nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL ANUARY BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## globalthis - 1.0.4 +**Repository URL**: https://github.com/ljharb/System.global +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2016 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## google-auth-library - 10.6.2 +**Repository URL**: https://github.com/googleapis/google-cloud-node-core +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## google-auth-library - 9.15.1 +**Repository URL**: https://github.com/googleapis/google-auth-library-nodejs +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## google-logging-utils - 0.0.2 +**Repository URL**: https://github.com/googleapis/gax-nodejs +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## google-logging-utils - 1.1.3 +**Repository URL**: https://github.com/googleapis/google-cloud-node-core +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## gopd - 1.2.0 +**Repository URL**: https://github.com/ljharb/gopd +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2022 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## graceful-fs - 4.2.11 +**Repository URL**: https://github.com/isaacs/node-graceful-fs +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License + +Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## grammy - 1.42.0 +**Repository URL**: https://github.com/grammyjs/grammY +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021-2024 KnorpelSenf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## gtoken - 7.1.0 +**Repository URL**: https://github.com/google/node-gtoken +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Ryan Seys + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## has-flag - 4.0.0 +**Repository URL**: https://github.com/sindresorhus/has-flag +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## has-property-descriptors - 1.0.2 +**Repository URL**: https://github.com/inspect-js/has-property-descriptors +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2022 Inspect JS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## has-symbols - 1.1.0 +**Repository URL**: https://github.com/inspect-js/has-symbols +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2016 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## has-tostringtag - 1.0.2 +**Repository URL**: https://github.com/inspect-js/has-tostringtag +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021 Inspect JS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## hasown - 2.0.3 +**Repository URL**: https://github.com/inspect-js/hasOwn +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Jordan Harband and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## highlight.js - 10.7.3 +**Repository URL**: https://github.com/highlightjs/highlight.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +BSD 3-Clause License + +Copyright (c) 2006, Ivan Sagalaev. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## hono - 4.12.18 +**Repository URL**: https://github.com/honojs/hono +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021 - present, Yusuke Wada and Hono contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## hosted-git-info - 9.0.3 +**Repository URL**: https://github.com/npm/hosted-git-info +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2015, Rebecca Turner + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## html-escaper - 2.0.2 +**Repository URL**: https://github.com/WebReflection/html-escaper +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## html-escaper - 3.0.3 +**Repository URL**: https://github.com/WebReflection/html-escaper +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## htmlparser2 - 10.1.0 +**Repository URL**: https://github.com/fb55/htmlparser2 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2010, 2011, Chris Winberry . All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE.``` + +## http-errors - 2.0.1 +**Repository URL**: https://github.com/jshttp/http-errors +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com +Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## http-proxy-agent - 7.0.2 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## http-proxy-agent - 9.0.0 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## http_ece - 1.2.0 +**Repository URL**: https://github.com/martinthomson/encrypted-content-encoding +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# encrypted-content-encoding + +A simple implementation of the [HTTP encrypted +content-encoding](https://tools.ietf.org/html/rfc8188) + +# Use + +```js +var ece = require('http_ece'); +var crypto = require('crypto') + +var parameters = { + key: crypto.randomBytes(16).toString('base64url'), + salt: crypto.randomBytes(16).toString('base64url') +}; +var encrypted = ece.encrypt(data, parameters); + +var decrypted = ece.decrypt(encrypted, parameters); + +require('assert').equal(decrypted.compare(data), 0); +``` + +This also supports the static-ephemeral ECDH mode. The source explains how. + +# TODO + +Use the node streams API instead of the legacy APIs.``` + +## https-proxy-agent - 7.0.6 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## https-proxy-agent - 9.0.0 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## iconv-lite - 0.7.2 +**Repository URL**: https://github.com/pillarjs/iconv-lite +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2011 Alexander Shtuchkin + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## ieee754 - 1.2.1 +**Repository URL**: https://github.com/feross/ieee754 +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright 2008 Fair Oaks Labs, Inc. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## ignore - 7.0.5 +**Repository URL**: https://github.com/kaelzhang/node-ignore +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2013 Kael Zhang , contributors +http://kael.me/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## immediate - 3.0.6 +**Repository URL**: https://github.com/calvinmetcalf/immediate +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, Domenic Denicola, Brian Cavalier + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## inherits - 2.0.4 +**Repository URL**: https://github.com/isaacs/inherits +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## ip-address - 10.2.0 +**Repository URL**: https://github.com/beaugunderson/ip-address +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (C) 2011 by Beau Gunderson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## ipaddr.js - 1.9.1 +**Repository URL**: https://github.com/whitequark/ipaddr.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (C) 2011-2017 whitequark + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## ipaddr.js - 2.4.0 +**Repository URL**: https://github.com/whitequark/ipaddr.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (C) 2011-2017 whitequark + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## is-electron - 2.2.2 +**Repository URL**: https://github.com/cheton/is-electron +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2016-2018 Cheton Wu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## is-fullwidth-code-point - 3.0.0 +**Repository URL**: https://github.com/sindresorhus/is-fullwidth-code-point +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## is-promise - 4.0.0 +**Repository URL**: https://github.com/then/is-promise +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2014 Forbes Lindesay + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## is-stream - 2.0.1 +**Repository URL**: https://github.com/sindresorhus/is-stream +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## isarray - 1.0.0 +**Repository URL**: https://github.com/juliangruber/isarray +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# isarray + +`Array#isArray` for older browsers. + +[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) +[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) + +[![browser support](https://ci.testling.com/juliangruber/isarray.png) +](https://ci.testling.com/juliangruber/isarray) + +## Usage + +```js +var isArray = require('isarray'); + +console.log(isArray([])); // => true +console.log(isArray({})); // => false +``` + +## Installation + +With [npm](http://npmjs.org) do + +```bash +$ npm install isarray +``` + +Then bundle for the browser with +[browserify](https://github.com/substack/browserify). + +With [component](http://component.io) do + +```bash +$ component install juliangruber/isarray +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## isexe - 2.0.0 +**Repository URL**: https://github.com/isaacs/isexe +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## istanbul-lib-coverage - 3.2.2 +**Repository URL**: https://github.com/istanbuljs/istanbuljs +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright 2012-2015 Yahoo! Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Yahoo! Inc. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## istanbul-lib-report - 3.0.1 +**Repository URL**: https://github.com/istanbuljs/istanbuljs +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright 2012-2015 Yahoo! Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Yahoo! Inc. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## istanbul-reports - 3.2.0 +**Repository URL**: https://github.com/istanbuljs/istanbuljs +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright 2012-2015 Yahoo! Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Yahoo! Inc. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## jiti - 2.7.0 +**Repository URL**: https://github.com/unjs/jiti +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## jose - 6.2.3 +**Repository URL**: https://github.com/panva/jose +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2018 Filip Skokan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## json-bigint - 1.0.0 +**Repository URL**: https://github.com/sidorares/json-bigint +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2013 Andrey Sidorov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## json-schema-to-ts - 3.1.1 +**Repository URL**: https://github.com/ThomasAribart/json-schema-to-ts +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2020 Thomas Aribart + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## json-schema-traverse - 1.0.0 +**Repository URL**: https://github.com/epoberezkin/json-schema-traverse +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2017 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## json-schema-typed - 8.0.2 +**Repository URL**: https://github.com/RemyRylan/json-schema-typed +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +BSD 2-Clause License + +Original source code is copyright (c) 2019-2025 Remy Rylan + + +All JSON Schema documentation and descriptions are copyright (c): + +2009 [draft-0] IETF Trust , Kris Zyp , +and SitePen (USA) . + +2009 [draft-1] IETF Trust , Kris Zyp , +and SitePen (USA) . + +2010 [draft-2] IETF Trust , Kris Zyp , +and SitePen (USA) . + +2010 [draft-3] IETF Trust , Kris Zyp , +Gary Court , and SitePen (USA) . + +2013 [draft-4] IETF Trust ), Francis Galiegue +, Kris Zyp , Gary Court +, and SitePen (USA) . + +2018 [draft-7] IETF Trust , Austin Wright , +Henry Andrews , Geraint Luff , and +Cloudflare, Inc. . + +2019 [draft-2019-09] IETF Trust , Austin Wright +, Henry Andrews , Ben Hutton +, and Greg Dennis . + +2020 [draft-2020-12] IETF Trust , Austin Wright +, Henry Andrews , Ben Hutton +, and Greg Dennis . + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## json5 - 2.2.3 +**Repository URL**: https://github.com/json5/json5 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2012-2018 Aseem Kishore, and [others]. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +[others]: https://github.com/json5/json5/contributors``` + +## jsonwebtoken - 9.0.3 +**Repository URL**: https://github.com/auth0/node-jsonwebtoken +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2015 Auth0, Inc. (http://auth0.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## jszip - 3.10.1 +**Repository URL**: https://github.com/Stuk/jszip +**License Type(s)**: (MIT OR GPL-3.0-or-later) +### License: https://spdx.org/licenses/ +``` +JSZip is dual licensed. At your choice you may use it under the MIT license *or* the GPLv3 +license. + +The MIT License +=============== + +Copyright (c) 2009-2016 Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +GPL version 3 +============= + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS``` + +## jwa - 2.0.1 +**Repository URL**: https://github.com/brianloveswords/node-jwa +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2013 Brian J. Brennan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## jws - 4.0.1 +**Repository URL**: https://github.com/brianloveswords/node-jws +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2013 Brian J. Brennan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## lie - 3.3.0 +**Repository URL**: https://github.com/calvinmetcalf/lie +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +#Copyright (c) 2014-2018 Calvin Metcalf, Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.**``` + +## linkedom - 0.18.12 +**Repository URL**: https://github.com/WebReflection/linkedom +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +ISC License + +Copyright (c) 2021, Andrea Giammarchi, @WebReflection + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## linkify-it - 5.0.0 +**Repository URL**: https://github.com/markdown-it/linkify-it +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2015 Vitaly Puzrin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE.``` + +## locate-path - 5.0.0 +**Repository URL**: https://github.com/sindresorhus/locate-path +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## locate-path - 6.0.0 +**Repository URL**: https://github.com/sindresorhus/locate-path +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## lodash.includes - 4.3.0 +**Repository URL**: https://github.com/lodash/lodash +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above.``` + +## lodash.isboolean - 3.0.3 +**Repository URL**: https://github.com/lodash/lodash +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2012-2016 The Dojo Foundation +Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## lodash.isinteger - 4.0.4 +**Repository URL**: https://github.com/lodash/lodash +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above.``` + +## lodash.isnumber - 3.0.3 +**Repository URL**: https://github.com/lodash/lodash +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2012-2016 The Dojo Foundation +Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## lodash.isplainobject - 4.0.6 +**Repository URL**: https://github.com/lodash/lodash +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above.``` + +## lodash.isstring - 4.0.1 +**Repository URL**: https://github.com/lodash/lodash +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright 2012-2016 The Dojo Foundation +Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## lodash.once - 4.1.1 +**Repository URL**: https://github.com/lodash/lodash +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above.``` + +## long - 5.3.2 +**Repository URL**: https://github.com/dcodeIO/long.js +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## lru-cache - 11.2.7 +**Repository URL**: https://github.com/isaacs/node-lru-cache +**License Type(s)**: BlueOak-1.0.0 +### License: https://spdx.org/licenses/BlueOak-1.0.0.html +``` +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.***``` + +## lru-cache - 11.3.6 +**Repository URL**: https://github.com/isaacs/node-lru-cache +**License Type(s)**: BlueOak-1.0.0 +### License: https://spdx.org/licenses/BlueOak-1.0.0.html +``` +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.***``` + +## lru-cache - 7.18.3 +**Repository URL**: https://github.com/isaacs/node-lru-cache +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License + +Copyright (c) 2010-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## lunr - 2.3.9 +**Repository URL**: https://github.com/olivernn/lunr.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (C) 2013 by Oliver Nightingale + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## make-dir - 4.0.0 +**Repository URL**: https://github.com/sindresorhus/make-dir +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## markdown-it - 14.1.1 +**Repository URL**: https://github.com/markdown-it/markdown-it +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE.``` + +## marked - 15.0.12 +**Repository URL**: https://github.com/markedjs/marked +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# License information + +## Contribution License Agreement + +If you contribute code to this project, you are implicitly allowing your code +to be distributed under the MIT license. You are also implicitly verifying that +all code is your original work. `` + +## Marked + +Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/) +Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +## Markdown + +Copyright © 2004, John Gruber +http://daringfireball.net/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.``` + +## matcher - 4.0.0 +**Repository URL**: https://github.com/sindresorhus/matcher +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## math-intrinsics - 1.1.0 +**Repository URL**: https://github.com/es-shims/math-intrinsics +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## mdurl - 2.0.0 +**Repository URL**: https://github.com/markdown-it/mdurl +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +.parse() is based on Joyent's node.js `url` code: + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE.``` + +## media-typer - 1.1.0 +**Repository URL**: https://github.com/jshttp/media-typer +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014-2017 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## merge-descriptors - 2.0.0 +**Repository URL**: https://github.com/sindresorhus/merge-descriptors +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Jonathan Ong +Copyright (c) Douglas Christopher Wilson +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## mime-db - 1.52.0 +**Repository URL**: https://github.com/jshttp/mime-db +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## mime-db - 1.54.0 +**Repository URL**: https://github.com/jshttp/mime-db +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## mime-types - 2.1.35 +**Repository URL**: https://github.com/jshttp/mime-types +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## mime-types - 3.0.2 +**Repository URL**: https://github.com/jshttp/mime-types +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## minimalistic-assert - 1.0.1 +**Repository URL**: https://github.com/calvinmetcalf/minimalistic-assert +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright 2015 Calvin Metcalf + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +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.``` + +## minimatch - 10.2.5 +**Repository URL**: https://github.com/isaacs/minimatch +**License Type(s)**: BlueOak-1.0.0 +### License: https://spdx.org/licenses/BlueOak-1.0.0.html +``` +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +**_As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim._**``` + +## minimist - 1.2.8 +**Repository URL**: https://github.com/minimistjs/minimist +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## minipass - 7.1.3 +**Repository URL**: https://github.com/isaacs/minipass +**License Type(s)**: BlueOak-1.0.0 +### License: https://spdx.org/licenses/BlueOak-1.0.0.html +``` +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.***``` + +## minizlib - 3.1.0 +**Repository URL**: https://github.com/isaacs/minizlib +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Minizlib was created by Isaac Z. Schlueter. +It is a derivative work of the Node.js project. + +""" +Copyright (c) 2017-2023 Isaac Z. Schlueter and Contributors +Copyright (c) 2017-2023 Node.js contributors. All rights reserved. +Copyright (c) 2017-2023 Joyent, Inc. and other Node contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +"""``` + +## mri - 1.2.0 +**Repository URL**: https://github.com/lukeed/mri +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) Luke Edwards (lukeed.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## ms - 2.1.3 +**Repository URL**: https://github.com/vercel/ms +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2020 Vercel, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## mz - 2.7.0 +**Repository URL**: https://github.com/normalize/mz +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## negotiator - 1.0.0 +**Repository URL**: https://github.com/jshttp/negotiator +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2012-2014 Federico Romero +Copyright (c) 2012-2014 Isaac Z. Schlueter +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## netmask - 2.1.1 +**Repository URL**: https://github.com/rs/node-netmask +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2011 Olivier Poitrey rs@rhapsodyk.net + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## node-addon-api - 8.7.0 +**Repository URL**: https://github.com/nodejs/node-addon-api +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2017 [Node.js API collaborators](https://github.com/nodejs/node-addon-api#collaborators) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## node-domexception - 1.0.0 +**Repository URL**: https://github.com/jimmywarting/node-domexception +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2021 Jimmy Wärting + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## node-edge-tts - 1.2.10 +**Repository URL**: https://github.com/SchneeHertz/node-edge-tts +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2022 SchneeHertz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## node-fetch - 2.7.0 +**Repository URL**: https://github.com/bitinn/node-fetch +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2016 David Frank + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## node-fetch - 3.3.2 +**Repository URL**: https://github.com/node-fetch/node-fetch +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2016 - 2020 Node Fetch Team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## node-gyp-build - 4.8.4 +**Repository URL**: https://github.com/prebuild/node-gyp-build +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2017 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## nth-check - 2.1.1 +**Repository URL**: https://github.com/fb55/nth-check +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## object-assign - 4.1.1 +**Repository URL**: https://github.com/sindresorhus/object-assign +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## object-inspect - 1.13.4 +**Repository URL**: https://github.com/inspect-js/object-inspect +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2013 James Halliday + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## object-keys - 1.1.1 +**Repository URL**: https://github.com/ljharb/object-keys +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (C) 2013 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## on-finished - 2.4.1 +**Repository URL**: https://github.com/jshttp/on-finished +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Jonathan Ong +Copyright (c) 2014 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## once - 1.4.0 +**Repository URL**: https://github.com/isaacs/once +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## openai - 6.26.0 +**Repository URL**: https://github.com/openai/openai-node +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 OpenAI + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## openai - 6.36.0 +**Repository URL**: https://github.com/openai/openai-node +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 OpenAI + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## openclaw - 2026.5.6 +**Repository URL**: https://github.com/openclaw/openclaw +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2025 Peter Steinberger + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## openshell - 0.1.0 +**Repository URL**: https://www.npmjs.com/package/openshell +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2026 Jason + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## p-finally - 1.0.0 +**Repository URL**: https://github.com/sindresorhus/p-finally +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## p-limit - 2.3.0 +**Repository URL**: https://github.com/sindresorhus/p-limit +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## p-limit - 3.1.0 +**Repository URL**: https://github.com/sindresorhus/p-limit +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## p-locate - 4.1.0 +**Repository URL**: https://github.com/sindresorhus/p-locate +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## p-locate - 5.0.0 +**Repository URL**: https://github.com/sindresorhus/p-locate +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## p-queue - 6.6.2 +**Repository URL**: https://github.com/sindresorhus/p-queue +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## p-retry - 4.6.2 +**Repository URL**: https://github.com/sindresorhus/p-retry +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## p-timeout - 3.2.0 +**Repository URL**: https://github.com/sindresorhus/p-timeout +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## p-timeout - 4.1.0 +**Repository URL**: https://github.com/sindresorhus/p-timeout +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## p-try - 2.2.0 +**Repository URL**: https://github.com/sindresorhus/p-try +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## pac-proxy-agent - 7.2.0 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## pac-proxy-agent - 9.0.1 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## pac-resolver - 7.0.1 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## pac-resolver - 9.0.1 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## pako - 1.0.11 +**Repository URL**: https://github.com/nodeca/pako +**License Type(s)**: (MIT AND Zlib) +### License: https://spdx.org/licenses/ +``` +(The MIT License) + +Copyright (C) 2014-2017 by Vitaly Puzrin and Andrei Tuputcyn + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## parse5-htmlparser2-tree-adapter - 6.0.1 +**Repository URL**: https://github.com/inikulin/parse5 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## parse5 - 5.1.1 +**Repository URL**: https://github.com/inikulin/parse5 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## parse5 - 6.0.1 +**Repository URL**: https://github.com/inikulin/parse5 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## parseurl - 1.3.3 +**Repository URL**: https://github.com/pillarjs/parseurl +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2014-2017 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## partial-json - 0.1.7 +**Repository URL**: https://github.com/promplate/partial-json-parser-js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2023 Promplate Dev Team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## path-exists - 4.0.0 +**Repository URL**: https://github.com/sindresorhus/path-exists +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## path-expression-matcher - 1.5.0 +**Repository URL**: https://github.com/NaturalIntelligence/path-expression-matcher +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## path-key - 3.1.1 +**Repository URL**: https://github.com/sindresorhus/path-key +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## path-scurry - 2.0.2 +**Repository URL**: https://github.com/isaacs/path-scurry +**License Type(s)**: BlueOak-1.0.0 +### License: https://spdx.org/licenses/BlueOak-1.0.0.html +``` +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.***``` + +## path-to-regexp - 8.4.2 +**Repository URL**: https://github.com/pillarjs/path-to-regexp +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## pdfjs-dist - 5.7.284 +**Repository URL**: https://github.com/mozilla/pdf.js +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS``` + +## pend - 1.2.0 +**Repository URL**: https://github.com/andrewrk/node-pend +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (Expat) + +Copyright (c) 2014 Andrew Kelley + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## pkce-challenge - 5.0.1 +**Repository URL**: https://github.com/crouchcd/pkce-challenge +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2019 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## playwright-core - 1.59.1 +**Repository URL**: https://github.com/microsoft/playwright +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Portions Copyright (c) Microsoft Corporation. + Portions Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## pngjs - 5.0.0 +**Repository URL**: https://github.com/lukeapage/pngjs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +pngjs2 original work Copyright (c) 2015 Luke Page & Original Contributors +pngjs derived work Copyright (c) 2012 Kuba Niegowski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## prettier - 3.8.2 +**Repository URL**: https://github.com/prettier/prettier +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright © James Long and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## process-nextick-args - 2.0.1 +**Repository URL**: https://github.com/calvinmetcalf/process-nextick-args +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# Copyright (c) 2015 Calvin Metcalf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.**``` + +## proper-lockfile - 4.1.2 +**Repository URL**: https://github.com/moxystudio/node-proper-lockfile +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2018 Made With MOXY Lda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## protobufjs - 7.5.6 +**Repository URL**: https://github.com/protobufjs/protobuf.js +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +This license applies to all parts of protobuf.js except those files +either explicitly including or referencing a different license or +located in a directory containing a different LICENSE file. + +--- + +Copyright (c) 2016, Daniel Wirtz All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of its author, nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- + +Code generated by the command line utilities is owned by the owner +of the input file used when generating it. This code is not +standalone and requires a support library to be linked with it. This +support library is itself covered by the above license.``` + +## proxy-addr - 2.0.7 +**Repository URL**: https://github.com/jshttp/proxy-addr +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2014-2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## proxy-agent - 6.5.0 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## proxy-agent - 8.0.1 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## proxy-from-env - 1.1.0 +**Repository URL**: https://github.com/Rob--W/proxy-from-env +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License + +Copyright (C) 2016-2018 Rob Wu + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## proxy-from-env - 2.1.0 +**Repository URL**: https://github.com/Rob--W/proxy-from-env +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License + +Copyright (C) 2016-2018 Rob Wu + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## pump - 3.0.4 +**Repository URL**: https://github.com/mafintosh/pump +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## punycode.js - 2.3.1 +**Repository URL**: https://github.com/mathiasbynens/punycode.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## qrcode - 1.5.4 +**Repository URL**: https://github.com/soldair/node-qrcode +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2012 Ryan Day + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## qs - 6.15.1 +**Repository URL**: https://github.com/ljharb/qs +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +BSD 3-Clause License + +Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## quickjs-wasi - 2.2.0 +**Repository URL**: https://github.com/vercel-labs/quickjs-wasi +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +# quickjs-wasi + +A snapshotable JavaScript runtime via WebAssembly. Runs [QuickJS](https://github.com/quickjs-ng/quickjs) compiled to WASM, with the ability to **snapshot the entire VM state** (including pending promises) and **restore it in a fresh WASM instance**. + +## Install + +```sh +npm install quickjs-wasi +``` + +## Usage + +### Basic Evaluation + +Both `QuickJS` and `JSValueHandle` implement `Symbol.dispose`, so you can use `using` declarations for automatic cleanup: + +```typescript +import { QuickJS } from 'quickjs-wasi'; + +{ + using vm = await QuickJS.create(wasmBytes); + + // Evaluate code — handles are auto-disposed with `using` + using result = vm.evalCode('1 + 2'); + console.log(result.toNumber()); // 3 +} // vm and result are automatically disposed here +``` + +### Working with Values + +```typescript +using vm = await QuickJS.create(wasmBytes); + +// Create values — `using` ensures they're disposed at end of scope +{ + using str = vm.newString('hello'); + using num = vm.newNumber(42); + using big = vm.newBigInt(9007199254740993n); + vm.setProp(vm.global, 'message', str); +} + +// Read back the value +using msg = vm.evalCode('message'); +console.log(msg.toString()); // "hello" + +// Convert host values to QuickJS handles (and back) +using handle = vm.hostToHandle({ x: 1, y: [2, 3] }); +const dumped = vm.dump(handle); // { x: 1, y: [2, 3] } + +// consume() is still useful for inline one-liners +const value = vm.evalCode('1 + 2').consume(h => h.toNumber()); // 3 +``` + +### Host Functions + +Register JavaScript functions backed by host (Node.js) callbacks: + +```typescript +using vm = await QuickJS.create(wasmBytes); + +// The first argument to the callback is always `this` +{ + using add = vm.newFunction('add', (...args) => { + return vm.newNumber(args[0].toNumber() + args[1].toNumber()); + }); + vm.setProp(vm.global, 'add', add); +} + +using result = vm.evalCode('add(3, 4)'); +console.log(result.toNumber()); // 7 +``` + +### Promises and Async Host Functions + +Bridge async host operations into the QuickJS sandbox: + +```typescript +using vm = await QuickJS.create(wasmBytes); + +// Create an async host function that returns a promise to QuickJS +{ + using dnsResolve = vm.newFunction('dnsResolve', (...args) => { + const hostname = args[0].toString(); + const deferred = vm.newPromise(); + + // Do real async work on the host side + dns.resolve4(hostname).then( + (addresses) => { + deferred.resolve(vm.newString(addresses[0])); + vm.executePendingJobs(); // drain the QuickJS job queue + }, + (err) => { + deferred.reject(vm.newError(err)); + vm.executePendingJobs(); + } + ); + + return deferred.handle; // return the QuickJS promise + }); + vm.setProp(vm.global, 'dnsResolve', dnsResolve); +} +``` + +### Error Handling + +```typescript +using vm = await QuickJS.create(wasmBytes); + +// evalCode() throws a JSException if the evaluated code throws +try { + vm.evalCode('throw new TypeError("bad")'); +} catch (err) { + console.log(err.name); // "TypeError" + console.log(err.message); // "bad" + console.log(err.stack); // QuickJS stack trace +} + +// Create errors from host Error objects (preserves name, message, stack) +{ + using errHandle = vm.newError(new RangeError('out of bounds')); + vm.setProp(vm.global, 'hostError', errHandle); +} +``` + +### WASI Overrides + +The `wasi` option lets you override any `wasi_snapshot_preview1` host function. It's a factory that receives the WASM linear memory and returns an object of override functions. Overrides apply to both the main module and all loaded extensions. + +This is useful for deterministic execution — QuickJS uses a [xorshift64*](https://en.wikipedia.org/wiki/Xorshift) PRNG that is seeded once from the clock value during context creation. Override `clock_time_get` to control both `Date.now()` and the `Math.random()` seed: + +```typescript +const fixedClock = (memory: WebAssembly.Memory) => ({ + clock_time_get(_clockId: number, _precision: bigint, resultPtr: number) { + new DataView(memory.buffer).setBigUint64(resultPtr, 1700000000000n * 1_000_000n, true); + return 0; + }, +}); + +using vm1 = await QuickJS.create({ wasm: wasmBytes, wasi: fixedClock }); +using vm2 = await QuickJS.create({ wasm: wasmBytes, wasi: fixedClock }); + +vm1.evalCode('Math.random()').consume(h => h.toNumber()); +// => 0.8130834347906803 + +vm2.evalCode('Math.random()').consume(h => h.toNumber()); +// => 0.8130834347906803 (identical) +``` + +Override `random_get` to control the crypto extension's RNG: + +```typescript +using vm = await QuickJS.create({ + wasm: wasmBytes, + wasi: (memory) => ({ + random_get(bufPtr: number, bufLen: number) { + new Uint8Array(memory.buffer, bufPtr, bufLen).fill(0x42); // deterministic + return 0; + }, + }), + extensions: [cryptoExtension], +}); +``` + +The time can also be advanced between calls for realistic behavior: + +```typescript +let currentTime = 1700000000000n; +using vm = await QuickJS.create({ + wasm: wasmBytes, + wasi: (memory) => ({ + clock_time_get(_clockId: number, _precision: bigint, resultPtr: number) { + new DataView(memory.buffer).setBigUint64(resultPtr, currentTime * 1_000_000n, true); + return 0; + }, + }), +}); + +vm.evalCode('Date.now()').consume(h => h.toNumber()); // 1700000000000 +currentTime += 1000n; // advance 1 second +vm.evalCode('Date.now()').consume(h => h.toNumber()); // 1700000001000 +``` + +### Memory Limits + +Restrict how much memory the QuickJS runtime can allocate. When exceeded, allocations fail and surface as JS exceptions: + +```typescript +using vm = await QuickJS.create({ + wasm: wasmBytes, + memoryLimit: 4 * 1024 * 1024, // 4 MB +}); + +vm.evalCode(` + try { + const huge = new Array(10000000).fill("x".repeat(1000)); + } catch (e) { + console.log(e.message); // allocation failure + } +`); +``` + +The limit is re-applied after `QuickJS.restore()`, so you can use a different limit for restored VMs than the original. + +### Interrupt Handler + +Prevent infinite loops and enforce execution timeouts: + +```typescript +const start = Date.now(); +using vm = await QuickJS.create({ + wasm: wasmBytes, + interruptHandler: () => { + // Return true to interrupt — called periodically during JS execution + return Date.now() - start > 5000; // 5 second timeout + }, +}); + +try { + vm.evalCode('while (true) {}'); +} catch (err) { + // JSException — interrupted + err.dispose(); +} + +// VM is still usable after an interrupt +vm.evalCode('1 + 2').consume(h => h.toNumber()); // 3 +``` + +The handler is called approximately once per JS bytecode instruction, so it should be fast. When it returns `true`, the current execution is interrupted and throws a `JSException`. The VM remains usable after an interrupt. + +### Timezone Offset + +By default, `Date` inside the sandbox mirrors the host environment's timezone. You can override this with a fixed offset or a dynamic callback: + +```typescript +// Fixed offset: UTC-8 (480 minutes west of UTC) +using vm = await QuickJS.create({ + wasm: wasmBytes, + timezoneOffset: 480, +}); +vm.evalCode('new Date().getTimezoneOffset()').consume(h => h.toNumber()); // 480 +``` + +```typescript +// Force UTC (offset 0) +using vm = await QuickJS.create({ + wasm: wasmBytes, + timezoneOffset: 0, +}); +``` + +```typescript +// Dynamic callback for custom DST-aware logic +using vm = await QuickJS.create({ + wasm: wasmBytes, + timezoneOffset: (timeSecs) => { + // Return offset in minutes (getTimezoneOffset convention: positive = west of UTC) + return new Date(timeSecs * 1000).getTimezoneOffset(); + }, +}); +``` + +The `timezoneOffset` option accepts: + +- **`'host'`** (default) — mirrors the host's timezone, including DST transitions. +- **A number** — fixed UTC offset in minutes using the `getTimezoneOffset()` sign convention (positive values are west of UTC, e.g. `480` for UTC-8). +- **A callback `(timeSecs: number) => number`** — called with seconds since epoch, must return the offset in minutes. Useful for custom timezone logic. The callback is invoked whenever QuickJS needs to convert between UTC and local time (e.g. `getHours()`, `toString()`, `new Date(year, month, ...)`, `getTimezoneOffset()`), so it may be called multiple times per Date operation. + +### Snapshot and Restore + +The key differentiator — snapshot the entire VM state and restore it later: + +```typescript +let snapshot: Snapshot; + +{ + using vm = await QuickJS.create(wasmBytes); + + // Build up some state, including a pending promise + vm.evalCode(` + globalThis.counter = 0; + + let __resolve; + globalThis.pendingWork = new Promise(r => { __resolve = r; }); + globalThis.__resolve = __resolve; + + globalThis.pendingWork.then(value => { + globalThis.counter = value; + }); + `).dispose(); + vm.executePendingJobs(); + + // Take a snapshot + snapshot = vm.snapshot(); +} + +// Serialize to a binary buffer for storage (apply gzip on top for best compression) +const bytes = QuickJS.serializeSnapshot(snapshot); +await storage.put('snapshots/run-123', bytes); + +// ... time passes, maybe a different process entirely ... + +// Deserialize and restore +const loaded = await storage.get('snapshots/run-123'); +const restored = QuickJS.deserializeSnapshot(loaded); + +{ + using vm = await QuickJS.restore(restored, wasmBytes); + + // The pending promise still exists — resolve it + using resolve = vm.global.getProp('__resolve'); + using arg = vm.newNumber(42); + vm.callFunction(resolve, vm.undefined, arg).dispose(); + vm.executePendingJobs(); + + // The .then handler ran in the restored VM + using counter = vm.global.getProp('counter'); + console.log(counter.toNumber()); // 42 +} +``` + +### Host Callbacks After Restore + +Host functions registered with `newFunction()` are keyed by their name, which gets baked into the snapshot. After restoring, re-register the callbacks by name: + +```typescript +let snapshot: Snapshot; + +{ + using vm = await QuickJS.create(wasmBytes); + using fn = vm.newFunction('hostAdd', (...args) => { + return vm.newNumber(args[0].toNumber() + args[1].toNumber()); + }); + vm.setProp(vm.global, 'hostAdd', fn); + snapshot = vm.snapshot(); +} + +{ + // After restore — re-register by name + using vm = await QuickJS.restore(snapshot, wasmBytes); + vm.registerHostCallback('hostAdd', (...args) => { + return vm.newNumber(args[0].toNumber() + args[1].toNumber()); + }); + + // hostAdd() works again + using result = vm.evalCode('hostAdd(100, 200)'); + console.log(result.toNumber()); // 300 +} +``` + +Note: each call to `newFunction()` must use a unique name. Attempting to register two host functions with the same name will throw an error. + +### Native WASM Extensions + +Load C-based extensions compiled as WASM shared libraries. Extensions link directly against the QuickJS C API with zero marshalling overhead — they share the same linear memory and can register custom classes, prototypes, and globals. + +```typescript +import { QuickJS } from 'quickjs-wasi'; +import { readFileSync } from 'fs'; + +const urlExt = readFileSync('./extensions/url/url.so'); + +using vm = await QuickJS.create({ + extensions: [{ name: 'url', wasm: urlExt }], +}); + +using result = vm.evalCode(` + const url = new URL('https://example.com:8080/api?key=value#section'); + url.hostname // 'example.com' +`); +``` + +Extensions survive snapshot/restore — provide the same extensions when restoring: + +```typescript +const snapshot = vm.snapshot(); + +using vm2 = await QuickJS.restore(snapshot, { + extensions: [{ name: 'url', wasm: urlExt }], +}); +// URL objects created before the snapshot still work +``` + +See [EXTENSIONS.md](./EXTENSIONS.md) for how to build extensions, how dynamic linking works, and known limitations. + +## API Reference + +### `QuickJS` (VM Instance) + +| Method | Description | +|--------|-------------| +| `QuickJS.create(options?)` | Create a fresh VM instance | +| `QuickJS.restore(snapshot, options?)` | Restore a VM from a snapshot | +| `QuickJS.serializeSnapshot(snapshot)` | Serialize a snapshot to a versioned binary `Uint8Array` | +| `QuickJS.deserializeSnapshot(data)` | Deserialize a snapshot from a binary `Uint8Array` | +| `vm.evalCode(code, filename?)` | Evaluate JS code, returns `JSValueHandle` (throws `JSException` on error) | +| `vm.callFunction(fn, this, ...args)` | Call a QuickJS function (throws `JSException` on error) | +| `vm.executePendingJobs()` | Drain the promise microtask queue | +| `vm.newString(str)` | Create a string value | +| `vm.newNumber(num)` | Create a number value | +| `vm.newBigInt(val)` | Create a BigInt value | +| `vm.newObject()` | Create an empty object | +| `vm.newArray()` | Create an empty array | +| `vm.newSymbolFor(description)` | Create a global symbol (`Symbol.for(description)`) | +| `vm.newArrayBuffer(data)` | Create an ArrayBuffer from host `ArrayBuffer` or `Uint8Array` | +| `vm.newUint8Array(data)` | Create a Uint8Array from host `Uint8Array` | +| `vm.newFunction(name, callback)` | Create a function backed by a host callback | +| `vm.newPromise()` | Create a `Deferred` (promise + resolve/reject) | +| `vm.newError(messageOrError)` | Create an Error from a string or native `Error` | +| `vm.resolvePromise(handle)` | Await a QuickJS promise from the host side | +| `vm.setProp(obj, key, value)` | Set a property (key: string or handle, including symbols) | +| `vm.getProp(obj, key)` | Get a property using a handle key (including symbols) | +| `vm.typeof(handle)` | Get the `typeof` as a string | +| `vm.dump(handle)` | Convert a QuickJS value to a host value | +| `vm.hostToHandle(value)` | Convert a host value to a QuickJS handle | +| `vm.snapshot()` | Capture the entire VM state (including extension metadata) | +| `vm.registerHostCallback(name, fn)` | Re-register a host callback by name after restore | +| `vm.dispose()` | Free the VM | +| `vm[Symbol.dispose]()` | Same as `dispose()` — enables `using vm = ...` | + +### `QuickJSOptions` + +| Option | Description | +|--------|-------------| +| `wasm` | WASM module bytes or pre-compiled `WebAssembly.Module` | +| `wasi` | WASI override factory: `(memory) => ({ random_get, clock_time_get, ... })`. Applies to main module and all extensions | +| `memoryLimit` | Maximum memory the QuickJS runtime can allocate (bytes) | +| `interruptHandler` | Callback to interrupt execution (return `true` to stop) | +| `extensions` | Array of `ExtensionDescriptor` objects — native WASM extensions to load | +| `timezoneOffset` | Timezone for `Date` inside the VM: `'host'` (default), fixed offset in minutes, or `(timeSecs) => minutes` callback | + +### `ExtensionDescriptor` + +| Property | Description | +|----------|-------------| +| `name` | Identifier string (used in snapshot metadata) | +| `wasm` | WASM bytes (`BufferSource`) or pre-compiled `WebAssembly.Module` | +| `initFn?` | Init function name (default: `qjs_ext_${name}_init`) | +| `wasi?` | Extension-provided WASI overrides: `(memory) => ({...})`. Layered between built-in defaults and user overrides | + +### Cached Properties + +These are singleton handles — do **not** dispose them: + +| Property | Value | +|----------|-------| +| `vm.global` | The global object | +| `vm.undefined` | `undefined` | +| `vm.null` | `null` | +| `vm.true` | `true` | +| `vm.false` | `false` | + +### `JSValueHandle` + +| Method / Property | Description | +|-------------------|-------------| +| `handle.isUndefined` | `true` if this is `undefined` | +| `handle.isNull` | `true` if this is `null` | +| `handle.promiseState` | `0` pending, `1` fulfilled, `2` rejected | +| `handle.toNumber()` | Extract as a `number` | +| `handle.toBigInt()` | Extract as a `bigint` | +| `handle.toString()` | Extract as a `string` | +| `handle.toArrayBuffer()` | Extract as an `ArrayBuffer` (copy from WASM memory) | +| `handle.toUint8Array()` | Extract as a `Uint8Array` (copy from WASM memory) | +| `handle.getProp(name)` | Get a property by name | +| `handle.setProp(name, value)` | Set a property by name | +| `handle.consume(fn)` | Call `fn(handle)`, then dispose, return result | +| `handle.dup()` | Duplicate the handle (increment refcount) | +| `handle.dispose()` | Free the handle | +| `handle[Symbol.dispose]()` | Same as `dispose()` — enables `using handle = ...` | + +### `Deferred` (from `vm.newPromise()`) + +| Property / Method | Description | +|--------------------|-------------| +| `deferred.handle` | The QuickJS promise object | +| `deferred.settled` | Host `Promise` that resolves on settlement | +| `deferred.resolve(handle)` | Resolve the promise with a QuickJS value | +| `deferred.reject(handle)` | Reject the promise with a QuickJS value | + +### Data Marshalling + +`dump()` and `hostToHandle()` automatically convert values between the host and the QuickJS VM. The following types are supported: + +| Host Type | QuickJS Type | `dump()` returns | `hostToHandle()` accepts | +|-----------|-------------|-----------------|------------------------| +| `undefined` | undefined | `undefined` | `undefined` | +| `null` | null | `null` | `null` | +| `boolean` | boolean | `boolean` | `boolean` | +| `number` | number | `number` | `number` | +| `string` | string | `string` | `string` | +| `bigint` | BigInt | `bigint` | `bigint` | +| `Symbol.for()` | global Symbol | `Symbol.for(description)` | `Symbol.for(description)` | +| `Error` | Error | `Error` (with name, message, stack) | `Error` | +| `Array` | Array | `Array` (recursive) | `Array` (recursive) | +| `ArrayBuffer` | ArrayBuffer | `ArrayBuffer` (copy) | `ArrayBuffer` | +| `Uint8Array` | Uint8Array | `Uint8Array` (copy) | `Uint8Array` | +| Other typed arrays | typed array | Corresponding typed array (copy) | `ArrayBuffer` (via view) | +| `Promise` | Promise | — | QuickJS Promise (bridged via `Deferred`) | +| Plain object | Object | `Record` (recursive, own enumerable keys) | Object (recursive) | + +**Notes:** + +- Global symbols (`Symbol.for()`) round-trip as real host `Symbol` values via `Symbol.for(description)` +- Local (anonymous) symbols dump as `undefined` and throw if passed to `hostToHandle()` +- Functions dump as `undefined` (cannot be meaningfully serialized) +- Circular and shared references are preserved — `dump()` returns the same host object for the same QuickJS object pointer +- Only own enumerable string properties are included when dumping objects +- Binary data is always **copied** between host and WASM memory — there is no zero-copy view API +- `dump()` for typed arrays determines the host constructor from bytes-per-element (1 → `Uint8Array`, 2 → `Uint16Array`, 4 → `Uint32Array`, 8 → `Float64Array`) + +## How It Works + +### The Core Insight + +WebAssembly linear memory is a flat byte array. Everything QuickJS allocates — the runtime struct, all contexts, all JS objects, the GC heap, the atom table, the promise job queue, pending promises — lives in this linear memory. There are no external pointers, file handles, or OS resources. When you copy the memory wholesale to a new WASM instance, all internal pointer relationships are preserved because they reference the same linear address space. + +### One VM = One WASM Instance + +Unlike quickjs-emscripten which has a two-level model (`QuickJSWASMModule` → `QuickJSContext`), quickjs-wasm uses a simpler one-level model: each `QuickJS.create()` call instantiates its own WASM module with its own linear memory, runtime, and context. This gives stronger isolation (no shared memory between VMs) and makes snapshotting clean — one instance, one context, one snapshot. + +### Architecture + +``` +Host (Node.js / Deno / Bun / Browser) + | + +-- QuickJS class (ts/index.ts) + | |-- evalCode(), callFunction(), newFunction(), ... + | |-- snapshot() -> Snapshot { memory, stackPointer, runtimePtr, contextPtr } + | +-- restore(snapshot) -> QuickJS + | + +-- WASI Shim (ts/wasi-shim.ts) + | |-- clock_time_get, fd_write, random_get + | +-- fd_close, fd_fdstat_get, fd_seek (stubs) + | + +-- quickjs.wasm (1.4 MB) + |-- QuickJS-NG engine + +-- C interface layer (c/interface.c) + |-- Lifecycle, eval, value creation/extraction + |-- Host callback trampoline (imported host_call) + +-- Snapshot support (get/set runtime and context pointers) +``` + +### Host Callback Mechanism + +When `vm.newFunction(name, fn)` is called, a QuickJS C function is created via `JS_NewCFunctionData2` with the function name stored as a JS string in `func_data[0]`. When QuickJS code calls the function, the C trampoline extracts the name and calls the imported `host_call(name_ptr, name_len, this_ptr, argc, argv_ptr)` function, which dispatches to the registered host callback by name. + +This design survives snapshot/restore: the name string is stored in QuickJS's heap (part of the snapshot), and after restore, `registerHostCallback(name, fn)` re-maps the name to a new host function. Because callbacks are keyed by name rather than sequential integer IDs, the registration order doesn't matter and adding or removing host functions won't silently break restore. + +## Development + +### Prerequisites + +- [wasi-sdk](https://github.com/WebAssembly/wasi-sdk) (tested with v30) — set `WASI_SDK` env var or defaults to `/tmp/wasi-sdk` +- Node.js >= 22 +- pnpm + +### Building Locally + +```sh +# Clone with submodules +git clone --recursive https://github.com/vercel-labs/quickjs-wasm.git +cd quickjs-wasm + +# Install wasi-sdk (macOS arm64 — adjust URL for your platform) +curl -sL "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-30/wasi-sdk-30.0-arm64-macos.tar.gz" \ + | tar xz -C /tmp --strip-components=1 --one-top-level=wasi-sdk + +# Install dependencies +pnpm install + +# Build WASM binary + TypeScript +pnpm run build + +# Run tests +pnpm test +``` + +## Technical Details + +### WASM Binary + +- Built from [quickjs-ng](https://github.com/quickjs-ng/quickjs) (MIT license) +- Compiled with wasi-sdk targeting `wasm32-wasip1` in reactor mode +- 1.4 MB uncompressed +- 7 WASM imports: 6 WASI functions + 1 `env.host_call` for host callbacks +- Exports `memory` and `__stack_pointer` for snapshot support + +### What Gets Snapshotted + +The snapshot captures the entire WASM linear memory, which contains: + +- The `JSRuntime` struct (GC state, job queue, module loader state) +- The `JSContext` struct (global object, intrinsics, atom table) +- All JS objects (via QuickJS's GC heap) +- The promise job queue (pending `.then` callbacks) +- The string intern table (atoms) +- The `dlmalloc` heap metadata +- The C interface's `static JSRuntime *rt` and `static JSContext *ctx` globals +- Host callback IDs stored in function data + +Plus the `__stack_pointer` WASM global (a single i32). + +### Limitations and Future Work + +- **Snapshot size**: Snapshots capture the entire WASM linear memory (~256 KB baseline, grows with heap). Use `serializeSnapshot()` to get a binary buffer, then apply your own compression (gzip/zstd) — the memory compresses very well due to large zero regions. +- **Stack size limit**: QuickJS-ng disables `JS_SetMaxStackSize` on WASI, so deep recursion causes a WASM trap (not a catchable exception). +- **ES Modules**: Only script-mode eval is supported. `import`/`export` and module loaders are not yet wired through. +- **Extension ABI**: Native WASM extensions use an experimental dynamic linking ABI that is [not yet stabilized](https://github.com/WebAssembly/tool-conventions/blob/main/DynamicLinking.md). All extensions must be compiled with the same wasi-sdk version as the main module. See [EXTENSIONS.md](./EXTENSIONS.md) for details. + +### Browser Usage + +quickjs-wasi works in browsers — the TypeScript API uses only the standard `WebAssembly` API and the WASI shim is environment-agnostic. The only Node.js-specific code is the default WASM loading fallback (which uses `node:fs`). In the browser, pass the WASM bytes directly: + +```typescript +import { QuickJS } from 'quickjs-wasi'; + +// Fetch the .wasm file and compile it once +const response = await fetch('/quickjs.wasm'); +const wasmModule = await WebAssembly.compileStreaming(response); + +// Create VMs from the pre-compiled module (fast — no re-compilation) +using vm = await QuickJS.create({ wasm: wasmModule }); +``` + +See [`examples/browser/`](./examples/browser/) for a complete Vite demo app.``` + +## range-parser - 1.2.1 +**Repository URL**: https://github.com/jshttp/range-parser +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2012-2014 TJ Holowaychuk +Copyright (c) 2015-2016 Douglas Christopher Wilson +Copyright (c) 2014-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## readable-stream - 2.3.8 +**Repository URL**: https://github.com/nodejs/readable-stream +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +"""``` + +## readdirp - 5.0.0 +**Repository URL**: https://github.com/paulmillr/readdirp +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## require-directory - 2.1.1 +**Repository URL**: https://github.com/troygoode/node-require-directory +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2011 Troy Goode + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## require-from-string - 2.0.2 +**Repository URL**: https://github.com/floatdrop/require-from-string +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -27,52 +35937,128 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` -## @gerrit0/mini-shiki - 3.23.0 -**Repository URL**: https://github.com/Gerrit0/mini-shiki +## require-main-filename - 2.0.0 +**Repository URL**: https://github.com/yargs/require-main-filename +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +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.``` + +## retry - 0.12.0 +**Repository URL**: https://github.com/tim-kos/node-retry **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License +Copyright (c) 2011: +Tim Koschützki (tim@debuggable.com) +Felix Geisendörfer (felix@debuggable.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE.``` + +## retry - 0.13.1 +**Repository URL**: https://github.com/tim-kos/node-retry +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2011: +Tim Koschützki (tim@debuggable.com) +Felix Geisendörfer (felix@debuggable.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE.``` + +## router - 2.2.0 +**Repository URL**: https://github.com/pillarjs/router +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) -Copyright (c) 2024 Gerrit Birkeland +Copyright (c) 2013 Roman Shtylman +Copyright (c) 2014-2022 Douglas Christopher Wilson -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @istanbuljs/schema - 0.1.3 -**Repository URL**: https://github.com/istanbuljs/schema +## safe-buffer - 5.1.2 +**Repository URL**: https://github.com/feross/safe-buffer **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License +The MIT License (MIT) -Copyright (c) 2019 CFWare, LLC +Copyright (c) Feross Aboukhadijeh Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -81,23 +36067,25 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` -## @jridgewell/resolve-uri - 3.1.2 -**Repository URL**: https://github.com/jridgewell/resolve-uri +## safe-buffer - 5.2.1 +**Repository URL**: https://github.com/feross/safe-buffer **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright 2019 Justin Ridgewell +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -114,15 +36102,17 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` -## @jridgewell/sourcemap-codec - 1.5.5 -**Repository URL**: https://github.com/jridgewell/sourcemaps +## safe-compare - 1.1.4 +**Repository URL**: https://github.com/Bruce17/safe-compare **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright 2024 Justin Ridgewell +The MIT License (MIT) + +Copyright (c) 2016 Michael Raith Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -131,8 +36121,8 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, @@ -142,12 +36132,14 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @jridgewell/trace-mapping - 0.3.31 -**Repository URL**: https://github.com/jridgewell/sourcemaps +## safer-buffer - 2.1.2 +**Repository URL**: https://github.com/ChALkeR/safer-buffer **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright 2024 Justin Ridgewell +MIT License + +Copyright (c) 2018 Nikita Skovoroda Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -156,8 +36148,8 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, @@ -167,70 +36159,224 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @napi-rs/cli - 2.18.4 -**Repository URL**: https://github.com/napi-rs/napi-rs +## sandwich-stream - 2.0.2 +**Repository URL**: https://github.com/connrs/node-sandwich-stream +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Copyright 2013 Paul Connolley (connrs) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` + +## semver - 7.7.4 +**Repository URL**: https://github.com/npm/node-semver +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## send - 1.2.1 +**Repository URL**: https://github.com/pillarjs/send +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk +Copyright (c) 2014-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## serialize-error - 8.1.0 +**Repository URL**: https://github.com/sindresorhus/serialize-error +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## serve-static - 2.2.1 +**Repository URL**: https://github.com/expressjs/serve-static +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) + +Copyright (c) 2010 Sencha Inc. +Copyright (c) 2011 LearnBoost +Copyright (c) 2011 TJ Holowaychuk +Copyright (c) 2014-2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## set-blocking - 2.0.0 +**Repository URL**: https://github.com/yargs/set-blocking +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +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.``` + +## setimmediate - 1.0.5 +**Repository URL**: https://github.com/YuzuJS/setImmediate +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, and Domenic Denicola + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## setprototypeof - 1.2.0 +**Repository URL**: https://github.com/wesleytodd/setprototypeof +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2015, Wes Todd + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## shebang-command - 2.0.0 +**Repository URL**: https://github.com/kevva/shebang-command **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) 2020 LongYinan +Copyright (c) Kevin Mårtensson (github.com/kevva) -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @shikijs/engine-oniguruma - 3.23.0 -**Repository URL**: https://github.com/shikijs/shiki +## shebang-regex - 3.0.0 +**Repository URL**: https://github.com/sindresorhus/shebang-regex **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) 2021 Pine Wu -Copyright (c) 2023 Anthony Fu +Copyright (c) Sindre Sorhus (sindresorhus.com) -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @shikijs/langs - 3.23.0 -**Repository URL**: https://github.com/shikijs/shiki +## side-channel-list - 1.0.1 +**Repository URL**: https://github.com/ljharb/side-channel-list **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) 2021 Pine Wu -Copyright (c) 2023 Anthony Fu +Copyright (c) 2024 Jordan Harband Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -250,15 +36396,14 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @shikijs/themes - 3.23.0 -**Repository URL**: https://github.com/shikijs/shiki +## side-channel-map - 1.0.1 +**Repository URL**: https://github.com/ljharb/side-channel-map **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) 2021 Pine Wu -Copyright (c) 2023 Anthony Fu +Copyright (c) 2024 Jordan Harband Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -278,15 +36423,14 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @shikijs/types - 3.23.0 -**Repository URL**: https://github.com/shikijs/shiki +## side-channel-weakmap - 1.0.2 +**Repository URL**: https://github.com/ljharb/side-channel-weakmap **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) 2021 Pine Wu -Copyright (c) 2023 Anthony Fu +Copyright (c) 2019 Jordan Harband Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -306,14 +36450,14 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @shikijs/vscode-textmate - 10.0.2 -**Repository URL**: https://github.com/shikijs/vscode-textmate +## side-channel - 1.1.0 +**Repository URL**: https://github.com/ljharb/side-channel **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -The MIT License (MIT) +MIT License -Copyright (c) Microsoft Corporation +Copyright (c) 2019 Jordan Harband Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -333,416 +36477,281 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @types/hast - 3.0.4 -**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE``` - -## @types/istanbul-lib-coverage - 2.0.6 -**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE``` - -## @types/unist - 3.0.3 -**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE``` - -## ansi-regex - 5.0.1 -**Repository URL**: https://github.com/chalk/ansi-regex -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` - -## ansi-styles - 4.3.0 -**Repository URL**: https://github.com/chalk/ansi-styles -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` - -## argparse - 2.0.1 -**Repository URL**: https://github.com/nodeca/argparse -**License Type(s)**: Python-2.0 -### License: https://spdx.org/licenses/Python-2.0.html +## signal-exit - 3.0.7 +**Repository URL**: https://github.com/tapjs/signal-exit +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html ``` -A. HISTORY OF THE SOFTWARE -========================== - -Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands -as a successor of a language called ABC. Guido remains Python's -principal author, although it includes many contributions from others. - -In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) -in Reston, Virginia where he released several versions of the -software. - -In May 2000, Guido and the Python core development team moved to -BeOpen.com to form the BeOpen PythonLabs team. In October of the same -year, the PythonLabs team moved to Digital Creations, which became -Zope Corporation. In 2001, the Python Software Foundation (PSF, see -https://www.python.org/psf/) was formed, a non-profit organization -created specifically to own Python-related Intellectual Property. -Zope Corporation was a sponsoring member of the PSF. - -All Python releases are Open Source (see http://www.opensource.org for -the Open Source Definition). Historically, most, but not all, Python -releases have also been GPL-compatible; the table below summarizes -the various releases. - - Release Derived Year Owner GPL- - from compatible? (1) - - 0.9.0 thru 1.2 1991-1995 CWI yes - 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes - 1.6 1.5.2 2000 CNRI no - 2.0 1.6 2000 BeOpen.com no - 1.6.1 1.6 2001 CNRI yes (2) - 2.1 2.0+1.6.1 2001 PSF no - 2.0.1 2.0+1.6.1 2001 PSF yes - 2.1.1 2.1+2.0.1 2001 PSF yes - 2.1.2 2.1.1 2002 PSF yes - 2.1.3 2.1.2 2002 PSF yes - 2.2 and above 2.1.1 2001-now PSF yes - -Footnotes: - -(1) GPL-compatible doesn't mean that we're distributing Python under - the GPL. All Python licenses, unlike the GPL, let you distribute - a modified version without making your changes open source. The - GPL-compatible licenses make it possible to combine Python with - other software that is released under the GPL; the others don't. +The ISC License -(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, - because its license has a choice of law clause. According to - CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 - is "not incompatible" with the GPL. +Copyright (c) 2015, Contributors -Thanks to the many outside volunteers who have worked under Guido's -direction to make these releases possible. +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. +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.``` -B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON -=============================================================== +## signal-exit - 4.1.0 +**Repository URL**: https://github.com/tapjs/signal-exit +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- +Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. -2. Subject to the terms and conditions of this License Agreement, PSF hereby -grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -analyze, test, perform and/or display publicly, prepare derivative works, -distribute, and otherwise use Python alone or in any derivative version, -provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation; -All Rights Reserved" are retained in Python alone or in any derivative version -prepared by Licensee. +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.``` -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. +## sisteransi - 1.0.5 +**Repository URL**: https://github.com/terkelg/sisteransi +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. +Copyright (c) 2018 Terkel Gjervig Nielsen -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. +## smart-buffer - 4.2.0 +**Repository URL**: https://github.com/JoshGlazebrook/smart-buffer +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) +Copyright (c) 2013-2017 Josh Glazebrook -BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 -------------------------------------------- +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: -BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an -office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the -Individual or Organization ("Licensee") accessing and otherwise using -this software in source or binary form and its associated -documentation ("the Software"). +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## socks-proxy-agent - 10.0.0 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) -2. Subject to the terms and conditions of this BeOpen Python License -Agreement, BeOpen hereby grants Licensee a non-exclusive, -royalty-free, world-wide license to reproduce, analyze, test, perform -and/or display publicly, prepare derivative works, distribute, and -otherwise use the Software alone or in any derivative version, -provided, however, that the BeOpen Python License is retained in the -Software, alone or in any derivative version prepared by Licensee. +Copyright (c) 2013 Nathan Rajlich -3. BeOpen is making the Software available to Licensee on an "AS IS" -basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE -SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS -AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY -DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -5. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -6. This License Agreement shall be governed by and interpreted in all -respects by the law of the State of California, excluding conflict of -law provisions. Nothing in this License Agreement shall be deemed to -create any relationship of agency, partnership, or joint venture -between BeOpen and Licensee. This License Agreement does not grant -permission to use BeOpen trademarks or trade names in a trademark -sense to endorse or promote products or services of Licensee, or any -third party. As an exception, the "BeOpen Python" logos available at -http://www.pythonlabs.com/logos.html may be used according to the -permissions granted on that web page. +## socks-proxy-agent - 8.0.5 +**Repository URL**: https://github.com/TooTallNate/proxy-agents +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) -7. By copying, installing or otherwise using the software, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. +Copyright (c) 2013 Nathan Rajlich +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 ---------------------------------------- +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -1. This LICENSE AGREEMENT is between the Corporation for National -Research Initiatives, having an office at 1895 Preston White Drive, -Reston, VA 20191 ("CNRI"), and the Individual or Organization -("Licensee") accessing and otherwise using Python 1.6.1 software in -source or binary form and its associated documentation. +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -2. Subject to the terms and conditions of this License Agreement, CNRI -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 1.6.1 -alone or in any derivative version, provided, however, that CNRI's -License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) -1995-2001 Corporation for National Research Initiatives; All Rights -Reserved" are retained in Python 1.6.1 alone or in any derivative -version prepared by Licensee. Alternately, in lieu of CNRI's License -Agreement, Licensee may substitute the following text (omitting the -quotes): "Python 1.6.1 is made available subject to the terms and -conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the Internet using the following -unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the Internet -using the following URL: http://hdl.handle.net/1895.22/1013". +## socks - 2.8.8 +**Repository URL**: https://github.com/JoshGlazebrook/socks +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 1.6.1 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 1.6.1. +Copyright (c) 2013 Josh Glazebrook -4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" -basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: -5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## source-map-support - 0.5.21 +**Repository URL**: https://github.com/evanw/node-source-map-support +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) -7. This License Agreement shall be governed by the federal -intellectual property law of the United States, including without -limitation the federal copyright law, and, to the extent such -U.S. federal law does not apply, by the law of the Commonwealth of -Virginia, excluding Virginia's conflict of law provisions. -Notwithstanding the foregoing, with regard to derivative works based -on Python 1.6.1 that incorporate non-separable material that was -previously distributed under the GNU General Public License (GPL), the -law of the Commonwealth of Virginia shall govern this License -Agreement only as to issues arising under or with respect to -Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this -License Agreement shall be deemed to create any relationship of -agency, partnership, or joint venture between CNRI and Licensee. This -License Agreement does not grant permission to use CNRI trademarks or -trade name in a trademark sense to endorse or promote products or -services of Licensee, or any third party. +Copyright (c) 2014 Evan Wallace -8. By clicking on the "ACCEPT" button where indicated, or by copying, -installing or otherwise using Python 1.6.1, Licensee agrees to be -bound by the terms and conditions of this License Agreement. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - ACCEPT +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 --------------------------------------------------- +## source-map - 0.6.1 +**Repository URL**: https://github.com/mozilla/source-map +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +Copyright (c) 2009-2011, Mozilla Foundation and contributors +All rights reserved. -Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, -The Netherlands. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Stichting Mathematisch -Centrum or CWI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. -STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE -FOR ANY SPECIAL, 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.``` +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. -## balanced-match - 4.0.4 -**Repository URL**: https://github.com/juliangruber/balanced-match +* Neither the names of the Mozilla Foundation nor the names of project + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` + +## statuses - 2.0.2 +**Repository URL**: https://github.com/jshttp/statuses **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -(MIT) - -Original code Copyright Julian Gruber +The MIT License (MIT) -Port to TypeScript Copyright Isaac Z. Schlueter +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2016 Douglas Christopher Wilson -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` -## brace-expansion - 5.0.5 -**Repository URL**: https://github.com/juliangruber/brace-expansion +## std-env - 3.10.0 +**Repository URL**: https://github.com/unjs/std-env **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright Julian Gruber - -TypeScript port Copyright Isaac Z. Schlueter +Copyright (c) Pooya Parsa Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -762,79 +36771,82 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## c8 - 11.0.0 -**Repository URL**: https://github.com/bcoe/c8 -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html +## string-width - 4.2.3 +**Repository URL**: https://github.com/sindresorhus/string-width +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -Copyright (c) 2017, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. +MIT License -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.``` +Copyright (c) Sindre Sorhus (sindresorhus.com) -## cliui - 8.0.1 -**Repository URL**: https://github.com/yargs/cliui -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html -``` -Copyright (c) 2015, Contributors +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -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.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## color-convert - 2.0.1 -**Repository URL**: https://github.com/Qix-/color-convert +## string_decoder - 1.1.1 +**Repository URL**: https://github.com/nodejs/string_decoder **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright (c) 2011-2016 Heather Arthur +Node.js is licensed for use as follows: -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +""" +Copyright Node.js contributors. All rights reserved. -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -## color-name - 1.1.4 -**Repository URL**: https://github.com/colorjs/color-name +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +"""``` + +## strip-ansi - 6.0.1 +**Repository URL**: https://github.com/chalk/strip-ansi **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -The MIT License (MIT) -Copyright (c) 2015 Dmitry Ivanov +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -842,43 +36854,29 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## convert-source-map - 2.0.0 -**Repository URL**: https://github.com/thlorenz/convert-source-map +## strip-ansi - 7.2.0 +**Repository URL**: https://github.com/chalk/strip-ansi **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright 2013 Thorsten Lorenz. -All rights reserved. +MIT License -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: +Copyright (c) Sindre Sorhus (https://sindresorhus.com) -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE.``` +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -## cross-spawn - 7.0.6 -**Repository URL**: https://github.com/moxystudio/node-cross-spawn +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## strnum - 2.3.0 +**Repository URL**: https://github.com/NaturalIntelligence/strnum **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -The MIT License (MIT) +MIT License -Copyright (c) 2018 Made With MOXY Lda +Copyright (c) 2021 Natural Intelligence Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -887,83 +36885,52 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.``` - -## emoji-regex - 8.0.0 -**Repository URL**: https://github.com/mathiasbynens/emoji-regex -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` - -## entities - 4.5.0 -**Repository URL**: https://github.com/fb55/entities -**License Type(s)**: BSD-2-Clause -### License: https://spdx.org/licenses/BSD-2-Clause.html -``` -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -## escalade - 3.2.0 -**Repository URL**: https://github.com/lukeed/escalade +## strtok3 - 10.3.5 +**Repository URL**: https://github.com/Borewit/strtok3 **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) Luke Edwards (lukeed.com) +Copyright © 2026 Borewit -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -## find-up - 5.0.0 -**Repository URL**: https://github.com/sindresorhus/find-up +## supports-color - 7.2.0 +**Repository URL**: https://github.com/chalk/supports-color **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) Sindre Sorhus (https://sindresorhus.com) +Copyright (c) Sindre Sorhus (sindresorhus.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -971,52 +36938,11 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## foreground-child - 3.3.1 -**Repository URL**: https://github.com/tapjs/foreground-child -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html -``` -The ISC License - -Copyright (c) 2015-2023 Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -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.``` - -## get-caller-file - 2.0.5 -**Repository URL**: https://github.com/stefanpenner/get-caller-file -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html -``` -ISC License (ISC) -Copyright 2018 Stefan Penner - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -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.``` - -## glob - 13.0.6 -**Repository URL**: https://github.com/isaacs/node-glob +## tar - 7.5.13 +**Repository URL**: https://github.com/isaacs/node-tar **License Type(s)**: BlueOak-1.0.0 ### License: https://spdx.org/licenses/BlueOak-1.0.0.html ``` -All packages under `src/` are licensed according to the terms in -their respective `LICENSE` or `LICENSE.md` files. - -The remainder of this project is licensed under the Blue Oak -Model License, as follows: - ------ - # Blue Oak Model License Version 1.0.0 @@ -1073,27 +36999,15 @@ without any warranty or condition, and no contributor will be liable to anyone for any damages related to this software or this license, under any kind of legal claim.***``` -## has-flag - 4.0.0 -**Repository URL**: https://github.com/sindresorhus/has-flag +## telegraf - 4.16.3 +**Repository URL**: https://github.com/telegraf/telegraf **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +The MIT License (MIT) -## html-escaper - 2.0.2 -**Repository URL**: https://github.com/WebReflection/html-escaper -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection +Copyright (c) 2016-2019 Vitaly Domnikov +Copyright (c) 2020-2023 The Telegraf Contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -1102,253 +37016,176 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.``` - -## is-fullwidth-code-point - 3.0.0 -**Repository URL**: https://github.com/sindresorhus/is-fullwidth-code-point -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -## isexe - 2.0.0 -**Repository URL**: https://github.com/isaacs/isexe +## test-exclude - 8.0.0 +**Repository URL**: https://github.com/istanbuljs/test-exclude **License Type(s)**: ISC ### License: https://spdx.org/licenses/ISC.html ``` -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors +Copyright (c) 2016, Contributors -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. 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.``` - -## istanbul-lib-coverage - 3.2.2 -**Repository URL**: https://github.com/istanbuljs/istanbuljs -**License Type(s)**: BSD-3-Clause -### License: https://spdx.org/licenses/BSD-3-Clause.html -``` -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` +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.``` -## istanbul-lib-report - 3.0.1 -**Repository URL**: https://github.com/istanbuljs/istanbuljs -**License Type(s)**: BSD-3-Clause -### License: https://spdx.org/licenses/BSD-3-Clause.html +## thenify-all - 1.6.0 +**Repository URL**: https://github.com/thenables/thenify-all +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. +The MIT License (MIT) -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` +Copyright (c) 2014 Jonathan Ong me@jongleberry.com -## istanbul-reports - 3.2.0 -**Repository URL**: https://github.com/istanbuljs/istanbuljs -**License Type(s)**: BSD-3-Clause -### License: https://spdx.org/licenses/BSD-3-Clause.html -``` -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` -## linkify-it - 5.0.0 -**Repository URL**: https://github.com/markdown-it/linkify-it +## thenify - 3.3.1 +**Repository URL**: https://github.com/thenables/thenify **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright (c) 2015 Vitaly Puzrin. +The MIT License (MIT) -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: +Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and contributors -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE.``` +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` -## locate-path - 6.0.0 -**Repository URL**: https://github.com/sindresorhus/locate-path +## toidentifier - 1.0.1 +**Repository URL**: https://github.com/component/toidentifier **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) Sindre Sorhus (https://sindresorhus.com) +Copyright (c) 2016 Douglas Christopher Wilson -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -## lru-cache - 11.2.7 -**Repository URL**: https://github.com/isaacs/node-lru-cache -**License Type(s)**: BlueOak-1.0.0 -### License: https://spdx.org/licenses/BlueOak-1.0.0.html +## token-types - 6.1.2 +**Repository URL**: https://github.com/Borewit/token-types +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -# Blue Oak Model License - -Version 1.0.0 - -## Purpose - -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. - -## Acceptance - -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. - -## Copyright - -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. +The MIT License (MIT) -## Notices +Copyright © 2026 Borewit -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -## Excuse +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## Patent +## tokenjuice - 0.7.0 +**Repository URL**: https://github.com/vincentkoc/tokenjuice +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. +Copyright (c) 2026 Vincent Koc -## Reliability +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -No contributor can revoke this license. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -## No Liability +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -***As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim.***``` +## tr46 - 0.0.3 +**Repository URL**: https://github.com/Sebmaster/tr46.js +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(No license file read from node_modules for tr46; see npm metadata.) +``` -## lunr - 2.3.9 -**Repository URL**: https://github.com/olivernn/lunr.js +## tree-sitter-bash - 0.25.1 +**Repository URL**: https://github.com/tree-sitter/tree-sitter-bash **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright (C) 2013 by Oliver Nightingale +The MIT License (MIT) + +Copyright (c) 2017 Max Brunsfeld Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -1357,369 +37194,459 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE.``` +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -## make-dir - 4.0.0 -**Repository URL**: https://github.com/sindresorhus/make-dir +## ts-algebra - 2.0.0 +**Repository URL**: https://github.com/ThomasAribart/ts-algebra **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) Sindre Sorhus (https://sindresorhus.com) +Copyright (c) 2020 Thomas Aribart -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -## markdown-it - 14.1.1 -**Repository URL**: https://github.com/markdown-it/markdown-it -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html +## tslib - 2.8.1 +**Repository URL**: https://github.com/Microsoft/tslib +**License Type(s)**: 0BSD +### License: https://spdx.org/licenses/0BSD.html ``` -Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +Copyright (c) Microsoft Corporation. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE.``` +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. -## mdurl - 2.0.0 -**Repository URL**: https://github.com/markdown-it/mdurl +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.``` + +## tslog - 4.10.2 +**Repository URL**: https://github.com/fullstack-build/tslog **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. +MIT License -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: +Copyright (c) 2022 -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. --------------------------------------------------------------------------------- +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -.parse() is based on Joyent's node.js `url` code: +## tsscmp - 1.0.6 +**Repository URL**: https://github.com/suryagh/tsscmp +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2016 -Copyright Joyent, Inc. and other Node contributors. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE.``` +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -## minimatch - 10.2.5 -**Repository URL**: https://github.com/isaacs/minimatch -**License Type(s)**: BlueOak-1.0.0 -### License: https://spdx.org/licenses/BlueOak-1.0.0.html +## type-fest - 0.20.2 +**Repository URL**: https://github.com/sindresorhus/type-fest +**License Type(s)**: (MIT OR CC0-1.0) +### License: https://spdx.org/licenses/ ``` -# Blue Oak Model License - -Version 1.0.0 - -## Purpose - -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. +MIT License -## Acceptance +Copyright (c) Sindre Sorhus (https:/sindresorhus.com) -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -## Copyright +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## Notices +## type-is - 2.0.1 +**Repository URL**: https://github.com/jshttp/type-is +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +(The MIT License) -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2014-2015 Douglas Christopher Wilson -## Excuse +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -## Patent +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. +## typebox - 1.1.37 +**Repository URL**: https://github.com/sinclairzx81/typebox +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +TypeBox -## Reliability +The MIT License (MIT) -No contributor can revoke this license. +Copyright (c) 2017-2026 Haydn Paterson -## No Liability +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -**_As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim._**``` +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -## minipass - 7.1.3 -**Repository URL**: https://github.com/isaacs/minipass -**License Type(s)**: BlueOak-1.0.0 -### License: https://spdx.org/licenses/BlueOak-1.0.0.html +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## typedoc - 0.28.19 +**Repository URL**: https://github.com/TypeStrong/TypeDoc +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` -# Blue Oak Model License +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Version 1.0.0 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -## Purpose + 1. Definitions. -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -## Acceptance + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -## Copyright + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -## Notices + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -## Excuse + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -## Patent + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -## Reliability + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -No contributor can revoke this license. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -## No Liability + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -***As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim.***``` + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -## p-limit - 3.1.0 -**Repository URL**: https://github.com/sindresorhus/p-limit -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -Copyright (c) Sindre Sorhus (https://sindresorhus.com) + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -## p-locate - 5.0.0 -**Repository URL**: https://github.com/sindresorhus/p-locate -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -Copyright (c) Sindre Sorhus (https://sindresorhus.com) + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + END OF TERMS AND CONDITIONS -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + APPENDIX: How to apply the Apache License to your work. -## path-exists - 4.0.0 -**Repository URL**: https://github.com/sindresorhus/path-exists -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -Copyright (c) Sindre Sorhus (sindresorhus.com) + Copyright {yyyy} {name of copyright owner} -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + http://www.apache.org/licenses/LICENSE-2.0 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.``` -## path-key - 3.1.1 -**Repository URL**: https://github.com/sindresorhus/path-key -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html +## typescript - 5.9.3 +**Repository URL**: https://github.com/microsoft/TypeScript +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` -MIT License +Apache License -Copyright (c) Sindre Sorhus (sindresorhus.com) +Version 2.0, January 2004 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +http://www.apache.org/licenses/ -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +1. Definitions. -## path-scurry - 2.0.2 -**Repository URL**: https://github.com/isaacs/path-scurry -**License Type(s)**: BlueOak-1.0.0 -### License: https://spdx.org/licenses/BlueOak-1.0.0.html -``` -# Blue Oak Model License +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. -Version 1.0.0 +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. -## Purpose +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. -## Acceptance +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. -## Copyright +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. -## Notices +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. -## Excuse +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. -## Patent +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. +You must give any other recipients of the Work or Derivative Works a copy of this License; and -## Reliability +You must cause any modified files to carry prominent notices stating that You changed the files; and -No contributor can revoke this license. +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -## No Liability +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. -***As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim.***``` +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. -## prettier - 3.8.2 -**Repository URL**: https://github.com/prettier/prettier -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright © James Long and contributors +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -## punycode.js - 2.3.1 -**Repository URL**: https://github.com/mathiasbynens/punycode.js +END OF TERMS AND CONDITIONS``` + +## uc.micro - 2.1.0 +**Repository URL**: https://github.com/markdown-it/uc.micro **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` @@ -1744,130 +37671,189 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## require-directory - 2.1.1 -**Repository URL**: https://github.com/troygoode/node-require-directory +## uhyphen - 0.2.0 +**Repository URL**: https://github.com/WebReflection/uhyphen +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +ISC License + +Copyright (c) 2020, Andrea Giammarchi, @WebReflection + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## uint8array-extras - 1.5.0 +**Repository URL**: https://github.com/sindresorhus/uint8array-extras **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -The MIT License (MIT) +MIT License -Copyright (c) 2011 Troy Goode +Copyright (c) Sindre Sorhus (https://sindresorhus.com) -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## semver - 7.7.4 -**Repository URL**: https://github.com/npm/node-semver -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html +## undici-types - 6.21.0 +**Repository URL**: https://github.com/nodejs/undici +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -The ISC License +MIT License -Copyright (c) Isaac Z. Schlueter and Contributors +Copyright (c) Matteo Collina and Undici contributors -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -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.``` +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -## shebang-command - 2.0.0 -**Repository URL**: https://github.com/kevva/shebang-command +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## undici - 7.25.0 +**Repository URL**: https://github.com/nodejs/undici **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` MIT License -Copyright (c) Kevin Mårtensson (github.com/kevva) +Copyright (c) Matteo Collina and Undici contributors -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + +## undici - 8.2.0 +**Repository URL**: https://github.com/nodejs/undici +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Matteo Collina and Undici contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` -## shebang-regex - 3.0.0 -**Repository URL**: https://github.com/sindresorhus/shebang-regex +## unpipe - 1.0.0 +**Repository URL**: https://github.com/stream-utils/unpipe **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +(The MIT License) -## signal-exit - 4.1.0 -**Repository URL**: https://github.com/tapjs/signal-exit -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html -``` -The ISC License +Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -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.``` +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## string-width - 4.2.3 -**Repository URL**: https://github.com/sindresorhus/string-width +## util-deprecate - 1.0.2 +**Repository URL**: https://github.com/TooTallNate/util-deprecate **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License +(The MIT License) -Copyright (c) Sindre Sorhus (sindresorhus.com) +Copyright (c) 2014 Nathan Rajlich -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE.``` -## strip-ansi - 6.0.1 -**Repository URL**: https://github.com/chalk/strip-ansi +## uuid - 14.0.0 +**Repository URL**: https://github.com/uuidjs/uuid **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License +The MIT License (MIT) -Copyright (c) Sindre Sorhus (sindresorhus.com) +Copyright (c) 2010-2020 Robert Kieffer and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -1875,14 +37861,14 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## supports-color - 7.2.0 -**Repository URL**: https://github.com/chalk/supports-color +## uuid - 9.0.1 +**Repository URL**: https://github.com/uuidjs/uuid **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License +The MIT License (MIT) -Copyright (c) Sindre Sorhus (sindresorhus.com) +Copyright (c) 2010-2020 Robert Kieffer and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -1890,12 +37876,12 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## test-exclude - 8.0.0 -**Repository URL**: https://github.com/istanbuljs/test-exclude +## v8-to-istanbul - 9.3.0 +**Repository URL**: https://github.com/istanbuljs/v8-to-istanbul **License Type(s)**: ISC ### License: https://spdx.org/licenses/ISC.html ``` -Copyright (c) 2016, Contributors +Copyright (c) 2017, Contributors Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided @@ -1910,362 +37896,375 @@ 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.``` -## typedoc - 0.28.19 -**Repository URL**: https://github.com/TypeStrong/TypeDoc -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +## vary - 1.1.2 +**Repository URL**: https://github.com/jshttp/vary +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. +(The MIT License) - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +Copyright (c) 2014-2017 Douglas Christopher Wilson - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +## web-push - 3.6.7 +**Repository URL**: https://github.com/web-push-libs/web-push +**License Type(s)**: MPL-2.0 +### License: https://spdx.org/licenses/MPL-2.0.html +``` +Copyright 2015 Marco Castelluccio - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. +This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this +file, You can obtain one at http://mozilla.org/MPL/2.0/.``` - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +## web-streams-polyfill - 3.3.3 +**Repository URL**: https://github.com/MattiasBuelens/web-streams-polyfill +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. +Copyright (c) 2024 Mattias Buelens +Copyright (c) 2016 Diwank Singh Tomer - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +## web-tree-sitter - 0.26.8 +**Repository URL**: https://github.com/tree-sitter/tree-sitter +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: +Copyright (c) 2018 Max Brunsfeld - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +## webidl-conversions - 3.0.1 +**Repository URL**: https://github.com/jsdom/webidl-conversions +**License Type(s)**: BSD-2-Clause +### License: https://spdx.org/licenses/BSD-2-Clause.html +``` +# The BSD 2-Clause License - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +Copyright (c) 2014, Domenic Denicola +All rights reserved. - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.``` - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +## whatwg-url - 5.0.0 +**Repository URL**: https://github.com/jsdom/whatwg-url +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) - END OF TERMS AND CONDITIONS +Copyright (c) 2015–2016 Sebastian Mayr - APPENDIX: How to apply the Apache License to your work. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. - Copyright {yyyy} {name of copyright owner} +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +## which-module - 2.0.1 +**Repository URL**: https://github.com/nexdrew/which-module +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2016, Contributors - http://www.apache.org/licenses/LICENSE-2.0 +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.``` +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.``` -## typescript - 5.9.3 -**Repository URL**: https://github.com/microsoft/TypeScript -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +## which - 2.0.2 +**Repository URL**: https://github.com/isaacs/node-which +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html ``` -Apache License +The ISC License -Version 2.0, January 2004 +Copyright (c) Isaac Z. Schlueter and Contributors -http://www.apache.org/licenses/ +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +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.``` -1. Definitions. +## wrap-ansi - 6.2.0 +**Repository URL**: https://github.com/chalk/wrap-ansi +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. +Copyright (c) Sindre Sorhus (sindresorhus.com) -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. +## wrap-ansi - 7.0.0 +**Repository URL**: https://github.com/chalk/wrap-ansi +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. +Copyright (c) Sindre Sorhus (https://sindresorhus.com) -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. +## wrappy - 1.0.2 +**Repository URL**: https://github.com/npm/wrappy +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +The ISC License -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. +Copyright (c) Isaac Z. Schlueter and Contributors -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: +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.``` -You must give any other recipients of the Work or Derivative Works a copy of this License; and +## ws - 8.20.0 +**Repository URL**: https://github.com/websockets/ws +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2011 Einar Otto Stangvik +Copyright (c) 2013 Arnout Kazemier and contributors +Copyright (c) 2016 Luigi Pinca and contributors -You must cause any modified files to carry prominent notices stating that You changed the files; and +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. +## y18n - 4.0.3 +**Repository URL**: https://github.com/yargs/y18n +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2015, Contributors -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. +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.``` -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. +## y18n - 5.0.8 +**Repository URL**: https://github.com/yargs/y18n +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2015, Contributors -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. -END OF TERMS AND CONDITIONS``` +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.``` -## uc.micro - 2.1.0 -**Repository URL**: https://github.com/markdown-it/uc.micro -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html +## yallist - 5.0.0 +**Repository URL**: https://github.com/isaacs/yallist +**License Type(s)**: BlueOak-1.0.0 +### License: https://spdx.org/licenses/BlueOak-1.0.0.html ``` -Copyright Mathias Bynens +All packages under `src/` are licensed according to the terms in +their respective `LICENSE` or `LICENSE.md` files. -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +The remainder of this project is licensed under the Blue Oak +Model License, as follows: -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +----- + +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. -## v8-to-istanbul - 9.3.0 -**Repository URL**: https://github.com/istanbuljs/v8-to-istanbul -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html -``` -Copyright (c) 2017, Contributors +## Copyright -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. -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.``` +## Notices -## which - 2.0.2 -**Repository URL**: https://github.com/isaacs/node-which -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html -``` -The ISC License +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. -Copyright (c) Isaac Z. Schlueter and Contributors +## Excuse -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. -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.``` +## Patent -## wrap-ansi - 7.0.0 -**Repository URL**: https://github.com/chalk/wrap-ansi -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. -Copyright (c) Sindre Sorhus (https://sindresorhus.com) +## Reliability -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +No contributor can revoke this license. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +## No Liability -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.***``` -## y18n - 5.0.8 -**Repository URL**: https://github.com/yargs/y18n +## yaml - 2.8.3 +**Repository URL**: https://github.com/eemeli/yaml **License Type(s)**: ISC ### License: https://spdx.org/licenses/ISC.html ``` -Copyright (c) 2015, Contributors +Copyright Eemeli Aro Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice @@ -2279,7 +38278,7 @@ 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.``` -## yaml - 2.8.3 +## yaml - 2.8.4 **Repository URL**: https://github.com/eemeli/yaml **License Type(s)**: ISC ### License: https://spdx.org/licenses/ISC.html @@ -2298,6 +38297,46 @@ 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.``` +## yargs-parser - 18.1.3 +**Repository URL**: https://github.com/yargs/yargs-parser +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +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.``` + +## yargs-parser - 20.2.9 +**Repository URL**: https://github.com/yargs/yargs-parser +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +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.``` + ## yargs-parser - 21.1.1 **Repository URL**: https://github.com/yargs/yargs-parser **License Type(s)**: ISC @@ -2318,6 +38357,60 @@ 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.``` +## yargs - 15.4.1 +**Repository URL**: https://github.com/yargs/yargs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright 2010 James Halliday (mail@substack.net); Modified work Copyright 2014 Contributors (ben@npmjs.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + +## yargs - 16.2.0 +**Repository URL**: https://github.com/yargs/yargs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright 2010 James Halliday (mail@substack.net); Modified work Copyright 2014 Contributors (ben@npmjs.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.``` + ## yargs - 17.7.2 **Repository URL**: https://github.com/yargs/yargs **License Type(s)**: MIT @@ -2345,6 +38438,33 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` +## yauzl - 2.10.0 +**Repository URL**: https://github.com/thejoshwolfe/yauzl +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2014 Josh Wolfe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` + ## yocto-queue - 0.1.0 **Repository URL**: https://github.com/sindresorhus/yocto-queue **License Type(s)**: MIT @@ -2359,3 +38479,66 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## yoctocolors - 2.1.2 +**Repository URL**: https://github.com/sindresorhus/yoctocolors +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` + +## zod-to-json-schema - 3.25.2 +**Repository URL**: https://github.com/StefanTerdell/zod-to-json-schema +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +ISC License + +Copyright (c) 2020, Stefan Terdell + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +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.``` + +## zod - 4.4.3 +**Repository URL**: https://github.com/colinhacks/zod +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2025 Colin McDonnell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.``` diff --git a/RELEASING.md b/RELEASING.md index 1b3cd16e..14d37abe 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -48,8 +48,9 @@ NeMo Flow versions are anchored on the workspace SemVer in the repository root - The root `Cargo.toml` `workspace.dependencies` entries for `nemo-flow`, `nemo-flow-adaptive`, and `nemo-flow-ffi` must stay aligned with that same version. -- `crates/node/package.json` and `crates/node/package-lock.json` carry the base - npm version for the Node.js package and must be bumped explicitly. +- `crates/node/package.json` carries the base npm version for the Node.js + package. The repository-root `package-lock.json` carries the npm workspace + lock entries and must be updated with it. - The Python package version is derived at packaging time. `pyproject.toml` stays `dynamic = ["version"]` in the repository, and the packaging recipe writes a concrete version into `pyproject.toml` and `crates/python/Cargo.toml` @@ -101,9 +102,9 @@ Update the versioned source files in the release PR or release-prep commit: 1. Update the root [`Cargo.toml`](Cargo.toml) workspace version. 2. Update the root [`Cargo.toml`](Cargo.toml) `workspace.dependencies` versions for `nemo-flow`, `nemo-flow-adaptive`, and `nemo-flow-ffi`. -3. Update [`crates/node/package.json`](crates/node/package.json) and - [`crates/node/package-lock.json`](crates/node/package-lock.json) to the same - release version. +3. Update [`crates/node/package.json`](crates/node/package.json) and the + `crates/node` entry in the root [`package-lock.json`](package-lock.json) to + the same release version. 4. Review docs and snippets that mention explicit versions, including: - [`README.md`](README.md) - [`CONTRIBUTING.md`](CONTRIBUTING.md) diff --git a/crates/node/package-lock.json b/crates/node/package-lock.json deleted file mode 100644 index 659d3aa2..00000000 --- a/crates/node/package-lock.json +++ /dev/null @@ -1,969 +0,0 @@ -{ - "name": "nemo-flow-node", - "version": "0.2.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "nemo-flow-node", - "version": "0.2.0", - "license": "Apache-2.0", - "devDependencies": { - "@napi-rs/cli": "^2", - "c8": "^11.0.0", - "prettier": "^3.8.2", - "typedoc": "^0.28.0", - "typescript": "^5.8.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", - "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@gerrit0/mini-shiki": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.23.0.tgz", - "integrity": "sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/engine-oniguruma": "^3.23.0", - "@shikijs/langs": "^3.23.0", - "@shikijs/themes": "^3.23.0", - "@shikijs/types": "^3.23.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@napi-rs/cli": { - "version": "2.18.4", - "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.18.4.tgz", - "integrity": "sha512-SgJeA4df9DE2iAEpr3M2H0OKl/yjtg1BnRI5/JyowS71tUWhrfSu2LT0V3vlHET+g1hBVlrO60PmEXwUEKp8Mg==", - "dev": true, - "license": "MIT", - "bin": { - "napi": "scripts/index.js" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", - "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@shikijs/langs": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", - "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", - "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0" - } - }, - "node_modules/@shikijs/types": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", - "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/c8": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-11.0.0.tgz", - "integrity": "sha512-e/uRViGHSVIJv7zsaDKM7VRn2390TgHXqUSvYwPHBQaU6L7E9L0n9JbdkwdYPvshDT0KymBmmlwSpms3yBaMNg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^1.0.1", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^8.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": "20 || >=22" - }, - "peerDependencies": { - "monocart-coverage-reports": "^2" - }, - "peerDependenciesMeta": { - "monocart-coverage-reports": { - "optional": true - } - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-it": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/prettier": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.2.tgz", - "integrity": "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-8.0.0.tgz", - "integrity": "sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^13.0.6", - "minimatch": "^10.2.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/typedoc": { - "version": "0.28.19", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.19.tgz", - "integrity": "sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@gerrit0/mini-shiki": "^3.23.0", - "lunr": "^2.3.9", - "markdown-it": "^14.1.1", - "minimatch": "^10.2.5", - "yaml": "^2.8.3" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 18", - "pnpm": ">= 10" - }, - "peerDependencies": { - "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", - "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/docs/conf.py b/docs/conf.py index f5c7f41d..b07bcdce 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -337,7 +337,7 @@ def _require_node_modules() -> None: if not node_modules_dir.is_dir(): raise RuntimeError( "Node.js docs dependencies are missing. " - "Run `cd crates/node && npm install --ignore-scripts` before building docs." + "Run `npm install --ignore-scripts` from the repository root before building docs." ) diff --git a/docs/contribute/testing-and-docs.md b/docs/contribute/testing-and-docs.md index c794f3c6..634dd95c 100644 --- a/docs/contribute/testing-and-docs.md +++ b/docs/contribute/testing-and-docs.md @@ -65,9 +65,8 @@ Run the Node.js validation loop when a change touches the NAPI binding or JavaScript package surface. ```bash -cd crates/node npm install --ignore-scripts -npm test +npm test --workspace=nemo-flow-node ``` ## Documentation Checklist diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md index eac059fc..d6db8fee 100644 --- a/docs/getting-started/installation.md +++ b/docs/getting-started/installation.md @@ -83,9 +83,9 @@ Build and install the local Node.js package when your application should consume the checkout version. ```bash -cd ../NeMo-Flow/crates/node +cd ../NeMo-Flow npm install --ignore-scripts -npm run build +npm run build --workspace=nemo-flow-node cd - npm install ../NeMo-Flow/crates/node ``` @@ -140,9 +140,8 @@ This command installs the Python package in editable mode, builds the native ext Use this setup when you need the Node.js package dependencies for binding work. ```bash -cd crates/node npm install --ignore-scripts -npm run build +npm run build --workspace=nemo-flow-node ``` ### Rust Development Setup diff --git a/docs/getting-started/nodejs.md b/docs/getting-started/nodejs.md index b5bb770f..68332cac 100644 --- a/docs/getting-started/nodejs.md +++ b/docs/getting-started/nodejs.md @@ -19,9 +19,8 @@ Use this path when you are working from a local checkout and need editable sourc behavior. ```bash -cd crates/node npm install --ignore-scripts -npm run build +npm run build --workspace=nemo-flow-node ``` This path is for local source development when you need to build the binding from the repository checkout. diff --git a/docs/getting-started/prerequisites.md b/docs/getting-started/prerequisites.md index 9e3357af..2be96641 100644 --- a/docs/getting-started/prerequisites.md +++ b/docs/getting-started/prerequisites.md @@ -35,6 +35,5 @@ uv sync Install Node.js dependencies when you need Node.js builds or generated Node.js API documentation: ```bash -cd crates/node npm install --ignore-scripts ``` diff --git a/docs/resources/support-and-faqs.md b/docs/resources/support-and-faqs.md index f04515cd..1a007aab 100644 --- a/docs/resources/support-and-faqs.md +++ b/docs/resources/support-and-faqs.md @@ -517,7 +517,7 @@ Choose the smallest validation set that covers the touched surface: - Rust core or adaptive changes: `cargo test --workspace` or focused crate tests. - Python binding changes: `uv run pytest`. -- Node.js binding changes: `cd crates/node && npm test`. +- Node.js binding changes: `npm test --workspace=nemo-flow-node`. - Go binding changes: build the release FFI library first, then run Go tests under `go/nemo_flow`. - WebAssembly changes: run `just test-wasm` and the WebAssembly crate tests (`cargo test -p nemo-flow-wasm`) when integration behavior changed. For diff --git a/docs/troubleshooting/troubleshooting-guide.md b/docs/troubleshooting/troubleshooting-guide.md index 6738ebc4..8b929222 100644 --- a/docs/troubleshooting/troubleshooting-guide.md +++ b/docs/troubleshooting/troubleshooting-guide.md @@ -36,12 +36,11 @@ Confirm that Python satisfies the supported version from [Prerequisites](../gett ## Node.js Native Addon Does Not Load -If Node.js reports a missing or incompatible native addon, reinstall dependencies from the Node binding directory so the pretest build can regenerate the local addon: +If Node.js reports a missing or incompatible native addon, reinstall dependencies from the repository root so the pretest build can regenerate the local addon: ```bash -cd crates/node npm install -npm test +npm test --workspace=nemo-flow-node ``` Use [Node.js Getting Started](../getting-started/nodejs.md) to confirm that the example runs against the generated local build, not a stale package or a globally installed copy. diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index d855f98d..d315d8d9 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -28,7 +28,6 @@ import { } from "./telemetry.js"; import type { RuntimeStateOptions, StartContext } from "./types.js"; -const PLUGIN_ID = "nemo-flow"; const SERVICE_ID = "nemo-flow-observability"; const LIFECYCLE_ID = "nemo-flow-observability-cleanup"; const STATUS_METHOD = "nemoFlow.status"; diff --git a/justfile b/justfile index c30b9411..8a434d61 100644 --- a/justfile +++ b/justfile @@ -152,10 +152,7 @@ ensure_docs_dependencies() { cd "$NEMO_FLOW_REPO_ROOT" uv sync --inexact --no-default-groups --group docs --no-install-project - ( - cd "$NEMO_FLOW_REPO_ROOT/crates/node" - npm install --ignore-scripts - ) + npm install --ignore-scripts } configure_docs_environment() { @@ -219,10 +216,11 @@ set_npm_package_version() { local pkg_path="$1" local lock_path="${2:-}" local version="$3" + local lock_package_path="${4:-}" - node - "$pkg_path" "$lock_path" "$version" <<'NODE' + node - "$pkg_path" "$lock_path" "$version" "$lock_package_path" <<'NODE' const fs = require('fs'); -const [pkgPath, lockPath, version] = process.argv.slice(2); +const [pkgPath, lockPath, version, lockPackagePath] = process.argv.slice(2); function readJson(path) { return JSON.parse(fs.readFileSync(path, 'utf8')); @@ -248,24 +246,34 @@ try { const manifestChanged = manifest.version !== version; let lock = null; let lockChanged = false; - let rootPackageChanged = false; + let lockPackageChanged = false; if (lockPath) { lock = readJson(lockPath); - requireVersion(lock, lockPath); - if (!lock.packages || !lock.packages['']) { - throw new Error(`${lockPath} missing packages[""] root package entry`); + if (!lock.packages) { + throw new Error(`${lockPath} missing packages`); + } + + if (typeof lock.version === 'string' && lock.version.length > 0) { + lockChanged = lock.version !== version; } - requireVersion(lock.packages[''], `${lockPath} packages[""]`); - lockChanged = lock.version !== version; - rootPackageChanged = lock.packages[''].version !== version; + const packageEntryKey = lockPackagePath || ''; + const packageEntry = lock.packages[packageEntryKey]; + if (!packageEntry) { + throw new Error(`${lockPath} missing packages["${packageEntryKey}"]`); + } + requireVersion(packageEntry, `${lockPath} packages["${packageEntryKey}"]`); + lockPackageChanged = packageEntry.version !== version; } manifest.version = version; if (lock) { - lock.version = version; - lock.packages[''].version = version; + if (typeof lock.version === 'string' && lock.version.length > 0) { + lock.version = version; + } + const packageEntryKey = lockPackagePath || ''; + lock.packages[packageEntryKey].version = version; } if (manifestChanged) { @@ -276,7 +284,7 @@ try { } if (lockPath) { - if (lockChanged || rootPackageChanged) { + if (lockChanged || lockPackageChanged) { writeJson(lockPath, lock); console.log(`${lockPath} version updated to ${version}`); } else { @@ -416,7 +424,7 @@ PY set_node_package_version() { local version="$1" - set_npm_package_version crates/node/package.json crates/node/package-lock.json "$version" + set_npm_package_version crates/node/package.json package-lock.json "$version" crates/node } set_project_version() { @@ -654,12 +662,12 @@ build-node: if is_true "{{ ci }}"; then prepare_llvm_cov_workspace fi - cd "$NEMO_FLOW_REPO_ROOT/crates/node" + cd "$NEMO_FLOW_REPO_ROOT" npm install --ignore-scripts if is_true "{{ ci }}"; then - npm run build-debug + npm run build-debug --workspace=nemo-flow-node else - npm run build + npm run build --workspace=nemo-flow-node fi # --set [ci=true|false] @@ -694,6 +702,10 @@ clean: crates/wasm/package-lock.json \ crates/wasm/pkg-test/ \ crates/wasm/pkg/ \ + integrations/openclaw/.test-dist \ + integrations/openclaw/dist \ + integrations/openclaw/node_modules \ + node_modules \ docs/_build/ \ docs/reference/api/**/_generated/ \ docs/reference/api/**/_source/ \ @@ -856,12 +868,12 @@ test-node: fi cargo test -p nemo-flow-node --lib fi - cd "$NEMO_FLOW_REPO_ROOT/crates/node" + cd "$NEMO_FLOW_REPO_ROOT" npm install --ignore-scripts if is_true "{{ ci }}"; then - npm run coverage - cp ./coverage/cobertura-coverage.xml "$coverage_out" - cp ./junit.xml "$junit_out" + npm run coverage --workspace=nemo-flow-node + cp crates/node/coverage/cobertura-coverage.xml "$coverage_out" + cp crates/node/junit.xml "$junit_out" cd "$NEMO_FLOW_REPO_ROOT" if [[ -n "$rust_coverage_out" ]]; then cargo llvm-cov report \ @@ -871,9 +883,23 @@ test-node: --output-path "$rust_coverage_out" fi else - npm test + npm test --workspace=nemo-flow-node fi +# --set [ci=true|false] +test-openclaw: + #!/usr/bin/env bash + {{ bash_helpers }} + cd "$NEMO_FLOW_REPO_ROOT" + if is_true "{{ ci }}"; then + npm ci --ignore-scripts + else + npm install --ignore-scripts + fi + npm run typecheck --workspace=@nvidia/nemo-flow-openclaw + npm test --workspace=@nvidia/nemo-flow-openclaw + npm run pack:check --workspace=@nvidia/nemo-flow-openclaw + # --set [output_dir=] [ci=true|false] test-wasm: #!/usr/bin/env bash @@ -896,7 +922,7 @@ test-wasm: fi # --set [output_dir=] [ci=true|false] -test-all: test-rust test-python test-go test-node test-wasm +test-all: test-rust test-python test-go test-node test-openclaw test-wasm # [version] or --set ref_name= set-version version="": @@ -927,10 +953,10 @@ package-node: sha="$(head_git_sha)" version="$(read_npm_package_version crates/node/package.json)" echo "Non-release build: appending commit hash to version" - set_npm_package_version crates/node/package.json crates/node/package-lock.json "${version}-${sha}" + set_npm_package_version crates/node/package.json package-lock.json "${version}-${sha}" crates/node else echo "Using explicit version {{ ref_name }}" - set_npm_package_version crates/node/package.json crates/node/package-lock.json "{{ ref_name }}" + set_npm_package_version crates/node/package.json package-lock.json "{{ ref_name }}" crates/node fi build_args=(build) if is_true "{{ ci }}" && [[ "$(uname -s)" == "Linux" ]]; then @@ -941,9 +967,9 @@ package-node: prepend_ziglang_to_path "$(project_python_executable)" build_args+=(-- --zig --zig-abi-suffix "$linux_glibc_version") fi - pushd crates/node >/dev/null npm install --ignore-scripts - npm run "${build_args[@]}" + npm run "${build_args[@]}" --workspace=nemo-flow-node + pushd crates/node >/dev/null npm pack --pack-destination "$package_dir" popd >/dev/null shopt -s nullglob diff --git a/integrations/openclaw/package-lock.json b/package-lock.json similarity index 71% rename from integrations/openclaw/package-lock.json rename to package-lock.json index 31d0b7ae..94664c61 100644 --- a/integrations/openclaw/package-lock.json +++ b/package-lock.json @@ -1,10 +1,825 @@ { - "name": "@nvidia/nemo-flow-openclaw", - "version": "0.2.0", + "name": "nemo-flow-workspace", "lockfileVersion": 3, "requires": true, "packages": { "": { + "name": "nemo-flow-workspace", + "workspaces": [ + "crates/node", + "integrations/openclaw" + ] + }, + "crates/node": { + "name": "nemo-flow-node", + "version": "0.2.0", + "license": "Apache-2.0", + "devDependencies": { + "@napi-rs/cli": "^2", + "c8": "^11.0.0", + "prettier": "^3.8.2", + "typedoc": "^0.28.0", + "typescript": "^5.8.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "crates/node/node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "crates/node/node_modules/@gerrit0/mini-shiki": { + "version": "3.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-oniguruma": "^3.23.0", + "@shikijs/langs": "^3.23.0", + "@shikijs/themes": "^3.23.0", + "@shikijs/types": "^3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "crates/node/node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "crates/node/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "crates/node/node_modules/@napi-rs/cli": { + "version": "2.18.4", + "dev": true, + "license": "MIT", + "bin": { + "napi": "scripts/index.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "crates/node/node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "crates/node/node_modules/@shikijs/langs": { + "version": "3.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "crates/node/node_modules/@shikijs/themes": { + "version": "3.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "crates/node/node_modules/@shikijs/types": { + "version": "3.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "crates/node/node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/@types/hast": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "crates/node/node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/@types/unist": { + "version": "3.0.3", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "crates/node/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "crates/node/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "crates/node/node_modules/brace-expansion": { + "version": "5.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "crates/node/node_modules/c8": { + "version": "11.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.1", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^8.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": "20 || >=22" + }, + "peerDependencies": { + "monocart-coverage-reports": "^2" + }, + "peerDependenciesMeta": { + "monocart-coverage-reports": { + "optional": true + } + } + }, + "crates/node/node_modules/cliui": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "crates/node/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "crates/node/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "crates/node/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "crates/node/node_modules/escalade": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "crates/node/node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "crates/node/node_modules/foreground-child": { + "version": "3.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "crates/node/node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "crates/node/node_modules/glob": { + "version": "13.0.6", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "crates/node/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "crates/node/node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "crates/node/node_modules/istanbul-reports": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/linkify-it": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "crates/node/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "crates/node/node_modules/lru-cache": { + "version": "11.2.7", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "crates/node/node_modules/lunr": { + "version": "2.3.9", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/make-dir": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "crates/node/node_modules/markdown-it": { + "version": "14.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "crates/node/node_modules/mdurl": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/minimatch": { + "version": "10.2.5", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "crates/node/node_modules/minipass": { + "version": "7.1.3", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "crates/node/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "crates/node/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "crates/node/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/path-scurry": { + "version": "2.0.2", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "crates/node/node_modules/prettier": { + "version": "3.8.2", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "crates/node/node_modules/punycode.js": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "crates/node/node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "crates/node/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "crates/node/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "crates/node/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "crates/node/node_modules/test-exclude": { + "version": "8.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^13.0.6", + "minimatch": "^10.2.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "crates/node/node_modules/typedoc": { + "version": "0.28.19", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gerrit0/mini-shiki": "^3.23.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.1", + "minimatch": "^10.2.5", + "yaml": "^2.8.3" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18", + "pnpm": ">= 10" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x" + } + }, + "crates/node/node_modules/typescript": { + "version": "5.9.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "crates/node/node_modules/uc.micro": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "crates/node/node_modules/v8-to-istanbul": { + "version": "9.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "crates/node/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "crates/node/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "crates/node/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "crates/node/node_modules/yaml": { + "version": "2.8.3", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "crates/node/node_modules/yargs": { + "version": "17.7.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "crates/node/node_modules/yargs-parser": { + "version": "21.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "crates/node/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "integrations/openclaw": { "name": "@nvidia/nemo-flow-openclaw", "version": "0.2.0", "license": "Apache-2.0", @@ -19,7 +834,7 @@ "openclaw": ">=2026.5.6" } }, - "node_modules/@agentclientprotocol/sdk": { + "integrations/openclaw/node_modules/@agentclientprotocol/sdk": { "version": "0.21.0", "license": "Apache-2.0", "peer": true, @@ -27,7 +842,7 @@ "zod": "^3.25.0 || ^4.0.0" } }, - "node_modules/@anthropic-ai/sdk": { + "integrations/openclaw/node_modules/@anthropic-ai/sdk": { "version": "0.93.0", "license": "MIT", "peer": true, @@ -46,7 +861,7 @@ } } }, - "node_modules/@anthropic-ai/vertex-sdk": { + "integrations/openclaw/node_modules/@anthropic-ai/vertex-sdk": { "version": "0.16.0", "license": "MIT", "peer": true, @@ -55,7 +870,7 @@ "google-auth-library": "^9.4.2" } }, - "node_modules/@aws-crypto/crc32": { + "integrations/openclaw/node_modules/@aws-crypto/crc32": { "version": "5.2.0", "license": "Apache-2.0", "peer": true, @@ -68,7 +883,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-browser": { + "integrations/openclaw/node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", "license": "Apache-2.0", "peer": true, @@ -82,7 +897,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "integrations/openclaw/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", "license": "Apache-2.0", "peer": true, @@ -93,7 +908,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "integrations/openclaw/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", "license": "Apache-2.0", "peer": true, @@ -105,7 +920,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "integrations/openclaw/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", "license": "Apache-2.0", "peer": true, @@ -117,7 +932,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha256-js": { + "integrations/openclaw/node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", "license": "Apache-2.0", "peer": true, @@ -130,7 +945,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/supports-web-crypto": { + "integrations/openclaw/node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", "license": "Apache-2.0", "peer": true, @@ -138,7 +953,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util": { + "integrations/openclaw/node_modules/@aws-crypto/util": { "version": "5.2.0", "license": "Apache-2.0", "peer": true, @@ -148,7 +963,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "integrations/openclaw/node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", "license": "Apache-2.0", "peer": true, @@ -159,7 +974,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "integrations/openclaw/node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", "license": "Apache-2.0", "peer": true, @@ -171,7 +986,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "integrations/openclaw/node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { "version": "2.3.0", "license": "Apache-2.0", "peer": true, @@ -183,7 +998,7 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-bedrock": { + "integrations/openclaw/node_modules/@aws-sdk/client-bedrock": { "version": "3.1042.0", "license": "Apache-2.0", "peer": true, @@ -233,7 +1048,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-bedrock-runtime": { + "integrations/openclaw/node_modules/@aws-sdk/client-bedrock-runtime": { "version": "3.1042.0", "license": "Apache-2.0", "peer": true, @@ -290,7 +1105,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity": { + "integrations/openclaw/node_modules/@aws-sdk/client-cognito-identity": { "version": "3.1044.0", "license": "Apache-2.0", "peer": true, @@ -339,7 +1154,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/core": { + "integrations/openclaw/node_modules/@aws-sdk/core": { "version": "3.974.8", "license": "Apache-2.0", "peer": true, @@ -363,7 +1178,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-cognito-identity": { "version": "3.972.31", "license": "Apache-2.0", "peer": true, @@ -378,7 +1193,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-env": { "version": "3.972.34", "license": "Apache-2.0", "peer": true, @@ -393,7 +1208,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-http": { "version": "3.972.36", "license": "Apache-2.0", "peer": true, @@ -413,7 +1228,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-ini": { "version": "3.972.38", "license": "Apache-2.0", "peer": true, @@ -437,7 +1252,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-login": { "version": "3.972.38", "license": "Apache-2.0", "peer": true, @@ -455,7 +1270,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-node": { "version": "3.972.39", "license": "Apache-2.0", "peer": true, @@ -477,7 +1292,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-process": { "version": "3.972.34", "license": "Apache-2.0", "peer": true, @@ -493,7 +1308,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-sso": { "version": "3.972.38", "license": "Apache-2.0", "peer": true, @@ -511,7 +1326,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { "version": "3.1041.0", "license": "Apache-2.0", "peer": true, @@ -528,7 +1343,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { + "integrations/openclaw/node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.972.38", "license": "Apache-2.0", "peer": true, @@ -545,7 +1360,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-providers": { + "integrations/openclaw/node_modules/@aws-sdk/credential-providers": { "version": "3.1044.0", "license": "Apache-2.0", "peer": true, @@ -575,7 +1390,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/eventstream-handler-node": { + "integrations/openclaw/node_modules/@aws-sdk/eventstream-handler-node": { "version": "3.972.14", "license": "Apache-2.0", "peer": true, @@ -589,7 +1404,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-eventstream": { + "integrations/openclaw/node_modules/@aws-sdk/middleware-eventstream": { "version": "3.972.10", "license": "Apache-2.0", "peer": true, @@ -603,7 +1418,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { + "integrations/openclaw/node_modules/@aws-sdk/middleware-host-header": { "version": "3.972.10", "license": "Apache-2.0", "peer": true, @@ -617,7 +1432,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { + "integrations/openclaw/node_modules/@aws-sdk/middleware-logger": { "version": "3.972.10", "license": "Apache-2.0", "peer": true, @@ -630,7 +1445,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { + "integrations/openclaw/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.972.11", "license": "Apache-2.0", "peer": true, @@ -645,7 +1460,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { + "integrations/openclaw/node_modules/@aws-sdk/middleware-sdk-s3": { "version": "3.972.37", "license": "Apache-2.0", "peer": true, @@ -669,7 +1484,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { + "integrations/openclaw/node_modules/@aws-sdk/middleware-user-agent": { "version": "3.972.38", "license": "Apache-2.0", "peer": true, @@ -687,7 +1502,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-websocket": { + "integrations/openclaw/node_modules/@aws-sdk/middleware-websocket": { "version": "3.972.16", "license": "Apache-2.0", "peer": true, @@ -709,7 +1524,7 @@ "node": ">= 14.0.0" } }, - "node_modules/@aws-sdk/nested-clients": { + "integrations/openclaw/node_modules/@aws-sdk/nested-clients": { "version": "3.997.6", "license": "Apache-2.0", "peer": true, @@ -758,7 +1573,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { + "integrations/openclaw/node_modules/@aws-sdk/region-config-resolver": { "version": "3.972.13", "license": "Apache-2.0", "peer": true, @@ -773,7 +1588,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { + "integrations/openclaw/node_modules/@aws-sdk/signature-v4-multi-region": { "version": "3.996.25", "license": "Apache-2.0", "peer": true, @@ -789,7 +1604,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/token-providers": { + "integrations/openclaw/node_modules/@aws-sdk/token-providers": { "version": "3.1042.0", "license": "Apache-2.0", "peer": true, @@ -806,7 +1621,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/types": { + "integrations/openclaw/node_modules/@aws-sdk/types": { "version": "3.973.8", "license": "Apache-2.0", "peer": true, @@ -818,7 +1633,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { + "integrations/openclaw/node_modules/@aws-sdk/util-arn-parser": { "version": "3.972.3", "license": "Apache-2.0", "peer": true, @@ -829,7 +1644,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-endpoints": { + "integrations/openclaw/node_modules/@aws-sdk/util-endpoints": { "version": "3.996.8", "license": "Apache-2.0", "peer": true, @@ -844,7 +1659,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-format-url": { + "integrations/openclaw/node_modules/@aws-sdk/util-format-url": { "version": "3.972.10", "license": "Apache-2.0", "peer": true, @@ -858,7 +1673,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-locate-window": { + "integrations/openclaw/node_modules/@aws-sdk/util-locate-window": { "version": "3.965.5", "license": "Apache-2.0", "peer": true, @@ -869,7 +1684,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-user-agent-browser": { + "integrations/openclaw/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.972.10", "license": "Apache-2.0", "peer": true, @@ -880,7 +1695,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/util-user-agent-node": { + "integrations/openclaw/node_modules/@aws-sdk/util-user-agent-node": { "version": "3.973.24", "license": "Apache-2.0", "peer": true, @@ -904,7 +1719,7 @@ } } }, - "node_modules/@aws-sdk/xml-builder": { + "integrations/openclaw/node_modules/@aws-sdk/xml-builder": { "version": "3.972.22", "license": "Apache-2.0", "peer": true, @@ -918,7 +1733,7 @@ "node": ">=20.0.0" } }, - "node_modules/@aws/bedrock-token-generator": { + "integrations/openclaw/node_modules/@aws/bedrock-token-generator": { "version": "1.1.0", "license": "Apache-2.0", "peer": true, @@ -937,7 +1752,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws/lambda-invoke-store": { + "integrations/openclaw/node_modules/@aws/lambda-invoke-store": { "version": "0.2.4", "license": "Apache-2.0", "peer": true, @@ -945,7 +1760,7 @@ "node": ">=18.0.0" } }, - "node_modules/@babel/runtime": { + "integrations/openclaw/node_modules/@babel/runtime": { "version": "7.29.2", "license": "MIT", "peer": true, @@ -953,7 +1768,7 @@ "node": ">=6.9.0" } }, - "node_modules/@borewit/text-codec": { + "integrations/openclaw/node_modules/@borewit/text-codec": { "version": "0.2.2", "license": "MIT", "peer": true, @@ -962,7 +1777,7 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/@clack/core": { + "integrations/openclaw/node_modules/@clack/core": { "version": "1.3.0", "license": "MIT", "peer": true, @@ -974,7 +1789,7 @@ "node": ">= 20.12.0" } }, - "node_modules/@clack/prompts": { + "integrations/openclaw/node_modules/@clack/prompts": { "version": "1.3.0", "license": "MIT", "peer": true, @@ -988,7 +1803,7 @@ "node": ">= 20.12.0" } }, - "node_modules/@google/genai": { + "integrations/openclaw/node_modules/@google/genai": { "version": "1.52.0", "hasInstallScript": true, "license": "Apache-2.0", @@ -1011,7 +1826,7 @@ } } }, - "node_modules/@google/genai/node_modules/agent-base": { + "integrations/openclaw/node_modules/@google/genai/node_modules/agent-base": { "version": "7.1.4", "license": "MIT", "peer": true, @@ -1019,7 +1834,7 @@ "node": ">= 14" } }, - "node_modules/@google/genai/node_modules/data-uri-to-buffer": { + "integrations/openclaw/node_modules/@google/genai/node_modules/data-uri-to-buffer": { "version": "4.0.1", "license": "MIT", "peer": true, @@ -1027,7 +1842,7 @@ "node": ">= 12" } }, - "node_modules/@google/genai/node_modules/gaxios": { + "integrations/openclaw/node_modules/@google/genai/node_modules/gaxios": { "version": "7.1.4", "license": "Apache-2.0", "peer": true, @@ -1040,7 +1855,7 @@ "node": ">=18" } }, - "node_modules/@google/genai/node_modules/gcp-metadata": { + "integrations/openclaw/node_modules/@google/genai/node_modules/gcp-metadata": { "version": "8.1.2", "license": "Apache-2.0", "peer": true, @@ -1053,7 +1868,7 @@ "node": ">=18" } }, - "node_modules/@google/genai/node_modules/google-auth-library": { + "integrations/openclaw/node_modules/@google/genai/node_modules/google-auth-library": { "version": "10.6.2", "license": "Apache-2.0", "peer": true, @@ -1069,7 +1884,7 @@ "node": ">=18" } }, - "node_modules/@google/genai/node_modules/google-logging-utils": { + "integrations/openclaw/node_modules/@google/genai/node_modules/google-logging-utils": { "version": "1.1.3", "license": "Apache-2.0", "peer": true, @@ -1077,7 +1892,7 @@ "node": ">=14" } }, - "node_modules/@google/genai/node_modules/https-proxy-agent": { + "integrations/openclaw/node_modules/@google/genai/node_modules/https-proxy-agent": { "version": "7.0.6", "license": "MIT", "peer": true, @@ -1089,7 +1904,7 @@ "node": ">= 14" } }, - "node_modules/@google/genai/node_modules/node-fetch": { + "integrations/openclaw/node_modules/@google/genai/node_modules/node-fetch": { "version": "3.3.2", "license": "MIT", "peer": true, @@ -1106,7 +1921,7 @@ "url": "https://opencollective.com/node-fetch" } }, - "node_modules/@grammyjs/runner": { + "integrations/openclaw/node_modules/@grammyjs/runner": { "version": "2.0.3", "license": "MIT", "peer": true, @@ -1120,7 +1935,7 @@ "grammy": "^1.13.1" } }, - "node_modules/@grammyjs/transformer-throttler": { + "integrations/openclaw/node_modules/@grammyjs/transformer-throttler": { "version": "1.2.1", "license": "MIT", "peer": true, @@ -1134,12 +1949,12 @@ "grammy": "^1.0.0" } }, - "node_modules/@grammyjs/types": { + "integrations/openclaw/node_modules/@grammyjs/types": { "version": "3.26.0", "license": "MIT", "peer": true }, - "node_modules/@homebridge/ciao": { + "integrations/openclaw/node_modules/@homebridge/ciao": { "version": "1.3.8", "license": "MIT", "peer": true, @@ -1153,7 +1968,7 @@ "ciao-bcs": "lib/bonjour-conformance-testing.js" } }, - "node_modules/@hono/node-server": { + "integrations/openclaw/node_modules/@hono/node-server": { "version": "1.19.14", "license": "MIT", "peer": true, @@ -1164,7 +1979,7 @@ "hono": "^4" } }, - "node_modules/@isaacs/fs-minipass": { + "integrations/openclaw/node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "license": "ISC", "peer": true, @@ -1175,7 +1990,7 @@ "node": ">=18.0.0" } }, - "node_modules/@lydell/node-pty": { + "integrations/openclaw/node_modules/@lydell/node-pty": { "version": "1.2.0-beta.12", "license": "MIT", "peer": true, @@ -1188,7 +2003,7 @@ "@lydell/node-pty-win32-x64": "1.2.0-beta.12" } }, - "node_modules/@mariozechner/jiti": { + "integrations/openclaw/node_modules/@mariozechner/jiti": { "version": "2.6.5", "license": "MIT", "peer": true, @@ -1200,7 +2015,7 @@ "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/@mariozechner/pi-agent-core": { + "integrations/openclaw/node_modules/@mariozechner/pi-agent-core": { "version": "0.73.0", "license": "MIT", "peer": true, @@ -1212,7 +2027,7 @@ "node": ">=20.0.0" } }, - "node_modules/@mariozechner/pi-ai": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai": { "version": "0.73.0", "license": "MIT", "peer": true, @@ -1236,7 +2051,7 @@ "node": ">=20.0.0" } }, - "node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/@anthropic-ai/sdk": { "version": "0.91.1", "license": "MIT", "peer": true, @@ -1255,7 +2070,7 @@ } } }, - "node_modules/@mariozechner/pi-ai/node_modules/agent-base": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/agent-base": { "version": "7.1.4", "license": "MIT", "peer": true, @@ -1263,7 +2078,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/data-uri-to-buffer": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/data-uri-to-buffer": { "version": "6.0.2", "license": "MIT", "peer": true, @@ -1271,7 +2086,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/degenerator": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/degenerator": { "version": "5.0.1", "license": "MIT", "peer": true, @@ -1284,7 +2099,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/get-uri": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/get-uri": { "version": "6.0.5", "license": "MIT", "peer": true, @@ -1297,7 +2112,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/http-proxy-agent": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/http-proxy-agent": { "version": "7.0.2", "license": "MIT", "peer": true, @@ -1309,7 +2124,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/https-proxy-agent": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/https-proxy-agent": { "version": "7.0.6", "license": "MIT", "peer": true, @@ -1321,7 +2136,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/lru-cache": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/lru-cache": { "version": "7.18.3", "license": "ISC", "peer": true, @@ -1329,7 +2144,7 @@ "node": ">=12" } }, - "node_modules/@mariozechner/pi-ai/node_modules/openai": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/openai": { "version": "6.26.0", "license": "Apache-2.0", "peer": true, @@ -1349,7 +2164,7 @@ } } }, - "node_modules/@mariozechner/pi-ai/node_modules/pac-proxy-agent": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/pac-proxy-agent": { "version": "7.2.0", "license": "MIT", "peer": true, @@ -1367,7 +2182,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/pac-resolver": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/pac-resolver": { "version": "7.0.1", "license": "MIT", "peer": true, @@ -1379,7 +2194,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/proxy-agent": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/proxy-agent": { "version": "6.5.0", "license": "MIT", "peer": true, @@ -1397,12 +2212,12 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/proxy-from-env": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/proxy-from-env": { "version": "1.1.0", "license": "MIT", "peer": true }, - "node_modules/@mariozechner/pi-ai/node_modules/socks-proxy-agent": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/socks-proxy-agent": { "version": "8.0.5", "license": "MIT", "peer": true, @@ -1415,7 +2230,7 @@ "node": ">= 14" } }, - "node_modules/@mariozechner/pi-ai/node_modules/undici": { + "integrations/openclaw/node_modules/@mariozechner/pi-ai/node_modules/undici": { "version": "7.25.0", "license": "MIT", "peer": true, @@ -1423,7 +2238,7 @@ "node": ">=20.18.1" } }, - "node_modules/@mariozechner/pi-coding-agent": { + "integrations/openclaw/node_modules/@mariozechner/pi-coding-agent": { "version": "0.73.0", "license": "MIT", "peer": true, @@ -1460,7 +2275,7 @@ "@mariozechner/clipboard": "^0.3.5" } }, - "node_modules/@mariozechner/pi-coding-agent/node_modules/file-type": { + "integrations/openclaw/node_modules/@mariozechner/pi-coding-agent/node_modules/file-type": { "version": "21.3.4", "license": "MIT", "peer": true, @@ -1477,7 +2292,7 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/@mariozechner/pi-coding-agent/node_modules/undici": { + "integrations/openclaw/node_modules/@mariozechner/pi-coding-agent/node_modules/undici": { "version": "7.25.0", "license": "MIT", "peer": true, @@ -1485,7 +2300,7 @@ "node": ">=20.18.1" } }, - "node_modules/@mariozechner/pi-tui": { + "integrations/openclaw/node_modules/@mariozechner/pi-tui": { "version": "0.73.0", "license": "MIT", "peer": true, @@ -1503,7 +2318,7 @@ "koffi": "^2.9.0" } }, - "node_modules/@mistralai/mistralai": { + "integrations/openclaw/node_modules/@mistralai/mistralai": { "version": "2.2.1", "license": "Apache-2.0", "peer": true, @@ -1513,7 +2328,7 @@ "zod-to-json-schema": "^3.25.0" } }, - "node_modules/@modelcontextprotocol/sdk": { + "integrations/openclaw/node_modules/@modelcontextprotocol/sdk": { "version": "1.29.0", "license": "MIT", "peer": true, @@ -1552,7 +2367,7 @@ } } }, - "node_modules/@mozilla/readability": { + "integrations/openclaw/node_modules/@mozilla/readability": { "version": "0.6.0", "license": "Apache-2.0", "peer": true, @@ -1560,7 +2375,7 @@ "node": ">=14.0.0" } }, - "node_modules/@nodable/entities": { + "integrations/openclaw/node_modules/@nodable/entities": { "version": "2.1.0", "funding": [ { @@ -1571,27 +2386,27 @@ "license": "MIT", "peer": true }, - "node_modules/@protobufjs/aspromise": { + "integrations/openclaw/node_modules/@protobufjs/aspromise": { "version": "1.1.2", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@protobufjs/base64": { + "integrations/openclaw/node_modules/@protobufjs/base64": { "version": "1.1.2", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@protobufjs/codegen": { + "integrations/openclaw/node_modules/@protobufjs/codegen": { "version": "2.0.5", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@protobufjs/eventemitter": { + "integrations/openclaw/node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@protobufjs/fetch": { + "integrations/openclaw/node_modules/@protobufjs/fetch": { "version": "1.1.0", "license": "BSD-3-Clause", "peer": true, @@ -1600,37 +2415,37 @@ "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@protobufjs/float": { + "integrations/openclaw/node_modules/@protobufjs/float": { "version": "1.0.2", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@protobufjs/inquire": { + "integrations/openclaw/node_modules/@protobufjs/inquire": { "version": "1.1.1", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@protobufjs/path": { + "integrations/openclaw/node_modules/@protobufjs/path": { "version": "1.1.2", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@protobufjs/pool": { + "integrations/openclaw/node_modules/@protobufjs/pool": { "version": "1.1.0", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@protobufjs/utf8": { + "integrations/openclaw/node_modules/@protobufjs/utf8": { "version": "1.1.1", "license": "BSD-3-Clause", "peer": true }, - "node_modules/@silvia-odwyer/photon-node": { + "integrations/openclaw/node_modules/@silvia-odwyer/photon-node": { "version": "0.3.4", "license": "Apache-2.0", "peer": true }, - "node_modules/@slack/bolt": { + "integrations/openclaw/node_modules/@slack/bolt": { "version": "4.7.2", "license": "MIT", "peer": true, @@ -1654,7 +2469,7 @@ "@types/express": "^5.0.0" } }, - "node_modules/@slack/logger": { + "integrations/openclaw/node_modules/@slack/logger": { "version": "4.0.1", "license": "MIT", "peer": true, @@ -1666,7 +2481,7 @@ "npm": ">= 8.6.0" } }, - "node_modules/@slack/oauth": { + "integrations/openclaw/node_modules/@slack/oauth": { "version": "3.0.5", "license": "MIT", "peer": true, @@ -1682,7 +2497,7 @@ "npm": ">=8.6.0" } }, - "node_modules/@slack/socket-mode": { + "integrations/openclaw/node_modules/@slack/socket-mode": { "version": "2.0.7", "license": "MIT", "peer": true, @@ -1699,7 +2514,7 @@ "npm": ">= 8.6.0" } }, - "node_modules/@slack/types": { + "integrations/openclaw/node_modules/@slack/types": { "version": "2.21.0", "license": "MIT", "peer": true, @@ -1708,7 +2523,7 @@ "npm": ">= 6.12.0" } }, - "node_modules/@slack/web-api": { + "integrations/openclaw/node_modules/@slack/web-api": { "version": "7.15.2", "license": "MIT", "peer": true, @@ -1731,7 +2546,7 @@ "npm": ">= 8.6.0" } }, - "node_modules/@smithy/config-resolver": { + "integrations/openclaw/node_modules/@smithy/config-resolver": { "version": "4.4.17", "license": "Apache-2.0", "peer": true, @@ -1747,7 +2562,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/core": { + "integrations/openclaw/node_modules/@smithy/core": { "version": "3.23.17", "license": "Apache-2.0", "peer": true, @@ -1767,7 +2582,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/credential-provider-imds": { + "integrations/openclaw/node_modules/@smithy/credential-provider-imds": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1782,7 +2597,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-codec": { + "integrations/openclaw/node_modules/@smithy/eventstream-codec": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1796,7 +2611,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-browser": { + "integrations/openclaw/node_modules/@smithy/eventstream-serde-browser": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1809,7 +2624,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver": { + "integrations/openclaw/node_modules/@smithy/eventstream-serde-config-resolver": { "version": "4.3.14", "license": "Apache-2.0", "peer": true, @@ -1821,7 +2636,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-node": { + "integrations/openclaw/node_modules/@smithy/eventstream-serde-node": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1834,7 +2649,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-universal": { + "integrations/openclaw/node_modules/@smithy/eventstream-serde-universal": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1847,7 +2662,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/fetch-http-handler": { + "integrations/openclaw/node_modules/@smithy/fetch-http-handler": { "version": "5.3.17", "license": "Apache-2.0", "peer": true, @@ -1862,7 +2677,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-node": { + "integrations/openclaw/node_modules/@smithy/hash-node": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1876,7 +2691,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/invalid-dependency": { + "integrations/openclaw/node_modules/@smithy/invalid-dependency": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1888,7 +2703,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/is-array-buffer": { + "integrations/openclaw/node_modules/@smithy/is-array-buffer": { "version": "4.2.2", "license": "Apache-2.0", "peer": true, @@ -1899,7 +2714,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-content-length": { + "integrations/openclaw/node_modules/@smithy/middleware-content-length": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1912,7 +2727,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-endpoint": { + "integrations/openclaw/node_modules/@smithy/middleware-endpoint": { "version": "4.4.32", "license": "Apache-2.0", "peer": true, @@ -1930,7 +2745,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry": { + "integrations/openclaw/node_modules/@smithy/middleware-retry": { "version": "4.5.7", "license": "Apache-2.0", "peer": true, @@ -1950,7 +2765,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde": { + "integrations/openclaw/node_modules/@smithy/middleware-serde": { "version": "4.2.20", "license": "Apache-2.0", "peer": true, @@ -1964,7 +2779,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack": { + "integrations/openclaw/node_modules/@smithy/middleware-stack": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -1976,7 +2791,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider": { + "integrations/openclaw/node_modules/@smithy/node-config-provider": { "version": "4.3.14", "license": "Apache-2.0", "peer": true, @@ -1990,7 +2805,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler": { + "integrations/openclaw/node_modules/@smithy/node-http-handler": { "version": "4.6.1", "license": "Apache-2.0", "peer": true, @@ -2004,7 +2819,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider": { + "integrations/openclaw/node_modules/@smithy/property-provider": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -2016,7 +2831,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http": { + "integrations/openclaw/node_modules/@smithy/protocol-http": { "version": "5.3.14", "license": "Apache-2.0", "peer": true, @@ -2028,7 +2843,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-builder": { + "integrations/openclaw/node_modules/@smithy/querystring-builder": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -2041,7 +2856,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-parser": { + "integrations/openclaw/node_modules/@smithy/querystring-parser": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -2053,7 +2868,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/service-error-classification": { + "integrations/openclaw/node_modules/@smithy/service-error-classification": { "version": "4.3.1", "license": "Apache-2.0", "peer": true, @@ -2064,7 +2879,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/shared-ini-file-loader": { + "integrations/openclaw/node_modules/@smithy/shared-ini-file-loader": { "version": "4.4.9", "license": "Apache-2.0", "peer": true, @@ -2076,7 +2891,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/signature-v4": { + "integrations/openclaw/node_modules/@smithy/signature-v4": { "version": "5.3.14", "license": "Apache-2.0", "peer": true, @@ -2094,7 +2909,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/smithy-client": { + "integrations/openclaw/node_modules/@smithy/smithy-client": { "version": "4.12.13", "license": "Apache-2.0", "peer": true, @@ -2111,7 +2926,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/types": { + "integrations/openclaw/node_modules/@smithy/types": { "version": "4.14.1", "license": "Apache-2.0", "peer": true, @@ -2122,7 +2937,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/url-parser": { + "integrations/openclaw/node_modules/@smithy/url-parser": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -2135,7 +2950,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-base64": { + "integrations/openclaw/node_modules/@smithy/util-base64": { "version": "4.3.2", "license": "Apache-2.0", "peer": true, @@ -2148,7 +2963,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-browser": { + "integrations/openclaw/node_modules/@smithy/util-body-length-browser": { "version": "4.2.2", "license": "Apache-2.0", "peer": true, @@ -2159,7 +2974,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-node": { + "integrations/openclaw/node_modules/@smithy/util-body-length-node": { "version": "4.2.3", "license": "Apache-2.0", "peer": true, @@ -2170,7 +2985,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-buffer-from": { + "integrations/openclaw/node_modules/@smithy/util-buffer-from": { "version": "4.2.2", "license": "Apache-2.0", "peer": true, @@ -2182,7 +2997,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-config-provider": { + "integrations/openclaw/node_modules/@smithy/util-config-provider": { "version": "4.2.2", "license": "Apache-2.0", "peer": true, @@ -2193,7 +3008,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser": { + "integrations/openclaw/node_modules/@smithy/util-defaults-mode-browser": { "version": "4.3.49", "license": "Apache-2.0", "peer": true, @@ -2207,7 +3022,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node": { + "integrations/openclaw/node_modules/@smithy/util-defaults-mode-node": { "version": "4.2.54", "license": "Apache-2.0", "peer": true, @@ -2224,7 +3039,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-endpoints": { + "integrations/openclaw/node_modules/@smithy/util-endpoints": { "version": "3.4.2", "license": "Apache-2.0", "peer": true, @@ -2237,7 +3052,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-hex-encoding": { + "integrations/openclaw/node_modules/@smithy/util-hex-encoding": { "version": "4.2.2", "license": "Apache-2.0", "peer": true, @@ -2248,7 +3063,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-middleware": { + "integrations/openclaw/node_modules/@smithy/util-middleware": { "version": "4.2.14", "license": "Apache-2.0", "peer": true, @@ -2260,7 +3075,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-retry": { + "integrations/openclaw/node_modules/@smithy/util-retry": { "version": "4.3.8", "license": "Apache-2.0", "peer": true, @@ -2273,7 +3088,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-stream": { + "integrations/openclaw/node_modules/@smithy/util-stream": { "version": "4.5.25", "license": "Apache-2.0", "peer": true, @@ -2291,7 +3106,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-uri-escape": { + "integrations/openclaw/node_modules/@smithy/util-uri-escape": { "version": "4.2.2", "license": "Apache-2.0", "peer": true, @@ -2302,7 +3117,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-utf8": { + "integrations/openclaw/node_modules/@smithy/util-utf8": { "version": "4.2.2", "license": "Apache-2.0", "peer": true, @@ -2314,7 +3129,7 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/uuid": { + "integrations/openclaw/node_modules/@smithy/uuid": { "version": "1.1.2", "license": "Apache-2.0", "peer": true, @@ -2325,12 +3140,12 @@ "node": ">=18.0.0" } }, - "node_modules/@telegraf/types": { + "integrations/openclaw/node_modules/@telegraf/types": { "version": "7.1.0", "license": "MIT", "peer": true }, - "node_modules/@tokenizer/inflate": { + "integrations/openclaw/node_modules/@tokenizer/inflate": { "version": "0.4.1", "license": "MIT", "peer": true, @@ -2346,17 +3161,17 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/@tokenizer/token": { + "integrations/openclaw/node_modules/@tokenizer/token": { "version": "0.3.0", "license": "MIT", "peer": true }, - "node_modules/@tootallnate/quickjs-emscripten": { + "integrations/openclaw/node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "license": "MIT", "peer": true }, - "node_modules/@types/body-parser": { + "integrations/openclaw/node_modules/@types/body-parser": { "version": "1.19.6", "license": "MIT", "peer": true, @@ -2365,7 +3180,7 @@ "@types/node": "*" } }, - "node_modules/@types/connect": { + "integrations/openclaw/node_modules/@types/connect": { "version": "3.4.38", "license": "MIT", "peer": true, @@ -2373,7 +3188,7 @@ "@types/node": "*" } }, - "node_modules/@types/express": { + "integrations/openclaw/node_modules/@types/express": { "version": "5.0.6", "license": "MIT", "peer": true, @@ -2383,7 +3198,7 @@ "@types/serve-static": "^2" } }, - "node_modules/@types/express-serve-static-core": { + "integrations/openclaw/node_modules/@types/express-serve-static-core": { "version": "5.1.1", "license": "MIT", "peer": true, @@ -2394,12 +3209,12 @@ "@types/send": "*" } }, - "node_modules/@types/http-errors": { + "integrations/openclaw/node_modules/@types/http-errors": { "version": "2.0.5", "license": "MIT", "peer": true }, - "node_modules/@types/jsonwebtoken": { + "integrations/openclaw/node_modules/@types/jsonwebtoken": { "version": "9.0.10", "license": "MIT", "peer": true, @@ -2408,39 +3223,39 @@ "@types/node": "*" } }, - "node_modules/@types/mime-types": { + "integrations/openclaw/node_modules/@types/mime-types": { "version": "2.1.4", "license": "MIT", "peer": true }, - "node_modules/@types/ms": { + "integrations/openclaw/node_modules/@types/ms": { "version": "2.1.0", "license": "MIT", "peer": true }, - "node_modules/@types/node": { + "integrations/openclaw/node_modules/@types/node": { "version": "20.19.39", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, - "node_modules/@types/qs": { + "integrations/openclaw/node_modules/@types/qs": { "version": "6.15.1", "license": "MIT", "peer": true }, - "node_modules/@types/range-parser": { + "integrations/openclaw/node_modules/@types/range-parser": { "version": "1.2.7", "license": "MIT", "peer": true }, - "node_modules/@types/retry": { + "integrations/openclaw/node_modules/@types/retry": { "version": "0.12.0", "license": "MIT", "peer": true }, - "node_modules/@types/send": { + "integrations/openclaw/node_modules/@types/send": { "version": "1.2.1", "license": "MIT", "peer": true, @@ -2448,7 +3263,7 @@ "@types/node": "*" } }, - "node_modules/@types/serve-static": { + "integrations/openclaw/node_modules/@types/serve-static": { "version": "2.2.0", "license": "MIT", "peer": true, @@ -2457,7 +3272,7 @@ "@types/node": "*" } }, - "node_modules/@types/ws": { + "integrations/openclaw/node_modules/@types/ws": { "version": "8.18.1", "license": "MIT", "peer": true, @@ -2465,7 +3280,7 @@ "@types/node": "*" } }, - "node_modules/abort-controller": { + "integrations/openclaw/node_modules/abort-controller": { "version": "3.0.0", "license": "MIT", "peer": true, @@ -2476,7 +3291,7 @@ "node": ">=6.5" } }, - "node_modules/accepts": { + "integrations/openclaw/node_modules/accepts": { "version": "2.0.0", "license": "MIT", "peer": true, @@ -2488,7 +3303,7 @@ "node": ">= 0.6" } }, - "node_modules/agent-base": { + "integrations/openclaw/node_modules/agent-base": { "version": "9.0.0", "license": "MIT", "peer": true, @@ -2496,7 +3311,7 @@ "node": ">= 20" } }, - "node_modules/ajv": { + "integrations/openclaw/node_modules/ajv": { "version": "8.20.0", "license": "MIT", "peer": true, @@ -2511,7 +3326,7 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { + "integrations/openclaw/node_modules/ajv-formats": { "version": "3.0.1", "license": "MIT", "peer": true, @@ -2527,7 +3342,7 @@ } } }, - "node_modules/ansi-regex": { + "integrations/openclaw/node_modules/ansi-regex": { "version": "6.2.2", "license": "MIT", "peer": true, @@ -2538,7 +3353,7 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/ansi-styles": { + "integrations/openclaw/node_modules/ansi-styles": { "version": "4.3.0", "license": "MIT", "peer": true, @@ -2552,17 +3367,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { + "integrations/openclaw/node_modules/any-promise": { "version": "1.3.0", "license": "MIT", "peer": true }, - "node_modules/argparse": { + "integrations/openclaw/node_modules/argparse": { "version": "2.0.1", "license": "Python-2.0", "peer": true }, - "node_modules/asn1.js": { + "integrations/openclaw/node_modules/asn1.js": { "version": "5.4.1", "license": "MIT", "peer": true, @@ -2573,7 +3388,7 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/ast-types": { + "integrations/openclaw/node_modules/ast-types": { "version": "0.13.4", "license": "MIT", "peer": true, @@ -2584,12 +3399,12 @@ "node": ">=4" } }, - "node_modules/asynckit": { + "integrations/openclaw/node_modules/asynckit": { "version": "0.4.0", "license": "MIT", "peer": true }, - "node_modules/axios": { + "integrations/openclaw/node_modules/axios": { "version": "1.16.0", "license": "MIT", "peer": true, @@ -2599,7 +3414,7 @@ "proxy-from-env": "^2.1.0" } }, - "node_modules/balanced-match": { + "integrations/openclaw/node_modules/balanced-match": { "version": "4.0.4", "license": "MIT", "peer": true, @@ -2607,7 +3422,7 @@ "node": "18 || 20 || >=22" } }, - "node_modules/base64-js": { + "integrations/openclaw/node_modules/base64-js": { "version": "1.5.1", "funding": [ { @@ -2626,7 +3441,7 @@ "license": "MIT", "peer": true }, - "node_modules/basic-ftp": { + "integrations/openclaw/node_modules/basic-ftp": { "version": "5.3.1", "license": "MIT", "peer": true, @@ -2634,7 +3449,7 @@ "node": ">=10.0.0" } }, - "node_modules/bignumber.js": { + "integrations/openclaw/node_modules/bignumber.js": { "version": "9.3.1", "license": "MIT", "peer": true, @@ -2642,12 +3457,12 @@ "node": "*" } }, - "node_modules/bn.js": { + "integrations/openclaw/node_modules/bn.js": { "version": "4.12.3", "license": "MIT", "peer": true }, - "node_modules/body-parser": { + "integrations/openclaw/node_modules/body-parser": { "version": "2.2.2", "license": "MIT", "peer": true, @@ -2670,22 +3485,22 @@ "url": "https://opencollective.com/express" } }, - "node_modules/boolbase": { + "integrations/openclaw/node_modules/boolbase": { "version": "1.0.0", "license": "ISC", "peer": true }, - "node_modules/bottleneck": { + "integrations/openclaw/node_modules/bottleneck": { "version": "2.19.5", "license": "MIT", "peer": true }, - "node_modules/bowser": { + "integrations/openclaw/node_modules/bowser": { "version": "2.14.1", "license": "MIT", "peer": true }, - "node_modules/brace-expansion": { + "integrations/openclaw/node_modules/brace-expansion": { "version": "5.0.5", "license": "MIT", "peer": true, @@ -2696,7 +3511,7 @@ "node": "18 || 20 || >=22" } }, - "node_modules/buffer-alloc": { + "integrations/openclaw/node_modules/buffer-alloc": { "version": "1.2.0", "license": "MIT", "peer": true, @@ -2705,12 +3520,12 @@ "buffer-fill": "^1.0.0" } }, - "node_modules/buffer-alloc-unsafe": { + "integrations/openclaw/node_modules/buffer-alloc-unsafe": { "version": "1.1.0", "license": "MIT", "peer": true }, - "node_modules/buffer-crc32": { + "integrations/openclaw/node_modules/buffer-crc32": { "version": "0.2.13", "license": "MIT", "peer": true, @@ -2718,22 +3533,22 @@ "node": "*" } }, - "node_modules/buffer-equal-constant-time": { + "integrations/openclaw/node_modules/buffer-equal-constant-time": { "version": "1.0.1", "license": "BSD-3-Clause", "peer": true }, - "node_modules/buffer-fill": { + "integrations/openclaw/node_modules/buffer-fill": { "version": "1.0.0", "license": "MIT", "peer": true }, - "node_modules/buffer-from": { + "integrations/openclaw/node_modules/buffer-from": { "version": "1.1.2", "license": "MIT", "peer": true }, - "node_modules/bytes": { + "integrations/openclaw/node_modules/bytes": { "version": "3.1.2", "license": "MIT", "peer": true, @@ -2741,7 +3556,7 @@ "node": ">= 0.8" } }, - "node_modules/call-bind-apply-helpers": { + "integrations/openclaw/node_modules/call-bind-apply-helpers": { "version": "1.0.2", "license": "MIT", "peer": true, @@ -2753,7 +3568,7 @@ "node": ">= 0.4" } }, - "node_modules/call-bound": { + "integrations/openclaw/node_modules/call-bound": { "version": "1.0.4", "license": "MIT", "peer": true, @@ -2768,7 +3583,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/camelcase": { + "integrations/openclaw/node_modules/camelcase": { "version": "5.3.1", "license": "MIT", "peer": true, @@ -2776,7 +3591,7 @@ "node": ">=6" } }, - "node_modules/chalk": { + "integrations/openclaw/node_modules/chalk": { "version": "5.6.2", "license": "MIT", "peer": true, @@ -2787,7 +3602,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chokidar": { + "integrations/openclaw/node_modules/chokidar": { "version": "5.0.0", "license": "MIT", "peer": true, @@ -2801,7 +3616,7 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/chownr": { + "integrations/openclaw/node_modules/chownr": { "version": "3.0.0", "license": "BlueOak-1.0.0", "peer": true, @@ -2809,7 +3624,7 @@ "node": ">=18" } }, - "node_modules/cli-highlight": { + "integrations/openclaw/node_modules/cli-highlight": { "version": "2.1.11", "license": "ISC", "peer": true, @@ -2829,7 +3644,7 @@ "npm": ">=5.0.0" } }, - "node_modules/cli-highlight/node_modules/chalk": { + "integrations/openclaw/node_modules/cli-highlight/node_modules/chalk": { "version": "4.1.2", "license": "MIT", "peer": true, @@ -2844,7 +3659,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cliui": { + "integrations/openclaw/node_modules/cliui": { "version": "7.0.4", "license": "ISC", "peer": true, @@ -2854,7 +3669,7 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { + "integrations/openclaw/node_modules/cliui/node_modules/ansi-regex": { "version": "5.0.1", "license": "MIT", "peer": true, @@ -2862,7 +3677,7 @@ "node": ">=8" } }, - "node_modules/cliui/node_modules/strip-ansi": { + "integrations/openclaw/node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", "license": "MIT", "peer": true, @@ -2873,7 +3688,7 @@ "node": ">=8" } }, - "node_modules/color-convert": { + "integrations/openclaw/node_modules/color-convert": { "version": "2.0.1", "license": "MIT", "peer": true, @@ -2884,12 +3699,12 @@ "node": ">=7.0.0" } }, - "node_modules/color-name": { + "integrations/openclaw/node_modules/color-name": { "version": "1.1.4", "license": "MIT", "peer": true }, - "node_modules/combined-stream": { + "integrations/openclaw/node_modules/combined-stream": { "version": "1.0.8", "license": "MIT", "peer": true, @@ -2900,7 +3715,7 @@ "node": ">= 0.8" } }, - "node_modules/commander": { + "integrations/openclaw/node_modules/commander": { "version": "14.0.3", "license": "MIT", "peer": true, @@ -2908,7 +3723,7 @@ "node": ">=20" } }, - "node_modules/content-disposition": { + "integrations/openclaw/node_modules/content-disposition": { "version": "1.1.0", "license": "MIT", "peer": true, @@ -2920,7 +3735,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/content-type": { + "integrations/openclaw/node_modules/content-type": { "version": "1.0.5", "license": "MIT", "peer": true, @@ -2928,7 +3743,7 @@ "node": ">= 0.6" } }, - "node_modules/cookie": { + "integrations/openclaw/node_modules/cookie": { "version": "0.7.2", "license": "MIT", "peer": true, @@ -2936,7 +3751,7 @@ "node": ">= 0.6" } }, - "node_modules/cookie-signature": { + "integrations/openclaw/node_modules/cookie-signature": { "version": "1.2.2", "license": "MIT", "peer": true, @@ -2944,12 +3759,12 @@ "node": ">=6.6.0" } }, - "node_modules/core-util-is": { + "integrations/openclaw/node_modules/core-util-is": { "version": "1.0.3", "license": "MIT", "peer": true }, - "node_modules/cors": { + "integrations/openclaw/node_modules/cors": { "version": "2.8.6", "license": "MIT", "peer": true, @@ -2965,7 +3780,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/croner": { + "integrations/openclaw/node_modules/croner": { "version": "10.0.1", "funding": [ { @@ -2983,7 +3798,7 @@ "node": ">=18.0" } }, - "node_modules/cross-spawn": { + "integrations/openclaw/node_modules/cross-spawn": { "version": "7.0.6", "license": "MIT", "peer": true, @@ -2996,7 +3811,7 @@ "node": ">= 8" } }, - "node_modules/css-select": { + "integrations/openclaw/node_modules/css-select": { "version": "5.2.2", "license": "BSD-2-Clause", "peer": true, @@ -3011,7 +3826,7 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-what": { + "integrations/openclaw/node_modules/css-what": { "version": "6.2.2", "license": "BSD-2-Clause", "peer": true, @@ -3022,12 +3837,12 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cssom": { + "integrations/openclaw/node_modules/cssom": { "version": "0.5.0", "license": "MIT", "peer": true }, - "node_modules/data-uri-to-buffer": { + "integrations/openclaw/node_modules/data-uri-to-buffer": { "version": "8.0.0", "license": "MIT", "peer": true, @@ -3035,7 +3850,7 @@ "node": ">= 20" } }, - "node_modules/debug": { + "integrations/openclaw/node_modules/debug": { "version": "4.4.3", "license": "MIT", "peer": true, @@ -3051,7 +3866,7 @@ } } }, - "node_modules/decamelize": { + "integrations/openclaw/node_modules/decamelize": { "version": "1.2.0", "license": "MIT", "peer": true, @@ -3059,7 +3874,7 @@ "node": ">=0.10.0" } }, - "node_modules/define-data-property": { + "integrations/openclaw/node_modules/define-data-property": { "version": "1.1.4", "license": "MIT", "peer": true, @@ -3075,7 +3890,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-properties": { + "integrations/openclaw/node_modules/define-properties": { "version": "1.2.1", "license": "MIT", "peer": true, @@ -3091,7 +3906,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/degenerator": { + "integrations/openclaw/node_modules/degenerator": { "version": "7.0.1", "license": "MIT", "peer": true, @@ -3107,7 +3922,7 @@ "quickjs-wasi": "^2.2.0" } }, - "node_modules/delayed-stream": { + "integrations/openclaw/node_modules/delayed-stream": { "version": "1.0.0", "license": "MIT", "peer": true, @@ -3115,7 +3930,7 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { + "integrations/openclaw/node_modules/depd": { "version": "2.0.0", "license": "MIT", "peer": true, @@ -3123,7 +3938,7 @@ "node": ">= 0.8" } }, - "node_modules/diff": { + "integrations/openclaw/node_modules/diff": { "version": "8.0.4", "license": "BSD-3-Clause", "peer": true, @@ -3131,12 +3946,12 @@ "node": ">=0.3.1" } }, - "node_modules/dijkstrajs": { + "integrations/openclaw/node_modules/dijkstrajs": { "version": "1.0.3", "license": "MIT", "peer": true }, - "node_modules/dom-serializer": { + "integrations/openclaw/node_modules/dom-serializer": { "version": "2.0.0", "license": "MIT", "peer": true, @@ -3149,7 +3964,7 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/domelementtype": { + "integrations/openclaw/node_modules/domelementtype": { "version": "2.3.0", "funding": [ { @@ -3160,7 +3975,7 @@ "license": "BSD-2-Clause", "peer": true }, - "node_modules/domhandler": { + "integrations/openclaw/node_modules/domhandler": { "version": "5.0.3", "license": "BSD-2-Clause", "peer": true, @@ -3174,7 +3989,7 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/domutils": { + "integrations/openclaw/node_modules/domutils": { "version": "3.2.2", "license": "BSD-2-Clause", "peer": true, @@ -3187,7 +4002,7 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dotenv": { + "integrations/openclaw/node_modules/dotenv": { "version": "17.4.2", "license": "BSD-2-Clause", "peer": true, @@ -3198,7 +4013,7 @@ "url": "https://dotenvx.com" } }, - "node_modules/dunder-proto": { + "integrations/openclaw/node_modules/dunder-proto": { "version": "1.0.1", "license": "MIT", "peer": true, @@ -3211,7 +4026,7 @@ "node": ">= 0.4" } }, - "node_modules/ecdsa-sig-formatter": { + "integrations/openclaw/node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "license": "Apache-2.0", "peer": true, @@ -3219,17 +4034,17 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/ee-first": { + "integrations/openclaw/node_modules/ee-first": { "version": "1.1.1", "license": "MIT", "peer": true }, - "node_modules/emoji-regex": { + "integrations/openclaw/node_modules/emoji-regex": { "version": "8.0.0", "license": "MIT", "peer": true }, - "node_modules/encodeurl": { + "integrations/openclaw/node_modules/encodeurl": { "version": "2.0.0", "license": "MIT", "peer": true, @@ -3237,7 +4052,7 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { + "integrations/openclaw/node_modules/end-of-stream": { "version": "1.4.5", "license": "MIT", "peer": true, @@ -3245,7 +4060,7 @@ "once": "^1.4.0" } }, - "node_modules/entities": { + "integrations/openclaw/node_modules/entities": { "version": "4.5.0", "license": "BSD-2-Clause", "peer": true, @@ -3256,7 +4071,7 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/es-define-property": { + "integrations/openclaw/node_modules/es-define-property": { "version": "1.0.1", "license": "MIT", "peer": true, @@ -3264,7 +4079,7 @@ "node": ">= 0.4" } }, - "node_modules/es-errors": { + "integrations/openclaw/node_modules/es-errors": { "version": "1.3.0", "license": "MIT", "peer": true, @@ -3272,7 +4087,7 @@ "node": ">= 0.4" } }, - "node_modules/es-object-atoms": { + "integrations/openclaw/node_modules/es-object-atoms": { "version": "1.1.1", "license": "MIT", "peer": true, @@ -3283,7 +4098,7 @@ "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { + "integrations/openclaw/node_modules/es-set-tostringtag": { "version": "2.1.0", "license": "MIT", "peer": true, @@ -3297,7 +4112,7 @@ "node": ">= 0.4" } }, - "node_modules/escalade": { + "integrations/openclaw/node_modules/escalade": { "version": "3.2.0", "license": "MIT", "peer": true, @@ -3305,12 +4120,12 @@ "node": ">=6" } }, - "node_modules/escape-html": { + "integrations/openclaw/node_modules/escape-html": { "version": "1.0.3", "license": "MIT", "peer": true }, - "node_modules/escape-string-regexp": { + "integrations/openclaw/node_modules/escape-string-regexp": { "version": "4.0.0", "license": "MIT", "peer": true, @@ -3321,7 +4136,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { + "integrations/openclaw/node_modules/escodegen": { "version": "2.1.0", "license": "BSD-2-Clause", "peer": true, @@ -3341,7 +4156,7 @@ "source-map": "~0.6.1" } }, - "node_modules/esprima": { + "integrations/openclaw/node_modules/esprima": { "version": "4.0.1", "license": "BSD-2-Clause", "peer": true, @@ -3353,7 +4168,7 @@ "node": ">=4" } }, - "node_modules/estraverse": { + "integrations/openclaw/node_modules/estraverse": { "version": "5.3.0", "license": "BSD-2-Clause", "peer": true, @@ -3361,7 +4176,7 @@ "node": ">=4.0" } }, - "node_modules/esutils": { + "integrations/openclaw/node_modules/esutils": { "version": "2.0.3", "license": "BSD-2-Clause", "peer": true, @@ -3369,7 +4184,7 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { + "integrations/openclaw/node_modules/etag": { "version": "1.8.1", "license": "MIT", "peer": true, @@ -3377,7 +4192,7 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { + "integrations/openclaw/node_modules/event-target-shim": { "version": "5.0.1", "license": "MIT", "peer": true, @@ -3385,12 +4200,12 @@ "node": ">=6" } }, - "node_modules/eventemitter3": { + "integrations/openclaw/node_modules/eventemitter3": { "version": "5.0.4", "license": "MIT", "peer": true }, - "node_modules/eventsource": { + "integrations/openclaw/node_modules/eventsource": { "version": "3.0.7", "license": "MIT", "peer": true, @@ -3401,7 +4216,7 @@ "node": ">=18.0.0" } }, - "node_modules/eventsource-parser": { + "integrations/openclaw/node_modules/eventsource-parser": { "version": "3.0.8", "license": "MIT", "peer": true, @@ -3409,7 +4224,7 @@ "node": ">=18.0.0" } }, - "node_modules/express": { + "integrations/openclaw/node_modules/express": { "version": "5.2.1", "license": "MIT", "peer": true, @@ -3451,7 +4266,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express-rate-limit": { + "integrations/openclaw/node_modules/express-rate-limit": { "version": "8.5.1", "license": "MIT", "peer": true, @@ -3468,12 +4283,12 @@ "express": ">= 4.11" } }, - "node_modules/extend": { + "integrations/openclaw/node_modules/extend": { "version": "3.0.2", "license": "MIT", "peer": true }, - "node_modules/extract-zip": { + "integrations/openclaw/node_modules/extract-zip": { "version": "2.0.1", "license": "BSD-2-Clause", "peer": true, @@ -3492,17 +4307,17 @@ "@types/yauzl": "^2.9.1" } }, - "node_modules/fast-deep-equal": { + "integrations/openclaw/node_modules/fast-deep-equal": { "version": "3.1.3", "license": "MIT", "peer": true }, - "node_modules/fast-string-truncated-width": { + "integrations/openclaw/node_modules/fast-string-truncated-width": { "version": "3.0.3", "license": "MIT", "peer": true }, - "node_modules/fast-string-width": { + "integrations/openclaw/node_modules/fast-string-width": { "version": "3.0.2", "license": "MIT", "peer": true, @@ -3510,7 +4325,7 @@ "fast-string-truncated-width": "^3.0.2" } }, - "node_modules/fast-uri": { + "integrations/openclaw/node_modules/fast-uri": { "version": "3.1.2", "funding": [ { @@ -3525,7 +4340,7 @@ "license": "BSD-3-Clause", "peer": true }, - "node_modules/fast-wrap-ansi": { + "integrations/openclaw/node_modules/fast-wrap-ansi": { "version": "0.2.0", "license": "MIT", "peer": true, @@ -3533,7 +4348,7 @@ "fast-string-width": "^3.0.2" } }, - "node_modules/fast-xml-builder": { + "integrations/openclaw/node_modules/fast-xml-builder": { "version": "1.1.9", "funding": [ { @@ -3547,7 +4362,7 @@ "path-expression-matcher": "^1.1.3" } }, - "node_modules/fast-xml-parser": { + "integrations/openclaw/node_modules/fast-xml-parser": { "version": "5.7.2", "funding": [ { @@ -3567,7 +4382,7 @@ "fxparser": "src/cli/cli.js" } }, - "node_modules/fd-slicer": { + "integrations/openclaw/node_modules/fd-slicer": { "version": "1.1.0", "license": "MIT", "peer": true, @@ -3575,7 +4390,7 @@ "pend": "~1.2.0" } }, - "node_modules/fetch-blob": { + "integrations/openclaw/node_modules/fetch-blob": { "version": "3.2.0", "funding": [ { @@ -3597,7 +4412,7 @@ "node": "^12.20 || >= 14.13" } }, - "node_modules/file-type": { + "integrations/openclaw/node_modules/file-type": { "version": "22.0.1", "license": "MIT", "peer": true, @@ -3614,7 +4429,7 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/finalhandler": { + "integrations/openclaw/node_modules/finalhandler": { "version": "2.1.1", "license": "MIT", "peer": true, @@ -3634,7 +4449,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/find-up": { + "integrations/openclaw/node_modules/find-up": { "version": "4.1.0", "license": "MIT", "peer": true, @@ -3646,7 +4461,7 @@ "node": ">=8" } }, - "node_modules/follow-redirects": { + "integrations/openclaw/node_modules/follow-redirects": { "version": "1.16.0", "funding": [ { @@ -3665,7 +4480,7 @@ } } }, - "node_modules/form-data": { + "integrations/openclaw/node_modules/form-data": { "version": "4.0.5", "license": "MIT", "peer": true, @@ -3680,7 +4495,7 @@ "node": ">= 6" } }, - "node_modules/form-data/node_modules/mime-db": { + "integrations/openclaw/node_modules/form-data/node_modules/mime-db": { "version": "1.52.0", "license": "MIT", "peer": true, @@ -3688,7 +4503,7 @@ "node": ">= 0.6" } }, - "node_modules/form-data/node_modules/mime-types": { + "integrations/openclaw/node_modules/form-data/node_modules/mime-types": { "version": "2.1.35", "license": "MIT", "peer": true, @@ -3699,7 +4514,7 @@ "node": ">= 0.6" } }, - "node_modules/formdata-polyfill": { + "integrations/openclaw/node_modules/formdata-polyfill": { "version": "4.0.10", "license": "MIT", "peer": true, @@ -3710,7 +4525,7 @@ "node": ">=12.20.0" } }, - "node_modules/forwarded": { + "integrations/openclaw/node_modules/forwarded": { "version": "0.2.0", "license": "MIT", "peer": true, @@ -3718,7 +4533,7 @@ "node": ">= 0.6" } }, - "node_modules/fresh": { + "integrations/openclaw/node_modules/fresh": { "version": "2.0.0", "license": "MIT", "peer": true, @@ -3726,7 +4541,7 @@ "node": ">= 0.8" } }, - "node_modules/function-bind": { + "integrations/openclaw/node_modules/function-bind": { "version": "1.1.2", "license": "MIT", "peer": true, @@ -3734,7 +4549,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gaxios": { + "integrations/openclaw/node_modules/gaxios": { "version": "6.7.1", "license": "Apache-2.0", "peer": true, @@ -3749,7 +4564,7 @@ "node": ">=14" } }, - "node_modules/gaxios/node_modules/agent-base": { + "integrations/openclaw/node_modules/gaxios/node_modules/agent-base": { "version": "7.1.4", "license": "MIT", "peer": true, @@ -3757,7 +4572,7 @@ "node": ">= 14" } }, - "node_modules/gaxios/node_modules/https-proxy-agent": { + "integrations/openclaw/node_modules/gaxios/node_modules/https-proxy-agent": { "version": "7.0.6", "license": "MIT", "peer": true, @@ -3769,7 +4584,7 @@ "node": ">= 14" } }, - "node_modules/gaxios/node_modules/uuid": { + "integrations/openclaw/node_modules/gaxios/node_modules/uuid": { "version": "9.0.1", "funding": [ "https://github.com/sponsors/broofa", @@ -3781,7 +4596,7 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/gcp-metadata": { + "integrations/openclaw/node_modules/gcp-metadata": { "version": "6.1.1", "license": "Apache-2.0", "peer": true, @@ -3794,7 +4609,7 @@ "node": ">=14" } }, - "node_modules/get-caller-file": { + "integrations/openclaw/node_modules/get-caller-file": { "version": "2.0.5", "license": "ISC", "peer": true, @@ -3802,7 +4617,7 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-east-asian-width": { + "integrations/openclaw/node_modules/get-east-asian-width": { "version": "1.5.0", "license": "MIT", "peer": true, @@ -3813,7 +4628,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { + "integrations/openclaw/node_modules/get-intrinsic": { "version": "1.3.0", "license": "MIT", "peer": true, @@ -3836,7 +4651,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-proto": { + "integrations/openclaw/node_modules/get-proto": { "version": "1.0.1", "license": "MIT", "peer": true, @@ -3848,7 +4663,7 @@ "node": ">= 0.4" } }, - "node_modules/get-stream": { + "integrations/openclaw/node_modules/get-stream": { "version": "5.2.0", "license": "MIT", "peer": true, @@ -3862,7 +4677,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-uri": { + "integrations/openclaw/node_modules/get-uri": { "version": "8.0.0", "license": "MIT", "peer": true, @@ -3875,7 +4690,7 @@ "node": ">= 20" } }, - "node_modules/glob": { + "integrations/openclaw/node_modules/glob": { "version": "13.0.6", "license": "BlueOak-1.0.0", "peer": true, @@ -3891,7 +4706,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/global-agent": { + "integrations/openclaw/node_modules/global-agent": { "version": "4.1.3", "license": "BSD-3-Clause", "peer": true, @@ -3905,7 +4720,7 @@ "node": ">=10.0" } }, - "node_modules/globalthis": { + "integrations/openclaw/node_modules/globalthis": { "version": "1.0.4", "license": "MIT", "peer": true, @@ -3920,7 +4735,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/google-auth-library": { + "integrations/openclaw/node_modules/google-auth-library": { "version": "9.15.1", "license": "Apache-2.0", "peer": true, @@ -3936,7 +4751,7 @@ "node": ">=14" } }, - "node_modules/google-logging-utils": { + "integrations/openclaw/node_modules/google-logging-utils": { "version": "0.0.2", "license": "Apache-2.0", "peer": true, @@ -3944,7 +4759,7 @@ "node": ">=14" } }, - "node_modules/gopd": { + "integrations/openclaw/node_modules/gopd": { "version": "1.2.0", "license": "MIT", "peer": true, @@ -3955,12 +4770,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { + "integrations/openclaw/node_modules/graceful-fs": { "version": "4.2.11", "license": "ISC", "peer": true }, - "node_modules/grammy": { + "integrations/openclaw/node_modules/grammy": { "version": "1.42.0", "license": "MIT", "peer": true, @@ -3974,7 +4789,7 @@ "node": "^12.20.0 || >=14.13.1" } }, - "node_modules/gtoken": { + "integrations/openclaw/node_modules/gtoken": { "version": "7.1.0", "license": "MIT", "peer": true, @@ -3986,7 +4801,7 @@ "node": ">=14.0.0" } }, - "node_modules/has-flag": { + "integrations/openclaw/node_modules/has-flag": { "version": "4.0.0", "license": "MIT", "peer": true, @@ -3994,7 +4809,7 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { + "integrations/openclaw/node_modules/has-property-descriptors": { "version": "1.0.2", "license": "MIT", "peer": true, @@ -4005,7 +4820,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { + "integrations/openclaw/node_modules/has-symbols": { "version": "1.1.0", "license": "MIT", "peer": true, @@ -4016,7 +4831,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { + "integrations/openclaw/node_modules/has-tostringtag": { "version": "1.0.2", "license": "MIT", "peer": true, @@ -4030,7 +4845,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { + "integrations/openclaw/node_modules/hasown": { "version": "2.0.3", "license": "MIT", "peer": true, @@ -4041,7 +4856,7 @@ "node": ">= 0.4" } }, - "node_modules/highlight.js": { + "integrations/openclaw/node_modules/highlight.js": { "version": "10.7.3", "license": "BSD-3-Clause", "peer": true, @@ -4049,7 +4864,7 @@ "node": "*" } }, - "node_modules/hono": { + "integrations/openclaw/node_modules/hono": { "version": "4.12.18", "license": "MIT", "peer": true, @@ -4057,7 +4872,7 @@ "node": ">=16.9.0" } }, - "node_modules/hosted-git-info": { + "integrations/openclaw/node_modules/hosted-git-info": { "version": "9.0.3", "license": "ISC", "peer": true, @@ -4068,12 +4883,12 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/html-escaper": { + "integrations/openclaw/node_modules/html-escaper": { "version": "3.0.3", "license": "MIT", "peer": true }, - "node_modules/htmlparser2": { + "integrations/openclaw/node_modules/htmlparser2": { "version": "10.1.0", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -4091,7 +4906,7 @@ "entities": "^7.0.1" } }, - "node_modules/htmlparser2/node_modules/entities": { + "integrations/openclaw/node_modules/htmlparser2/node_modules/entities": { "version": "7.0.1", "license": "BSD-2-Clause", "peer": true, @@ -4102,7 +4917,7 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/http_ece": { + "integrations/openclaw/node_modules/http_ece": { "version": "1.2.0", "license": "MIT", "peer": true, @@ -4110,7 +4925,7 @@ "node": ">=16" } }, - "node_modules/http-errors": { + "integrations/openclaw/node_modules/http-errors": { "version": "2.0.1", "license": "MIT", "peer": true, @@ -4129,7 +4944,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/http-proxy-agent": { + "integrations/openclaw/node_modules/http-proxy-agent": { "version": "9.0.0", "license": "MIT", "peer": true, @@ -4141,7 +4956,7 @@ "node": ">= 20" } }, - "node_modules/https-proxy-agent": { + "integrations/openclaw/node_modules/https-proxy-agent": { "version": "9.0.0", "license": "MIT", "peer": true, @@ -4153,7 +4968,7 @@ "node": ">= 20" } }, - "node_modules/iconv-lite": { + "integrations/openclaw/node_modules/iconv-lite": { "version": "0.7.2", "license": "MIT", "peer": true, @@ -4168,7 +4983,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/ieee754": { + "integrations/openclaw/node_modules/ieee754": { "version": "1.2.1", "funding": [ { @@ -4187,7 +5002,7 @@ "license": "BSD-3-Clause", "peer": true }, - "node_modules/ignore": { + "integrations/openclaw/node_modules/ignore": { "version": "7.0.5", "license": "MIT", "peer": true, @@ -4195,17 +5010,17 @@ "node": ">= 4" } }, - "node_modules/immediate": { + "integrations/openclaw/node_modules/immediate": { "version": "3.0.6", "license": "MIT", "peer": true }, - "node_modules/inherits": { + "integrations/openclaw/node_modules/inherits": { "version": "2.0.4", "license": "ISC", "peer": true }, - "node_modules/ip-address": { + "integrations/openclaw/node_modules/ip-address": { "version": "10.2.0", "license": "MIT", "peer": true, @@ -4213,7 +5028,7 @@ "node": ">= 12" } }, - "node_modules/ipaddr.js": { + "integrations/openclaw/node_modules/ipaddr.js": { "version": "2.4.0", "license": "MIT", "peer": true, @@ -4221,12 +5036,12 @@ "node": ">= 10" } }, - "node_modules/is-electron": { + "integrations/openclaw/node_modules/is-electron": { "version": "2.2.2", "license": "MIT", "peer": true }, - "node_modules/is-fullwidth-code-point": { + "integrations/openclaw/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "license": "MIT", "peer": true, @@ -4234,12 +5049,12 @@ "node": ">=8" } }, - "node_modules/is-promise": { + "integrations/openclaw/node_modules/is-promise": { "version": "4.0.0", "license": "MIT", "peer": true }, - "node_modules/is-stream": { + "integrations/openclaw/node_modules/is-stream": { "version": "2.0.1", "license": "MIT", "peer": true, @@ -4250,17 +5065,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { + "integrations/openclaw/node_modules/isarray": { "version": "1.0.0", "license": "MIT", "peer": true }, - "node_modules/isexe": { + "integrations/openclaw/node_modules/isexe": { "version": "2.0.0", "license": "ISC", "peer": true }, - "node_modules/jiti": { + "integrations/openclaw/node_modules/jiti": { "version": "2.7.0", "license": "MIT", "peer": true, @@ -4268,7 +5083,7 @@ "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/jose": { + "integrations/openclaw/node_modules/jose": { "version": "6.2.3", "license": "MIT", "peer": true, @@ -4276,7 +5091,7 @@ "url": "https://github.com/sponsors/panva" } }, - "node_modules/json-bigint": { + "integrations/openclaw/node_modules/json-bigint": { "version": "1.0.0", "license": "MIT", "peer": true, @@ -4284,7 +5099,7 @@ "bignumber.js": "^9.0.0" } }, - "node_modules/json-schema-to-ts": { + "integrations/openclaw/node_modules/json-schema-to-ts": { "version": "3.1.1", "license": "MIT", "peer": true, @@ -4296,17 +5111,17 @@ "node": ">=16" } }, - "node_modules/json-schema-traverse": { + "integrations/openclaw/node_modules/json-schema-traverse": { "version": "1.0.0", "license": "MIT", "peer": true }, - "node_modules/json-schema-typed": { + "integrations/openclaw/node_modules/json-schema-typed": { "version": "8.0.2", "license": "BSD-2-Clause", "peer": true }, - "node_modules/json5": { + "integrations/openclaw/node_modules/json5": { "version": "2.2.3", "license": "MIT", "peer": true, @@ -4317,7 +5132,7 @@ "node": ">=6" } }, - "node_modules/jsonwebtoken": { + "integrations/openclaw/node_modules/jsonwebtoken": { "version": "9.0.3", "license": "MIT", "peer": true, @@ -4338,7 +5153,7 @@ "npm": ">=6" } }, - "node_modules/jszip": { + "integrations/openclaw/node_modules/jszip": { "version": "3.10.1", "license": "(MIT OR GPL-3.0-or-later)", "peer": true, @@ -4349,7 +5164,7 @@ "setimmediate": "^1.0.5" } }, - "node_modules/jwa": { + "integrations/openclaw/node_modules/jwa": { "version": "2.0.1", "license": "MIT", "peer": true, @@ -4359,7 +5174,7 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/jws": { + "integrations/openclaw/node_modules/jws": { "version": "4.0.1", "license": "MIT", "peer": true, @@ -4368,7 +5183,7 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/lie": { + "integrations/openclaw/node_modules/lie": { "version": "3.3.0", "license": "MIT", "peer": true, @@ -4376,7 +5191,7 @@ "immediate": "~3.0.5" } }, - "node_modules/linkedom": { + "integrations/openclaw/node_modules/linkedom": { "version": "0.18.12", "license": "ISC", "peer": true, @@ -4399,7 +5214,7 @@ } } }, - "node_modules/linkify-it": { + "integrations/openclaw/node_modules/linkify-it": { "version": "5.0.0", "license": "MIT", "peer": true, @@ -4407,7 +5222,7 @@ "uc.micro": "^2.0.0" } }, - "node_modules/locate-path": { + "integrations/openclaw/node_modules/locate-path": { "version": "5.0.0", "license": "MIT", "peer": true, @@ -4418,47 +5233,47 @@ "node": ">=8" } }, - "node_modules/lodash.includes": { + "integrations/openclaw/node_modules/lodash.includes": { "version": "4.3.0", "license": "MIT", "peer": true }, - "node_modules/lodash.isboolean": { + "integrations/openclaw/node_modules/lodash.isboolean": { "version": "3.0.3", "license": "MIT", "peer": true }, - "node_modules/lodash.isinteger": { + "integrations/openclaw/node_modules/lodash.isinteger": { "version": "4.0.4", "license": "MIT", "peer": true }, - "node_modules/lodash.isnumber": { + "integrations/openclaw/node_modules/lodash.isnumber": { "version": "3.0.3", "license": "MIT", "peer": true }, - "node_modules/lodash.isplainobject": { + "integrations/openclaw/node_modules/lodash.isplainobject": { "version": "4.0.6", "license": "MIT", "peer": true }, - "node_modules/lodash.isstring": { + "integrations/openclaw/node_modules/lodash.isstring": { "version": "4.0.1", "license": "MIT", "peer": true }, - "node_modules/lodash.once": { + "integrations/openclaw/node_modules/lodash.once": { "version": "4.1.1", "license": "MIT", "peer": true }, - "node_modules/long": { + "integrations/openclaw/node_modules/long": { "version": "5.3.2", "license": "Apache-2.0", "peer": true }, - "node_modules/lru-cache": { + "integrations/openclaw/node_modules/lru-cache": { "version": "11.3.6", "license": "BlueOak-1.0.0", "peer": true, @@ -4466,7 +5281,7 @@ "node": "20 || >=22" } }, - "node_modules/markdown-it": { + "integrations/openclaw/node_modules/markdown-it": { "version": "14.1.1", "license": "MIT", "peer": true, @@ -4482,7 +5297,7 @@ "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/marked": { + "integrations/openclaw/node_modules/marked": { "version": "15.0.12", "license": "MIT", "peer": true, @@ -4493,7 +5308,7 @@ "node": ">= 18" } }, - "node_modules/matcher": { + "integrations/openclaw/node_modules/matcher": { "version": "4.0.0", "license": "MIT", "peer": true, @@ -4507,7 +5322,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/math-intrinsics": { + "integrations/openclaw/node_modules/math-intrinsics": { "version": "1.1.0", "license": "MIT", "peer": true, @@ -4515,12 +5330,12 @@ "node": ">= 0.4" } }, - "node_modules/mdurl": { + "integrations/openclaw/node_modules/mdurl": { "version": "2.0.0", "license": "MIT", "peer": true }, - "node_modules/media-typer": { + "integrations/openclaw/node_modules/media-typer": { "version": "1.1.0", "license": "MIT", "peer": true, @@ -4528,7 +5343,7 @@ "node": ">= 0.8" } }, - "node_modules/merge-descriptors": { + "integrations/openclaw/node_modules/merge-descriptors": { "version": "2.0.0", "license": "MIT", "peer": true, @@ -4539,7 +5354,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mime-db": { + "integrations/openclaw/node_modules/mime-db": { "version": "1.54.0", "license": "MIT", "peer": true, @@ -4547,7 +5362,7 @@ "node": ">= 0.6" } }, - "node_modules/mime-types": { + "integrations/openclaw/node_modules/mime-types": { "version": "3.0.2", "license": "MIT", "peer": true, @@ -4562,12 +5377,12 @@ "url": "https://opencollective.com/express" } }, - "node_modules/minimalistic-assert": { + "integrations/openclaw/node_modules/minimalistic-assert": { "version": "1.0.1", "license": "ISC", "peer": true }, - "node_modules/minimatch": { + "integrations/openclaw/node_modules/minimatch": { "version": "10.2.5", "license": "BlueOak-1.0.0", "peer": true, @@ -4581,7 +5396,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { + "integrations/openclaw/node_modules/minimist": { "version": "1.2.8", "license": "MIT", "peer": true, @@ -4589,7 +5404,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { + "integrations/openclaw/node_modules/minipass": { "version": "7.1.3", "license": "BlueOak-1.0.0", "peer": true, @@ -4597,7 +5412,7 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/minizlib": { + "integrations/openclaw/node_modules/minizlib": { "version": "3.1.0", "license": "MIT", "peer": true, @@ -4608,7 +5423,7 @@ "node": ">= 18" } }, - "node_modules/mri": { + "integrations/openclaw/node_modules/mri": { "version": "1.2.0", "license": "MIT", "peer": true, @@ -4616,12 +5431,12 @@ "node": ">=4" } }, - "node_modules/ms": { + "integrations/openclaw/node_modules/ms": { "version": "2.1.3", "license": "MIT", "peer": true }, - "node_modules/mz": { + "integrations/openclaw/node_modules/mz": { "version": "2.7.0", "license": "MIT", "peer": true, @@ -4631,7 +5446,7 @@ "thenify-all": "^1.0.0" } }, - "node_modules/negotiator": { + "integrations/openclaw/node_modules/negotiator": { "version": "1.0.0", "license": "MIT", "peer": true, @@ -4639,16 +5454,7 @@ "node": ">= 0.6" } }, - "node_modules/nemo-flow-node": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/nemo-flow-node/-/nemo-flow-node-0.1.0.tgz", - "integrity": "sha512-2SqAIm5K/4Ce0zqr0gOSzQWrFuBgGYVO4m3Kuso2Km9DAmd0Fh/I2YFEbSD6rU1cCpo5Fmmht3tROmHrJgG86A==", - "license": "Apache-2.0", - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/netmask": { + "integrations/openclaw/node_modules/netmask": { "version": "2.1.1", "license": "MIT", "peer": true, @@ -4656,7 +5462,7 @@ "node": ">= 0.4.0" } }, - "node_modules/node-addon-api": { + "integrations/openclaw/node_modules/node-addon-api": { "version": "8.7.0", "license": "MIT", "peer": true, @@ -4664,7 +5470,7 @@ "node": "^18 || ^20 || >= 21" } }, - "node_modules/node-domexception": { + "integrations/openclaw/node_modules/node-domexception": { "version": "1.0.0", "funding": [ { @@ -4682,7 +5488,7 @@ "node": ">=10.5.0" } }, - "node_modules/node-edge-tts": { + "integrations/openclaw/node_modules/node-edge-tts": { "version": "1.2.10", "license": "MIT", "peer": true, @@ -4695,7 +5501,7 @@ "node-edge-tts": "bin.js" } }, - "node_modules/node-edge-tts/node_modules/agent-base": { + "integrations/openclaw/node_modules/node-edge-tts/node_modules/agent-base": { "version": "7.1.4", "license": "MIT", "peer": true, @@ -4703,7 +5509,7 @@ "node": ">= 14" } }, - "node_modules/node-edge-tts/node_modules/ansi-regex": { + "integrations/openclaw/node_modules/node-edge-tts/node_modules/ansi-regex": { "version": "5.0.1", "license": "MIT", "peer": true, @@ -4711,7 +5517,7 @@ "node": ">=8" } }, - "node_modules/node-edge-tts/node_modules/cliui": { + "integrations/openclaw/node_modules/node-edge-tts/node_modules/cliui": { "version": "8.0.1", "license": "ISC", "peer": true, @@ -4724,7 +5530,7 @@ "node": ">=12" } }, - "node_modules/node-edge-tts/node_modules/https-proxy-agent": { + "integrations/openclaw/node_modules/node-edge-tts/node_modules/https-proxy-agent": { "version": "7.0.6", "license": "MIT", "peer": true, @@ -4736,7 +5542,7 @@ "node": ">= 14" } }, - "node_modules/node-edge-tts/node_modules/strip-ansi": { + "integrations/openclaw/node_modules/node-edge-tts/node_modules/strip-ansi": { "version": "6.0.1", "license": "MIT", "peer": true, @@ -4747,7 +5553,7 @@ "node": ">=8" } }, - "node_modules/node-edge-tts/node_modules/yargs": { + "integrations/openclaw/node_modules/node-edge-tts/node_modules/yargs": { "version": "17.7.2", "license": "MIT", "peer": true, @@ -4764,7 +5570,7 @@ "node": ">=12" } }, - "node_modules/node-edge-tts/node_modules/yargs-parser": { + "integrations/openclaw/node_modules/node-edge-tts/node_modules/yargs-parser": { "version": "21.1.1", "license": "ISC", "peer": true, @@ -4772,7 +5578,7 @@ "node": ">=12" } }, - "node_modules/node-fetch": { + "integrations/openclaw/node_modules/node-fetch": { "version": "2.7.0", "license": "MIT", "peer": true, @@ -4791,7 +5597,7 @@ } } }, - "node_modules/node-gyp-build": { + "integrations/openclaw/node_modules/node-gyp-build": { "version": "4.8.4", "license": "MIT", "peer": true, @@ -4801,7 +5607,7 @@ "node-gyp-build-test": "build-test.js" } }, - "node_modules/nth-check": { + "integrations/openclaw/node_modules/nth-check": { "version": "2.1.1", "license": "BSD-2-Clause", "peer": true, @@ -4812,7 +5618,7 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/object-assign": { + "integrations/openclaw/node_modules/object-assign": { "version": "4.1.1", "license": "MIT", "peer": true, @@ -4820,7 +5626,7 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { + "integrations/openclaw/node_modules/object-inspect": { "version": "1.13.4", "license": "MIT", "peer": true, @@ -4831,7 +5637,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { + "integrations/openclaw/node_modules/object-keys": { "version": "1.1.1", "license": "MIT", "peer": true, @@ -4839,7 +5645,7 @@ "node": ">= 0.4" } }, - "node_modules/on-finished": { + "integrations/openclaw/node_modules/on-finished": { "version": "2.4.1", "license": "MIT", "peer": true, @@ -4850,7 +5656,7 @@ "node": ">= 0.8" } }, - "node_modules/once": { + "integrations/openclaw/node_modules/once": { "version": "1.4.0", "license": "ISC", "peer": true, @@ -4858,7 +5664,7 @@ "wrappy": "1" } }, - "node_modules/openai": { + "integrations/openclaw/node_modules/openai": { "version": "6.36.0", "license": "Apache-2.0", "peer": true, @@ -4878,7 +5684,7 @@ } } }, - "node_modules/openclaw": { + "integrations/openclaw/node_modules/openclaw": { "version": "2026.5.6", "hasInstallScript": true, "license": "MIT", @@ -4953,7 +5759,7 @@ "sqlite-vec": "0.1.9" } }, - "node_modules/openshell": { + "integrations/openclaw/node_modules/openshell": { "version": "0.1.0", "license": "MIT", "peer": true, @@ -4968,7 +5774,7 @@ "node": ">=18" } }, - "node_modules/openshell/node_modules/dotenv": { + "integrations/openclaw/node_modules/openshell/node_modules/dotenv": { "version": "16.6.1", "license": "BSD-2-Clause", "peer": true, @@ -4979,7 +5785,7 @@ "url": "https://dotenvx.com" } }, - "node_modules/p-finally": { + "integrations/openclaw/node_modules/p-finally": { "version": "1.0.0", "license": "MIT", "peer": true, @@ -4987,7 +5793,7 @@ "node": ">=4" } }, - "node_modules/p-limit": { + "integrations/openclaw/node_modules/p-limit": { "version": "2.3.0", "license": "MIT", "peer": true, @@ -5001,7 +5807,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { + "integrations/openclaw/node_modules/p-locate": { "version": "4.1.0", "license": "MIT", "peer": true, @@ -5012,7 +5818,7 @@ "node": ">=8" } }, - "node_modules/p-queue": { + "integrations/openclaw/node_modules/p-queue": { "version": "6.6.2", "license": "MIT", "peer": true, @@ -5027,12 +5833,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-queue/node_modules/eventemitter3": { + "integrations/openclaw/node_modules/p-queue/node_modules/eventemitter3": { "version": "4.0.7", "license": "MIT", "peer": true }, - "node_modules/p-retry": { + "integrations/openclaw/node_modules/p-retry": { "version": "4.6.2", "license": "MIT", "peer": true, @@ -5044,7 +5850,7 @@ "node": ">=8" } }, - "node_modules/p-timeout": { + "integrations/openclaw/node_modules/p-timeout": { "version": "3.2.0", "license": "MIT", "peer": true, @@ -5055,7 +5861,7 @@ "node": ">=8" } }, - "node_modules/p-try": { + "integrations/openclaw/node_modules/p-try": { "version": "2.2.0", "license": "MIT", "peer": true, @@ -5063,7 +5869,7 @@ "node": ">=6" } }, - "node_modules/pac-proxy-agent": { + "integrations/openclaw/node_modules/pac-proxy-agent": { "version": "9.0.1", "license": "MIT", "peer": true, @@ -5081,7 +5887,7 @@ "node": ">= 20" } }, - "node_modules/pac-resolver": { + "integrations/openclaw/node_modules/pac-resolver": { "version": "9.0.1", "license": "MIT", "peer": true, @@ -5096,17 +5902,17 @@ "quickjs-wasi": "^2.2.0" } }, - "node_modules/pako": { + "integrations/openclaw/node_modules/pako": { "version": "1.0.11", "license": "(MIT AND Zlib)", "peer": true }, - "node_modules/parse5": { + "integrations/openclaw/node_modules/parse5": { "version": "5.1.1", "license": "MIT", "peer": true }, - "node_modules/parse5-htmlparser2-tree-adapter": { + "integrations/openclaw/node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", "license": "MIT", "peer": true, @@ -5114,12 +5920,12 @@ "parse5": "^6.0.1" } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "integrations/openclaw/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { "version": "6.0.1", "license": "MIT", "peer": true }, - "node_modules/parseurl": { + "integrations/openclaw/node_modules/parseurl": { "version": "1.3.3", "license": "MIT", "peer": true, @@ -5127,12 +5933,12 @@ "node": ">= 0.8" } }, - "node_modules/partial-json": { + "integrations/openclaw/node_modules/partial-json": { "version": "0.1.7", "license": "MIT", "peer": true }, - "node_modules/path-exists": { + "integrations/openclaw/node_modules/path-exists": { "version": "4.0.0", "license": "MIT", "peer": true, @@ -5140,7 +5946,7 @@ "node": ">=8" } }, - "node_modules/path-expression-matcher": { + "integrations/openclaw/node_modules/path-expression-matcher": { "version": "1.5.0", "funding": [ { @@ -5154,7 +5960,7 @@ "node": ">=14.0.0" } }, - "node_modules/path-key": { + "integrations/openclaw/node_modules/path-key": { "version": "3.1.1", "license": "MIT", "peer": true, @@ -5162,7 +5968,7 @@ "node": ">=8" } }, - "node_modules/path-scurry": { + "integrations/openclaw/node_modules/path-scurry": { "version": "2.0.2", "license": "BlueOak-1.0.0", "peer": true, @@ -5177,7 +5983,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-to-regexp": { + "integrations/openclaw/node_modules/path-to-regexp": { "version": "8.4.2", "license": "MIT", "peer": true, @@ -5186,7 +5992,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/pdfjs-dist": { + "integrations/openclaw/node_modules/pdfjs-dist": { "version": "5.7.284", "license": "Apache-2.0", "peer": true, @@ -5197,12 +6003,12 @@ "@napi-rs/canvas": "^0.1.100" } }, - "node_modules/pend": { + "integrations/openclaw/node_modules/pend": { "version": "1.2.0", "license": "MIT", "peer": true }, - "node_modules/pkce-challenge": { + "integrations/openclaw/node_modules/pkce-challenge": { "version": "5.0.1", "license": "MIT", "peer": true, @@ -5210,7 +6016,7 @@ "node": ">=16.20.0" } }, - "node_modules/playwright-core": { + "integrations/openclaw/node_modules/playwright-core": { "version": "1.59.1", "license": "Apache-2.0", "peer": true, @@ -5221,7 +6027,7 @@ "node": ">=18" } }, - "node_modules/pngjs": { + "integrations/openclaw/node_modules/pngjs": { "version": "5.0.0", "license": "MIT", "peer": true, @@ -5229,12 +6035,12 @@ "node": ">=10.13.0" } }, - "node_modules/process-nextick-args": { + "integrations/openclaw/node_modules/process-nextick-args": { "version": "2.0.1", "license": "MIT", "peer": true }, - "node_modules/proper-lockfile": { + "integrations/openclaw/node_modules/proper-lockfile": { "version": "4.1.2", "license": "MIT", "peer": true, @@ -5244,7 +6050,7 @@ "signal-exit": "^3.0.2" } }, - "node_modules/proper-lockfile/node_modules/retry": { + "integrations/openclaw/node_modules/proper-lockfile/node_modules/retry": { "version": "0.12.0", "license": "MIT", "peer": true, @@ -5252,7 +6058,7 @@ "node": ">= 4" } }, - "node_modules/protobufjs": { + "integrations/openclaw/node_modules/protobufjs": { "version": "7.5.6", "hasInstallScript": true, "license": "BSD-3-Clause", @@ -5275,7 +6081,7 @@ "node": ">=12.0.0" } }, - "node_modules/proxy-addr": { + "integrations/openclaw/node_modules/proxy-addr": { "version": "2.0.7", "license": "MIT", "peer": true, @@ -5287,7 +6093,7 @@ "node": ">= 0.10" } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { + "integrations/openclaw/node_modules/proxy-addr/node_modules/ipaddr.js": { "version": "1.9.1", "license": "MIT", "peer": true, @@ -5295,7 +6101,7 @@ "node": ">= 0.10" } }, - "node_modules/proxy-agent": { + "integrations/openclaw/node_modules/proxy-agent": { "version": "8.0.1", "license": "MIT", "peer": true, @@ -5313,7 +6119,7 @@ "node": ">= 20" } }, - "node_modules/proxy-agent/node_modules/lru-cache": { + "integrations/openclaw/node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", "license": "ISC", "peer": true, @@ -5321,7 +6127,7 @@ "node": ">=12" } }, - "node_modules/proxy-from-env": { + "integrations/openclaw/node_modules/proxy-from-env": { "version": "2.1.0", "license": "MIT", "peer": true, @@ -5329,7 +6135,7 @@ "node": ">=10" } }, - "node_modules/pump": { + "integrations/openclaw/node_modules/pump": { "version": "3.0.4", "license": "MIT", "peer": true, @@ -5338,7 +6144,7 @@ "once": "^1.3.1" } }, - "node_modules/punycode.js": { + "integrations/openclaw/node_modules/punycode.js": { "version": "2.3.1", "license": "MIT", "peer": true, @@ -5346,7 +6152,7 @@ "node": ">=6" } }, - "node_modules/qrcode": { + "integrations/openclaw/node_modules/qrcode": { "version": "1.5.4", "license": "MIT", "peer": true, @@ -5362,7 +6168,7 @@ "node": ">=10.13.0" } }, - "node_modules/qrcode/node_modules/ansi-regex": { + "integrations/openclaw/node_modules/qrcode/node_modules/ansi-regex": { "version": "5.0.1", "license": "MIT", "peer": true, @@ -5370,7 +6176,7 @@ "node": ">=8" } }, - "node_modules/qrcode/node_modules/cliui": { + "integrations/openclaw/node_modules/qrcode/node_modules/cliui": { "version": "6.0.0", "license": "ISC", "peer": true, @@ -5380,7 +6186,7 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/qrcode/node_modules/strip-ansi": { + "integrations/openclaw/node_modules/qrcode/node_modules/strip-ansi": { "version": "6.0.1", "license": "MIT", "peer": true, @@ -5391,7 +6197,7 @@ "node": ">=8" } }, - "node_modules/qrcode/node_modules/wrap-ansi": { + "integrations/openclaw/node_modules/qrcode/node_modules/wrap-ansi": { "version": "6.2.0", "license": "MIT", "peer": true, @@ -5404,12 +6210,12 @@ "node": ">=8" } }, - "node_modules/qrcode/node_modules/y18n": { + "integrations/openclaw/node_modules/qrcode/node_modules/y18n": { "version": "4.0.3", "license": "ISC", "peer": true }, - "node_modules/qrcode/node_modules/yargs": { + "integrations/openclaw/node_modules/qrcode/node_modules/yargs": { "version": "15.4.1", "license": "MIT", "peer": true, @@ -5430,7 +6236,7 @@ "node": ">=8" } }, - "node_modules/qrcode/node_modules/yargs-parser": { + "integrations/openclaw/node_modules/qrcode/node_modules/yargs-parser": { "version": "18.1.3", "license": "ISC", "peer": true, @@ -5442,7 +6248,7 @@ "node": ">=6" } }, - "node_modules/qs": { + "integrations/openclaw/node_modules/qs": { "version": "6.15.1", "license": "BSD-3-Clause", "peer": true, @@ -5456,12 +6262,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/quickjs-wasi": { + "integrations/openclaw/node_modules/quickjs-wasi": { "version": "2.2.0", "license": "MIT", "peer": true }, - "node_modules/range-parser": { + "integrations/openclaw/node_modules/range-parser": { "version": "1.2.1", "license": "MIT", "peer": true, @@ -5469,7 +6275,7 @@ "node": ">= 0.6" } }, - "node_modules/raw-body": { + "integrations/openclaw/node_modules/raw-body": { "version": "3.0.2", "license": "MIT", "peer": true, @@ -5483,7 +6289,7 @@ "node": ">= 0.10" } }, - "node_modules/readable-stream": { + "integrations/openclaw/node_modules/readable-stream": { "version": "2.3.8", "license": "MIT", "peer": true, @@ -5497,12 +6303,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { + "integrations/openclaw/node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "license": "MIT", "peer": true }, - "node_modules/readdirp": { + "integrations/openclaw/node_modules/readdirp": { "version": "5.0.0", "license": "MIT", "peer": true, @@ -5514,7 +6320,7 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/require-directory": { + "integrations/openclaw/node_modules/require-directory": { "version": "2.1.1", "license": "MIT", "peer": true, @@ -5522,7 +6328,7 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { + "integrations/openclaw/node_modules/require-from-string": { "version": "2.0.2", "license": "MIT", "peer": true, @@ -5530,12 +6336,12 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { + "integrations/openclaw/node_modules/require-main-filename": { "version": "2.0.0", "license": "ISC", "peer": true }, - "node_modules/retry": { + "integrations/openclaw/node_modules/retry": { "version": "0.13.1", "license": "MIT", "peer": true, @@ -5543,7 +6349,7 @@ "node": ">= 4" } }, - "node_modules/router": { + "integrations/openclaw/node_modules/router": { "version": "2.2.0", "license": "MIT", "peer": true, @@ -5558,7 +6364,7 @@ "node": ">= 18" } }, - "node_modules/safe-buffer": { + "integrations/openclaw/node_modules/safe-buffer": { "version": "5.2.1", "funding": [ { @@ -5577,7 +6383,7 @@ "license": "MIT", "peer": true }, - "node_modules/safe-compare": { + "integrations/openclaw/node_modules/safe-compare": { "version": "1.1.4", "license": "MIT", "peer": true, @@ -5585,12 +6391,12 @@ "buffer-alloc": "^1.2.0" } }, - "node_modules/safer-buffer": { + "integrations/openclaw/node_modules/safer-buffer": { "version": "2.1.2", "license": "MIT", "peer": true }, - "node_modules/sandwich-stream": { + "integrations/openclaw/node_modules/sandwich-stream": { "version": "2.0.2", "license": "Apache-2.0", "peer": true, @@ -5598,7 +6404,7 @@ "node": ">= 0.10" } }, - "node_modules/semver": { + "integrations/openclaw/node_modules/semver": { "version": "7.7.4", "license": "ISC", "peer": true, @@ -5609,7 +6415,7 @@ "node": ">=10" } }, - "node_modules/send": { + "integrations/openclaw/node_modules/send": { "version": "1.2.1", "license": "MIT", "peer": true, @@ -5634,7 +6440,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/serialize-error": { + "integrations/openclaw/node_modules/serialize-error": { "version": "8.1.0", "license": "MIT", "peer": true, @@ -5648,7 +6454,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serve-static": { + "integrations/openclaw/node_modules/serve-static": { "version": "2.2.1", "license": "MIT", "peer": true, @@ -5666,22 +6472,22 @@ "url": "https://opencollective.com/express" } }, - "node_modules/set-blocking": { + "integrations/openclaw/node_modules/set-blocking": { "version": "2.0.0", "license": "ISC", "peer": true }, - "node_modules/setimmediate": { + "integrations/openclaw/node_modules/setimmediate": { "version": "1.0.5", "license": "MIT", "peer": true }, - "node_modules/setprototypeof": { + "integrations/openclaw/node_modules/setprototypeof": { "version": "1.2.0", "license": "ISC", "peer": true }, - "node_modules/shebang-command": { + "integrations/openclaw/node_modules/shebang-command": { "version": "2.0.0", "license": "MIT", "peer": true, @@ -5692,7 +6498,7 @@ "node": ">=8" } }, - "node_modules/shebang-regex": { + "integrations/openclaw/node_modules/shebang-regex": { "version": "3.0.0", "license": "MIT", "peer": true, @@ -5700,7 +6506,7 @@ "node": ">=8" } }, - "node_modules/side-channel": { + "integrations/openclaw/node_modules/side-channel": { "version": "1.1.0", "license": "MIT", "peer": true, @@ -5718,7 +6524,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-list": { + "integrations/openclaw/node_modules/side-channel-list": { "version": "1.0.1", "license": "MIT", "peer": true, @@ -5733,7 +6539,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-map": { + "integrations/openclaw/node_modules/side-channel-map": { "version": "1.0.1", "license": "MIT", "peer": true, @@ -5750,7 +6556,7 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-weakmap": { + "integrations/openclaw/node_modules/side-channel-weakmap": { "version": "1.0.2", "license": "MIT", "peer": true, @@ -5768,17 +6574,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { + "integrations/openclaw/node_modules/signal-exit": { "version": "3.0.7", "license": "ISC", "peer": true }, - "node_modules/sisteransi": { + "integrations/openclaw/node_modules/sisteransi": { "version": "1.0.5", "license": "MIT", "peer": true }, - "node_modules/smart-buffer": { + "integrations/openclaw/node_modules/smart-buffer": { "version": "4.2.0", "license": "MIT", "peer": true, @@ -5787,7 +6593,7 @@ "npm": ">= 3.0.0" } }, - "node_modules/socks": { + "integrations/openclaw/node_modules/socks": { "version": "2.8.8", "license": "MIT", "peer": true, @@ -5800,7 +6606,7 @@ "npm": ">= 3.0.0" } }, - "node_modules/socks-proxy-agent": { + "integrations/openclaw/node_modules/socks-proxy-agent": { "version": "10.0.0", "license": "MIT", "peer": true, @@ -5813,7 +6619,7 @@ "node": ">= 20" } }, - "node_modules/source-map": { + "integrations/openclaw/node_modules/source-map": { "version": "0.6.1", "license": "BSD-3-Clause", "peer": true, @@ -5821,7 +6627,7 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { + "integrations/openclaw/node_modules/source-map-support": { "version": "0.5.21", "license": "MIT", "peer": true, @@ -5830,7 +6636,7 @@ "source-map": "^0.6.0" } }, - "node_modules/statuses": { + "integrations/openclaw/node_modules/statuses": { "version": "2.0.2", "license": "MIT", "peer": true, @@ -5838,12 +6644,12 @@ "node": ">= 0.8" } }, - "node_modules/std-env": { + "integrations/openclaw/node_modules/std-env": { "version": "3.10.0", "license": "MIT", "peer": true }, - "node_modules/string_decoder": { + "integrations/openclaw/node_modules/string_decoder": { "version": "1.1.1", "license": "MIT", "peer": true, @@ -5851,12 +6657,12 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { + "integrations/openclaw/node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", "license": "MIT", "peer": true }, - "node_modules/string-width": { + "integrations/openclaw/node_modules/string-width": { "version": "4.2.3", "license": "MIT", "peer": true, @@ -5869,7 +6675,7 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { + "integrations/openclaw/node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", "license": "MIT", "peer": true, @@ -5877,7 +6683,7 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/strip-ansi": { + "integrations/openclaw/node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", "license": "MIT", "peer": true, @@ -5888,7 +6694,7 @@ "node": ">=8" } }, - "node_modules/strip-ansi": { + "integrations/openclaw/node_modules/strip-ansi": { "version": "7.2.0", "license": "MIT", "peer": true, @@ -5902,7 +6708,7 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strnum": { + "integrations/openclaw/node_modules/strnum": { "version": "2.3.0", "funding": [ { @@ -5913,7 +6719,7 @@ "license": "MIT", "peer": true }, - "node_modules/strtok3": { + "integrations/openclaw/node_modules/strtok3": { "version": "10.3.5", "license": "MIT", "peer": true, @@ -5928,7 +6734,7 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/supports-color": { + "integrations/openclaw/node_modules/supports-color": { "version": "7.2.0", "license": "MIT", "peer": true, @@ -5939,7 +6745,7 @@ "node": ">=8" } }, - "node_modules/tar": { + "integrations/openclaw/node_modules/tar": { "version": "7.5.13", "license": "BlueOak-1.0.0", "peer": true, @@ -5954,7 +6760,7 @@ "node": ">=18" } }, - "node_modules/telegraf": { + "integrations/openclaw/node_modules/telegraf": { "version": "4.16.3", "license": "MIT", "peer": true, @@ -5975,7 +6781,7 @@ "node": "^12.20.0 || >=14.13.1" } }, - "node_modules/telegraf/node_modules/p-timeout": { + "integrations/openclaw/node_modules/telegraf/node_modules/p-timeout": { "version": "4.1.0", "license": "MIT", "peer": true, @@ -5983,7 +6789,7 @@ "node": ">=10" } }, - "node_modules/thenify": { + "integrations/openclaw/node_modules/thenify": { "version": "3.3.1", "license": "MIT", "peer": true, @@ -5991,7 +6797,7 @@ "any-promise": "^1.0.0" } }, - "node_modules/thenify-all": { + "integrations/openclaw/node_modules/thenify-all": { "version": "1.6.0", "license": "MIT", "peer": true, @@ -6002,7 +6808,7 @@ "node": ">=0.8" } }, - "node_modules/toidentifier": { + "integrations/openclaw/node_modules/toidentifier": { "version": "1.0.1", "license": "MIT", "peer": true, @@ -6010,7 +6816,7 @@ "node": ">=0.6" } }, - "node_modules/token-types": { + "integrations/openclaw/node_modules/token-types": { "version": "6.1.2", "license": "MIT", "peer": true, @@ -6027,7 +6833,7 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/tokenjuice": { + "integrations/openclaw/node_modules/tokenjuice": { "version": "0.7.0", "license": "MIT", "peer": true, @@ -6042,12 +6848,12 @@ "url": "https://github.com/sponsors/vincentkoc" } }, - "node_modules/tr46": { + "integrations/openclaw/node_modules/tr46": { "version": "0.0.3", "license": "MIT", "peer": true }, - "node_modules/tree-sitter-bash": { + "integrations/openclaw/node_modules/tree-sitter-bash": { "version": "0.25.1", "hasInstallScript": true, "license": "MIT", @@ -6065,17 +6871,17 @@ } } }, - "node_modules/ts-algebra": { + "integrations/openclaw/node_modules/ts-algebra": { "version": "2.0.0", "license": "MIT", "peer": true }, - "node_modules/tslib": { + "integrations/openclaw/node_modules/tslib": { "version": "2.8.1", "license": "0BSD", "peer": true }, - "node_modules/tslog": { + "integrations/openclaw/node_modules/tslog": { "version": "4.10.2", "license": "MIT", "peer": true, @@ -6086,7 +6892,7 @@ "url": "https://github.com/fullstack-build/tslog?sponsor=1" } }, - "node_modules/tsscmp": { + "integrations/openclaw/node_modules/tsscmp": { "version": "1.0.6", "license": "MIT", "peer": true, @@ -6094,7 +6900,7 @@ "node": ">=0.6.x" } }, - "node_modules/type-fest": { + "integrations/openclaw/node_modules/type-fest": { "version": "0.20.2", "license": "(MIT OR CC0-1.0)", "peer": true, @@ -6105,7 +6911,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { + "integrations/openclaw/node_modules/type-is": { "version": "2.0.1", "license": "MIT", "peer": true, @@ -6118,12 +6924,12 @@ "node": ">= 0.6" } }, - "node_modules/typebox": { + "integrations/openclaw/node_modules/typebox": { "version": "1.1.37", "license": "MIT", "peer": true }, - "node_modules/typescript": { + "integrations/openclaw/node_modules/typescript": { "version": "5.9.3", "dev": true, "license": "Apache-2.0", @@ -6135,17 +6941,17 @@ "node": ">=14.17" } }, - "node_modules/uc.micro": { + "integrations/openclaw/node_modules/uc.micro": { "version": "2.1.0", "license": "MIT", "peer": true }, - "node_modules/uhyphen": { + "integrations/openclaw/node_modules/uhyphen": { "version": "0.2.0", "license": "ISC", "peer": true }, - "node_modules/uint8array-extras": { + "integrations/openclaw/node_modules/uint8array-extras": { "version": "1.5.0", "license": "MIT", "peer": true, @@ -6156,7 +6962,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/undici": { + "integrations/openclaw/node_modules/undici": { "version": "8.2.0", "license": "MIT", "peer": true, @@ -6164,11 +6970,11 @@ "node": ">=22.19.0" } }, - "node_modules/undici-types": { + "integrations/openclaw/node_modules/undici-types": { "version": "6.21.0", "license": "MIT" }, - "node_modules/unpipe": { + "integrations/openclaw/node_modules/unpipe": { "version": "1.0.0", "license": "MIT", "peer": true, @@ -6176,12 +6982,12 @@ "node": ">= 0.8" } }, - "node_modules/util-deprecate": { + "integrations/openclaw/node_modules/util-deprecate": { "version": "1.0.2", "license": "MIT", "peer": true }, - "node_modules/uuid": { + "integrations/openclaw/node_modules/uuid": { "version": "14.0.0", "funding": [ "https://github.com/sponsors/broofa", @@ -6193,7 +6999,7 @@ "uuid": "dist-node/bin/uuid" } }, - "node_modules/vary": { + "integrations/openclaw/node_modules/vary": { "version": "1.1.2", "license": "MIT", "peer": true, @@ -6201,7 +7007,7 @@ "node": ">= 0.8" } }, - "node_modules/web-push": { + "integrations/openclaw/node_modules/web-push": { "version": "3.6.7", "license": "MPL-2.0", "peer": true, @@ -6219,7 +7025,7 @@ "node": ">= 16" } }, - "node_modules/web-push/node_modules/agent-base": { + "integrations/openclaw/node_modules/web-push/node_modules/agent-base": { "version": "7.1.4", "license": "MIT", "peer": true, @@ -6227,7 +7033,7 @@ "node": ">= 14" } }, - "node_modules/web-push/node_modules/https-proxy-agent": { + "integrations/openclaw/node_modules/web-push/node_modules/https-proxy-agent": { "version": "7.0.6", "license": "MIT", "peer": true, @@ -6239,7 +7045,7 @@ "node": ">= 14" } }, - "node_modules/web-streams-polyfill": { + "integrations/openclaw/node_modules/web-streams-polyfill": { "version": "3.3.3", "license": "MIT", "peer": true, @@ -6247,17 +7053,17 @@ "node": ">= 8" } }, - "node_modules/web-tree-sitter": { + "integrations/openclaw/node_modules/web-tree-sitter": { "version": "0.26.8", "license": "MIT", "peer": true }, - "node_modules/webidl-conversions": { + "integrations/openclaw/node_modules/webidl-conversions": { "version": "3.0.1", "license": "BSD-2-Clause", "peer": true }, - "node_modules/whatwg-url": { + "integrations/openclaw/node_modules/whatwg-url": { "version": "5.0.0", "license": "MIT", "peer": true, @@ -6266,7 +7072,7 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/which": { + "integrations/openclaw/node_modules/which": { "version": "2.0.2", "license": "ISC", "peer": true, @@ -6280,12 +7086,12 @@ "node": ">= 8" } }, - "node_modules/which-module": { + "integrations/openclaw/node_modules/which-module": { "version": "2.0.1", "license": "ISC", "peer": true }, - "node_modules/wrap-ansi": { + "integrations/openclaw/node_modules/wrap-ansi": { "version": "7.0.0", "license": "MIT", "peer": true, @@ -6301,7 +7107,7 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { + "integrations/openclaw/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", "license": "MIT", "peer": true, @@ -6309,7 +7115,7 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { + "integrations/openclaw/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", "license": "MIT", "peer": true, @@ -6320,12 +7126,12 @@ "node": ">=8" } }, - "node_modules/wrappy": { + "integrations/openclaw/node_modules/wrappy": { "version": "1.0.2", "license": "ISC", "peer": true }, - "node_modules/ws": { + "integrations/openclaw/node_modules/ws": { "version": "8.20.0", "license": "MIT", "peer": true, @@ -6345,7 +7151,7 @@ } } }, - "node_modules/y18n": { + "integrations/openclaw/node_modules/y18n": { "version": "5.0.8", "license": "ISC", "peer": true, @@ -6353,7 +7159,7 @@ "node": ">=10" } }, - "node_modules/yallist": { + "integrations/openclaw/node_modules/yallist": { "version": "5.0.0", "license": "BlueOak-1.0.0", "peer": true, @@ -6361,7 +7167,7 @@ "node": ">=18" } }, - "node_modules/yaml": { + "integrations/openclaw/node_modules/yaml": { "version": "2.8.4", "license": "ISC", "peer": true, @@ -6375,7 +7181,7 @@ "url": "https://github.com/sponsors/eemeli" } }, - "node_modules/yargs": { + "integrations/openclaw/node_modules/yargs": { "version": "16.2.0", "license": "MIT", "peer": true, @@ -6392,7 +7198,7 @@ "node": ">=10" } }, - "node_modules/yargs-parser": { + "integrations/openclaw/node_modules/yargs-parser": { "version": "20.2.9", "license": "ISC", "peer": true, @@ -6400,7 +7206,7 @@ "node": ">=10" } }, - "node_modules/yauzl": { + "integrations/openclaw/node_modules/yauzl": { "version": "2.10.0", "license": "MIT", "peer": true, @@ -6409,7 +7215,7 @@ "fd-slicer": "~1.1.0" } }, - "node_modules/yoctocolors": { + "integrations/openclaw/node_modules/yoctocolors": { "version": "2.1.2", "license": "MIT", "peer": true, @@ -6420,7 +7226,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zod": { + "integrations/openclaw/node_modules/zod": { "version": "4.4.3", "license": "MIT", "peer": true, @@ -6428,13 +7234,21 @@ "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/zod-to-json-schema": { + "integrations/openclaw/node_modules/zod-to-json-schema": { "version": "3.25.2", "license": "ISC", "peer": true, "peerDependencies": { "zod": "^3.25.28 || ^4" } + }, + "node_modules/@nvidia/nemo-flow-openclaw": { + "resolved": "integrations/openclaw", + "link": true + }, + "node_modules/nemo-flow-node": { + "resolved": "crates/node", + "link": true } } } diff --git a/package.json b/package.json new file mode 100644 index 00000000..b5de6f1e --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "name": "nemo-flow-workspace", + "private": true, + "workspaces": [ + "crates/node", + "integrations/openclaw" + ] +} diff --git a/scripts/licensing/attributions_lockfile_md.py b/scripts/licensing/attributions_lockfile_md.py index 39fa0428..b62e7b37 100755 --- a/scripts/licensing/attributions_lockfile_md.py +++ b/scripts/licensing/attributions_lockfile_md.py @@ -26,7 +26,7 @@ """ ROOT = Path(__file__).resolve().parents[2] -NODE = ROOT / "crates" / "node" +NODE_LOCK = ROOT / "package-lock.json" MARKDOWN_CODE_FENCE = "```\n" MARKDOWN_CODE_BLOCK_END = "```\n\n" @@ -733,13 +733,13 @@ def _node_workspace_package_keys(lock: dict[str, Any]) -> set[str]: def cmd_node() -> int: """Generate ATTRIBUTIONS-Node.md from package-lock.json via license-checker.""" out = ROOT / "ATTRIBUTIONS-Node.md" - lock = cast(dict[str, Any], json.loads((NODE / "package-lock.json").read_text(encoding="utf-8"))) + lock = cast(dict[str, Any], json.loads(NODE_LOCK.read_text(encoding="utf-8"))) workspace_package_keys = _node_workspace_package_keys(lock) - subprocess.run(["npm", "ci"], cwd=NODE, check=True) # noqa: S607 + subprocess.run(["npm", "ci", "--ignore-scripts"], cwd=ROOT, check=True) # noqa: S607 proc = subprocess.run( ["npx", "--yes", "license-checker@25.0.1", "--json"], # noqa: S607 - cwd=NODE, + cwd=ROOT, capture_output=True, text=True, check=True, From dc46c6cad4c925040d17b8181c7d33a3be8300da Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 20:44:44 -0700 Subject: [PATCH 18/30] ci(openclaw): fix workspace validation paths Signed-off-by: mnajafian-nv --- integrations/openclaw/README.md | 26 ++++++++++--------- integrations/openclaw/scripts/build-test.mjs | 4 ++- integrations/openclaw/scripts/build.mjs | 4 ++- .../openclaw/src/__tests__/live-smoke.test.ts | 2 +- justfile | 2 +- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/integrations/openclaw/README.md b/integrations/openclaw/README.md index db0c2760..ac7eea59 100644 --- a/integrations/openclaw/README.md +++ b/integrations/openclaw/README.md @@ -17,20 +17,22 @@ The package declares both OpenClaw entrypoint styles: ## Build And Validate ```bash -npm --prefix integrations/openclaw install -npm --prefix integrations/openclaw run typecheck -npm --prefix integrations/openclaw test -npm --prefix integrations/openclaw run build -npm --prefix integrations/openclaw run pack:check +npm install --ignore-scripts +npm run typecheck --workspace=@nvidia/nemo-flow-openclaw +npm test --workspace=@nvidia/nemo-flow-openclaw +npm run build --workspace=@nvidia/nemo-flow-openclaw +npm run pack:check --workspace=@nvidia/nemo-flow-openclaw ``` -`npm run build` emits production files under `dist/`. Tests compile to -`.test-dist/` so test artifacts do not enter the installable package. +`npm run build --workspace=@nvidia/nemo-flow-openclaw` emits production files +under `integrations/openclaw/dist/`. Tests compile to +`integrations/openclaw/.test-dist/` so test artifacts do not enter the +installable package. The optional live smoke test requires a working installed `nemo-flow-node` binding: ```bash -npm --prefix integrations/openclaw run test:live +npm run test:live --workspace=@nvidia/nemo-flow-openclaw ``` ## Enablement @@ -134,14 +136,14 @@ large payloads. | OpenClaw hook | NeMo Flow behavior | | --- | --- | -| `gateway_start` | Emits a gateway lifecycle mark. | +| `gateway_start` | Ensures the backend is available before session-scoped hook replay begins. | | `gateway_stop` | Stops the runtime, drains sessions, shuts down subscribers, and clears the NeMo Flow plugin host. | | `session_start` | Opens or aliases a NeMo Flow session scope. | | `session_end` | Closes the session, flushes pending replay state, and exports ATIF if enabled. | | `llm_input` / `llm_output` | Replays an LLM span through `llmCall` and `llmCallEnd` with bounded FIFO correlation. | | `model_call_started` / `model_call_ended` | Enriches matching LLM spans with provider timing when correlation is unambiguous. | | `after_tool_call` | Replays successful tool calls through `toolCall` and `toolCallEnd`; blocked tools emit marks. | -| `agent_end` | Emits an agent lifecycle mark and closes any remaining session state for the run. | +| `agent_end` | Emits an agent lifecycle mark under the current session. | | `before_agent_finalize` | Emits a lifecycle mark and does not mutate the finalization payload. | | `subagent_spawned` / `subagent_ended` | Emits subagent lifecycle marks under the best available parent or child session. | @@ -165,8 +167,8 @@ Use the output health independently: ## Packaging -`npm run pack:check` builds a fresh production `dist/`, runs `npm pack --dry-run`, -and verifies that: +`npm run pack:check --workspace=@nvidia/nemo-flow-openclaw` builds a fresh +production `dist/`, runs `npm pack --dry-run`, and verifies that: - declared OpenClaw source and runtime entrypoints are present - production source files needed by `index.ts` are present diff --git a/integrations/openclaw/scripts/build-test.mjs b/integrations/openclaw/scripts/build-test.mjs index 3f35701f..6fde0568 100644 --- a/integrations/openclaw/scripts/build-test.mjs +++ b/integrations/openclaw/scripts/build-test.mjs @@ -5,11 +5,13 @@ import { spawnSync } from "node:child_process"; import { rmSync } from "node:fs"; +import { createRequire } from "node:module"; import path from "node:path"; import { fileURLToPath } from "node:url"; const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); -const tsc = path.join(packageRoot, "node_modules", "typescript", "bin", "tsc"); +const require = createRequire(import.meta.url); +const tsc = require.resolve("typescript/bin/tsc"); rmSync(path.join(packageRoot, ".test-dist"), { recursive: true, force: true }); diff --git a/integrations/openclaw/scripts/build.mjs b/integrations/openclaw/scripts/build.mjs index 461ae74f..85699482 100644 --- a/integrations/openclaw/scripts/build.mjs +++ b/integrations/openclaw/scripts/build.mjs @@ -5,11 +5,13 @@ import { spawnSync } from "node:child_process"; import { rmSync } from "node:fs"; +import { createRequire } from "node:module"; import path from "node:path"; import { fileURLToPath } from "node:url"; const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); -const tsc = path.join(packageRoot, "node_modules", "typescript", "bin", "tsc"); +const require = createRequire(import.meta.url); +const tsc = require.resolve("typescript/bin/tsc"); rmSync(path.join(packageRoot, "dist"), { recursive: true, force: true }); diff --git a/integrations/openclaw/src/__tests__/live-smoke.test.ts b/integrations/openclaw/src/__tests__/live-smoke.test.ts index 64436435..fcfac6b2 100644 --- a/integrations/openclaw/src/__tests__/live-smoke.test.ts +++ b/integrations/openclaw/src/__tests__/live-smoke.test.ts @@ -197,7 +197,7 @@ async function loadRealNemoFlowModules(): Promise { } catch (error) { if (isMissingLocalNemoFlowNode(error)) { throw new Error( - "Live smoke requires the nemo-flow-node native package for this platform. Install integration dependencies, or build local bindings when testing an unpublished version, then rerun `npm --prefix integrations/openclaw run test:live`.", + "Live smoke requires the nemo-flow-node native package for this platform. Install workspace dependencies, or build local bindings when testing an unpublished version, then rerun `npm run test:live --workspace=@nvidia/nemo-flow-openclaw`.", ); } throw error; diff --git a/justfile b/justfile index 8a434d61..af2e7775 100644 --- a/justfile +++ b/justfile @@ -968,7 +968,7 @@ package-node: build_args+=(-- --zig --zig-abi-suffix "$linux_glibc_version") fi npm install --ignore-scripts - npm run "${build_args[@]}" --workspace=nemo-flow-node + npm run --workspace=nemo-flow-node "${build_args[@]}" pushd crates/node >/dev/null npm pack --pack-destination "$package_dir" popd >/dev/null From a3593d501698962dfdf283bd0d936c974c97eecb Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Thu, 7 May 2026 20:58:19 -0700 Subject: [PATCH 19/30] ci(openclaw): make pack check portable on Windows Signed-off-by: mnajafian-nv --- .../openclaw/scripts/check-pack-payload.mjs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/integrations/openclaw/scripts/check-pack-payload.mjs b/integrations/openclaw/scripts/check-pack-payload.mjs index d0dd05ce..62e2fc01 100644 --- a/integrations/openclaw/scripts/check-pack-payload.mjs +++ b/integrations/openclaw/scripts/check-pack-payload.mjs @@ -10,6 +10,7 @@ import { fileURLToPath } from "node:url"; const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); const npm = process.platform === "win32" ? "npm.cmd" : "npm"; +const npmExecPath = process.env.npm_execpath; function assert(condition, message) { if (!condition) { @@ -24,12 +25,25 @@ function run(command, args, options = {}) { ...options, }); if (result.status !== 0) { + if (result.error) { + process.stderr.write(`${result.error.message}\n`); + } process.stderr.write(result.stderr ?? ""); throw new Error(`${command} ${args.join(" ")} failed`); } return result; } +function runNpm(args, options = {}) { + if (npmExecPath) { + return run(process.execPath, [npmExecPath, ...args], options); + } + return run(npm, args, { + shell: process.platform === "win32", + ...options, + }); +} + function normalizePackagePath(value) { return value.replace(/^\.\//, "").replaceAll("\\", "/"); } @@ -49,9 +63,9 @@ function walkFiles(root, prefix = "") { return output.sort(); } -run(npm, ["run", "build"], { stdio: "inherit" }); +runNpm(["run", "build"], { stdio: "inherit" }); -const pack = run(npm, ["pack", "--dry-run", "--json", "--ignore-scripts"]); +const pack = runNpm(["pack", "--dry-run", "--json", "--ignore-scripts"]); const packInfo = JSON.parse(pack.stdout)[0]; assert(packInfo, "npm pack did not return package metadata"); From d4c235bd8cecbb63c5a6ff879ab0857aaf65ee3a Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Fri, 8 May 2026 10:58:05 -0700 Subject: [PATCH 20/30] ci: split OpenClaw integration checks Signed-off-by: mnajafian-nv --- .github/ci-path-filters.yml | 4 +++- .github/workflows/ci.yaml | 4 +++- .github/workflows/ci_changes.yml | 4 ++++ .github/workflows/ci_node.yml | 18 +++++++++++++++--- justfile | 1 - 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/.github/ci-path-filters.yml b/.github/ci-path-filters.yml index 4331b6e0..d779133c 100644 --- a/.github/ci-path-filters.yml +++ b/.github/ci-path-filters.yml @@ -66,9 +66,11 @@ node: - 'crates/node/*.js' - 'crates/node/src/**' - 'crates/node/tests/**/*.mjs' - - 'integrations/openclaw/**' - 'scripts/test-support/**' +openclaw: + - 'integrations/openclaw/**' + python: - 'crates/python/Cargo.toml' - 'crates/python/src/**' diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b93adac0..b4984200 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -186,7 +186,7 @@ jobs: name: Node.js needs: [prepare, ci_changes, ci_check] uses: ./.github/workflows/ci_node.yml - if: ${{ needs.ci_check.result == 'success' && needs.ci_changes.outputs.run_node == 'true' }} + if: ${{ needs.ci_check.result == 'success' && (needs.ci_changes.outputs.run_node == 'true' || needs.ci_changes.outputs.run_openclaw == 'true') }} permissions: contents: read secrets: @@ -194,6 +194,8 @@ jobs: with: ref_type: ${{ github.ref_type }} ref_name: ${{ github.ref_name }} + run_node: ${{ needs.ci_changes.outputs.run_node == 'true' }} + run_openclaw: ${{ needs.ci_changes.outputs.run_openclaw == 'true' }} ci_python: name: Python diff --git a/.github/workflows/ci_changes.yml b/.github/workflows/ci_changes.yml index dd5f554c..7cdc3fbf 100644 --- a/.github/workflows/ci_changes.yml +++ b/.github/workflows/ci_changes.yml @@ -39,6 +39,9 @@ on: run_node: description: 'Whether Node.js jobs should run' value: ${{ jobs.changes.outputs.run_node }} + run_openclaw: + description: 'Whether OpenClaw integration jobs should run' + value: ${{ jobs.changes.outputs.run_openclaw }} run_python: description: 'Whether Python jobs should run' value: ${{ jobs.changes.outputs.run_python }} @@ -62,6 +65,7 @@ jobs: run_docs: ${{ (inputs.full_ci || startsWith(inputs.ref_name, 'pull-request/')) && (inputs.full_ci || steps.filter.outputs.ci == 'true' || steps.filter.outputs.shared == 'true' || steps.filter.outputs.docs == 'true') }} run_go: ${{ inputs.full_ci || steps.filter.outputs.ci == 'true' || steps.filter.outputs.shared == 'true' || steps.filter.outputs.go == 'true' }} run_node: ${{ inputs.full_ci || steps.filter.outputs.ci == 'true' || steps.filter.outputs.shared == 'true' || steps.filter.outputs.node == 'true' }} + run_openclaw: ${{ inputs.full_ci || steps.filter.outputs.ci == 'true' || steps.filter.outputs.shared == 'true' || steps.filter.outputs.openclaw == 'true' }} run_python: ${{ inputs.full_ci || steps.filter.outputs.ci == 'true' || steps.filter.outputs.shared == 'true' || steps.filter.outputs.python == 'true' }} run_rust: ${{ inputs.full_ci || steps.filter.outputs.ci == 'true' || steps.filter.outputs.shared == 'true' || steps.filter.outputs.rust == 'true' }} run_wasm: ${{ inputs.full_ci || steps.filter.outputs.ci == 'true' || steps.filter.outputs.shared == 'true' || steps.filter.outputs.wasm == 'true' }} diff --git a/.github/workflows/ci_node.yml b/.github/workflows/ci_node.yml index 1ec08dd9..28f0d136 100644 --- a/.github/workflows/ci_node.yml +++ b/.github/workflows/ci_node.yml @@ -14,6 +14,16 @@ on: description: 'The ref name from the triggering workflow' required: true type: string + run_node: + description: 'Whether to run Node.js package tests and packaging' + required: false + default: true + type: boolean + run_openclaw: + description: 'Whether to run OpenClaw integration checks' + required: false + default: false + type: boolean secrets: CODECOV_TOKEN: required: false @@ -82,16 +92,18 @@ jobs: node-version: ${{ steps.ci-config.outputs.node_version }} - name: Run Node tests with coverage + if: ${{ inputs.run_node }} working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} run: just --set ci true --set output_dir "${{ github.workspace }}" test-node - name: Run OpenClaw integration checks + if: ${{ inputs.run_openclaw }} working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} run: just --set ci true test-openclaw - name: Upload Node coverage to Codecov uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6 - if: ${{ !startsWith(matrix.platform, 'windows') }} + if: ${{ inputs.run_node && !startsWith(matrix.platform, 'windows') }} with: token: ${{ secrets.CODECOV_TOKEN }} disable_search: true @@ -103,7 +115,7 @@ jobs: Package: name: Package (${{ matrix.platform }}) needs: [Test] - if: ${{ !cancelled() && needs.Test.result == 'success' }} + if: ${{ inputs.run_node && !cancelled() && needs.Test.result == 'success' }} runs-on: ${{ matrix.runner }} timeout-minutes: 30 permissions: @@ -203,7 +215,7 @@ jobs: Consolidate: name: Consolidate needs: [Package] - if: ${{ !cancelled() && needs.Package.result == 'success' }} + if: ${{ inputs.run_node && !cancelled() && needs.Package.result == 'success' }} runs-on: ubuntu-latest timeout-minutes: 30 permissions: diff --git a/justfile b/justfile index bd3c4dfd..8359212f 100644 --- a/justfile +++ b/justfile @@ -896,7 +896,6 @@ test-openclaw: fi npm run typecheck --workspace=nemo-flow-openclaw npm test --workspace=nemo-flow-openclaw - npm run pack:check --workspace=nemo-flow-openclaw # --set [output_dir=] [ci=true|false] test-wasm: From 2ce6a9dad05e5e8a4b8038e45be35a03171aeb67 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Fri, 8 May 2026 11:08:59 -0700 Subject: [PATCH 21/30] Update .github/workflows/ci_node.yml Co-authored-by: Will Killian <2007799+willkill07@users.noreply.github.com> Signed-off-by: mnajafian-nv --- .github/workflows/ci_node.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci_node.yml b/.github/workflows/ci_node.yml index 28f0d136..3b5ffe16 100644 --- a/.github/workflows/ci_node.yml +++ b/.github/workflows/ci_node.yml @@ -92,7 +92,6 @@ jobs: node-version: ${{ steps.ci-config.outputs.node_version }} - name: Run Node tests with coverage - if: ${{ inputs.run_node }} working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} run: just --set ci true --set output_dir "${{ github.workspace }}" test-node From f851fe6cab57281ec308c093ae33d430868e167c Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Fri, 8 May 2026 11:17:01 -0700 Subject: [PATCH 22/30] ci: move OpenClaw checks to dedicated workflow Signed-off-by: mnajafian-nv --- .github/workflows/ci.yaml | 16 ++++++++--- .github/workflows/ci_node.yml | 22 +++------------ .github/workflows/ci_openclaw.yml | 45 +++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/ci_openclaw.yml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b4984200..01fa61c4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -186,7 +186,7 @@ jobs: name: Node.js needs: [prepare, ci_changes, ci_check] uses: ./.github/workflows/ci_node.yml - if: ${{ needs.ci_check.result == 'success' && (needs.ci_changes.outputs.run_node == 'true' || needs.ci_changes.outputs.run_openclaw == 'true') }} + if: ${{ needs.ci_check.result == 'success' && needs.ci_changes.outputs.run_node == 'true' }} permissions: contents: read secrets: @@ -194,8 +194,14 @@ jobs: with: ref_type: ${{ github.ref_type }} ref_name: ${{ github.ref_name }} - run_node: ${{ needs.ci_changes.outputs.run_node == 'true' }} - run_openclaw: ${{ needs.ci_changes.outputs.run_openclaw == 'true' }} + + ci_openclaw: + name: OpenClaw + needs: [prepare, ci_changes, ci_check] + uses: ./.github/workflows/ci_openclaw.yml + if: ${{ needs.ci_check.result == 'success' && needs.ci_changes.outputs.run_openclaw == 'true' }} + permissions: + contents: read ci_python: name: Python @@ -233,6 +239,7 @@ jobs: - ci_rust - ci_go - ci_node + - ci_openclaw - ci_python - ci_wasm if: ${{ always() && !cancelled() && needs.prepare.result == 'success' && ! fromJSON(needs.prepare.outputs.has_skip_ci_label) }} @@ -248,6 +255,7 @@ jobs: RUST_RESULT: ${{ needs.ci_rust.result }} GO_RESULT: ${{ needs.ci_go.result }} NODE_RESULT: ${{ needs.ci_node.result }} + OPENCLAW_RESULT: ${{ needs.ci_openclaw.result }} PYTHON_RESULT: ${{ needs.ci_python.result }} WEBASSEMBLY_RESULT: ${{ needs.ci_wasm.result }} publish_docs: ${{ needs.prepare.outputs.publish_docs }} @@ -286,11 +294,13 @@ jobs: if [[ "$publish_packages" == "true" ]]; then require_success "Rust" "$RUST_RESULT" require_success "Node.js" "$NODE_RESULT" + allow_success_or_skipped "OpenClaw" "$OPENCLAW_RESULT" require_success "Python" "$PYTHON_RESULT" require_success "WebAssembly" "$WEBASSEMBLY_RESULT" else allow_success_or_skipped "Rust" "$RUST_RESULT" allow_success_or_skipped "Node.js" "$NODE_RESULT" + allow_success_or_skipped "OpenClaw" "$OPENCLAW_RESULT" allow_success_or_skipped "Python" "$PYTHON_RESULT" allow_success_or_skipped "WebAssembly" "$WEBASSEMBLY_RESULT" fi diff --git a/.github/workflows/ci_node.yml b/.github/workflows/ci_node.yml index 28f0d136..5e141a84 100644 --- a/.github/workflows/ci_node.yml +++ b/.github/workflows/ci_node.yml @@ -14,16 +14,6 @@ on: description: 'The ref name from the triggering workflow' required: true type: string - run_node: - description: 'Whether to run Node.js package tests and packaging' - required: false - default: true - type: boolean - run_openclaw: - description: 'Whether to run OpenClaw integration checks' - required: false - default: false - type: boolean secrets: CODECOV_TOKEN: required: false @@ -92,18 +82,12 @@ jobs: node-version: ${{ steps.ci-config.outputs.node_version }} - name: Run Node tests with coverage - if: ${{ inputs.run_node }} working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} run: just --set ci true --set output_dir "${{ github.workspace }}" test-node - - name: Run OpenClaw integration checks - if: ${{ inputs.run_openclaw }} - working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} - run: just --set ci true test-openclaw - - name: Upload Node coverage to Codecov uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6 - if: ${{ inputs.run_node && !startsWith(matrix.platform, 'windows') }} + if: ${{ !startsWith(matrix.platform, 'windows') }} with: token: ${{ secrets.CODECOV_TOKEN }} disable_search: true @@ -115,7 +99,7 @@ jobs: Package: name: Package (${{ matrix.platform }}) needs: [Test] - if: ${{ inputs.run_node && !cancelled() && needs.Test.result == 'success' }} + if: ${{ !cancelled() && needs.Test.result == 'success' }} runs-on: ${{ matrix.runner }} timeout-minutes: 30 permissions: @@ -215,7 +199,7 @@ jobs: Consolidate: name: Consolidate needs: [Package] - if: ${{ inputs.run_node && !cancelled() && needs.Package.result == 'success' }} + if: ${{ !cancelled() && needs.Package.result == 'success' }} runs-on: ubuntu-latest timeout-minutes: 30 permissions: diff --git a/.github/workflows/ci_openclaw.yml b/.github/workflows/ci_openclaw.yml new file mode 100644 index 00000000..1db7c89d --- /dev/null +++ b/.github/workflows/ci_openclaw.yml @@ -0,0 +1,45 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +name: OpenClaw + +on: + workflow_call: + +defaults: + run: + shell: bash + +env: + GH_TOKEN: "${{ github.token }}" + GIT_COMMIT: "${{ github.sha }}" + NEMO_FLOW_CI_WORKSPACE: "${{ github.workspace }}" + UV_PYTHON_DOWNLOADS: never + +jobs: + Test: + name: Test + runs-on: ubuntu-latest + timeout-minutes: 30 + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Load CI tool versions + id: ci-config + uses: ./.github/actions/load-ci-tool-versions + + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 + with: + node-version: ${{ steps.ci-config.outputs.node_version }} + + - uses: taiki-e/install-action@5939f3337e40968c39aa70f5ecb1417a92fb25a0 # v2.75.15 + with: + tool: just@${{ steps.ci-config.outputs.just_version }} + + - name: Run OpenClaw integration checks + working-directory: ${{ env.NEMO_FLOW_CI_WORKSPACE }} + run: just --set ci true test-openclaw From f44fb5b1186a65b299e0c8b1373ea2719d4a8c90 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Fri, 8 May 2026 11:40:01 -0700 Subject: [PATCH 23/30] ci: build Node binding before OpenClaw checks Signed-off-by: mnajafian-nv --- .github/workflows/ci_openclaw.yml | 13 +++++++++++++ justfile | 1 + 2 files changed, 14 insertions(+) diff --git a/.github/workflows/ci_openclaw.yml b/.github/workflows/ci_openclaw.yml index 1db7c89d..b20391c2 100644 --- a/.github/workflows/ci_openclaw.yml +++ b/.github/workflows/ci_openclaw.yml @@ -32,6 +32,19 @@ jobs: id: ci-config uses: ./.github/actions/load-ci-tool-versions + - uses: actions-rust-lang/setup-rust-toolchain@150fca883cd4034361b621bd4e6a9d34e5143606 # v1.15.4 + with: + cache: false + toolchain: ${{ steps.ci-config.outputs.rust_version }} + + - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 + with: + shared-key: nemo-flow-rust-${{ runner.os }}-${{ runner.arch }}-${{ steps.ci-config.outputs.rust_version }} + workspaces: . -> target + cache-all-crates: true + cache-bin: false + save-if: false + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 with: node-version: ${{ steps.ci-config.outputs.node_version }} diff --git a/justfile b/justfile index 8359212f..f3b4e238 100644 --- a/justfile +++ b/justfile @@ -891,6 +891,7 @@ test-openclaw: cd "$NEMO_FLOW_REPO_ROOT" if is_true "{{ ci }}"; then npm ci --ignore-scripts + npm run build-debug --workspace=nemo-flow-node else npm install --ignore-scripts fi From 192d81125c3d4e3db3f45ed6e05a39650eb823a1 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Fri, 8 May 2026 20:40:02 -0700 Subject: [PATCH 24/30] Improve OpenInference display payloads Signed-off-by: mnajafian-nv --- .../core/src/observability/openinference.rs | 257 +++++++++++++++--- .../unit/observability/openinference_tests.rs | 239 ++++++++++++++-- 2 files changed, 423 insertions(+), 73 deletions(-) diff --git a/crates/core/src/observability/openinference.rs b/crates/core/src/observability/openinference.rs index 89fbb9e9..3146d16a 100644 --- a/crates/core/src/observability/openinference.rs +++ b/crates/core/src/observability/openinference.rs @@ -633,18 +633,19 @@ fn scope_type_name(scope_type: Option) -> &'static str { fn start_attributes(event: &Event) -> Vec { let mut attributes = common_attributes(event); let handle_attributes = event.attributes(); - push_serialized( - &mut attributes, - "nemo_flow.handle_attributes_json", - handle_attributes, - ); - push_serialized(&mut attributes, "nemo_flow.start.data_json", event.data()); - push_serialized( - &mut attributes, - "nemo_flow.start.metadata_json", - event.metadata(), - ); - push_serialized(&mut attributes, "nemo_flow.start.input_json", event.input()); + if handle_attributes.is_some_and(|attributes| !attributes.is_empty()) { + push_serialized( + &mut attributes, + "nemo_flow.handle_attributes_json", + handle_attributes, + ); + } + if event + .category() + .is_none_or(|category| category.as_str() != "llm") + { + push_serialized(&mut attributes, "nemo_flow.start.input_json", event.input()); + } if event .category() .is_some_and(|category| category.as_str() == "tool") @@ -656,9 +657,9 @@ fn start_attributes(event: &Event) -> Vec { )); } - if let Some(input) = openinference_input_value(event) { + if let Some((input, mime_type)) = openinference_input_value(event) { attributes.push(KeyValue::new(oi::input::VALUE, input.clone())); - attributes.push(KeyValue::new(oi::input::MIME_TYPE, "application/json")); + attributes.push(KeyValue::new(oi::input::MIME_TYPE, mime_type)); if event .category() @@ -673,16 +674,10 @@ fn start_attributes(event: &Event) -> Vec { fn end_attributes(event: &Event) -> Vec { let mut attributes = Vec::new(); - push_serialized(&mut attributes, "nemo_flow.end.data_json", event.data()); - push_serialized( - &mut attributes, - "nemo_flow.end.metadata_json", - event.metadata(), - ); push_serialized(&mut attributes, "nemo_flow.end.output_json", event.output()); - if let Some(output) = event.output().and_then(to_json_string) { + if let Some((output, mime_type)) = openinference_output_value(event) { attributes.push(KeyValue::new(oi::output::VALUE, output)); - attributes.push(KeyValue::new(oi::output::MIME_TYPE, "application/json")); + attributes.push(KeyValue::new(oi::output::MIME_TYPE, mime_type)); } let fallback_usage = if event .category() @@ -750,7 +745,7 @@ fn usage_from_manual_llm_output(output: Option<&Json>) -> Option { "output", ], ); - let total_tokens = first_u64_from_manual_usage( + let reported_total_tokens = first_u64_from_manual_usage( usage, token_usage, &["total_tokens", "totalTokens", "total"], @@ -782,12 +777,14 @@ fn usage_from_manual_llm_output(output: Option<&Json>) -> Option { if prompt_tokens.is_none() && completion_tokens.is_none() - && total_tokens.is_none() + && reported_total_tokens.is_none() && cache_read_tokens.is_none() && cache_write_tokens.is_none() { return None; } + let total_tokens = + normalize_total_tokens(reported_total_tokens, prompt_tokens, completion_tokens); Some(Usage { prompt_tokens, @@ -798,6 +795,22 @@ fn usage_from_manual_llm_output(output: Option<&Json>) -> Option { }) } +fn normalize_total_tokens( + total_tokens: Option, + prompt_tokens: Option, + completion_tokens: Option, +) -> Option { + let total_tokens = total_tokens?; + let minimum_total = prompt_tokens + .unwrap_or(0) + .saturating_add(completion_tokens.unwrap_or(0)); + if minimum_total == 0 || total_tokens >= minimum_total { + Some(total_tokens) + } else { + None + } +} + fn first_u64_from_manual_usage( usage: Option<&serde_json::Map>, token_usage: Option<&serde_json::Map>, @@ -860,17 +873,9 @@ fn common_attributes(event: &Event) -> Vec { ]; if let Some(model_name) = event.model_name() { - attributes.push(KeyValue::new( - "nemo_flow.model_name", - model_name.to_string(), - )); attributes.push(KeyValue::new(oi::llm::MODEL_NAME, model_name.to_string())); } if let Some(tool_call_id) = event.tool_call_id() { - attributes.push(KeyValue::new( - "nemo_flow.tool_call_id", - tool_call_id.to_string(), - )); attributes.push(KeyValue::new(oi::tool_call::ID, tool_call_id.to_string())); } if let Some(metadata) = event.metadata().and_then(to_json_string) { @@ -908,28 +913,194 @@ fn push_serialized( } } -fn openinference_input_value(event: &Event) -> Option { +fn openinference_input_value(event: &Event) -> Option<(String, &'static str)> { let input = event.input()?; if event .category() .is_some_and(|category| category.as_str() == "llm") { - return match input { - serde_json::Value::Object(object) => { - if let Some(content) = object.get("content") { - return to_json_string(content); - } + return llm_input_display_value(input) + .map(|display| (display, "text/plain")) + .or_else(|| sanitized_llm_input_json(input).map(|json| (json, "application/json"))); + } + + to_json_string(input).map(|json| (json, "application/json")) +} + +fn openinference_output_value(event: &Event) -> Option<(String, &'static str)> { + let output = event.output()?; + display_text_from_json(output) + .map(|display| (display, "text/plain")) + .or_else(|| to_json_string(output).map(|json| (json, "application/json"))) +} + +fn llm_input_display_value(input: &Json) -> Option { + let content = match input { + Json::Object(object) => object.get("content").unwrap_or(input), + _ => input, + }; + + content + .get("messages") + .and_then(display_text_from_messages) + .or_else(|| display_text_from_json(content)) +} + +fn sanitized_llm_input_json(input: &Json) -> Option { + match input { + Json::Object(object) => { + let mut sanitized = object.clone(); + sanitized.remove("headers"); + to_json_string(&Json::Object(sanitized)) + } + _ => to_json_string(input), + } +} - let mut sanitized = object.clone(); - sanitized.remove("headers"); - to_json_string(&serde_json::Value::Object(sanitized)) +fn display_text_from_json(value: &Json) -> Option { + match value { + Json::String(text) => display_text_from_string(text), + Json::Object(object) => { + for key in ["content", "summary", "message", "text", "prompt"] { + if let Some(display) = object.get(key).and_then(display_text_from_json) { + return Some(display); + } } - _ => to_json_string(input), + object + .get("choices") + .and_then(display_text_from_chat_choices) + .or_else(|| { + object + .get("tool_calls") + .and_then(display_text_from_tool_calls) + }) + } + Json::Array(items) => display_text_from_content_blocks(items), + _ => None, + } +} + +fn display_text_from_messages(value: &Json) -> Option { + let messages = value.as_array()?; + let text = messages + .iter() + .filter_map(display_text_from_message) + .collect::>() + .join("\n\n") + .trim() + .to_string(); + if text.is_empty() { None } else { Some(text) } +} + +fn display_text_from_message(value: &Json) -> Option { + let role = value + .get("role") + .and_then(Json::as_str) + .unwrap_or("message"); + if role == "tool" { + return Some("tool: Tool result omitted".to_string()); + } + let display = value + .get("content") + .and_then(display_text_from_json) + .or_else(|| { + value + .get("tool_calls") + .and_then(display_text_from_tool_calls) + })?; + Some(format!("{role}: {display}")) +} + +fn display_text_from_string(text: &str) -> Option { + let trimmed = text.trim(); + if trimmed.is_empty() { + return None; + } + if let Ok(parsed) = serde_json::from_str::(trimmed) + && let Some(display) = display_text_from_json(&parsed) + { + return Some(display); + } + Some(trimmed.to_string()) +} + +fn display_text_from_chat_choices(value: &Json) -> Option { + let choices = value.as_array()?; + for choice in choices { + let Some(message) = choice.get("message") else { + continue; }; + let content = message.get("content").and_then(display_text_from_json); + let tool_calls = message + .get("tool_calls") + .and_then(display_text_from_tool_calls); + match (content, tool_calls) { + (Some(content), Some(tool_calls)) => return Some(format!("{content}\n{tool_calls}")), + (Some(content), None) => return Some(content), + (None, Some(tool_calls)) => return Some(tool_calls), + (None, None) => {} + } + } + None +} + +fn display_text_from_content_blocks(items: &[Json]) -> Option { + let mut entries = items + .iter() + .filter_map(content_block_display_text) + .collect::>(); + let tool_calls = items.iter().filter_map(tool_call_name).collect::>(); + if !tool_calls.is_empty() { + entries.push(format!("Requested tools: {}", tool_calls.join(", "))); + } + let text = entries + .into_iter() + .filter(|item| !item.trim().is_empty()) + .collect::>() + .join("\n") + .trim() + .to_string(); + if text.is_empty() { None } else { Some(text) } +} + +fn content_block_display_text(item: &Json) -> Option { + if let Some(text) = item.as_str() { + return Some(text.to_string()); + } + if item.get("stripped").and_then(Json::as_bool) == Some(true) { + return None; } + if let Some("thinking" | "reasoning" | "toolResult" | "tool_result") = + item.get("type").and_then(Json::as_str) + { + return None; + } + item.get("text").and_then(Json::as_str).map(str::to_string) +} + +fn display_text_from_tool_calls(value: &Json) -> Option { + let calls = value.as_array()?; + let names = calls.iter().filter_map(tool_call_name).collect::>(); + if names.is_empty() { + None + } else { + Some(format!("Requested tools: {}", names.join(", "))) + } +} - to_json_string(input) +fn tool_call_name(value: &Json) -> Option { + value + .get("name") + .and_then(Json::as_str) + .or_else(|| value.get("toolName").and_then(Json::as_str)) + .or_else(|| { + value + .get("function") + .and_then(|function| function.get("name")) + .and_then(Json::as_str) + }) + .map(str::to_string) } fn to_json_string(value: &T) -> Option { diff --git a/crates/core/tests/unit/observability/openinference_tests.rs b/crates/core/tests/unit/observability/openinference_tests.rs index 48b0174c..de8720d3 100644 --- a/crates/core/tests/unit/observability/openinference_tests.rs +++ b/crates/core/tests/unit/observability/openinference_tests.rs @@ -379,14 +379,8 @@ fn registered_subscriber_emits_spans_for_scope_push_pop_and_marks() { attributes.get("openinference.span.kind"), Some(&"AGENT".to_string()) ); - assert_eq!( - attributes.get("nemo_flow.start.data_json"), - Some(&"{\"task\":\"scope-start\"}".to_string()) - ); - assert_eq!( - attributes.get("nemo_flow.start.metadata_json"), - Some(&"{\"phase\":\"start\"}".to_string()) - ); + assert!(!attributes.contains_key("nemo_flow.start.data_json")); + assert!(!attributes.contains_key("nemo_flow.start.metadata_json")); assert_eq!( attributes.get("nemo_flow.start.input_json"), Some(&"{\"task\":\"scope-start\"}".to_string()) @@ -549,18 +543,171 @@ fn llm_input_value_omits_request_headers() { processor.force_flush().unwrap(); + let spans = exporter.get_finished_spans().unwrap(); + assert_eq!(spans.len(), 1); + let attributes = attr_map(&spans[0].attributes); + assert_eq!(attributes.get("input.value"), Some(&"user: hi".to_string())); + assert_eq!( + attributes.get("input.mime_type"), + Some(&"text/plain".to_string()) + ); + assert!(!attributes.contains_key("nemo_flow.start.input_json")); + assert!(!attributes["input.value"].contains("authorization")); + assert!(!attributes["input.value"].contains("secret-token")); +} + +#[test] +fn llm_input_value_summarizes_tool_call_messages() { + let (provider, exporter) = make_provider(); + let mut processor = + OpenInferenceEventProcessor::new(provider.clone(), "test-scope".to_string()); + let root_uuid = Uuid::now_v7(); + + processor.process(&make_start_event( + root_uuid, + None, + "chat", + ScopeType::Llm, + Some(json!({ + "content": { + "messages": [ + {"role": "user", "content": "Inspect the files."}, + { + "role": "assistant", + "content": [ + {"type": "thinking", "stripped": true}, + {"type": "text", "text": "I will inspect the files."}, + {"type": "toolCall", "name": "read", "arguments": {"stripped": true}} + ] + }, + {"role": "tool", "content": {"stripped": true, "reason": "tool result"}} + ] + } + })), + )); + processor.process(&make_end_event( + root_uuid, + None, + "chat", + ScopeType::Llm, + Some(json!({"message": "done"})), + )); + + processor.force_flush().unwrap(); + let spans = exporter.get_finished_spans().unwrap(); assert_eq!(spans.len(), 1); let attributes = attr_map(&spans[0].attributes); assert_eq!( attributes.get("input.value"), Some( - &"{\"messages\":[{\"content\":\"hi\",\"role\":\"user\"}],\"model\":\"demo-model\"}" + &"user: Inspect the files.\n\nassistant: I will inspect the files.\nRequested tools: read\n\ntool: Tool result omitted" .to_string() ) ); - assert!(!attributes["input.value"].contains("authorization")); - assert!(!attributes["input.value"].contains("secret-token")); + assert!(!attributes["input.value"].contains("thinking")); + assert!(!attributes["input.value"].contains("arguments")); + assert!(!attributes["input.value"].contains("tool result")); +} + +#[test] +fn output_value_prefers_display_content() { + let (provider, exporter) = make_provider(); + let mut processor = + OpenInferenceEventProcessor::new(provider.clone(), "test-scope".to_string()); + let root_uuid = Uuid::now_v7(); + + processor.process(&make_start_event( + root_uuid, + None, + "edit", + ScopeType::Tool, + Some(json!({"path": "api.py"})), + )); + processor.process(&make_end_event( + root_uuid, + None, + "edit", + ScopeType::Tool, + Some(json!({ + "content": "Tool edit completed.", + "details": {"diff": "-old\n+new"} + })), + )); + + processor.force_flush().unwrap(); + + let spans = exporter.get_finished_spans().unwrap(); + assert_eq!(spans.len(), 1); + let attributes = attr_map(&spans[0].attributes); + assert_eq!( + attributes.get("output.value"), + Some(&"Tool edit completed.".to_string()) + ); + assert_eq!( + attributes.get("output.mime_type"), + Some(&"text/plain".to_string()) + ); + assert_eq!( + attributes.get("nemo_flow.end.output_json"), + Some( + &"{\"content\":\"Tool edit completed.\",\"details\":{\"diff\":\"-old\\n+new\"}}" + .to_string() + ) + ); + assert!(!attributes.contains_key("nemo_flow.end.data_json")); +} + +#[test] +fn output_value_extracts_chat_completion_display_text() { + let (provider, exporter) = make_provider(); + let mut processor = + OpenInferenceEventProcessor::new(provider.clone(), "test-scope".to_string()); + let root_uuid = Uuid::now_v7(); + + processor.process(&make_start_event( + root_uuid, + None, + "chat", + ScopeType::Llm, + Some(json!({"content": {"messages": [{"role": "user", "content": "hi"}]}})), + )); + processor.process(&make_end_event( + root_uuid, + None, + "chat", + ScopeType::Llm, + Some(json!({ + "choices": [{ + "message": { + "role": "assistant", + "content": "I will inspect the files.", + "tool_calls": [ + {"id": "call-1", "function": {"name": "read", "arguments": "{\"path\":\"api.py\"}"}} + ] + } + }], + "usage": {"prompt_tokens": 3, "completion_tokens": 4, "total_tokens": 7} + })), + )); + + processor.force_flush().unwrap(); + + let spans = exporter.get_finished_spans().unwrap(); + assert_eq!(spans.len(), 1); + let attributes = attr_map(&spans[0].attributes); + assert_eq!( + attributes.get("output.value"), + Some(&"I will inspect the files.\nRequested tools: read".to_string()) + ); + assert_eq!( + attributes.get("output.mime_type"), + Some(&"text/plain".to_string()) + ); + assert_eq!( + attributes.get("llm.token_count.prompt"), + Some(&"3".to_string()) + ); } #[test] @@ -700,11 +847,8 @@ fn semantic_scope_type_and_input_value_follow_event_variants() { assert_eq!(semantic_scope_type(&llm_with_content), Some(ScopeType::Llm)); assert_eq!(span_kind(&llm_with_content), SpanKind::Client); assert_eq!( - serde_json::from_str::( - &openinference_input_value(&llm_with_content).unwrap(), - ) - .unwrap(), - json!({"messages": [{"role": "user", "content": "hello"}]}) + openinference_input_value(&llm_with_content), + Some(("user: hello".to_string(), "text/plain")) ); let llm_without_content = make_start_event( @@ -718,11 +862,8 @@ fn semantic_scope_type_and_input_value_follow_event_variants() { })), ); assert_eq!( - serde_json::from_str::( - &openinference_input_value(&llm_without_content).unwrap(), - ) - .unwrap(), - json!({"prompt": "hello"}) + openinference_input_value(&llm_without_content), + Some(("hello".to_string(), "text/plain")) ); let remote_tool = make_scope_event_with_attributes( @@ -736,11 +877,11 @@ fn semantic_scope_type_and_input_value_follow_event_variants() { ); assert_eq!(semantic_scope_type(&remote_tool), Some(ScopeType::Tool)); assert_eq!(span_kind(&remote_tool), SpanKind::Client); + let (remote_tool_input, remote_tool_mime_type) = + openinference_input_value(&remote_tool).unwrap(); + assert_eq!(remote_tool_mime_type, "application/json"); assert_eq!( - serde_json::from_str::( - &openinference_input_value(&remote_tool).unwrap() - ) - .unwrap(), + serde_json::from_str::(&remote_tool_input).unwrap(), json!({"query": "hello"}) ); } @@ -853,10 +994,7 @@ fn helper_functions_cover_additional_openinference_branches() { Some(CategoryProfile::builder().model_name("demo-model").build()), )); let llm_attributes = attr_map(&common_attributes(&llm_end)); - assert_eq!( - llm_attributes.get("nemo_flow.model_name"), - Some(&"demo-model".to_string()) - ); + assert!(!llm_attributes.contains_key("nemo_flow.model_name")); assert_eq!( llm_attributes.get(oi::llm::MODEL_NAME.as_str()), Some(&"demo-model".to_string()) @@ -949,7 +1087,7 @@ fn helper_functions_cover_additional_openinference_branches() { ); assert_eq!( openinference_input_value(&llm_with_scalar_input), - Some("\"hello\"".to_string()) + Some(("hello".to_string(), "text/plain")) ); let mut processor = OpenInferenceEventProcessor::new(make_provider().0, "test".into()); @@ -1147,6 +1285,47 @@ fn llm_end_with_manual_usage_payload_emits_token_count_attributes() { ); } +#[test] +fn llm_end_with_inconsistent_manual_usage_omits_invalid_total_tokens() { + let (provider, exporter) = make_provider(); + let mut processor = + OpenInferenceEventProcessor::new(provider.clone(), "test-scope".to_string()); + let uuid = Uuid::now_v7(); + + processor.process(&make_start_event(uuid, None, "chat", ScopeType::Llm, None)); + processor.process(&make_scope_event_with_profile( + ScopeCategory::End, + uuid, + None, + "chat", + ScopeType::Llm, + Some(json!({ + "content": "hello", + "usage": { + "prompt_tokens": 3, + "completion_tokens": 10, + "total_tokens": 5 + } + })), + Some(CategoryProfile::builder().model_name("gpt-4").build()), + )); + + processor.force_flush().unwrap(); + + let spans = exporter.get_finished_spans().unwrap(); + assert_eq!(spans.len(), 1); + let attributes = attr_map(&spans[0].attributes); + assert_eq!( + attributes.get("llm.token_count.prompt"), + Some(&"3".to_string()) + ); + assert_eq!( + attributes.get("llm.token_count.completion"), + Some(&"10".to_string()) + ); + assert!(!attributes.contains_key("llm.token_count.total")); +} + #[test] fn llm_end_without_usage_omits_token_count_attributes() { let (provider, exporter) = make_provider(); From eceb8608b887763b86b168ade1404621c751cfdd Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Fri, 8 May 2026 20:40:13 -0700 Subject: [PATCH 25/30] Improve OpenClaw hook replay fidelity Signed-off-by: mnajafian-nv --- integrations/openclaw/README.md | 11 +- .../openclaw/src/__tests__/config.test.ts | 1 + .../src/__tests__/hooks-backend.test.ts | 26 + .../openclaw/src/__tests__/llm-replay.test.ts | 427 ++++++++++- .../src/__tests__/tool-replay.test.ts | 46 +- integrations/openclaw/src/hook-replay/llm.ts | 666 +++++++++++++++++- .../openclaw/src/hook-replay/session.ts | 30 +- integrations/openclaw/src/hook-replay/tool.ts | 29 +- integrations/openclaw/src/hooks-backend.ts | 23 +- .../openclaw/src/openclaw-hook-types.ts | 12 + integrations/openclaw/src/runtime-state.ts | 8 + 11 files changed, 1210 insertions(+), 69 deletions(-) diff --git a/integrations/openclaw/README.md b/integrations/openclaw/README.md index 6c68f62a..d61a37a2 100644 --- a/integrations/openclaw/README.md +++ b/integrations/openclaw/README.md @@ -143,10 +143,19 @@ large payloads. | `llm_input` / `llm_output` | Replays an LLM span through `llmCall` and `llmCallEnd` with bounded FIFO correlation. | | `model_call_started` / `model_call_ended` | Enriches matching LLM spans with provider timing when correlation is unambiguous. | | `after_tool_call` | Replays successful tool calls through `toolCall` and `toolCallEnd`; blocked tools emit marks. | -| `agent_end` | Emits an agent lifecycle mark under the current session. | +| `before_message_write` | Records assistant turns at the message-write boundary so multi-step sessions can be replayed as ordered LLM spans when provider timing is available. | +| `agent_end` | Emits an agent lifecycle mark, flushes recorded assistant-turn LLM spans, and preserves the final assistant answer as the session output. | | `before_agent_finalize` | Emits a lifecycle mark and does not mutate the finalization payload. | | `subagent_spawned` / `subagent_ended` | Emits subagent lifecycle marks under the best available parent or child session. | +OpenClaw's current public hooks do not attach the model `callId` to assistant +message write events. When replaying recorded assistant turns, the plugin pairs +them with `model_call_ended` timing records FIFO within the same session, +provider, model, and run. The replay metadata marks this as +`fifo_model_call_timing`. If a safe timing pair is not available, the plugin +falls back to run-level `llm_output` replay or emits timing diagnostic marks +instead of inventing latency. + ## Health The plugin registers the admin-scoped gateway method `nemoFlow.status`. diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts index 6aef2307..19156212 100644 --- a/integrations/openclaw/src/__tests__/config.test.ts +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -145,6 +145,7 @@ describe("nemo-flow OpenClaw plugin shell", () => { "model_call_started", "model_call_ended", "after_tool_call", + "before_message_write", "agent_end", "before_agent_finalize", "subagent_spawned", diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts index 67f3d0bc..faba16a8 100644 --- a/integrations/openclaw/src/__tests__/hooks-backend.test.ts +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -248,6 +248,32 @@ describe("HookReplayBackend", () => { ]); }); + it("keeps gateway stop reason out of the root session output when a final answer is known", async () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onAgentEnd( + { + runId: "run-1", + messages: [ + { role: "user", content: "hello" }, + { role: "assistant", provider: "openai", model: "gpt", content: "Final answer." }, + ], + success: true, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + await backend.drainForGatewayStop("gateway stopping"); + + assert.deepEqual(nf.calls.popScope[0]?.output, { + content: "Final answer.", + source: "openclaw.agent_end", + runId: "run-1", + success: true, + }); + assert.deepEqual(nf.calls.event.at(-1)?.data, { reason: "gateway stopping" }); + }); + it("records subagent marks under the requester alias without merging child session identity", () => { const nf = createNemoFlowRuntime(); const backend = createBackend(nf); diff --git a/integrations/openclaw/src/__tests__/llm-replay.test.ts b/integrations/openclaw/src/__tests__/llm-replay.test.ts index 7bb083f2..93eab25d 100644 --- a/integrations/openclaw/src/__tests__/llm-replay.test.ts +++ b/integrations/openclaw/src/__tests__/llm-replay.test.ts @@ -48,18 +48,16 @@ describe("LLM replay", () => { const request = nf.calls.llmCall[0]?.request as ReplayRequest; assert.deepEqual(request.content.messages, [{ role: "user", content: "hello" }]); assert.equal(request.content.systemPrompt, "be concise"); + assert.equal(nf.calls.llmCall[0]?.data, null); const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; assert.equal(response.content, "hi"); + assert.equal(nf.calls.llmCallEnd[0]?.data, null); assert.deepEqual(response.usage, { prompt_tokens: 2, completion_tokens: 3, total_tokens: 5, }); - assert.deepEqual(response.token_usage, { - prompt_tokens: 2, - completion_tokens: 3, - total_tokens: 5, - }); + assert.equal("token_usage" in response, false); }); it("uses the observed input time as the fallback llm span start time", () => { @@ -80,6 +78,60 @@ describe("LLM replay", () => { assert.equal(nf.calls.llmCallEnd[0]?.timestamp, 1_250_000); }); + it("folds cache read and write tokens into prompt token totals", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput( + { + ...llmOutput(), + usage: { + input: 1, + output: 1_454, + cacheRead: 4_869, + cacheWrite: 544, + total: 6_868, + }, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; + assert.deepEqual(response.usage, { + prompt_tokens: 5_414, + completion_tokens: 1_454, + cached_tokens: 4_869, + cache_read_tokens: 4_869, + cache_write_tokens: 544, + total_tokens: 6_868, + }); + }); + + it("does not derive impossible prompt tokens from inconsistent usage totals", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput( + { + ...llmOutput(), + usage: { + input: 3, + output: 10, + total: 5, + }, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; + assert.deepEqual(response.usage, { + prompt_tokens: 3, + completion_tokens: 10, + }); + }); + it("replays pending output when matching input arrives and cancels pending queue", () => { const nf = createNemoFlowRuntime(); const backend = createBackend(nf, { llmOutputGraceMs: 10_000 }); @@ -227,6 +279,337 @@ describe("LLM replay", () => { assert.equal("duration_ms" in response.openclaw, false); }); + it("replays recorded assistant messages as ordered llm spans with usage and timing", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + const firstAssistant = { + role: "assistant", + provider: "openai", + model: "gpt-4", + content: [ + { type: "thinking", thinking: "private reasoning", thinkingSignature: "opaque-signature" }, + { type: "toolCall", name: "web_search", arguments: { query: "answer" } }, + ], + usage: { input: 10, output: 5, totalTokens: 15 }, + stopReason: "tool_use", + }; + const finalAssistant = { + role: "assistant", + provider: "openai", + model: "gpt-4", + content: [{ type: "text", text: "Final answer." }], + usage: { input: 20, output: 7, totalTokens: 27 }, + stopReason: "stop", + }; + + const historyMessages: unknown[] = []; + backend.onLlmInput( + { ...llmInput(), prompt: "Find the answer.", historyMessages }, + { runId: "run-1", sessionId: "session-1" }, + ); + historyMessages.push(firstAssistant); + backend.onModelCallEnded(modelEnded("call-1", 42), { runId: "run-1", sessionId: "session-1" }); + backend.onModelCallEnded(modelEnded("call-2", 55), { runId: "run-1", sessionId: "session-1" }); + backend.onBeforeMessageWrite({ message: firstAssistant }, { sessionKey: "session-1" }); + backend.onBeforeMessageWrite({ message: { role: "toolResult", content: "tool result" } }, { sessionKey: "session-1" }); + backend.onBeforeMessageWrite({ message: finalAssistant }, { sessionKey: "session-1" }); + backend.onAgentEnd( + { + runId: "run-1", + messages: [ + { role: "user", content: "Find the answer." }, + firstAssistant, + { role: "tool", content: "tool result" }, + finalAssistant, + ], + success: true, + durationMs: 100, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + assert.equal(nf.calls.llmCall.length, 2); + assert.equal(nf.calls.llmCallEnd.length, 2); + assert.equal(nf.calls.event.some((event) => event.name === "openclaw.model_call_timing_ambiguous"), false); + const firstResponse = nf.calls.llmCallEnd[0]?.response as ReplayResponse; + const firstRequest = nf.calls.llmCall[0]?.request as ReplayRequest; + assert.deepEqual(firstRequest.content.messages, [{ role: "user", content: "Find the answer." }]); + assert.equal(firstResponse.content, "tool calls: web_search"); + assert.equal((firstResponse.openclaw as ResponseOpenClaw).assistant_tool_call_names?.[0], "web_search"); + assert.equal(firstResponse.openclaw.duration_ms, 42); + assert.deepEqual(firstResponse.usage, { + prompt_tokens: 10, + completion_tokens: 5, + total_tokens: 15, + }); + const secondResponse = nf.calls.llmCallEnd[1]?.response as ReplayResponse; + const secondRequest = nf.calls.llmCall[1]?.request as ReplayRequest; + assert.deepEqual(secondRequest.content.messages?.[1], { + role: "assistant", + provider: "openai", + model: "gpt-4", + content: [ + { type: "thinking", stripped: true }, + { type: "toolCall", name: "web_search", arguments: { stripped: true } }, + ], + usage: { input: 10, output: 5, totalTokens: 15 }, + stopReason: "tool_use", + }); + assert.deepEqual(secondRequest.content.messages?.at(-1), { role: "toolResult", content: { stripped: true } }); + assert.equal(secondResponse.content, "Final answer."); + assert.equal(secondResponse.openclaw.duration_ms, 55); + assert.deepEqual(secondResponse.usage, { + prompt_tokens: 20, + completion_tokens: 7, + total_tokens: 27, + }); + }); + + it("uses model_call timestamps for recorded assistant message spans", () => { + const now = Date.now; + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + try { + Date.now = () => 1_000; + backend.onModelCallStarted(modelStarted("call-1"), { runId: "run-1", sessionId: "session-1" }); + Date.now = () => 1_250; + backend.onModelCallEnded(modelEnded("call-1", 250), { runId: "run-1", sessionId: "session-1" }); + Date.now = () => 1_260; + backend.onBeforeMessageWrite( + { message: { role: "assistant", provider: "openai", model: "gpt-4", content: "hi" } }, + { sessionKey: "session-1" }, + ); + Date.now = () => 2_000; + backend.onAgentEnd( + { + runId: "run-1", + messages: [ + { role: "user", content: "hello" }, + { role: "assistant", provider: "openai", model: "gpt-4", content: "hi" }, + ], + success: true, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + } finally { + Date.now = now; + } + + assert.equal(nf.calls.llmCall[0]?.timestamp, 1_000_000); + assert.equal(nf.calls.llmCallEnd[0]?.timestamp, 1_250_000); + assert.equal(nf.calls.pushScope[0]?.timestamp, 1_000_000); + }); + + it("suppresses collapsed llm_output after recorded assistant message replay", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + backend.onModelCallEnded(modelEnded("call-1", 42), { runId: "run-1", sessionId: "session-1" }); + backend.onBeforeMessageWrite( + { message: { role: "assistant", provider: "openai", model: "gpt-4", content: "hi" } }, + { sessionKey: "session-1" }, + ); + backend.onAgentEnd( + { + runId: "run-1", + messages: [ + { role: "user", content: "hello" }, + { role: "assistant", provider: "openai", model: "gpt-4", content: "hi" }, + ], + success: true, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + backend.onLlmOutput(llmOutput(), { runId: "run-1", sessionId: "session-1" }); + + assert.equal(nf.calls.llmCall.length, 1); + assert.equal(nf.calls.llmCallEnd.length, 1); + assert.equal(backend.state().llmInputs.size, 0); + }); + + it("replays multiple llm_output hooks from the same run", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onLlmInput({ ...llmInput(), prompt: "first" }, { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput({ ...llmOutput(), assistantTexts: ["first answer"] }, { runId: "run-1", sessionId: "session-1" }); + backend.onLlmInput({ ...llmInput(), prompt: "second" }, { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput({ ...llmOutput(), assistantTexts: ["second answer"] }, { runId: "run-1", sessionId: "session-1" }); + + assert.equal(nf.calls.llmCall.length, 2); + assert.equal(nf.calls.llmCallEnd.length, 2); + assert.equal((nf.calls.llmCallEnd[0]?.response as ReplayResponse).content, "first answer"); + assert.equal((nf.calls.llmCallEnd[1]?.response as ReplayResponse).content, "second answer"); + }); + + it("does not reconstruct agent_end transcripts without reliable message-write state", () => { + const transcriptOnlyNf = createNemoFlowRuntime(); + const transcriptOnlyBackend = createBackend(transcriptOnlyNf); + + transcriptOnlyBackend.onAgentEnd( + { + runId: "run-1", + messages: [ + { role: "user", content: "current question" }, + { role: "assistant", provider: "openai", model: "gpt-4", content: "current answer" }, + ], + success: true, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + assert.equal(transcriptOnlyNf.calls.llmCall.length, 0); + assert.equal(transcriptOnlyNf.calls.llmCallEnd.length, 0); + + const compactedNf = createNemoFlowRuntime(); + const compactedBackend = createBackend(compactedNf); + + compactedBackend.onLlmInput( + { + ...llmInput(), + prompt: "current question", + historyMessages: [ + { role: "user", content: "previous question 1" }, + { role: "assistant", content: "previous answer 1" }, + ], + }, + { runId: "run-1", sessionId: "session-1" }, + ); + compactedBackend.onAgentEnd( + { + runId: "run-1", + messages: [{ role: "assistant", provider: "openai", model: "gpt-4", content: "previous answer" }], + success: true, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + assert.equal(compactedNf.calls.llmCall.length, 0); + assert.equal(compactedNf.calls.llmCallEnd.length, 0); + }); + + it("replays compacted message-write turns from the latest llm input snapshot", () => { + const now = Date.now; + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + try { + Date.now = () => 1_000; + backend.onLlmInput( + { ...llmInput(), runId: "old-run", prompt: "old question" }, + { runId: "old-run", sessionId: "session-1" }, + ); + Date.now = () => 2_000; + backend.onLlmInput( + { ...llmInput(), runId: "run-1", prompt: "current question" }, + { runId: "run-1", sessionId: "session-1" }, + ); + } finally { + Date.now = now; + } + + backend.onModelCallEnded(modelEnded("call-1", 42), { runId: "run-1", sessionId: "session-1" }); + backend.onBeforeMessageWrite( + { message: { role: "assistant", provider: "openai", model: "gpt-4", content: "current answer" } }, + { sessionKey: "session-1" }, + ); + backend.onAgentEnd( + { + runId: "run-1", + messages: [ + { role: "assistant", provider: "openai", model: "gpt-4", content: "compacted previous answer" }, + { role: "user", content: "current question" }, + { role: "assistant", provider: "openai", model: "gpt-4", content: "current answer" }, + ], + success: true, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + + const request = nf.calls.llmCall[0]?.request as ReplayRequest; + assert.deepEqual(request.content.messages, [{ role: "user", content: "current question" }]); + assert.equal((nf.calls.llmCallEnd[0]?.response as ReplayResponse).content, "current answer"); + }); + + it("does not duplicate trajectory replay across llm_output, message-write, and late hooks", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf); + + backend.onLlmInput(llmInput(), { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput(llmOutput(), { runId: "run-1", sessionId: "session-1" }); + backend.onModelCallEnded(modelEnded("call-1", 42), { runId: "run-1", sessionId: "session-1" }); + backend.onBeforeMessageWrite( + { message: { role: "assistant", provider: "openai", model: "gpt-4", content: "Final answer." } }, + { sessionKey: "session-1" }, + ); + backend.onAgentEnd( + { + runId: "run-1", + messages: [ + { role: "user", content: "hello" }, + { role: "assistant", provider: "openai", model: "gpt-4", content: "hi" }, + { role: "tool", content: "tool result" }, + { role: "assistant", provider: "openai", model: "gpt-4", content: "Final answer." }, + ], + success: true, + }, + { runId: "run-1", sessionId: "session-1" }, + ); + backend.onLlmInput({ ...llmInput(), prompt: "late duplicate" }, { runId: "run-1", sessionId: "session-1" }); + backend.onLlmOutput({ ...llmOutput(), assistantTexts: ["late duplicate"] }, { runId: "run-1", sessionId: "session-1" }); + + assert.equal(nf.calls.llmCall.length, 1); + assert.equal(nf.calls.llmCallEnd.length, 1); + assert.equal((nf.calls.llmCallEnd[0]?.response as ReplayResponse).content, "hi"); + }); + + it("bounds replayed run markers for long-lived sessions", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { maxRecordsPerKey: 2 }); + + for (const runId of ["run-1", "run-2", "run-3"]) { + backend.onLlmInput({ ...llmInput(), runId }, { runId, sessionId: "session-1" }); + backend.onLlmOutput({ ...llmOutput(), runId }, { runId, sessionId: "session-1" }); + backend.onAgentEnd( + { + runId, + messages: [ + { role: "user", content: "hello" }, + { role: "assistant", provider: "openai", model: "gpt-4", content: "hi" }, + ], + success: true, + }, + { runId, sessionId: "session-1" }, + ); + } + + const session = backend.state().sessions.get("session-1"); + assert.deepEqual([...(session?.trajectoryReplayedRuns ?? [])], ["run-2", "run-3"]); + }); + + it("bounds run bookkeeping for long-lived sessions without agent_end", () => { + const nf = createNemoFlowRuntime(); + const backend = createBackend(nf, { maxRecordsPerKey: 2 }); + + for (const runId of ["run-1", "run-2", "run-3"]) { + backend.onLlmInput( + { + ...llmInput(), + runId, + prompt: `prompt for ${runId}`, + }, + { runId, sessionId: "session-1" }, + ); + backend.onLlmOutput({ ...llmOutput(), runId }, { runId, sessionId: "session-1" }); + } + + const session = backend.state().sessions.get("session-1"); + assert.deepEqual([...(session?.agentRunInputSnapshots?.keys() ?? [])], ["run-2", "run-3"]); + assert.deepEqual([...(session?.hookLlmOutputReplayCounts?.keys() ?? [])], ["run-2", "run-3"]); + }); + it("emits unpaired mark for model_call_started without matching end on session drain", async () => { const nf = createNemoFlowRuntime(); const backend = createBackend(nf); @@ -315,7 +698,7 @@ describe("LLM replay", () => { provider: "openai", model: "gpt-4", prompt: "hello", - historyMessages: [{ role: "user", content: "hello" }], + historyMessages: [{ role: "user", content: [{ type: "text", text: "hello" }] }], imagesCount: 0, }, { runId: "run-1", sessionId: "session-1" }, @@ -323,7 +706,7 @@ describe("LLM replay", () => { backend.onLlmOutput(llmOutput(), { runId: "run-1", sessionId: "session-1" }); const request = nf.calls.llmCall[0]?.request as ReplayRequest; - assert.deepEqual(request.content.messages, [{ role: "user", content: "hello" }]); + assert.deepEqual(request.content.messages, [{ role: "user", content: [{ type: "text", text: "hello" }] }]); }); it("evicts stale expanded correlation records by TTL", () => { @@ -390,19 +773,30 @@ type ReplayRequest = { type ReplayResponse = { content?: string; assistant_texts_count?: number; - token_usage?: Record; usage?: Record; openclaw: Record; }; +type ResponseOpenClaw = { + assistant_tool_call_names?: string[]; + duration_ms?: number; + [key: string]: unknown; +}; + type TestNemoFlowRuntime = NemoFlowRuntimeModule & { calls: { - pushScope: Array<{ name: string; scopeType: number; data: unknown }>; + pushScope: Array<{ name: string; scopeType: number; data: unknown; timestamp: number | null | undefined }>; popScope: Array<{ handle: unknown; output: unknown }>; event: Array<{ name: string; handle: unknown; data: unknown }>; setThreadScopeStack: unknown[]; - llmCall: Array<{ name: string; request: unknown; modelName: string | null | undefined; timestamp: number | null | undefined }>; - llmCallEnd: Array<{ handle: unknown; response: unknown; timestamp: number | null | undefined }>; + llmCall: Array<{ + name: string; + request: unknown; + data: unknown; + modelName: string | null | undefined; + timestamp: number | null | undefined; + }>; + llmCallEnd: Array<{ handle: unknown; response: unknown; data: unknown; timestamp: number | null | undefined }>; toolCall: Array<{ name: string; args: unknown }>; toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown }>; }; @@ -455,19 +849,20 @@ function createNemoFlowRuntime(): TestNemoFlowRuntime { createScopeStack: () => ({ id: `stack-${nextScopeId++}` }) as unknown as ReturnType, currentScopeStack: () => previousStack as unknown as ReturnType, setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), - pushScope: (name, scopeType, _handle, _attributes, data) => { + pushScope: (name, scopeType, _handle, _attributes, data, _links, _metadata, timestamp) => { const handle = { id: `scope-${nextScopeId++}` }; - calls.pushScope.push({ name, scopeType, data }); + calls.pushScope.push({ name, scopeType, data, timestamp }); return handle as unknown as ReturnType; }, popScope: (handle, output) => calls.popScope.push({ handle, output }), event: (name, handle, data) => calls.event.push({ name, handle, data }), - llmCall: (name, request, _handle, _attributes, _data, _metadata, modelName, timestamp) => { + llmCall: (name, request, _handle, _attributes, data, _metadata, modelName, timestamp) => { const handle = { id: `llm-${nextScopeId++}` }; - calls.llmCall.push({ name, request, modelName, timestamp }); + calls.llmCall.push({ name, request, data, modelName, timestamp }); return handle as unknown as ReturnType; }, - llmCallEnd: (handle, response, _data, _metadata, timestamp) => calls.llmCallEnd.push({ handle, response, timestamp }), + llmCallEnd: (handle, response, data, _metadata, timestamp) => + calls.llmCallEnd.push({ handle, response, data, timestamp }), toolCall: (name, args) => { const handle = { id: `tool-${nextScopeId++}` }; calls.toolCall.push({ name, args }); diff --git a/integrations/openclaw/src/__tests__/tool-replay.test.ts b/integrations/openclaw/src/__tests__/tool-replay.test.ts index e899ee97..d5a12b7d 100644 --- a/integrations/openclaw/src/__tests__/tool-replay.test.ts +++ b/integrations/openclaw/src/__tests__/tool-replay.test.ts @@ -33,10 +33,19 @@ describe("Tool replay", () => { stripped: true, argKeys: ["path", "token"], }); + assert.equal(nf.calls.toolCall[0]?.data, null); assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { - stripped: true, - hasError: false, + content: "Tool read_file completed.", + openclaw: { + toolName: "read_file", + toolCallId: "tool-call-1", + durationMs: 7, + hasError: false, + stripped: true, + resultKeys: ["text"], + }, }); + assert.equal(nf.calls.toolCallEnd[0]?.data, null); }); it("captures full tool payloads only when trusted config opts in", () => { @@ -61,7 +70,19 @@ describe("Tool replay", () => { ); assert.deepEqual(nf.calls.toolCall[0]?.args, { path: "/workspace/file.txt" }); - assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { result: { text: "ok" } }); + assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { + content: "Tool read_file completed.", + openclaw: { + toolName: "read_file", + toolCallId: "tool-call-1", + durationMs: 7, + hasError: false, + stripped: false, + resultKeys: ["text"], + }, + result: { text: "ok" }, + }); + assert.equal(nf.calls.toolCallEnd[0]?.data, null); }); it("passes non-null tool end payload when result and error are missing", () => { @@ -82,8 +103,17 @@ describe("Tool replay", () => { { runId: "run-1", sessionId: "session-1", toolCallId: "tool-call-1" }, ); - assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { result: null }); - assert.deepEqual(nf.calls.toolCallEnd[0]?.data, { result: null }); + assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { + content: "Tool noop completed.", + openclaw: { + toolName: "noop", + toolCallId: "tool-call-1", + hasError: false, + stripped: false, + }, + result: null, + }); + assert.equal(nf.calls.toolCallEnd[0]?.data, null); }); it("emits blocked tool mark instead of successful tool span", () => { @@ -115,7 +145,7 @@ type TestNemoFlowRuntime = NemoFlowRuntimeModule & { setThreadScopeStack: unknown[]; llmCall: Array<{ name: string; request: unknown }>; llmCallEnd: Array<{ handle: unknown; response: unknown }>; - toolCall: Array<{ name: string; args: unknown }>; + toolCall: Array<{ name: string; args: unknown; data: unknown }>; toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown }>; }; }; @@ -180,9 +210,9 @@ function createNemoFlowRuntime(): TestNemoFlowRuntime { return handle as unknown as ReturnType; }, llmCallEnd: (handle, response) => calls.llmCallEnd.push({ handle, response }), - toolCall: (name, args) => { + toolCall: (name, args, _handle, _attributes, data) => { const handle = { id: `tool-${nextScopeId++}` }; - calls.toolCall.push({ name, args }); + calls.toolCall.push({ name, args, data }); return handle as unknown as ReturnType; }, toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), diff --git a/integrations/openclaw/src/hook-replay/llm.ts b/integrations/openclaw/src/hook-replay/llm.ts index 1a633352..631aa860 100644 --- a/integrations/openclaw/src/hook-replay/llm.ts +++ b/integrations/openclaw/src/hook-replay/llm.ts @@ -4,6 +4,9 @@ import type { NemoFlowHookBackendConfig } from "../config.js"; import type { PluginHookAgentContext, + PluginHookAgentEndEvent, + PluginHookBeforeMessageWriteContext, + PluginHookBeforeMessageWriteEvent, PluginHookLlmInputEvent, PluginHookLlmOutputEvent, PluginHookModelCallEndedEvent, @@ -15,6 +18,7 @@ import { evictExpiredCorrelationRecords, ensureSession, insertBoundedRecord, + resolveSessionKey, type LlmInputRecord, type ModelCallRecord, type PendingLlmOutputRecord, @@ -46,6 +50,17 @@ export function recordLlmInput( return; } + if (hasTrajectoryReplay(session, event.runId)) { + return; + } + + rememberAgentRunInputSnapshot( + session, + event.runId, + event.historyMessages, + event.prompt, + manager.config.correlation.maxRecordsPerKey, + ); const key = llmKey(event); const input = createInputRecord(session, event); insertBoundedRecord(manager.state.llmInputs, key, input, manager.config.correlation.maxRecordsPerKey); @@ -84,6 +99,11 @@ export function recordLlmOutput( } const key = llmKey(event); + if (hasTrajectoryReplay(session, event.runId)) { + shiftOldest(manager.state.llmInputs, key, (record) => record.sessionKey === session.sessionId); + return; + } + const input = shiftOldest(manager.state.llmInputs, key, (record) => record.sessionKey === session.sessionId); if (input) { replayLlmOutput({ @@ -114,18 +134,77 @@ export function recordLlmOutput( insertPendingOutput(manager, key, pending); } +export function recordBeforeMessageWrite( + manager: SessionManager, + event: PluginHookBeforeMessageWriteEvent, + ctx: PluginHookBeforeMessageWriteContext, +): void { + evictExpiredReplayRecords(manager); + const session = existingSessionForMessageWrite(manager, event, ctx); + if (!session) { + return; + } + + const message = isRecord(event.message) ? event.message : undefined; + if (!message || typeof message.role !== "string") { + return; + } + const recordedMessage = toJsonValue(message); + const historyMessages = + session.messageWrites === undefined || session.messageWrites.length === 0 + ? initialHistoryFromLlmInputSnapshot(session) + : [...session.messageWrites]; + if ((session.messageWrites === undefined || session.messageWrites.length === 0) && historyMessages.length > 0) { + session.messageWrites = [...historyMessages]; + } + + if (message.role === "assistant") { + const provider = stringField(message, "provider"); + const model = stringField(message, "model"); + const assistantTexts = extractTextBlocks(message); + const assistantToolCalls = snapshotMessages(extractToolCalls(message)); + const usage = "usage" in message ? toJsonValue(message.usage) : undefined; + if (provider && model && (assistantTexts.length > 0 || assistantToolCalls.length > 0 || usage !== undefined)) { + session.assistantMessageWrites ??= []; + session.assistantMessageWrites.push({ + sessionKey: session.sessionId, + provider, + model, + assistantTexts, + assistantToolCalls, + historyMessages, + prompt: "", + observedAtMs: Date.now(), + replayed: false, + ...(usage === undefined ? {} : { usage }), + }); + while (session.assistantMessageWrites.length > manager.config.correlation.maxRecordsPerKey) { + session.assistantMessageWrites.shift(); + } + } + } + + session.messageWrites ??= []; + session.messageWrites.push(recordedMessage); + while (session.messageWrites.length > manager.config.correlation.maxRecordsPerKey) { + session.messageWrites.shift(); + } +} + export function recordModelCallStarted( manager: SessionManager, event: PluginHookModelCallStartedEvent, ctx: PluginHookAgentContext, ): void { evictExpiredReplayRecords(manager); + const nowMs = Date.now(); const session = ensureSession(manager, { sessionId: event.sessionId ?? ctx.sessionId, sessionKey: event.sessionKey ?? ctx.sessionKey, runId: event.runId, agentId: ctx.agentId, source: "lazy_session", + timestamp: nowMs * 1000, }); if (!session) { return; @@ -142,8 +221,8 @@ export function recordModelCallStarted( provider: event.provider, model: event.model, consumed: false, - observedAtMs: Date.now(), - startedAtMs: Date.now(), + observedAtMs: nowMs, + startedAtMs: nowMs, ...(event.api === undefined ? {} : { api: event.api }), ...(event.transport === undefined ? {} : { transport: event.transport }), }, @@ -157,18 +236,20 @@ export function recordModelCallEnded( ctx: PluginHookAgentContext, ): void { evictExpiredReplayRecords(manager); + const nowMs = Date.now(); + const startMicros = startMicrosFromDuration(nowMs * 1000, event.durationMs) ?? nowMs * 1000; const session = ensureSession(manager, { sessionId: event.sessionId ?? ctx.sessionId, sessionKey: event.sessionKey ?? ctx.sessionKey, runId: event.runId, agentId: ctx.agentId, source: "lazy_session", + timestamp: startMicros, }); if (!session) { return; } - const nowMs = Date.now(); const byCallKey = modelTimingKey(event); const existing = latestUnendedRecord(manager.state.modelCallsByCallId.get(byCallKey), session); const record = @@ -217,6 +298,9 @@ export function replayPendingLlmOutputsForSession( continue; } clearPendingTimer(record); + if (hasTrajectoryReplay(session, record.runId)) { + continue; + } replayLlmOutput({ manager, event: record.event, @@ -233,6 +317,38 @@ export function replayPendingLlmOutputsForSession( } } +export function replayAgentEndMessages( + manager: SessionManager, + event: PluginHookAgentEndEvent, + ctx: PluginHookAgentContext, + session: SessionState, +): JsonRecord | undefined { + const runId = event.runId ?? ctx.runId; + const runKey = trajectoryRunKey(session, runId); + const currentRunMessages = currentRunAgentMessages(session, runId, event.messages); + const finalOutput = finalOutputFromAgentEnd(currentRunMessages, event, runId); + if (hasTrajectoryReplay(session, runId)) { + return finalOutput; + } + + const replayedFromHooks = hookLlmOutputReplayCount(session, runId); + if (replayedFromHooks > 0) { + markTrajectoryReplay(session, runKey, manager.config.correlation.maxRecordsPerKey); + cleanupAgentRunReplayBookkeeping(session, runKey); + return finalOutput; + } + + const replayedFromMessageWrites = replayAssistantMessageWrites(manager, session, event, ctx); + if (replayedFromMessageWrites > 0) { + markTrajectoryReplay(session, runKey, manager.config.correlation.maxRecordsPerKey); + cleanupAgentRunReplayBookkeeping(session, runKey); + return finalOutput; + } + + cleanupAgentRunReplayBookkeeping(session, runKey); + return finalOutput; +} + export function emitUnpairedModelCallTimingMarks(manager: SessionManager, session: SessionState): void { for (const records of manager.state.modelCallsByCallId.values()) { for (const record of records) { @@ -244,23 +360,36 @@ export function emitUnpairedModelCallTimingMarks(manager: SessionManager, sessio } } + const unpairedEnded: ModelCallRecord[] = []; for (const records of manager.state.modelTimingsByLlmKey.values()) { for (const record of records) { if (record.sessionKey !== session.sessionId || record.consumed) { continue; } - emitModelTimingMark(manager, session, "openclaw.model_call_timing_unpaired", record); + unpairedEnded.push(record); record.consumed = true; } } + if (unpairedEnded.length === 1) { + const [record] = unpairedEnded; + if (record) { + emitModelTimingMark(manager, session, "openclaw.model_call_timing_unpaired", record); + } + } else if (unpairedEnded.length > 1) { + emitModelTimingSummaryMark(manager, session, unpairedEnded); + } } export function buildReplayLlmRequest( input: LlmInputRecord, output: PluginHookLlmOutputEvent, config: NemoFlowHookBackendConfig, + source = "openclaw.hooks", ): JsonValue { - const messages = config.capture.includePrompts && Array.isArray(input.historyMessages) ? [...input.historyMessages] : []; + const messages = + config.capture.includePrompts && Array.isArray(input.historyMessages) + ? input.historyMessages.map((message) => sanitizePromptMessage(message, config)) + : []; const replayMessages = config.capture.includePrompts ? appendPromptIfMissing(messages, input.prompt) : []; return toJsonValue({ headers: {}, @@ -272,7 +401,7 @@ export function buildReplayLlmRequest( messages: replayMessages, imagesCount: input.imagesCount, placeholderRequest: input.placeholderRequest === true, - source: "openclaw.hooks", + source, }, }); } @@ -283,14 +412,16 @@ export function buildReplayLlmResponse( config: NemoFlowHookBackendConfig, ): JsonValue { const usage = mapUsage(event.usage); + const assistantToolCallNames = toolCallNames(event.assistantToolCalls); return toJsonValue({ role: "assistant", - content: config.capture.includeResponses ? event.assistantTexts.join("\n") : undefined, + content: config.capture.includeResponses + ? responseContent(event.assistantTexts, assistantToolCallNames) + : undefined, assistant_texts_count: event.assistantTexts.length, resolved_ref: event.resolvedRef, harness_id: event.harnessId, usage, - token_usage: usage, openclaw: { duration_ms: timing?.durationMs, outcome: timing?.outcome, @@ -300,6 +431,7 @@ export function buildReplayLlmResponse( request_payload_bytes: timing?.requestPayloadBytes, response_stream_bytes: timing?.responseStreamBytes, upstream_request_id_hash: timing?.upstreamRequestIdHash, + assistant_tool_call_names: assistantToolCallNames, }, }); } @@ -318,6 +450,9 @@ function replayExpiredPendingOutput( manager.state.counters.skippedEvents += 1; return; } + if (hasTrajectoryReplay(session, record.runId)) { + return; + } replayLlmOutput({ manager, event: record.event, @@ -340,30 +475,38 @@ function replayLlmOutput(params: { ctx: PluginHookAgentContext; input: LlmInputRecord; timing?: ModelCallRecord | undefined; + source?: "openclaw.llm_output" | "openclaw.before_message_write" | undefined; }): void { - const { manager, event, ctx, input, timing } = params; + const { manager, event, ctx, input, timing, source = "openclaw.llm_output" } = params; + const observedEndMicros = nowMicros(); + const endMicros = timing?.endedAtMs === undefined ? observedEndMicros : timing.endedAtMs * 1000; + const observedStartMicros = Math.min(input.observedAtMs * 1000, endMicros); + const startMicros = + timing?.startedAtMs === undefined + ? (startMicrosFromDuration(endMicros, timing?.durationMs) ?? observedStartMicros) + : Math.min(timing.startedAtMs * 1000, endMicros); const session = ensureSession(manager, { sessionId: event.sessionId, sessionKey: ctx.sessionKey, runId: event.runId, agentId: ctx.agentId, source: "lazy_session", + timestamp: startMicros, }); if (!session) { return; } - const endMicros = nowMicros(); - const observedStartMicros = Math.min(input.observedAtMs * 1000, endMicros); - const startMicros = startMicrosFromDuration(endMicros, timing?.durationMs) ?? observedStartMicros; - const request = buildReplayLlmRequest(input, event, manager.config); + const request = buildReplayLlmRequest(input, event, manager.config, source); const response = buildReplayLlmResponse(event, timing, manager.config); const metadata = toJsonRecord({ - source: "openclaw.llm_output", + source, runId: event.runId, sessionId: event.sessionId, provider: event.provider, model: event.model, + callId: timing?.callId, + correlation: source === "openclaw.before_message_write" ? "fifo_model_call_timing" : undefined, }); manager.emitCapturedUnderSession("llm_output", session, () => { @@ -372,14 +515,94 @@ function replayLlmOutput(params: { request, session.rootHandle, null, - metadata, + null, metadata, event.model, startMicros, ); - manager.nf.llmCallEnd(handle, response, response, metadata, endMicros); + manager.nf.llmCallEnd(handle, response, null, metadata, endMicros); manager.state.counters.llmSpansReplayed += 1; }); + if (source === "openclaw.llm_output") { + incrementHookLlmOutputReplayCount(session, event.runId, manager.config.correlation.maxRecordsPerKey); + } +} + +function replayAssistantMessageWrites( + manager: SessionManager, + session: SessionState, + event: PluginHookAgentEndEvent, + ctx: PluginHookAgentContext, +): number { + const records = session.assistantMessageWrites ?? []; + const pending = records.filter((record) => !record.replayed); + let replayed = 0; + + for (const record of pending) { + const timing = consumeNextTimingCandidate(manager, session, { + runId: event.runId ?? ctx.runId, + provider: record.provider, + model: record.model, + }); + if (!timing) { + continue; + } + + const runId = timing.runId || event.runId || ctx.runId || session.sessionId; + const usage = mapHookUsage(record.usage); + replayLlmOutput({ + manager, + event: { + runId, + sessionId: session.sessionId, + provider: record.provider, + model: record.model, + assistantTexts: record.assistantTexts, + assistantToolCalls: record.assistantToolCalls, + ...(usage === undefined ? {} : { usage }), + }, + ctx, + input: { + sessionKey: session.sessionId, + sessionId: session.sessionId, + runId, + provider: record.provider, + model: record.model, + prompt: record.prompt, + historyMessages: record.historyMessages, + imagesCount: 0, + observedAtMs: record.observedAtMs, + placeholderRequest: true, + }, + timing, + source: "openclaw.before_message_write", + }); + record.replayed = true; + replayed += 1; + } + + session.assistantMessageWrites = []; + return replayed; +} + +function consumeNextTimingCandidate( + manager: SessionManager, + session: SessionState, + input: { runId?: string | undefined; provider: string; model: string }, +): ModelCallRecord | undefined { + const key = modelTimingLlmKey({ + sessionId: session.sessionId, + runId: input.runId, + provider: input.provider, + model: input.model, + }); + const records = manager.state.modelTimingsByLlmKey.get(key) ?? []; + const candidate = records.find((record) => record.sessionKey === session.sessionId && !record.consumed); + if (!candidate) { + return undefined; + } + candidate.consumed = true; + return candidate; } function consumeTimingCandidate( @@ -472,6 +695,25 @@ function emitModelTimingMark( }); } +function emitModelTimingSummaryMark( + manager: SessionManager, + session: SessionState, + records: ModelCallRecord[], +): void { + manager.emitCapturedUnderSession("model_call_timing_unmatched", session, () => { + emitMark({ + nf: manager.nf, + state: manager.state, + session, + name: "openclaw.model_call_timing_unmatched", + data: toJsonRecord({ + count: records.length, + sampleCallIds: records.slice(0, 5).map((record) => record.callId), + }), + }); + }); +} + function createInputRecord(session: SessionState, event: PluginHookLlmInputEvent): LlmInputRecord { return { sessionKey: session.sessionId, @@ -480,13 +722,24 @@ function createInputRecord(session: SessionState, event: PluginHookLlmInputEvent provider: event.provider, model: event.model, prompt: event.prompt, - historyMessages: event.historyMessages, + historyMessages: snapshotMessages(event.historyMessages), imagesCount: event.imagesCount, observedAtMs: Date.now(), ...(event.systemPrompt === undefined ? {} : { systemPrompt: event.systemPrompt }), }; } +function existingSessionForMessageWrite( + manager: SessionManager, + event: PluginHookBeforeMessageWriteEvent, + ctx: PluginHookBeforeMessageWriteContext, +): SessionState | undefined { + const key = resolveSessionKey(manager.state, { + sessionKey: event.sessionKey ?? ctx.sessionKey, + }); + return key === undefined ? undefined : manager.state.sessions.get(key); +} + function placeholderInputRecord(record: PendingLlmOutputRecord): LlmInputRecord { return { sessionKey: record.sessionKey, @@ -507,41 +760,384 @@ function appendPromptIfMissing(historyMessages: unknown[], prompt: string): unkn return historyMessages; } const last = historyMessages.at(-1); - if (isRecord(last) && last.role === "user" && last.content === prompt) { + if (isRecord(last) && last.role === "user" && extractTextBlocks(last).join("\n") === prompt) { return historyMessages; } return [...historyMessages, { role: "user", content: prompt }]; } -function mapUsage(usage: PluginHookLlmOutputEvent["usage"]): Record | undefined { - if (!usage) { +function sanitizePromptMessage(message: unknown, config: NemoFlowHookBackendConfig): unknown { + if (!isRecord(message)) { + return message; + } + + let sanitized: Record = { ...message }; + if ((sanitized.role === "tool" || sanitized.role === "toolResult") && config.capture.stripToolResults) { + sanitized = { ...sanitized, content: { stripped: true } }; + } + if (sanitized.role === "assistant" && config.capture.stripToolArgs) { + sanitized = stripAssistantToolArgs(sanitized); + } else if (Array.isArray(sanitized.content)) { + sanitized = { ...sanitized, content: sanitized.content.map(stripLargeAssistantContentFields) }; + } + return sanitized; +} + +function stripAssistantToolArgs(message: Record): Record { + const stripped: Record = { ...message }; + if (Array.isArray(stripped.toolCalls)) { + stripped.toolCalls = stripped.toolCalls.map(stripToolCallArgs); + } + if (Array.isArray(stripped.tool_calls)) { + stripped.tool_calls = stripped.tool_calls.map(stripToolCallArgs); + } + if (Array.isArray(stripped.content)) { + stripped.content = stripped.content.map((item) => + isToolCallLike(item) ? stripToolCallArgs(item) : stripLargeAssistantContentFields(item), + ); + } + return stripped; +} + +function stripToolCallArgs(value: unknown): unknown { + if (!isRecord(value)) { + return value; + } + const stripped: Record = { ...value }; + for (const key of ["args", "arguments", "input", "params"]) { + if (stripped[key] !== undefined) { + stripped[key] = { stripped: true }; + } + } + return stripped; +} + +function stripLargeAssistantContentFields(value: unknown): unknown { + if (!isRecord(value)) { + return value; + } + if (value.type === "thinking") { + return { type: "thinking", stripped: true }; + } + const stripped: Record = { ...value }; + if (stripped.thinking !== undefined) { + stripped.thinking = { stripped: true }; + } + if (stripped.thinkingSignature !== undefined) { + stripped.thinkingSignature = { stripped: true }; + } + return stripped; +} + +function responseContent(assistantTexts: string[], assistantToolCallNames: string[]): string | undefined { + const text = assistantTexts.join("\n").trim(); + if (text.length > 0) { + return text; + } + if (assistantToolCallNames.length > 0) { + return `tool calls: ${assistantToolCallNames.join(", ")}`; + } + return undefined; +} + +function lastAssistantText(messages: unknown[]): string | undefined { + for (let index = messages.length - 1; index >= 0; index -= 1) { + const message = messages[index]; + if (!isRecord(message) || message.role !== "assistant") { + continue; + } + const text = extractTextBlocks(message).join("\n").trim(); + if (text.length > 0) { + return text; + } + } + return undefined; +} + +function finalOutputFromAgentEnd( + messages: unknown[], + event: PluginHookAgentEndEvent, + runId?: string, +): JsonRecord | undefined { + const lastText = lastAssistantText(messages); + if (lastText) { + return toJsonRecord({ + content: lastText, + source: "openclaw.agent_end", + runId, + success: event.success, + }); + } + if (event.error) { + return toJsonRecord({ + source: "openclaw.agent_end", + runId, + success: event.success, + error: event.error, + }); + } + return undefined; +} + +function extractTextBlocks(message: Record): string[] { + const content = message.content; + if (typeof content === "string" && content.length > 0) { + return [content]; + } + if (!Array.isArray(content)) { + return []; + } + const texts: string[] = []; + for (const item of content) { + if (typeof item === "string") { + texts.push(item); + } else if (isRecord(item) && typeof item.text === "string") { + texts.push(item.text); + } + } + return texts; +} + +function extractToolCalls(message: Record): unknown[] { + if (Array.isArray(message.toolCalls)) { + return message.toolCalls; + } + if (Array.isArray(message.tool_calls)) { + return message.tool_calls; + } + const content = message.content; + if (!Array.isArray(content)) { + return []; + } + return content.filter( + (item) => isToolCallLike(item), + ); +} + +function isToolCallLike(value: unknown): boolean { + return ( + isRecord(value) && + (value.type === "toolCall" || + value.type === "tool_use" || + value.type === "tool-call" || + value.toolName !== undefined || + value.name !== undefined) + ); +} + +function toolCallNames(toolCalls: unknown[] | undefined): string[] { + if (!Array.isArray(toolCalls)) { + return []; + } + const names: string[] = []; + for (const toolCall of toolCalls) { + if (!isRecord(toolCall)) { + continue; + } + const name = + stringField(toolCall, "name") ?? + stringField(toolCall, "toolName") ?? + stringField(toolCall, "functionName"); + if (name) { + names.push(name); + } + } + return names; +} + +function mapHookUsage(usage: unknown): PluginHookLlmOutputEvent["usage"] | undefined { + const mapped = mapUsage(usage); + if (!mapped) { + return undefined; + } + const hookUsage: NonNullable = {}; + if (mapped.prompt_tokens !== undefined) { + hookUsage.input = mapped.prompt_tokens; + } + if (mapped.completion_tokens !== undefined) { + hookUsage.output = mapped.completion_tokens; + } + if (mapped.cache_read_tokens !== undefined) { + hookUsage.cacheRead = mapped.cache_read_tokens; + } + if (mapped.cache_write_tokens !== undefined) { + hookUsage.cacheWrite = mapped.cache_write_tokens; + } + if (mapped.total_tokens !== undefined) { + hookUsage.total = mapped.total_tokens; + } + if (mapped.cost_usd !== undefined) { + hookUsage.cost = { total: mapped.cost_usd }; + } + return Object.keys(hookUsage).length > 0 ? hookUsage : undefined; +} + +function hasTrajectoryReplay(session: SessionState, runId?: string): boolean { + return session.trajectoryReplayedRuns?.has(trajectoryRunKey(session, runId)) === true; +} + +function rememberAgentRunInputSnapshot( + session: SessionState, + runId: string | undefined, + historyMessages: unknown[], + prompt: string, + maxSnapshots: number, +): void { + const runKey = trajectoryRunKey(session, runId); + session.agentRunInputSnapshots ??= new Map(); + if (!session.agentRunInputSnapshots.has(runKey)) { + session.agentRunInputSnapshots.set(runKey, { + historyMessageCount: historyMessages.length, + historyMessages: snapshotMessages(historyMessages), + observedAtMs: Date.now(), + prompt, + }); + } + while (session.agentRunInputSnapshots.size > maxSnapshots) { + const oldest = session.agentRunInputSnapshots.keys().next().value; + if (oldest === undefined) { + break; + } + session.agentRunInputSnapshots.delete(oldest); + } +} + +function snapshotMessages(messages: unknown[]): unknown[] { + const snapshot = toJsonValue(messages); + return Array.isArray(snapshot) ? snapshot : []; +} + +function initialHistoryFromLlmInputSnapshot(session: SessionState): unknown[] { + let snapshot: { historyMessages: unknown[]; observedAtMs: number; prompt: string } | undefined; + for (const current of session.agentRunInputSnapshots?.values() ?? []) { + if (!snapshot || current.observedAtMs > snapshot.observedAtMs) { + snapshot = current; + } + } + if (!snapshot) { + return []; + } + return appendPromptIfMissing([...snapshot.historyMessages], snapshot.prompt); +} + +function currentRunAgentMessages(session: SessionState, runId: string | undefined, messages: unknown[]): unknown[] { + const inputSnapshot = session.agentRunInputSnapshots?.get(trajectoryRunKey(session, runId)); + if (!inputSnapshot || inputSnapshot.historyMessageCount <= 0) { + return messages; + } + if (inputSnapshot.historyMessageCount <= messages.length) { + return messages.slice(inputSnapshot.historyMessageCount); + } + const promptIndex = findCurrentPromptIndex(messages, inputSnapshot.prompt); + return promptIndex === undefined ? [] : messages.slice(promptIndex); +} + +function findCurrentPromptIndex(messages: unknown[], prompt: string): number | undefined { + if (!prompt) { + return undefined; + } + for (let index = messages.length - 1; index >= 0; index -= 1) { + const message = messages[index]; + if (!isRecord(message) || message.role !== "user") { + continue; + } + if (extractTextBlocks(message).join("\n") === prompt) { + return index; + } + } + return undefined; +} + +function cleanupAgentRunReplayBookkeeping(session: SessionState, runKey: string): void { + session.agentRunInputSnapshots?.delete(runKey); + session.hookLlmOutputReplayCounts?.delete(runKey); +} + +function markTrajectoryReplay(session: SessionState, runKey: string, maxRuns: number): void { + session.trajectoryReplayedRuns ??= new Set(); + session.trajectoryReplayedRuns.delete(runKey); + session.trajectoryReplayedRuns.add(runKey); + while (session.trajectoryReplayedRuns.size > maxRuns) { + const oldest = session.trajectoryReplayedRuns.values().next().value; + if (oldest === undefined) { + break; + } + session.trajectoryReplayedRuns.delete(oldest); + } +} + +function hookLlmOutputReplayCount(session: SessionState, runId?: string): number { + return session.hookLlmOutputReplayCounts?.get(trajectoryRunKey(session, runId)) ?? 0; +} + +function incrementHookLlmOutputReplayCount(session: SessionState, runId: string | undefined, maxRuns: number): void { + const runKey = trajectoryRunKey(session, runId); + session.hookLlmOutputReplayCounts ??= new Map(); + const nextCount = hookLlmOutputReplayCount(session, runId) + 1; + session.hookLlmOutputReplayCounts.delete(runKey); + session.hookLlmOutputReplayCounts.set(runKey, nextCount); + while (session.hookLlmOutputReplayCounts.size > maxRuns) { + const oldest = session.hookLlmOutputReplayCounts.keys().next().value; + if (oldest === undefined) { + break; + } + session.hookLlmOutputReplayCounts.delete(oldest); + } +} + +function trajectoryRunKey(session: SessionState, runId?: string): string { + return runId ?? session.sessionId; +} + +function mapUsage(usage: unknown): Record | undefined { + if (!isRecord(usage)) { return undefined; } const mapped: Record = {}; - if (usage.input !== undefined) { - mapped.prompt_tokens = usage.input; + const input = numberField(usage, "input") ?? numberField(usage, "prompt_tokens"); + const output = numberField(usage, "output") ?? numberField(usage, "completion_tokens"); + const cacheRead = numberField(usage, "cacheRead") ?? numberField(usage, "cache_read_tokens"); + const cacheWrite = numberField(usage, "cacheWrite") ?? numberField(usage, "cache_write_tokens"); + const total = numberField(usage, "total") ?? numberField(usage, "totalTokens") ?? numberField(usage, "total_tokens"); + const totalCanIncludeCompletion = total === undefined || output === undefined || total >= output; + const prompt = total !== undefined && output !== undefined && totalCanIncludeCompletion ? total - output : input; + const totalCanIncludePrompt = total === undefined || prompt === undefined || total >= prompt; + const normalizedTotal = totalCanIncludeCompletion && totalCanIncludePrompt ? total : undefined; + const costTotal = isRecord(usage.cost) ? numberField(usage.cost, "total") : numberField(usage, "cost_usd"); + if (prompt !== undefined) { + mapped.prompt_tokens = prompt; } - if (usage.output !== undefined) { - mapped.completion_tokens = usage.output; + if (output !== undefined) { + mapped.completion_tokens = output; } - if (usage.cacheRead !== undefined) { - mapped.cached_tokens = usage.cacheRead; - mapped.cache_read_tokens = usage.cacheRead; + if (cacheRead !== undefined) { + mapped.cached_tokens = cacheRead; + mapped.cache_read_tokens = cacheRead; } - if (usage.cacheWrite !== undefined) { - mapped.cache_write_tokens = usage.cacheWrite; + if (cacheWrite !== undefined) { + mapped.cache_write_tokens = cacheWrite; } - if (usage.total !== undefined) { - mapped.total_tokens = usage.total; - } else if (usage.input !== undefined || usage.output !== undefined) { - mapped.total_tokens = (usage.input ?? 0) + (usage.output ?? 0); + if (normalizedTotal !== undefined) { + mapped.total_tokens = normalizedTotal; + } else if (total === undefined && (prompt !== undefined || output !== undefined)) { + mapped.total_tokens = (prompt ?? 0) + (output ?? 0); } - if (usage.cost?.total !== undefined) { - mapped.cost_usd = usage.cost.total; + if (costTotal !== undefined) { + mapped.cost_usd = costTotal; } return Object.keys(mapped).length > 0 ? mapped : undefined; } +function stringField(record: Record, key: string): string | undefined { + const value = record[key]; + return typeof value === "string" && value.length > 0 ? value : undefined; +} + +function numberField(record: Record, key: string): number | undefined { + const value = record[key]; + return typeof value === "number" && Number.isFinite(value) ? value : undefined; +} + function applyModelCallEnd(record: ModelCallRecord, event: PluginHookModelCallEndedEvent, nowMs: number): void { record.observedAtMs = nowMs; record.endedAtMs = nowMs; diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts index dd408d0f..d960bdc8 100644 --- a/integrations/openclaw/src/hook-replay/session.ts +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -26,6 +26,7 @@ export type EnsureSessionInput = SessionLookupInput & { agentId?: string | undefined; source: "session_start" | "lazy_session"; resumedFrom?: string | undefined; + timestamp?: number | undefined; }; export type SessionState = { @@ -34,6 +35,15 @@ export type SessionState = { agentId?: string; source: "session_start" | "lazy_session"; resumedFrom?: string; + finalOutput?: JsonRecord; + trajectoryReplayedRuns?: Set; + hookLlmOutputReplayCounts?: Map; + agentRunInputSnapshots?: Map< + string, + { historyMessageCount: number; historyMessages: unknown[]; observedAtMs: number; prompt: string } + >; + messageWrites?: unknown[]; + assistantMessageWrites?: AssistantMessageRecord[]; stack: ReturnType; rootHandle?: ReturnType; atif?: { @@ -72,6 +82,19 @@ export type LlmInputRecord = { placeholderRequest?: boolean | undefined; }; +export type AssistantMessageRecord = { + sessionKey: string; + provider: string; + model: string; + assistantTexts: string[]; + assistantToolCalls: unknown[]; + historyMessages: unknown[]; + prompt: string; + observedAtMs: number; + replayed: boolean; + usage?: unknown; +}; + export type ModelCallRecord = { sessionKey: string; runId: string; @@ -243,6 +266,7 @@ export function closeSessionRoot( manager: SessionManager, session: SessionState, summary: JsonRecord, + rootOutput: JsonRecord = summary, timestamp?: number, ): void { manager.emitCapturedUnderSession("session_end", session, () => { @@ -252,7 +276,7 @@ export function closeSessionRoot( manager.nf.event("openclaw.session_end", session.rootHandle, summary, null, timestamp ?? null); manager.state.counters.marksEmitted += 1; - manager.nf.popScope(session.rootHandle, summary, timestamp ?? null); + manager.nf.popScope(session.rootHandle, rootOutput, timestamp ?? null); delete session.rootHandle; }); } @@ -305,9 +329,9 @@ function openSessionRoot(manager: SessionManager, session: SessionState, input: data, null, null, - null, + input.timestamp ?? null, ); - manager.nf.event("openclaw.session_start", session.rootHandle, data, null, null); + manager.nf.event("openclaw.session_start", session.rootHandle, data, null, input.timestamp ?? null); manager.state.counters.marksEmitted += 1; }); } diff --git a/integrations/openclaw/src/hook-replay/tool.ts b/integrations/openclaw/src/hook-replay/tool.ts index dcbc5ece..56464ea2 100644 --- a/integrations/openclaw/src/hook-replay/tool.ts +++ b/integrations/openclaw/src/hook-replay/tool.ts @@ -59,10 +59,10 @@ export function replayAfterToolCall( ); const endPayload = toJsonValue( manager.config.capture.stripToolResults - ? { stripped: true, hasError: Boolean(event.error) } + ? toolDisplayPayload(event, true) : event.error - ? { error: errorToJson(event.error), result: event.result ?? null } - : { result: event.result ?? null }, + ? { ...toolDisplayPayload(event, false), error: errorToJson(event.error), result: event.result ?? null } + : { ...toolDisplayPayload(event, false), result: event.result ?? null }, ); manager.emitCapturedUnderSession("after_tool_call", session, () => { @@ -71,12 +71,31 @@ export function replayAfterToolCall( argsPayload, session.rootHandle, null, - metadata, + null, metadata, event.toolCallId ?? ctx.toolCallId ?? null, startMicrosFromDuration(endMicros, event.durationMs), ); - manager.nf.toolCallEnd(handle, endPayload, endPayload, metadata, endMicros); + manager.nf.toolCallEnd(handle, endPayload, null, metadata, endMicros); manager.state.counters.toolSpansReplayed += 1; }); } + +function toolDisplayPayload(event: PluginHookAfterToolCallEvent, stripped: boolean): Record { + const hasError = Boolean(event.error); + return { + content: `Tool ${event.toolName} ${hasError ? "failed" : "completed"}.`, + openclaw: { + toolName: event.toolName, + toolCallId: event.toolCallId, + durationMs: event.durationMs, + hasError, + stripped, + resultKeys: resultKeys(event.result), + }, + }; +} + +function resultKeys(result: unknown): string[] | undefined { + return result && typeof result === "object" && !Array.isArray(result) ? Object.keys(result) : undefined; +} diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts index 42797384..e1d936f6 100644 --- a/integrations/openclaw/src/hooks-backend.ts +++ b/integrations/openclaw/src/hooks-backend.ts @@ -7,10 +7,12 @@ import { emitMark, toJsonRecord } from "./hook-replay/marks.js"; import { llmKey } from "./hook-replay/correlation.js"; import { emitUnpairedModelCallTimingMarks, + recordBeforeMessageWrite, recordLlmInput, recordLlmOutput, recordModelCallEnded, recordModelCallStarted, + replayAgentEndMessages, replayPendingLlmOutputsForSession, } from "./hook-replay/llm.js"; import { replayAfterToolCall } from "./hook-replay/tool.js"; @@ -31,6 +33,8 @@ import type { PluginHookAgentContext, PluginHookAgentEndEvent, PluginHookBeforeAgentFinalizeEvent, + PluginHookBeforeMessageWriteContext, + PluginHookBeforeMessageWriteEvent, PluginHookGatewayContext, PluginHookGatewayStartEvent, PluginHookLlmInputEvent, @@ -132,6 +136,10 @@ export class HookReplayBackend { replayAfterToolCall(this.sessionManager(), event, ctx); } + onBeforeMessageWrite(event: PluginHookBeforeMessageWriteEvent, ctx: PluginHookBeforeMessageWriteContext): void { + recordBeforeMessageWrite(this.sessionManager(), event, ctx); + } + onAgentEnd(event: PluginHookAgentEndEvent, ctx: PluginHookAgentContext): void { const session = this.ensureSession({ sessionId: ctx.sessionId, @@ -145,6 +153,11 @@ export class HookReplayBackend { return; } + const finalOutput = replayAgentEndMessages(this.sessionManager(), event, ctx, session); + if (finalOutput && (!session.finalOutput || "content" in finalOutput)) { + session.finalOutput = finalOutput; + } + this.emitSessionMark( "openclaw.agent_end", session, @@ -171,6 +184,14 @@ export class HookReplayBackend { return; } + if (typeof event.lastAssistantMessage === "string" && event.lastAssistantMessage.length > 0) { + session.finalOutput = toJsonRecord({ + content: event.lastAssistantMessage, + source: "openclaw.before_agent_finalize", + runId: event.runId ?? ctx.runId, + }); + } + this.emitSessionMark( "openclaw.before_agent_finalize", session, @@ -327,7 +348,7 @@ export class HookReplayBackend { private async closeSession(session: SessionState, summary: JsonRecord): Promise { drainSession(this.sessionManager(), session); - closeSessionRoot(this.sessionManager(), session, summary); + closeSessionRoot(this.sessionManager(), session, summary, session.finalOutput ?? summary); await exportAtifJson(this.sessionManager(), session); deleteSession(this.stateValue, session); } diff --git a/integrations/openclaw/src/openclaw-hook-types.ts b/integrations/openclaw/src/openclaw-hook-types.ts index 010dfbfe..5886e1d3 100644 --- a/integrations/openclaw/src/openclaw-hook-types.ts +++ b/integrations/openclaw/src/openclaw-hook-types.ts @@ -47,6 +47,7 @@ export type PluginHookLlmOutputEvent = { resolvedRef?: string; harnessId?: string; assistantTexts: string[]; + assistantToolCalls?: unknown[]; lastAssistant?: unknown; usage?: { input?: number; @@ -132,6 +133,17 @@ export type PluginHookBeforeAgentFinalizeEvent = { messages?: unknown[]; }; +export type PluginHookBeforeMessageWriteEvent = { + message: unknown; + sessionKey?: string; + agentId?: string; +}; + +export type PluginHookBeforeMessageWriteContext = { + agentId?: string; + sessionKey?: string; +}; + export type PluginHookSubagentContext = { runId?: string; childSessionKey?: string; diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index d315d8d9..22311de5 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -347,6 +347,14 @@ export class NemoFlowRuntimeState { ); }); + this.api.on("before_message_write", (event, ctx) => { + const backend = this.backendValue; + if (!backend) { + return; + } + backend.safeReplay("before_message_write", undefined, () => backend.onBeforeMessageWrite(event, ctx)); + }); + this.api.on("agent_end", async (event, ctx) => { await this.replayWithBackend("agent_end", ctx.workspaceDir, (backend) => backend.onAgentEnd(event, ctx)); }); From af1936967a98d209a517d79647f89ba162aaa207 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Fri, 8 May 2026 21:17:27 -0700 Subject: [PATCH 26/30] Cover OpenInference display helpers Signed-off-by: mnajafian-nv --- .../unit/observability/openinference_tests.rs | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/crates/core/tests/unit/observability/openinference_tests.rs b/crates/core/tests/unit/observability/openinference_tests.rs index de8720d3..75552228 100644 --- a/crates/core/tests/unit/observability/openinference_tests.rs +++ b/crates/core/tests/unit/observability/openinference_tests.rs @@ -1090,6 +1090,40 @@ fn helper_functions_cover_additional_openinference_branches() { Some(("hello".to_string(), "text/plain")) ); + let opaque_input = openinference_input_value(&make_start_event( + Uuid::now_v7(), + None, + "opaque-llm", + ScopeType::Llm, + Some(json!({"headers": {"authorization": "Bearer token"}, "opaque": true})), + )) + .unwrap(); + assert_eq!( + opaque_input, + ("{\"opaque\":true}".to_string(), "application/json") + ); + + assert_eq!( + display_text_from_string(r#"{"content":"json text"}"#), + Some("json text".to_string()) + ); + assert_eq!( + display_text_from_chat_choices( + &json!([{"message": {"tool_calls": [{"toolName": "read"}]}}]) + ), + Some("Requested tools: read".to_string()) + ); + assert_eq!(normalize_total_tokens(Some(5), None, None), Some(5)); + + let alias_usage = usage_from_manual_llm_output(Some(&json!({ + "usage": {"inputTokens": 11, "outputTokens": 7, "totalTokens": 18, "cacheReadInputTokens": 5} + }))) + .unwrap(); + assert_eq!(alias_usage.prompt_tokens, Some(11)); + assert_eq!(alias_usage.completion_tokens, Some(7)); + assert_eq!(alias_usage.total_tokens, Some(18)); + assert_eq!(alias_usage.cache_read_tokens, Some(5)); + let mut processor = OpenInferenceEventProcessor::new(make_provider().0, "test".into()); processor.process(&make_end_event( Uuid::now_v7(), From c80fec786b0bd6af13117e3fbef82fee4df74399 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Fri, 8 May 2026 22:07:30 -0700 Subject: [PATCH 27/30] Add source release artifacts for OpenClaw deps Signed-off-by: mnajafian-nv --- docs/resources/legal/oss.md | 10 +++-- third_party/source-release/README.md | 37 ++++++++++++++++++ third_party/source-release/npm/SHA256SUMS | 3 ++ third_party/source-release/npm/tar-7.5.13.tgz | Bin 0 -> 454961 bytes .../source-release/npm/web-push-3.6.7.tgz | Bin 0 -> 13481 bytes .../source-release/npm/yallist-5.0.0.tgz | Bin 0 -> 9821 bytes 6 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 third_party/source-release/README.md create mode 100644 third_party/source-release/npm/SHA256SUMS create mode 100644 third_party/source-release/npm/tar-7.5.13.tgz create mode 100644 third_party/source-release/npm/web-push-3.6.7.tgz create mode 100644 third_party/source-release/npm/yallist-5.0.0.tgz diff --git a/docs/resources/legal/oss.md b/docs/resources/legal/oss.md index 1cc515f5..954c1bf2 100644 --- a/docs/resources/legal/oss.md +++ b/docs/resources/legal/oss.md @@ -9,8 +9,12 @@ NeMo Flow includes open source dependencies across Rust, Python, and Node.js pac Dependency attribution files live at the repository root: -- `ATTRIBUTIONS-Rust.md` -- `ATTRIBUTIONS-Python.md` -- `ATTRIBUTIONS-Node.md` +- [`ATTRIBUTIONS-Rust.md`](../../../ATTRIBUTIONS-Rust.md) +- [`ATTRIBUTIONS-Python.md`](../../../ATTRIBUTIONS-Python.md) +- [`ATTRIBUTIONS-Node.md`](../../../ATTRIBUTIONS-Node.md) + +Source release artifacts for third-party dependencies that require source +availability review live under +[`third_party/source-release/`](../../../third_party/source-release/README.md). Use the repository root `LICENSE` file for the NeMo Flow project license. diff --git a/third_party/source-release/README.md b/third_party/source-release/README.md new file mode 100644 index 00000000..7dd1192f --- /dev/null +++ b/third_party/source-release/README.md @@ -0,0 +1,37 @@ + + +# Source Release Artifacts + +This directory contains exact, as-received source/package artifacts for +third-party dependencies that require source availability review. The artifacts +are checked in without NVIDIA modifications and are accompanied by checksum +metadata. + +Notices and license text for the Node.js dependency surface are maintained in +[`../../ATTRIBUTIONS-Node.md`](../../ATTRIBUTIONS-Node.md). + +## npm Source Packages + +| Package | Version | License | Dependency path | Source package | Attribution | +| --- | --- | --- | --- | --- | --- | +| `web-push` | `3.6.7` | `MPL-2.0` | `nemo-flow-openclaw -> openclaw -> web-push` | [`npm/web-push-3.6.7.tgz`](npm/web-push-3.6.7.tgz) | [`../../ATTRIBUTIONS-Node.md`](../../ATTRIBUTIONS-Node.md) | +| `tar` | `7.5.13` | `BlueOak-1.0.0` | `nemo-flow-openclaw -> openclaw -> tar` | [`npm/tar-7.5.13.tgz`](npm/tar-7.5.13.tgz) | [`../../ATTRIBUTIONS-Node.md`](../../ATTRIBUTIONS-Node.md) | +| `yallist` | `5.0.0` | `BlueOak-1.0.0` | `nemo-flow-openclaw -> openclaw -> tar -> yallist` | [`npm/yallist-5.0.0.tgz`](npm/yallist-5.0.0.tgz) | [`../../ATTRIBUTIONS-Node.md`](../../ATTRIBUTIONS-Node.md) | + +The npm package archives are the lockfile-resolved package artifacts from the +public npm registry. They include the upstream license files and package +contents used by the Node.js package manager. + +Checksums for the checked-in artifacts are recorded in +[`npm/SHA256SUMS`](npm/SHA256SUMS). + +## npm Lockfile Provenance + +| Package | Resolved package URL | npm integrity | +| --- | --- | --- | +| `web-push@3.6.7` | `https://registry.npmjs.org/web-push/-/web-push-3.6.7.tgz` | `sha512-OpiIUe8cuGjrj3mMBFWY+e4MMIkW3SVT+7vEIjvD9kejGUypv8GPDf84JdPWskK8zMRIJ6xYGm+Kxr8YkPyA0A==` | +| `tar@7.5.13` | `https://registry.npmjs.org/tar/-/tar-7.5.13.tgz` | `sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==` | +| `yallist@5.0.0` | `https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz` | `sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==` | diff --git a/third_party/source-release/npm/SHA256SUMS b/third_party/source-release/npm/SHA256SUMS new file mode 100644 index 00000000..01071b4d --- /dev/null +++ b/third_party/source-release/npm/SHA256SUMS @@ -0,0 +1,3 @@ +95765dfeca9a8a421e2f217176d871b2a67d5fa4dc2efb4fe9ac7d2346fc2af6 third_party/source-release/npm/tar-7.5.13.tgz +85774fffee09f70bde084cebcebae20b3cf6f48239f61659e45aed9fd513463e third_party/source-release/npm/web-push-3.6.7.tgz +7c9d43dbab7cab3b3133b0e6a5af14014482285316b39ec9f508efadd9ebce95 third_party/source-release/npm/yallist-5.0.0.tgz diff --git a/third_party/source-release/npm/tar-7.5.13.tgz b/third_party/source-release/npm/tar-7.5.13.tgz new file mode 100644 index 0000000000000000000000000000000000000000..59cc6b1dab8efb26c6cbf94bb11e5dbf3d397ab6 GIT binary patch literal 454961 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

QbSB+hcmA3MqK`4vr~`AOf1=YrmN zb~GkGZqrz``g_x*nGv#F^MS^+{1whLb!)|N?sju=hP`pI#X=jfq+v7A*!6Mz(HVgj zLo>8<_OYC<7RJpz=G1b*pVeN2EH#aftd)>aSO%-wNNeDWk~$M8H@8T{o`mXMFehlofzK6RRALFK(kOhCY{BQwk(=MMNiAI7(S7@-BX&e6#TEKb`1=e zETN-B=tV^V0I6^3C52byNq*T$y4`Lz8&;>AtE@vGI5#c`S$LYR8pNyaf@-=lPj?qR z#C>gb#||$07po9lNQ4y#=R+{eOvVq>VJUG!_GXM0%jBI2)Qn@gm?M#&ed#>`il`tW zVai*Itbb%kXOO?=B>6ihIS#T#i0DR&27XK|iWNN(^J*;4&T?qadgp%9Hr5bnS2TJy zFycuL^#MO^0zWV%JI^M41q8J7LaWF~`;N5ULfPeDR9>O%1)U{PKsW*WbM;prWypQB zakcF33~*qA?5CcKNo)^e%VCd^RRnK%9B^7zRdH5~iupC!0g^Zs#-#lQ&neWXq5Rk% zR+~9tj@T=*5;T_aXuQ>*!F7b@fRlMKS=h<2Z-;gv5(mPqfj#Ui_IfM1N4K|H5yOao zktY(w0?!>E5ke>3fpbFab)dCwvF8+>LhL~5FmCE!ylMvJq?hYP^60s}rHw?}npmtZ z2h)4Pk?|-QeIl$3t@%&rE#p4p{8!v+u6ZHh_8fsSg{R}`oY4V}7a8h->eU>gf*>{nHn138Y}BFJ=|AA7?MVl zrsL8}!>g{=jjD+aioCOfTQOjed|KWU9$p^mArHSY>aBu3`n=C|jS$K02w_%i(j?~n zj*VAHAj_H)HDhrxPYd9n?S2 z6PllaFSEBCh~LgZ%HDNA@oX2)$IfNCD_2a@(%AIw!f(pPac52dU5TYaElX4~7b z@K8~hvms67+!dp@B;9BBrzia{OM!(|%gkRwYFQPG0Y0RtLyXpAAbBq-T zWGarp@>r$vETZjToBhOG#}izpwp?<=OoHFQ_S)0Ts^Qs-0B2rtT6lGzLU?mFy0BjA zo@g0I)IEYGKsfto1FV}ga6C2vKnGx2_eyc?-{GSyc`yC06jneSHdydBuQz#*4vff1 zfr60|J~+mFas(Mu&cvNBL0@I8+xGawM;g(&CjI5q4z4Ql!&_eu&U9pnH@0zefJECIY9O=u zta_;(O^U(5a;P|OvT3YMlH7JIS^Tuweh=~n#ISm1P*oZCC#EE3vry-4XEh2sPEVTZdC$hG*_ZNBs8PD`A}sj^KHV1}xGpfMXHc zzHAI{Z?4fzRa*e@iUSuA(YUyOKbkqrfD7UogW-(rM16^A()A2nagQrTj4hhXl}PEU zMinqXDL3ZSGI6S5`PJXh_9xVPM{!dltu+A(jW$h}u0kaiH9hd1@k2mIfoEHVz)NaY z6yYQq1hlSj1N{rW=Odgn9_V{C`buyV-TFqa7&46P0D*K_f6Xe-g>9Z^ItSvas_ZyD zaa=?QgFm`XvI^hxEJ4yHc)j@|8>v!l)z{CfDTpXc{4wqej0AyBvN54&#OB)C(tD6% zDR7LjVLoRwNc2hN$K-Wh!H9#zwb6@`7zoZ4;s!CBXm_5*lu%}~0u5h-;;NQfEvHy9 zs#Qa|d=!k#M;K$GVjKTb_tSiSt$G|4#)w((Uhf?IpTX1D>xSKH)ulJVZ2%RQy0FVh zIWBsR)sJUFWdo2(`za@G38toR0)228jbYWB+iqI(k#(&F+IOGe|h3Wr>(!m6QvC*fJ(kGdZ$0WGX&RZ0+g!w*4<% zXC!PQl%eLTLygs>)RSlVX9j`Hvk9!KH!6oig%iR-)y@ZD%JAa00@BFC&bwiqpW92GET<6ktrwAoYR6EatQ*pVp_fI6bfBNT zgSp-$*=1IYKzfz_>U95(A$cRdrV$I~*elu9`#9C2mdg=qmYZPHPtheSt=AYznztK3(B?pffFMb%JwHJg(ZR+1T>NeX`I31%sz3)HSC>*mZm6SI z-=CshuhGyvY~jpIaG7j4Q8OoL8|**=cpBdBZF4J8NMhNhmh$K#ZS~*4hJI4;)#E`- z1ZUNKdQ|NO8ob(SFtP3s*-Z+L5xsrMv@Qh)OU68*L;?aY zBPS0HiN(7~veUnWM;65v)cRyF5drcB)*m)b6PvhjQ)^ab71^4;nshCA?>m}r_SNCE z>Q;dbi1TPGvFh;vb3B9*pq62&S%vMQ5vqvD*JIQFd>-iCT&!{2gB*>qt#8+XCqNc? zia0$gTT2GBLEFX6y1rM@V=o;Vm8UBWA(Zl~4$-K{im9?9$}Bbt$ILxBX|v?c)(++* z-@A#NT(izcjAylsTn&lYmh<+QyBaHvwBvLkr(bK?5up`uQ42i{D2Y zZ9~!A$jygTtF~Iwi_l7K2UDoYLd`K08q2?IRD_X+9LDWT#j=za^H~AP| zQs?Cy-C{9}Fy${g2BTImz{D_x>T)Q0i&43#z-DtgFUA-W0yG|r3Zw3!^&DvKr(+6H ziNO(*Q3grQrdjU-Vppp1bbh2=O1_o%i@7np1E+++Vx)$g^v=iG?1F;$J3&+d&8Nre z%|B9wN29Dd&#OqTGumUVjB#_)>ynCEA0aAkC2Lr~EJ%?&Rv&=9fVPlEX=mOpQaWnu z_LO;juynszTQdPtbx>@l;uZ|2o}-X19j9&6$jXYT6D>2FC2MmNobC%?wFlLhL(lzJ zQDs@LS|3zvVcMfXB@?3$oDg@M9Jj-f9Cau=H+%X!ObYm<9FKtqwBhdH>spUKN8mRA6*W8>xfc6){*2g)8M`m5QJP?(oMQ4sQCtZ;`G+h#gJ?K(87$4o=l6?ff% zKAWVhGP;e~Gx)VFa=Su5Y%)vvD|JRzbeVI?QQwR+jqf!~+hh_X;5}Zcg-F>6*bnpx z=u`xCHTm)}R^uztENJDTnv7?qFQ-A@nDXG%{W*_DS;whZ+cN+DS|^^~z$|f^(zijP0Kda9c}`H7ga?7I%c6BqSR`JTVskNL7RCJJ zQQx_lMl{tjXF?WJE=Nlx;;L{OvmPp<&a{|vI^>FB0JF31v&?BH|=*L5A_73PUiJFX@yx+i%kfySI%&H&fOf8WDAHq?Fc zdGh~lln);YmW}|V7)6R^riZh>QrAg!4zWtWIvMa9O7*C?w{B__s@$Jsfayl;W)W+^`$M*fcMeX>3r*lA@0K?v)7x6UjpJL&DIcE&v6vmVx z0|Yr2^nHE(?fUilKh`tOm-PA%(9i2XKyXqlBgf%l!pRcUU5)w#$`NsuP0-D<$|l7e zE;!1w!CiI`De(`21x_xZqy{43q_GY(=AtI?Hp!CuGj&GRs%hRU21O5y1~bemL3^Me z&Uw8sGlJ?xy-x9=rGbGNBEa=TFJdt~Cv=7VLkm&^Wi``Zdz;1}&(_ zJTv=UdMyeSV)Mq=ZTq_E033X2<6wW**SFW7Y_20ju`d3!5u@bu*YJ**sg^`+8%D&2 zzOYbYBxCA$Vj^+qv?Y};sQJ7WYV6a`B`Fz%R|%`ERP)Yi8l03>#(I9Nqt=IvhE{Y|Z_jY~kuNKdUU0nWzh zzn|Ck4-;OYf3-@tf04FsP<3?bI(npQs_zPGS4eSB!PTNN+||MeZN9E395JlloNLds^G1ID!D5;c)7RlK^6qDE_4s}W7Q^MMU0T; zCpi&WVGed>DUf85>gDI1XUDsTJJ0rIwigJ4v#W!~=-K$S%1Pg?^73%+>9b!PYyw1W zr9m2$pG_bawD{m`DEf+eq)kmsYS1STduO;P7nP+iNLTO@4N|DQp1jj%Q07nx9{l*u zzg`r5A+c`r5rF#^l9B^2>3nIY$P{nzvlWB7C-A}|o%f;`%|S?THOa<_w%n-5W(VHs zI+}OCVEWC`Q)PTTbC#gu}p_Z9mM*8}TCwno)VZIkY?uM48IBW?HF!}5f z@21LuX78%MENcy9yHn(Lm*owUQeB`Nwv#Dvc>_AQz2>1Lm&*Q|agVL~Q1U z`A#O(LD6Dh?1czJD!Xb97r%%68XQYM@3%A>0KR)UfiuVmjBFv!Z(~3qvodb_-BHoezw!}7MV@(V4Gt6<&@$f7v=a{LYd1EzFrxT11{tr+x1J) z4AZ7>7RTml_5c`@3wc9*vdjp=;#p1gXH0i(j2(mH=9tjAyBfxW^kjBq$>hE&+U7ht zff-T40uEQSRwL=EF%@)=rLHYhg1oXsN=f3Ld0moPYLuW~0tFSnJckrQG!-mvxqczk z#tpNmTCg?x>(_Act{XhbDCk*LfVnyZSH$oaAhi2J`+a{QIy%!LSdz$KL`INOQn#uU zKwl`j4H=K<0Z`@BY?dk7*mcl?fn^>mBp|T+q2C5OqY;GtQEvl9Qo(l2DyV@~sI3-* ztq~*F9C?{Z#neUNAI=Arcx_EL)U!$CX7=`gR=0(AEZ%wGg{y~JD`rj2sN%Qse5#!2 z@J|nSKuEQXETM*P<0!2`9pBkiSKP%^1n3OB@wbZQJclKNbj6@Og@;k^hgogZ~_l%Vf{=Ec8%1crj-$O1Wk4N z43If!oZJU(XV(;LT zS#We*w%FSlc<-OO>L_m*D|%~FfO^5dIh|>*D63&w60FtWZd1V4UN(XIoRs4nDuzR@ zXxWay;J9yqcfG}+WJ3Q03h;p4b;wf<7rNcWq2$4drD}R7)nJ?Y4AGug-mW814xNUx z>2yTOd*+-K_X5H;d_z_S@$`$*iytZ0j~H*3ZlV`@mY{(foHIp}5J!43IVHjTapw7K zTvVvlLM?KIqM3E|&k+8Z7rl$?8s18!p)G2&0#;-fSqEk#UkOb1am`Bt>!XFVZQ! zv$RhNEeRjXtAv^Z7;XA^A!QS>5uv697(Bpz9E$-VKoAW?9F&#s4qub_j~keQoHbhcO<33{|L3UkNfU|y?{$r{@CQRv^wG_Z*ddIz7ETlt2Ii`(qN z!rKKpm8&;LVVdlq4@~}QXGB$Xnii9C)uyVd({uvBTD37&cI-LLL97YL$>!CVVtGpf zV4LD}tj4&Uc?k^zrUkO$aqe8QOt5;crOb*?ENC#vXh}}?Q}9}3N|+cupw3Rgo_Z^@ zU4cx2O>ov8Xk(tZc;Wt*wd%R?o;lvb1&^X(JmoV*v(*}CmVp;|Qflq*aFxH14o_xy^oxcUFSY$?~ghFO! zV3>X^wB)z!Cj_K%;rq}NY)NkNIC&5VtfAni9OUo6e)i6}8*Vn`2SxF3eg)GHY4#I# zCBmp%Jqya(cpyjQZIowSh)eSJU|=>a4T6lh5Bm_i<40CZqOz0dBr(aK8?Da60~ekq zZ_Gwb0^V5e3?dllvIZ_2r7w%pzvre`sr{;}tA!T6x7b^^_)Ge(_{8}%xyk_z3WgDvX|jA|tv}wflM9X+fOvqQn6d_??5I#dGo$vy6nsRod>sXgv`U>!&XGcTYm%4npOC+gpQ#kv3YQCIz(lzVS`IT}Jp0}Gqc_QnlAv%+mU z=)2F%)c8BNw)r$GN>^gzwyS1!QtFA)~&I^!WqHTnjohUvJU|qP_yYI9f>y zk;f7itH8mP)G$Q)MW5oAXvicURBAMn%>ZfwQ5;ASb>#=cYo#kv(WVt{NF)rzg!VZ? zoT4v9iJ{(Mg&_fK65oUD7tSXTQJ`b99O&pk#GmVMu-YCDKPadkJ@%(r-^N)254kz# z@9I+@in5K$atfYHtxE``*PEe1B23+&56Gzn0@>(!Xgna>Q2skJJm1cv{4yVPfcMo= zb^8W&WM|;2l;LXEVBQ?$l)SC*Mo~*6t3_TzH!=Ai!I#JM)z5iK=v~H^aM+EU*4edP zBMl-03yP4&!2MF>eu?lMbGJckK-?qVZM75($gXu^p=)~lIMyVxFimAnisX^QEhus) z2w=b#A~(bu zB^v(?Fd7qUjzK?(e#^{5{mf3s`0y5;3j+(uEhex2EeGV#qmvQN;Tb!Rd7s=1i|ajSqWKkO{XLaelLEl z#dg%WdgQ21sKB6A_$-R>eUx?r{@JeC0DV!Qkm-}~g3Jl1cg-AQAe^gWwRH@)yI61V z?mga;_r7Z|O57Ei8qn)Bsm2PBWGJB6iNRd6po-lA0LvQ2l|Wl8z#I0es1*Nok>}Hd z*~$vc`1vM=FoqZ{aUfG&Hw#Yeu1DlCw96g;%1^`d6&1PMtRO{EL|e42m8sk`c>Z7{ zEbaOuEU*J_9@-ocnuLsK{#;|U=Ni#z6Fv+Bn$Qi4TYK__*N)e zO`F70BMe3`%dgy&nKA&<9VAyv;;i09uoY8o(nAPZjp5o?PanWOb*j<1jyyeEA%$v+ z+qz=ds|X0vmE=N+fwm0c?nkNmNW!v@BPt_;rzY+0hM&4BeCRuAjr?#}@nr9-an!xD z_P>F6%^p`9{O)WedUu@78l4@3C&X$_j(78V^FMu{<6FH$VASU_;ug4?8{ka4(TjZE z+Dp!JlB@9=^nF6XdT(3$Q!a|W^Lyz1MpGB3%VF>(;>YK^J!anTp7%TM&*%Am-oc;m zUu^#`-34Qt`AIzoZ{;1giX-5sc7a>bGmYO1Hfr!po(;1VIC<6$i8asgAFd?C`w}h4BB3+p95VsKsR0 zNJCTuV*Nc7lCOEQKMAOgG;^Fu*7PGgn*7IeBc?9jk>=A_pJ37(=F=sZq)GVMtZO#?*82RLPkO%plL@mX6K1l# z%|zmkIWakPBL}F_Cr4C56E{(Ow)FmwW^vSUIypEC@mpip&+!U(lL{g!;UYtXj_5;;xe+A!}YX0aLHyUp}_Gg$Y)=8Z}K<`J# zkF{3D{Ss4V=`|KTwmx?HZo_Ds$+LMrgVUn=fiUW)L4aUIsd;MHqD}>}q&Ku=r9CSk zX^28r?9F$3T~z07s1PxC{NjY5+AUxZHKz3Jg6=^Gca@DUaQ%jN{WE|2vn``Px)1RtzO{sf#{d^w*c+}@mMK2>QkTKs^5yNp1%7t9K2;6F zovF{F1^n#l(ape43tXZx<~>LM9TyeO$^5}-A8!rk!*31W;`0^8K$M^~u@DMrtN~C> z5hpMTB+cgZyp`$x7L)3{7|d6|pIX>Z$2Ab`dS}Xf>w1VAM;HdV88%#}HL;N}vvpx2 z-h|<2SD;&LJM>g?ZC)yba9T-EKFV4Xe%M*uM(2E5k-7fmuK;?&Z(u$}svf_$5f10{xL< z9x9&{r)gcXXYn#|&t1cOF0y)PDG-fLs#k>gP=O(MHBnHX5i*YPOFo^=T zr6reEDP42^YUpLmi9zE|oPC`~XlMe3b9GQ6-3mZ?9@0m-MBCEd zTaGY0cC2ddmnbNC%i^Fs|3FZxldzZdbO6=CWE0MX0)RR%oun{H=n~@f48!^upN84w zx?_i%D)v-=aSTVN45g_Ka(Igcb8_#V=H%R?IGA+7T@Zl`j%$L0Q*BA=W>b$w zn81+FV@MoAM!72gUjz`?e*%a!YF@$BZ= zjFP>9S7ZU+kG<>OC|_}VJ{mm6+4K>lCs7#tIF9{Mls~LPcw6)E@e0Ta$3 zuJOTVPlB^xPgdNcd8u^3I;NV4ogwTk%S`(jMu$JnWK<_ z82s`2{{TdGAFdw>k-b++IHDjt4kG&xrhgS8YaU}|uI>ZSIwBOSN9%dHgI@EVv3fSs zhIKpEsou#Z>Ob?FFKX}1&SvU0ZD%YtX!T23brP;apU;oH9RJq*faTQPknVCQfF$T} zq|9I4zNPpb^9#izQ!1WRhQCoC?r-^m3Wujen=rQ#erjl@nYg*jf;i#dU?SKLurB_r z3~Ml7c{;x5ClB(t#zj^Y)z81_4)&e|h#cNMqbeRfKyHCVV1fHjml)S}zB8ETGxh9d89tSElFKyC9Jz=*i!%~&6e!BWj1cW`Q?4S zmUsef=Eb~>Sj)OW(0>UE-_DfD?FfwQfQ zRn3+F-GDU)`+$}n3d%gRoV|n%)auw$k)hQ9NhfmBQ;#mj^k6{Zt;L--EAUpHxv@v^ zXYNgxbrzACI|NNa!@;B4nLE}(G=;!a2o|s{mx5O;=B-9ax1!-pFlcBV z6C1Qf$!aMqn2{+OyMre2=ntT{3NZcz(?_)WDrZQAkMrL7qyVuk$Lgl=9rKwY!l+h5;Rv* zRQ^{o096GLCWNR;rG1CEZw$bsDbBA@h9T0ga)>!ql{m9rMi)!JOnxN~pWX%d%cor! z7ZbZzE&kCjX04RMI+3q{n(K4{R&1(+zd~o|%$nbe?@AWEVWoY#|LjOTZtSPgbyM`Oi=9j;n~s%0u67Fe&wj{6fL zcX*$Uvzhv$yXvkZsMpYzy89b+?9mUH`+t{bNi@57n9`X&y|!gU26bSAkRX1VX243d z1t#Qy8K`tf?BC6WYek6%H)WX zF>nX_yL-E$T%im_TAs0*jgYUzN>Xg}vs)ii#xALrV3U?3o_uTT`aw68Xv%CBB2%R}aEp^1y zN5BB5;_=R5q^3HkUR7@+DrXxYiq!72Ls8C0x+S(UtW-{dYA>I?luLudEO*uSdBv$UM2Bo6ZS4(48`4OPhis#_B7@G-|g>wMXr?+0mKlD!U>8AE=bC{0c8?ZyG z$B+USCX9ZqSiAiaI0Fbw$4SzY-2;w8hp3bHNuzh3&mg#6-pdwM&Y{48Gi1}ld6_Jx zeaJC{VHH?*VQhM?pgD|!5hN;^IW z(0`(s;0L_+bT8Ue7AB>XfF^|eUAzdTjaftU8ht{X4^XetjyU^hZ@nOw-fG~o;47f`GH~7rslSA`e zxMuXXzy*R_ZUKQcuCEjb5I>RWIJJ*fp5S9drxUo_Po?dTs+Gyu}FKy!9@_&&tT?LGE)hS#6|^$&H`d6A;6xrJ@Jojgc3L2GlLK5{4i zXXwp-d~ADqP?PZ>H1=r0c#7=c0G$MTgyiPq1>YDsTzXY;nMWeM%Jn)UdHaBC!c34Q z#w>TkGbOgpmWW>}#*yhI!#HuW2f0T!V4T+(c0|JgFbqFp*HXJuf>YC4d8?MJmTT3n zH#S9=k&@G?ovw#&!DMl}mrNDw+-jndpR?0wjuY%qZ<8elcro*8&KOZLCfQ?g*VvEpK1Gh%)S{oOM#j`wi2QWwM*1_~ov9HwEwZIp zRMkZeEmy=(lxZ)1I{4z|AjZZs71rF1ypM><@iN#UYq^!|BjbY$f-fnM^shuy!3en_ z@vxMbAX#uDUj?Ub3<9EsZ2 zK}-kz*6-dmn1mCpSB|wboJ276Eh0*+nEI7boUz{+LEU5kh(E%NF!0$Swwz%JTPBizyGg}t!MZLGt8UQYdSm-z0tU_H@ znR;%jO$i6osg)f?lYYfn%P{edkA__-*P}^`A;*sJS!a(4v*V zgMBN}dM&J?&_$B_Zxfv^B>x^%jf7DO#^Q+HtI3P5EoTSz8+ zxY5EekMEYl)odrE4S?t+n0ln8)3ctyFC5!X7Ef7&Whz#8F5=#Irn4rtF_OG>Nxo$d zgG~|)10tT7AH3GfVH84?+UdA54qsrN{Fn#Z1%((43K+I@P;C}R5bfoBruiJ>S?^^N zmZ>Jiyjyd$5v+I~aj?_{I1_y*D!4VZ6Q+(L0?y~3JKs%)b5VdqferLdSjl!O%I`(e zl>hqKJDC98<~~n@h80V4op(9qF*4FhT7J$68u4?6ROhM5?=GX|{YP}9QQkAS(od! zlZ&79D2z-aYp&oPc`31roO*XiDB}jmF=E-$&9h$v=1M%EmIWt?Jh<#mJ6T21@|5Ym zzL(BrYSDZ5u5{#A-n&Qk*=K4&7gxft)aTSBHeY$>#c2FX-?yyrqapa%6I3MF@HBlIl1NPc>Ym^uego%O7* zgCO{gfSpAF>t0E-rLdLt<5KIIiMyZ)sT}A%bJ8Xkq~$cvNyx)SVkoWPM*Ziogxt(| z50v1FA-c@%t)}04_E{$x+`-FP#HqsGY+px?AM+08k zh=3?NqRWRbO;+5T{WmzZ&WC_JL`r=@l}x(0PDbTqeVw9R$O5b~iRZDztX#}kjENa5 zF}q1NB4$C;ikeqaF{PaEGuO8uPJzYOt`4Ndgz|Bmozi%d)Wk@@&I6rmH-X}RJl1HfbH95p{Z?Df$8aX?*W@F^hBwr(B+<{fI96oqS3vn z5t`m&3ajc=?>aLXWsqtIVY*%LnfHg&`AtN_CMw)~j2w)csQ=M3xlIbjo2bdFlZhEV z)MQ*t>{MrL_=QJTNB%%kqmA+ZtEjT9SFI1K zwb1#8ZTMGk6B4cj=)mmz6FB}s-E}mibv<~%o%%^R9)oP$R)nu>J^CDRFMyR>;@5G1 zf>_=AWc<(EPh7LcLBUKB&TGd~Yg>J)KDk~*6t*7v#j0D0PpHkXXm#(%Z8ZYeBdIlQ zNPaX;*JKl&ABFnTZgN{2%XTzIQ7#~~&;h6L_wSR9@|$nIL68tSO^Ge#Zr$tM*huI^ z6)D@Jz(R0Epa;bDq)xH}3ylaQZViPMA@I*wy>!4Y$3>-IP%r7%Bj6Dpx7+GE?5I2O zH>q!+F`VZP)CdYO<2e>;@%%K}NT=A-+p$wQ`_aW`Qkz~>)97_9x~#7EV(-P)a{*Tvz>W+Bc;pbzogj;M#m8pk-StKZS|B?)z}rqmwJ%O zY;l&0>d36DhsdP_1?A+>X2mvlUMxgR0FZT zJE5*4koL4iW}-2{pUT}R<=u%wFiHJ#5pz`|irX6%bngAvaX*QlUMbEGf4ASLx$Aj) zB;y`_-HrsVikZPrN{$6U>0t|UPXgZ^_=gnOPSzm6t<(f4_#r0`CXvr8fxNWnJEaf~ zjvP)No{Ts#^u7N%r_ymY1+O4Bv`G}7JO_WH3fp1zWCYH0kTwh(e*NI##aTBYB|Szu z7-R*6R)!bRs8Cx(u0$D}{0ab%24Cp0r2bONR29MgVuCRN&}g7i{gH3gxU4X2GdpG# zG}%#cHp|r6Q^ToA_i=9OZ}l9VWj$P&;=a$+bEbl}YLlUV@@7U@3B@pqiW&L+~GhX+^-)b>a`mcmw*l=&Be8gFJrn z$z}J=o2NTJ?Y(*VeCPP-!QqQHZ=_3*Zln7sDn0O)=nv@PRWbSUA&yq_8leu}B?oVw zs7K>*NByyX@buvM^Mjw^@8iQ)`%mDHpAQfApZ`@+sV#U;VykQdp$4dfSATi)^ytmO zo2Sp7@4eW0Np{j~mmFD^sk^`PV(-lxuvkX&FM96!T~d{eU?t}9!}rFEY`QlA{s!ah z7|38uZm&<-<~g9IYN7Bq`62 zn2{CzT=w=4_V$lkS{{(k!lY|B0ay>-IL@Ll*@{>fS{Hb~duQOA3o$`V_D_>7L2$f! zrR|=(Os&s&XB3-97sWK8c_(=7Y9sSD#lE}k+97G?jB(dI3jFoYek%GJ22*GK>M9(m z6%*!sM2Jv+J=M3X&9-tcoR({VI_=POx{%8_l|XER!?qmmoo|lCD2HJ5e297?a7xWs zHtS$?4^84fHq3I^&RY)BJj6|u<3d=)_wS?OueO|<0yO~%8gOmEQdKOAzF|8$T#>?- z)WvJCQAB)BN_FwiC?~4I(PN0Up}xYON3ULTC_Q5!sUtykOh>A&*7)ad(fL{}>Qb>* zQ(;`{X#VH}9gQuAELf~CTWriqbqjr%V4|2dJSb4pmZHrFs@=$$0oQR)L&-3#x)pB! zG}w9@qjSVrYn}GCSiu;~dviMR>I#ceie!r~GZE1796Jt?;a${)&lSGvwb9tAXTMSJ zFA_VTrW-IcY#?@y#md?m!i9{~mcX(u%qGG#!OWu?h2J?RAIPLRw6a@(o&Tzj(O7+V zemI?7PDv#lH5cqsTFR*A-OH;qtD{RoHncjk0GOnlM8DjwDk0T|}Q+p^zbXFb%4yTeQwn@>{6E z%sH{Tquy124S6L`+4SKNxZb(QX4^8z<*q&o(9klSZA18zUh`)D^pEg|&k zID;5Zi`f(cGl9WGNg_@wT3u4 zmINfS%F!!8!`lX-hTq)0cf$#=hShEPr41M!d(?DmNn^NWy@hKTPHjD$x}Z7qP< zV{G)DL&L#3Qm?VzWn@t+{J zpi~BIz)etasLz*$oFN-$EY6nro0AHujS74qJHoPKn$70Gf2dBnkbY&})^=sMyf@Sc zYv~Ok)b1o$BI4UK{KPw*y3iCCEYcj3i@jPcYscp`IuZ7yE00=84+7gD9ZB{zQ54>b8pk>@CCh&rk4Nns+7AZ$7;1#aMYahvG) z-v(2n!%%Ina|I{*&iy+|8wsM^2TzSaI1*cp$B~CZSiIQdA(m_piU{I%*CS*9bLM!{ zup3AGmWP-F!G;L>qTV9%5hdnksRELi-^yZw1U(H$edpnd1Iwiz4Vq`zGJk>Y-(Ea!547@@W=_H59P27R1~&ZMiq1|)@P(}D%TMP7Z?cL7$`w~n1q{rkXW{r_3K zJrYNPw$X1`m1n@Bb~J0MM&Y0yQ?#9+D`(4aqNXsy;~G${%;rMH)aYs*XIclubjOHI zUwS=h^6m#rnA7E8oS2-u z;XN)-iG3g0OjY3Hhq-@11elM(>hZj!dz>siIEz$KCFkl6KEoR*pBKHws9aR4HaL}x z6;AazLVJ!4Ky%3!lNdNq-Am;p89|sOZ9=KgE6*$Hf44+2V%{(2#(}&oIyzn4@8I`l9M4 zf5~TPmbzAzQ}sbDmBQ#hKYXR;)PuP7G=~>Ezo-EoY;3>{$fTXaiQ^{bbDj@|Y<0K? zGyPYSLNht$-If{(FW!Ooh{T=dc~}g;(;D){2yem z5DUf>yB_m4CXaD<*HsMzYN3)wgJB#=UaR54P>_Tl!UeddA4T#AB^zf7PcLduF{V6~ zS?2JSY9gK|bVU-nR@c=$AG1X>-kj|daDGq>>VPz%)oCXgOepo*&j1vF!e9b2{XsFq zO7Yjg0OgP&gE+rRd9XmYAnBx_l}OA z?f>uw)YOg*_=j46OTFTuz@IIvxv$)Gaq5m#Uj%uJXefVFlxKu$yf&hO6HZzG!GxHR zI|D6Jf}w=b#utVm)I;mI39HUkgVuVsezx9Q@3)e*$H|Gh0>L*oqyMj;>3`RI_AgcU zR6}K$&v&73&jQ$YIq6d!Ydzs{bnpSaf;KwI+5`P*miHIxTf55VLJpTuL}4j$(UfEh zm1o(!ZTeug2Ol9}zE}}G85w|zI}f50RXT^XNvF3SnC4U_-FhcEIhBqvu===H|NLB_ z3CHI_w|bb9+76S^Rc)O@l2b0v4K=iq|p^riOyeA#6WE)75Ubd)gsnrw@?*{1n0a$C-qH z9g{on$b;mJ!k|%9lhWU*OG({H6W03wk^dG9gr08Ocrp?x_l_kH@=bl{1lx}}UJO4ZpuPczlJE41ftnTv|N{dY?qMr>?v$bwjD}QTDkq8H}9Q#YoH~g5pxA=1^y9J!D-B z9w~}1Y@ZpAKxqf$;0Fe#98BOz3iIH**NFK9TQN;Ika`t_K>J;XM_@$9;Ac~ZVBGsX z3}UEj!xX0Khz};G4XVB0iCzpQHId}RRN+ytCJPH%ZLV6rwd!o~5r4uv*2al9O`Y94 z)X2Ykw3LP$$@t}}M^Dl_BDc!P5}EDqHbk_URaAsq8_FDxxE{yG*Dy6WEH2%9x#ARw ztRiEk$tt{yDkrIzBwj?Zh)OBA{||Q8megU>ArI#J$>|9nb-Lf{=_b{?am`L=NPHvM zKSb(rq^@qV#8pd`<9>NhM9SY!M(s;D2;;+Sdsb1K+lzy zR!=a=U|$DMrq;m9$(BGbXeneWt_Ez!t}N|%C~z6Q3ket!pt&dxL3mCX^!diQrMNGL_6;U&8_=%%N95kcnl-7KIq_sowfNNUMd!ZC zME{AzrI=hQmZC3-$jUUN4sB8DBCD7*^C5fZGXp>dZpjbGcfe9tmwUeh^8CKt1$@89 zXQN59x{5Ch&u#-Q;*$rb?syyZS3ZkPJdJwo6n=N35<4klVDP$RF$rz}BD|VSJv$*I zP9)f;$1s>~2F>^X$7P%(baCJ6QQ zK!PZZavm(*TDgu!Ik_`X>hh=Fu2b3uST5+u#*i=+z3=tbcbtmAQjIu2DiC!{nc7nP z0}8cgIRpvtIm!tlvIVq*X_F>I6F4%7;z-DTZ)jLWIq(?e_Uq%2CM?awl5u7`Yl*lO zDpol>1tA;+irLEK8J%&3i)gPr$%aF^?JtWlv7t#npQ;x+YD9KkKI?kIZmn3RYembd z@N3&fq`(Zbd;7cVulC^|HRxh6AS>qzWVYyXNn%^NH|J#np*08ii(Oa_V+eM58dU;&A4In8H0b!?A43Gpao zCaJVkMUBd#OJG6@K|yo^>DfS>1~}W5dD6cCPI6Fe&paRVuhykMan*B>MkqC z-(Sy#$P=sfX4lhsDP2yCJ3ppzxwSXH8PW+|V8yKJ^BTsiTZ51$vHb1AfkH%OgO7gv zwhK~k8*7i|>L0_swi@lBIi&?&39{D}LQjK1|JUBew z+ZELps`?c6H}89Jf4Ot~qYrq%X|bH+!)GsdzCSv6{_1$os~#Llu@65%hybw-Kss!( zLLG28bWsOA|4bFQ5})n=Agb{F;a2g=B`CaNb(c96Fq?`4)V_qzi=DrIzxU+%!O@?C3CkO_frV z0-TAqsY6qf5g3U;hA+hq&WW#sI{iY??wzN{dx!WF-rWB`dvD&|Hj?Cv{{KFOYR;S~ zd#sWy@A7naT_6EM5Dn23Mayzcy=h9K_J!7B%j#S2vp>X=5s?Xyl3dlxyXT$L?Gk}R z?im@&FCuXCf@1+5;c85aATWS)a5g`K=+?knW0WxSu~~}qT7bAX_I`mBAlob<+21cQ zfn3di)iWzo=wpXb%M1`8Q#q8|rIzOAN}Alulk>^s+uZTV^)5u+2Ih9JX10z`>SZqL zX@g0_n$U3&*}msYz^E<+dQCmK4YUKPb-UQxv z6(Ku;=~y8#asZpoLW*_=E0o5bF<8|RCU!<1^GSWVXZgE)BVPb~m0@KcExmfYaCOcx zA%8p=-~9Mk;>n=zHnl)UCqUIV(Dc*8s%U?y9^YSrYE27mcF$RE3wQP4iIhMZf47M= zA+#izP}n>_o;4$jB=3^19CD2u-2~H-c$lxu(c#(E^Jm^$YUF)n8eT5jQ{U`NdE-q4 zqtJ>EdXo`e5u>@k{N*omPv?G~8&R0F?Pf_zwzDlIx2fb#!ze!_!Bhk7qXh9cPN4#6 z(!|rp1NIR&`ir?Yrxjt&<5wA|z_=|t|F+5e`+%L{V^ZGKV*S}AT$exFD4@UmD9_34 z{FP%8H*y8|m`ZP{r`8MME|32D8tQ#LgJ@gE{oaF%+upQ#`cH`qa5}ol#uGSZ`m7$# z&KS9zpkibZf+zKKMU5Yi$CI##Ps`KNcTPR@pg04_v$l;3a>&2N-d{q<2CD#_-LF#0svc8u7U-$AJzc5L|J z2ZZU9S4AUZIXg6jZU;3JX|Xy?<+|JxVzr)ZhNjv=G|B1m#oE zgp2d@D;r+M&beZK8q0wjFSuo9?I!~i`r!u&*}7lz28Z}<_~g-JcF*# zt~b)>M=b+_jcq6DakF*X*|=ZYp=kbXCyL+OiT$aa*q_=7Szw9IaRVPw{Ndf2{@17F z62*{ujV`aZIUt9kzsIQe{cCwvS9o~!?XU2QlCKih>S9dk<0ST%&pC$|l@8c!1AQ6n zh49_mrdVr60}+|)0UTZXkR&vSdCm)lvRxRSITS3#4^D4fKG62TpTh)Vz%c@&`c6QbRbE0pED>s2@ z(LF%whS~NZ!q3m*;AsJ~B?AnenqjgVAT2QYVn7Sq<2{gDfV%}F9%*$D`Oi^&V9cOW zk&5s;>NuV4OW)rhe$d581C!zana%UJllMxbUVE9}vN+RS69Ydn_EWUVvHIsD0bxqo zO4wN(@Eg9tM+jPZDr3W-M?bQ{3%ROYq!jGZYGI{l)1&r?BW<}!$k-U>u_w;$XWuB0 zU_84Zx7(Ean#+_ ztT0bszkWUUA9MeY_SO=!Rf|0EfyuYh_F(lx$V&| z8aqd)Bd{lX{tf}(?39M1C1IAc1Dxr(MNg3NnF;5=FgI6?E{^Nw!5EAMFDctieL{fz zVH94ko>a$aFFpe%0R#Op6S_SHPq&3>dG#*$@0U|A@XM88nV@J+lk9(zb+=M}$dPpq z-zI5qeZ%tXQ2BxxN`qN!qz7zGfos#o1+r2jS7?-B-D?6GiPTMAQcU@Jc6fQ9;(>WP z;}shtTF{9W8^#gRh!~t3L^)}u128SBo%dMjIzHL07qOWVEfo;O2gkgd)mf5RyYGsmm>1)+}#b!y=kskq;y^BK7N=@0fS2 zg}&CkT8Ku)_(S{xyLNeaI;nR$z*W$}7MMV=%`7a;jWCttf)(EBoFE0_T}}D~dh`yB zs|}nN5*egeNbor*>-^kb|NU=R-)~4*M~7#ZI3a(X4^dKMbEMcMg$~BsxygL!(qTbg z=Ma75hlcmGA&3^SxCkCOIDdZKbye6}M7P+bx+K}T{VQ@mlk>~N8;p5~ZibvHM?GAC ziDAGF0((paS0h;*wCfR1h$f}IFfSKL3xB$2u4LMEIgj)vw{Aiy3hQ_3siiwE)A4m5lMj=3Z~>- zn6~Ev#ZhDb*|)kCeMb$4FAM(H;F~B0QgfS5*{C*)R}hG3#t!|>Qc9rBA-y_3CiaH~ z;!EL=2z^H+8Gb9Bp9}67u!)o1#gp&w3XZ1JOlG;(>Djsbt2XxUe}m>28zW+zpJ_Xp z-*w)nL~3ovpCd(>D|_=y^@uG)%I^6{>0y0^fJ^^5DN%kAx~ZcxZdXZq1_K>@|fXk^0&?KD$`FkEm`>Ol|nB#|<}G z@xk)#_@Vvf&(p@n+e8|ud!}EL*RAdEhUei=?x-_PDKsQ^? z^xtfd9=TnzT-gqpw`$r7 zy4c8AIK`Qx$qAxp-o|yadXHET%N*YMg>c|awr@tKXf1_4{Mot^EgW8Yrq~{HtLD91 zTVg&mO5nS{^D3G7xv+*%b%ILN1IV8Mkgd7viI2s=u7fq7=Wjjc8cC7#6|z1E=%5JOCg)!gi!K#MiJ&8>IW~T4L!I8NT+PG`8b?jx#RWu4PpSBz~WBeb+rTZ|@Oex8CE2;UG*gv>eNhyyvOE zD=Rr>RTA9~WKRTDGo+*(UtEDk^PEJTHg=78BF|WY&4Gm+mQ4L__s2n@@HJ1c%kh37 z_BlJFFEsa5%XX1X5U)GlvuHe%SXDpHC{(Nsv+L7IUG~R^&?+CwhAa^P205TOD`Y$X zP3i6h%;gCoz(Qun@EvHRXm}v~4Oz&ybEEb8Kd6U5f`o+^5QqLKU;zBoJbpZF%5(!! zoloYz?krI6r&PuFI~Mo3r5?9;b27b~ErL>bXE%DIuek@4mLAALwDX~n*0YV56o1GD z=h@;ANqxG&G{X%r1G!)@#n;#}}q%dDb;u+T~aCY?*2ch^06hS|s^X%FAPxY}lVS`ZEJ;1uf zUGAOiwmo*>ezt#oetp^Y78&K}nGM`#M{k__e_`#19|UJytV0=QXly1Jn# zQtV9!*kT}~0EWE;TNauu>z#R6&#qc^d#FA0N_nt;kqj&F-;2>9ql_uX-XX>R*fI1S znGqoR2xtBZ<-H%_9EN!^sqzSv2$WXx7qx4wO=9R7z>aBG^%z4-~N--R*VKxgY@|ky=O0dMDH4mm-K>tqO~s?Uuv=zp(GajGF<2 zDa6nx&d7k+1=dm1Zu1!=Pcf_}PlByT0a8&Nm+Z+oqlP%DLJX@=nXC;bqg+q@KD?Qx z2JE#*#KVxHU1CK+YTDMkKfC5RQ!K6a;eH&_U(JLo1&Jvo4~_!PTr;`}`c5;l(7X}<&??KF zip^9l>*mdW0G|P7@3+RvZL6-S<9Kw+VCB8b(*<-W9pKX`4C;KKoUJ*P{R2>4JajF@nYmDi>S66qkFlX+5^6{~NE248lr3jz2gJJ~$=xquG8uCu* zk*70IMl!0F+SgJ=TPf4KRtBv-|3i}y(6+>dh_b9j++)2Al=lFN)ZAAMi8 zav?Dv(v~D^)+IajMw))7wW&R(ZGNLm{4R2>q;aavT34po$rj4qQi>?8eQuHk&ZMT_ zK{JKqJa9k^x{k^0^g_k7LiZS4OtXx<+R#R}iIyy%YG97Q)2azkF^V|TfZ|mCYO5kD z2nYV{+`s=#_1*@eA{x9fmTzcQP9swVQQ?oA?yLXaza1P$IaAQ!c%(dso!Rle)h2h zrl9niSFP#Xm62(w-;3lw-z)DC&&;DRf?|{l>1sYY5>3$R<2!wT+t!@-pe9blThDi@ z^=e~Q#}6fNk)Rt~FTq)5fBMPtlCkr;+&JCx{fry5js2Q>eStmCgWkUq>;j`-Qr1BB zKU07*UyguzK7n9DyFRDRm+=MZ&kpN(v%Y6!M zFA973)fiC28zBmgPEqiqGR^qXLAbvlam75#AAbq#=Fj99BH<6Ve^g|u^rxYNrd_>( z2DU}@s`8Bu(qn7z$qT1MreJYUZ)+7ATcqk%72|!>i@OaGER+NTRiaKa2YZPEXUvgC zxhbwkLnpm+W8AuBTG4MUm}AcIa}U7r1NqoUMa1n)?M;ZC;H9IF?pU}#KtJ5Jh;0km zq8A?RU5ziQ(Q$p_LtpQ&9iIAWw9-+j=9&vfh(i}WqoegKflp$5li27!L&buSpIQsC!NHHTN1Q!z!?dLJKEpXdY`Zv8#j{d!W->tT%~PyO2*w8Bx$_C=qrfE2c^$wi4Wj}M zDXK<;8WC)s-9Wb?ZpMfvh_U=TKaN48Fq->vI9_N!)py^@;SRkx1ytBn!rp4U{;o53 z&kY*TGxk-$y*e-1R4zF9aZrvzNB9lAr*rld@P`l-9lay0$+C6Y{(MjN;i05iV>C{k z?1m}oq4PSOr4yC3Wem;m0+ukgWqT&L9mvStV>$HVZG%cn$b^~7mR2Ron+B$b z1ic&r_D>s>^bqni(Ijj@tkSo0zYq!8__dz1U)E}_Vs)@kpU<=N{AOp2@fqjw2>&Xh zHo4(>jk%7!vqz6PK^$d#w-e)wlJ$62Lv|c3u}*P7KHe$EZ^1SopKuT^^uHpSWT=s6 zAvJL8++FBLjH_bm60#d$r6R4x{k=h&M3{pDTzD|V4DG_>8N1P*!~59qLxt&7%|Q^M z5HH*9b5a9BY_?;;=z#?3?_bJ%%B-Psh4UKJYYa(we0nqv;;#JX{n?s_sTv-nXm}j? zYtK|NFaY6LMCsYehDe3sznj5$$cjoE)3F&-;bI&b#z^hIVm@`E9+VU=7XI6sRs!M|Ew;c@uY)H4(?rWPB&w`=2sM*~HSZ#~xY$@mP1s$IHMMK;Z=BJ$j7iEGpb zuE*d8hnJ+^8iB5+K3=C9Q|@Hk2q`D+{3p}`$w=ns(%}Yzr72_`3~OO-gJb$$aT5@5 z@Ee8|B&P*akLQC3*?&5zTcu#S6j+zot?NthmEXg?SMPdCe|4$aAb)qZ@#Mw=57gDH z^MjI~{^PN!cQUhgK~4p93U!0K3IODH4z59jOs^qYKxE!)97r^O^MM2pyKAspKjpu? z>v;2^h9_;xyeo(HIO;0IN^C&+;b0-*0g_`QkJX(9rW_FaCnspxXCVJJ2u%>gtOe^& zVdp*8{{Yj}n)J?r%Ira)&A$hrK3W%xu$Q&5DES~v5U&ZBZ<=D`x(Cbu%BL2dGH z4S@Nd=cE_Y6`|jUEd3*(_jgP_9-fcS$Oux_td~nl|yH$VjoCUnq=7=&wn5e{PF#ySJ`>L zH3odgF>YZ92PY^aW>>Z5bZ$GOm+sCZIRrpkEVw&`2XV;Opjae z_#UjGr-HxT3p)Eh|03Ag8Sq#ebdSAUS`e(jQ-QutjMgTR`-F_R7gsiqdjm{+rBGTU zQ@1PELao}>wgd-$0LZp+^8d+J9Yx#^&^GYbfBzd_obc>7c=*?PE$YYm zyG<@7;}E>Q+dwqso@zO>6qlG$f#cH)jPi=K9CF;Dz+*-PqvE0N z)h=WWnY$fdod2}_?TYf=*Sq}k+a(YVifW5>@pmidUjZjQFL0IXONyNUJMIL-JDx!5 zjMMSydA+qE3CqsNCkFCiq({30NSE?wpY3PeKdH&)(yMwWLFQWij~!7IMgu>?hcdi* zwWU#&Z{;sO$d~vKMud8sd7lGQeA!WizkVFpH_ZaJEFNv7|M^)jnc2%2E#X7w;~tAY z@tG0pO?h}Z{u5BFzdZ6Wv3?T>(h&%C$z4ypKseDshT4ncY59R?FNy zl{<^Q$6fZmd4t;f6Vr^;j3N5@T%mRlrh_7@l7f65&st4cXyWi2P9T7G{hAR1_4nZ! zCcBtNGt`flbLZC=bC98cg5I99MxOI!`AQA}Qwjm!PbWaWzK$+1=nd3;IT`O9?j4SI z@l-=d{cFOd)^)vHdiEHrz$Dy2xb{bfXA6{(9KD%*zHb=5Co(cn^vqe%+lPbA-oZNX zL709C$)yl-5>Nnzkb{f*r6MoLisJwBQ$^(s*E-v<;;*LpxgRf{{5X>xg`@sx259H; z&kLHoC|~R4Ya5|edRF6KpZquz6$L3nRSoys6vq^*e@_{z-N4@oc4m6LSC=Bq{sP`t zk7zeg!S}sExl#7k-jbLn8?crR|4X;yp8!$-+sZt9@@L#uX0D+ESeotYz4zzfXZ3V` z4({Dcs*NB22|klwbuCyVm^l9trpX@dHgr9EA;_DD89bxv+lqM!_@}lqI=bfD$FYNf zP8J8n_Dw)49(;DQv}YeL`Nwaz8~zqPM{Jmsb~Kp)x*VL~&QC$2ztps0mp{((e)yp| zt#g!bPu6_4UYEBJpHZS^k9Z`3ApXO_0ur?kK+eK-gytG1Qj_up!@n}CS?`LPqpUy- z-x(jCJbHA1I}S6lJ)T=+8rCxVPvW|sU|oOld-fh(;+$yk87A&zst#E;*%=dKuI&;} zxILa5?e0<@y07EF@Pt`PGb?f}4sl zK7my&C_=+x#M><78*k6)WqDa91 z^R@+Zg4^?F)uV?RGUeqND!kq5Ue!{`ED27+>%n>WA1GaS?vaf`)*{i>C8Vjx)9!l9 z?7&58uyaT_qi{tmU+rvj)lb{ND0)NRn_aM2ALMWU+&c4k>*%z-#hGuJJRs|Q%})(l zs6!cFG?6wD17WMToCc7}=2d9ien2Pi&u1>?cv|lfQRxq3JIq#jDC03D7;4R`pY33Z z)&rJ(+81S7H~eA1@jd?gFeMLZZk9>&fo#mrKYuqH6Z0?+8Nqb!g6ePW%3uEc`x^a6 zFf4NoA~q+-8ECLSw;+Vn1PL`{i3~JimG!cu~75s$73~pP_MFaCaC2+#jAvPSA zXLFiOE>mx`xACpk&ULn9${)^!K16XGlxphqjfXe0w#c|z-nQB6-x_E8t_|tohF&{O z2RPuHEo%)&&&v?gwOsfDG6>`~aeG9zk%l690g@RdSC8t;0Z-chvIh;csE_Qit3P-f znyM${5rtJz3ZJFGQmwvW^EQ3kI@)6!FV4@zI{j92n@<+%!7~u11w#??wNzM4dtO>& zfu?3E9zAZIS1*u^@W0cicd7uQFa?}y2;ocG`-jZ<=OS+%*A!0w;~De+PnhcF zOb1pLpDHY{vOJ>QFM8d1^BY$NAGAQmi6MGaFAK%1(jBfkt&MM!F|(JrG>4aU)t|2q zFUFkzoTAkIA(c#nY?JDO<7mYeogX-|6$qsPvhUuFPs#TPBxnEj(7JiSqwS0HtCPd% z;qB$sZuAIu6}WqHw&3lHAU9-Nkt-{q+}FBZ@Y zRX6_gLU=|vSrYVEt((@Y=_$A=(qaxWvmGnV_WU=zk*`2vgx9#qLfJs}SR_~wA5@Jd z0q#mG^vGfUB`#Z!2+HKm^8u}gvD()*Ow$j6vS2Df6sOH7N>kYTpBHLA@)2iO{h18$ z;>B6tPf>u8M{$8EA=YO(u9%{4r%%HFA){n$7@suq;h#zi^qRY)jGU}H%9%4bz2xA& z1@Cx$&!+BCgln2g8F@DUQ{H2wOQwW=s^{n-P)%z}Zz-zvFnA-X$b&-anr=)@ZH51{ z6{661sn`T*1knqS>aP{T00Ao@4g+Wz8?`Aqpyk!Y<#_75n<;NV!|)TKCZ`oJSC0(g zKKGPV1w;J?*^zxQ{57RLiy&;i#EUEH3*TlSD_SICv#8dCUS)RJ|Mu(r|1~%FZ>KeT z0x1*!?d{yZy;x6@WWG$2Dw!`5w>sZTlHU9vNw(&P@J~N+&r|p}nRkiH;dOt$o49rQ zt4i{N)YV_smGt4C5&VzV^K%{)XzH9vHF{8elu~O zptibn>Hl1%>b4TM-K}fFKa)-Rys8T&@xvlnU*U)KXp>I;V6=u4Q9xBY(CBSCy%WQ_ zC2aXUwY&qraZc(wzovDg$)Ij7zj6GaemBrT;~WoQj)(Pht{r9E>rI}tP3nt#SYOuL z`_h9}>Zw_B_GuUX+)UoRPAhFYuWRUSYugnyQ z)K8D->6o5E|KRBvJ>8G0xS+=adfKOMx*KY*M^7v0PyKX4Py6%~|A9`>(^1%o1BVN+ zNl$UU>!&ZN>`=D*0G=+TShnTq)Sk6G&8IzW>2EI6vS}8QZSUXF}^T0+J+06{%{5y-oD6 za+`J04*$8uV;a;Wbzf3_3Y#L|<(4u_31kuzPZa7i>g(z8!@U0L3yo_H=3xkAd>!a! z0%V;3LHb@3h}png{p#xORZLqes@lOtI&%psKapKL0Tu4A5=m!D zwbvsa^W_x{q3?GI9)On__PdNHebZcyPs+vmS^$m!clWuoTN?M~W|9-Fa;uqM*mmQ_ zU(oU4kL!~%NJb~wS?2Go-te8j#Opoml43#|{T%<(BT84`aN)6&-GooMFs>BdrKhPd z8+>9i_?N%%ulTbr{5zz*4ZlCYzetBR@b`Y|>ve1RV2@Tlhr>i4Af@rWIihNFx_bQ6 zThsF`dAelEHpY|D1N^6pycj%%>7g37%=k+9cOW%Q;s(#{sqWbUc0 zv0K+z)0=udilm(A-~IaUnrd}V;k0#EXuA>zQGa<(Ep~--S$2N*bKtr%+}b#`8DAw^ z{-#Ul_mFmroA9y0qcw!7KhBcm80s%hGGqbI(~@>e-Oy_~7mKN1T-@^Rj2_Dp*H3E> zas3((_Hmla_a{W4Zk?9=#yuS1q&I5sCOOxh+@nojRyS8t>Y@3TQd1S&g;Zu0=XIVB(oW z?Q{WPy%R@A$#)iZPqCPt2Nj>DaAiToOO1+|RyHa=b2Jq}#YZ{aocO!0C^>g>lDn|@ zZVx4a4p#9+ubJ{X#Uq{2y!GKU0RVolVfQ%8o3us z9MFR_x-PX)Mfao^KE609)aPzQh5XnjPF51xu1`Ah%rg#D@``5{>U@#XRl@I{rUx*` zEqnno8yhq%rbM~0ycN^1rBn+%Pvw#-;$`EV58^|nU(nTyTsm?mI6-cO_(f*zYbHpm z*{|vGJ|4-XjLr%k_e-KN%;^9fsvClNFWzA_pIPP^iBv@A`dva7Xg?{|@k$xWgM10+ ztn#N*P7-YpT#r5wj_SzyrB7(-c4=$tz7bCPv-4ZZy{4~DQo0q6W%K2?X<{Uvu4m_g zn{#XY=cfLNg3>U_Hzr)wxmI=H!m4CX4{^dpY8b+WvlO1SdLLibvwaB@)q9B|1})l! z^W!VF@xi*k(RiA=M4C$3weWC5h+IyGq9(l0GkjGF|5cbn0-A(Z*c4JvcT0u8um}wm zUF+-ox$}2eOXKtpiu;LDr9$!cDnN;>h8V5_Kt!59$Yy)W%ZmNVFfv! z!x4UZz;~uDz99zKpRM}B$=+`==4m^cr)PMm;1(=Mn-WzIXFgq_ zj~r+Zb)_$)a^6~*NMWc8Mz+8q>sAqiRldWGRp6tXItj{)jxd3hmjtw?T=?2&PBc4{ z)a*_>Txf+zLC%uAXUd<`F#276iCxzcT&dq&FtfM|TlY$%HK0&h*K*j}z#j=M@uju3 z94}l4V*XY@RaWFOJ4ig^{Eag$q+O2oxOV{3QFDd8Tl47r6R7i5VZ{hu7%B zgYP;-??)hJ;p%le$~=G`Fvr5ZJDH4p0~z8W^mvo{RiS0X(0))LI6;sTD#omil`PA9{$d{si@T_;5v<@fP72&-_q!c>@Ef-fL4C+qHuQOH? z7OcZPaGpDGnYq%2I?AD;|Ev)PCIeor1_ZAlHR68eN6shhAp0J==qL3iSB)O^intwI z-rF>y%!#Nh4?^COtLxMCaqLJ-KETmmqmX`(D}lR8BgW}-N_HQnOqOfPPlzu#G)(Vn zxqj=*2h}&UpNLKGizfCX61Bk@vkovhr{NtcXW6`|SROC4^vZx~Cr9R4n zK_=b9OgUU)L%*bAc6jctQM;Enza7w-_atXEl4*`px`j#_m}7C{BsIjh#LXlUjcP~H zqPAg$W#748;~`u`fY+r}OkR z&=Qv~w^RT_eMhTP@zy;^Z>3;e#S@ggSXr^0dgCJx^<8kz98XQ==h5x9-{v8Sk#+F< zB{%z}7MI^$rrx^A3S{ExSpET16KmjASgV=dPsb@+UzsNIG9L-M>~5WYcc|NzYX)uD8Ig-2#agRMTMl9@<={BemS}eY}Or_AS&U)r4%Jf!{)FGKHmC zzshi9UhYrK@hnjPYB*Cz!f1UR%fr3k=;zyZvvG69_Myzt<|kb7C+=2tytlNV-%>L` z+7@Ko!W+e1;ejoAcl1#o$d-9fkHw=zz)DNsE$_Lf!Lc+{+5D6HN<%aC#dJ14 zH%jjY7w%`V6Sj+-#IyQttnbf!ABwnQM`+{*ZUDL(dMBx|8Io)Xlyz6O^!p_K6Kr2> zdrv&EtUvIIa1;{Dv5-~Ns{4b7tXUeVg-MTni!CRH>qYhOMtm)A5XS?{L5jAKxpqp_ zCo>P$C`S?xbnn1X|0+@c;zyrEZRlvJpzM|$0=UkLTcgTa4rR3bqmFV#`0;LYZv~cv zGdhu9ojH-gA}=$;Nyk(k-yk8cmlHPSZ5s5_7)|ArKFJ6gq%ABH=If0j97qDHfO&VT zX35k(WA%qU(XsYWGo)RIZd_}%H@LQIIE<6LO#>AT!^>)HdkCmia7Y$uZk}iNs5C$o z5m7nF+UvhnHRx?H`>K05OUd{L3{80N7Xkiu+xW1}qR-#?6-Of7W$l0iErAqR;B}`kWcQgD|nqz!h06r4HA; z-zFntKvC_ixI`NKLsn03l6I}QaoW{VXal1lsh0%{)cqAtj_bo~&>ioEC4FaZA84*- z7kqnw`NA#rCiQ4ChkS_3c!lae2^j?AAMp759wYGD*oXai@;0==s}zxy^&%|N&r$8;-m#u6_in|YZO}Eoc*WIMUsEyli{%5(x>v%i z8WZ%0RkPQ`K4!7u%8P!bAd!GwaqCRQhJwuWfT|Cf6k4GkR6N<6B-n7J&p?`Cb_jRd zlEaC5L6Qz30un_wJK?WMi&+^v5d7m|iG^p@`_!BweEY2WVSqrv@a~?RR5Bq>j3Vkb zH~L_dy43hd7jn6xMuHr5vIE-R`+mvUiEb*DYl^9WeK(eZB01I&r( z`;mK*Q#B=1my@{bo%XK71iRMx{W5zJS4_A4=BQ|QRstLI{ktG-C}}8G#B9=Xs)5VS zLZb1+2x#4k_9<{O88Y(&?Ait*JBOtjQR$*2b8q$x_0-f1R$+r(^=2~F^MX1Vq7U?k?l2BB-)If&aB2h{Q(uaDqyu@Or7 zfl4%jaq!cFG=@{?*~wu)H79cW42@L*v5ZC|@*)>enh;~z#LXOT z-ag#?DD{Tk;WlYyJbsh`8w7SuXbq3wyUA048rR<>pF0f)ynf_>2VZ99eHpyZ=}kAu z$rEhQk)~h*@=wKdZ>xv+O0|2Kg$_P$`GG!I#WcUFc2B2!dy+lSSL)s#RK+y!u=bv{ z`@^-*LwgPF^ZSsowb$F;hxU5!vqC!;RCXJR?X$!Ro3KRSy%W%{mzqbSY4nQgLbXPt z$cuw`M7ozmerQyadz&$Tl|{ZESE)D1<{xplP2!f5XcAcUjG8b%EM}}3hS{Y3xGCNG%o~7RO#-^7)OXY+NxGY#WlE5q^Ar^%dwMQ*KlUGBn}Kx`Ks|q+(6W>ad|tIW zU8mX_Em`qBY)pJo-6TKQ-7%0I(%fwFvo>R@anyQ3((Z)F0NN8ae& zNot6`+)$^+JWYsw_;!r*=v0|EQ9ycrn)2H~4t{N#Zk9gvuDigOWT@2Wn2JdQd7gT! zW6m4trP8YrYC4`BXO#U$6- zSEA{Tfaz&jzPhE@*(mlwMhq9`cNQxVP` z!NZBIiMK~3^FMl{C#6W_Z1+_LCD+hGwvJc2T$vt_O-Ksa+01dVy(&?OvHkGWQC~7K zHcoOitLQ{-4`=VN+`Eq4q+-{~iDvF(qzElgSt1(Q1~GsRo-ixw7ky3HWD#P#l|=w^ zLV`#qc0pRpR|dB7TJJjRf+pnMeOfbXRf$c!M4#f1iPqG@p9Y+3;F~+iqWOw{{Ihw6&V27`>YM^3wVtB$sW zgFJViyhk`FhhYlq=rb+k2+(w+l<1)~CiP*Lt__>*F1f zhZw}XE-2TL0U=e91ou9Y%{GMF|ETc*j0AWsJIIl0>mqIQk8gO<3!*50hm7BrN_YgB zU3B*m?s!wSi%?77DUe<0F)BZ&dRxIis2J~y>;$L|VR%bzX(WFRZ9^4_`QBY@`GK-j z!B+ecEwG;8l32|ibI>TzU1jQ^K-xI&U!OD(9#nK|z%8DoTA4I>bBP7UDu1w@Gz;M@Cq~C9oK1Zg^_qo&6&@S{05u&J|S44PhLj;wM?F>`21FU?p0VAe}kiSm6UUFIgCjzfKPFgO5pgo7&t zz^qXN)b{w9!e4l{?OvbGT zH`5vi=AJ4<;E;RO7ZRmR8nAek_nQ$G&#ij|bM8+DvNEgQDC21&McF~IsN7Kv(xN#8 zhbg}e4l=s+a37ncPpL}m>{+&Zrv_?gD-sFIhd-p2Tr&$@|og$Tqw z>+sEwMf=xM5L8*F?sx9}W zvVON|bht|4;P%dV<;53;gqLSd(RHt7Co}9pTSk8Fq{!i2t70L3uPG7=t zVuuea5=Xisj(jH8WRorQP|5RF$rtCcSk_y#0Jedf{?8J5E?iAr?a3Wr@ zdy9sH0rMk*(Cnf_K=3>?*ensyHf9Od8!Q2t^I-uHzm$X4BqzJ=AJJt3A&7r~(P*5j zy6q+n=Ign!n8c$r>c<1L-E!GkgkgS`e~lCoxj^ky zebcU&aJwX)Iq>pup!ne9b&_>1d3Wrm2m?8;+|^E^L0tzTP#~^^OcEH_!GLK$nrGh7 z{OOKoK1wHx@LoOW9Y^pPfOF5)UEn1bJr2DHIM5wHns$thnI3M5ZQissrQSn=fceKu z>GUD&Qw${k)Vn>65kFWdkWDM_CUN%ZL5%P~(IpR?n6_sK_weCfkz#y4Pbom@NBnoc z8JMv$(Zu9oH|bnBRgVrk9OJ|XJa!-9i938)O%P5QJxz~N*+ba4mDKmf2pRP=TM1az+>5kzASr(d&}qaAeKH>cee?0eTD}3ebC;ql z={N81*;o}f2BDkXo4Bzn|4qHC`k+!MFH#d28vjM~7r4d=5Vsb$3J>B^bl(*rudum- z{ZMKeL^{Bs;vZgd;LMV-lkOr{HLSW=tB&i)V1SP$xTCvq1T>b4yUuKMF+Hw`?1+3? zzM@dhlHBK2oVX#JUvE{zoK!>#k=DcTIzHAPh4C0A9vh9SChz#$qkUAOyePmf3=#M~ z@l$h@j<$8FH|M_=?&u<=Aa%rtfU@XwIpWyN=-;GqO1dUyNr}VGdlF^m6NXdAA$-#* zyLJ8(^sB~*>mIM)?~q!kB)kvYw`daokcg2v(THjc@)-fiX~a5#nJFkFI%)dGs)tI% z^YM!WQ1zHN;toF0$Z1D1?y$Te_cOfRH%kt};)oN-&(d{??7BIW`_daB3a^FCM8rBs z<4B)Rz`qrl76xdbcs%Iarkr<5+vN6uszmKQH=DI29dpmtL4k<{2HMSy%ZtP^CQjEd zy*YaXL)#xE2fZh@yOejimR-kLPG(=^?Za1j)SF8kJ5S*yIh=sK6##j zsNjf^Y`f;K0V~WuP;b0`uOgF$mfPY>ew)gnm`aMqWE5hDYK4u@LI)jbx?BHHty4t?A@lr7)De}-k8sC^$)Uh)*Kjs>yT*&{_txm0rk@PCn+ElnSh*= z_K#S;w&Bo^pjgl={z0}fZj{Vm(|>@E)*Jk>9IfyR^4_AL$iWZhyGi)s*(GKn=uYtF zji*mwGYlr=DWS@Ufxq-PMCd_K!3*z920eI_a^wOKFs~iQhXMBCtHaxo;zvNROAOfq z5SwF%@O^SM4^|=Q&b~wrsA<=sL-qvoCd|L0Ftrqp`g8r`(s5i22q}GTp2PO6(_$H|B8xeO3!yLSsUM%_YH&inN%rA?)j!bGIwVy)kxt z7WO=PV;*)}lgCtT-*@ewWbgDQZc#7MN1MbPd64^1Ui1_LKVat~y-rR%+k=sP-ivvh zuZq5bVt>OuxGqKdBFTNp&>gmq9X&-GLwz_Xa6a+6bVZS!md#0IcAdDA@;(sa|5MO` zWPqyEP4ph^bqGO?-kz0bN6EL~C~e6dl0P@N>L;w~^_D-p3}x@ciZt+#!D8!7Vg^YoQTHUsfb z7$i2Jn8ZyRX~m2Y*gOu>&PUoj!-VePYYIkFS$7A9%^!Qz`yQdwPXwJ#AjMWfDp1**^Fj|yI*?U5CakC&F-!2$ zN3TE+%7R{wne{43((I9Y?%-+aaby&T`DLS*pOK78ugW7CXwlJjhUBamRtn62CiZ!1 zc#wP5Uj9*=+Qm9{SfUR0;aRRo18i#ZgO6~ZANZhGU4;)6#Q2s+X{$4xXyI3lpbTd` zVM9+TF8NT3XGR()ZQw`lt~E(;o|ZiFUR0d0kc~4Z5_p%~GH5Nk8j{6_Y+x@ReL7Sl zSr`lSA`L5DiO^uE*jY#6;VKmxPP_XVEt|K(g09usj`Ufk@dyi8wk}1LwN9>m!28Ii z-$B(`LIwspi=`k0B%=%62sf#r)|IhPd&;O_K8k_3CE+2}r5pqPVfLYB{C7+_Q0(0u z237K3L5RHvMno+zA}T8?hC0qH3W<8=>^lyA;e$e`aslOS=EA*eO2OjJdp$Z^Vt%-= zs20Bu-iMKKJP{K(*rvg=d?n0%X4b(_B*(c^`gq~xD{WIegm61+Mu;B8S`~&pVFcOd zsTLdp^*Q5c@r!mpK-ZDwtqB-TB4S7K*BKA0AXmTo&cAzO0~`Sk}bURD8vnE1a5YuVMSI@J)!T-7Ika9wzS8Xp%gQzUs`)v8a`5t_uU8gm9TvQ7_0 z(^74V4XL91DkJ+?!&stq`XlY4oY8Ek_X0<wu>njAOubF4^FEEqu3~b}0PV1Hd((v?$F_sDp z&Yb%!7-d9c?@8$+V{KrVdX3s-^yK1&%Zy1%RFaB>Q~8dKYfbfAy%bdCs$+H8O$a%i*zGzWeGt~Sp*_v;ig zNCw_ha%8%98Yu%0)Jo-(bo4h1;kTcrUs50BpeBSQzk9w9crmgxo~9bS_c?nVhCx&F zJrnXYQGV)6D!MHsLKlpCrBJAe@>W5?0SLCfATYFP@Op$Nr;?bV8s5}1Ep%Qy(617E zE^1QzsL)^FMz8iBU4n$Qq(B`$Zhu8KHu5tt7eCx(>x}?4B&ODDVPNCAa1<|68x728 zFG-57cjS#pe1ZXqHgh^OWZaI*tY=6bgg%DRYnPGDDtm%C~YRcuZjq^3DxQ@LkIGR3zub z1dJ*zyBjDN1aeVuKa1b zE|tGb2NYirnz%`)wc)ML%$I(p14TS$zY*HF&q)p#{;)lZDeC$YS|;U(P~LDy=}{Pm zk<3rzb~;IeYFXr3>r8#=lHLWZ_g?2^s;i62vEwv$M|hEb(CAxtEI{AKZ3!0uR6D5R z>%|MOPi~zhD?Daa&dCTVk&;#p3Z*BlTW6nKjDBzBs6lM>{8_p!mA}4YT09))BCH%V zX{g1l3?c;cS$3w;G&F|w8bXoRw+K!#ND^6(I4&1b9+u>2Z3>O8GieI)a$~pTM zb9UC*wa;Ai>uml-;m&q@7C|Mb2Fyav`TsJ5fZOqI!Ehs2C#hgd-5!#;aYr!`1%*(g z=PUMkm8^Z?$bJ>D;!m=g?qJHVvt080B3fa4R0xw=0UtVM6ig{$$JpWA^!Ox83@ptD zUf*Ep0e-J4j;*vTH@Ir2tJY6Ps(9xCmtOd-B7XsaHs`n^IceArjRVnm!fL%YD*>zO0;bL~)8CNRlB0BpHG-wk? zG#}6%zSi~$;=gr3A6o0}b0i+mcrP>55pX=X{DTdOtRe#=y+HLLsK|ZXWVg+d#rPhn zKtDwe&gutN8Bd0xeuj;9w?*-YDjyaZH+^g@@6U|?JoVO8fD5QXPtJ_Q?=N1b=CiN$ z#{Y_$Uaz8!f0X*X_Z7l1i<&B)n62O6_EQ2WsQbxEN$%IX0x4g?lLJ!>`_E#C>c#&#%z>_)Up*6k)CBtB?z@>Pv)_F^|U zif3y*o~?MYDw>IUJRebY-P=&Ky^g0J;`JTpu9M+79S+XeR>r8dQt!!{-o56;@2HqM z4c_8C_jSchAbu!J@g^&R3ef>-c64$^MtL?nuxP)IqW$o|ApG(H-$Qe!*;*#Wdol+I zxC3#t0c*`aNnUt4(E--94Z+L7n0)SSdML?3L-ec1rJmV`n;KnYYLD<4U%5G^G1JGF zf)jX|wv{e|(j1#BKe_XvH!5tKXWu+*3@`rCD)T;U81NnGqA_)~+d=7D_>f|igP8f|^F-aDS3UOvVn(F%dgf6&K0p}m zG*!CwvC1I@gIX1@n}QKPZC^Ozi}d4;eq3pcC~Hp?X1dhMsNTD3U^~elP{YGV;WfKQ z8V0@Z1ZFvKA^{9=&iX4;YdA4ARI^*_UO1CihxS`$;-%qEGwREnF(KYG!}$|>tSFBb zH=LW}6q9KlrR6FS6w>@Lwem(7G+6hCzEin8?)q@3q0w0V@=%aD$gIJloAf{O?=Iz} zu}JPiV0HG=SSV1BzA#vV(#IX> zsk>%!uWD}`a*7?TJc%o>lHx>d)cy6}ePX}k%sY%{jv$j#1&h*SgX!-0$Uf)tH`M^L zlv|`T&MdRq(stPgv++$^B^Pd5B_5+P$|PhvT5+CR;1&5)lx!2`JYo_&k?r;G1(Q}^ zU~EbEISy`JkZRZm!q^hTb>Bz9&P`@FVOTab@D|Xc5-n+*iWx{t{w@>G?coOkPqT0Y zdaVz{c=HpqEqN0zT=Drky^>Kz*;zF?L|igBfyG|$mi8u=Jz+ow1&0h^U*$C-Y@la5 zN<-3D-~#1U+tq!O&b+!|3_D~_?h2Gjd*da-WsYm=B>SM`NCdO2&-t)Oaq@Z{lT$SJ znw3EnKE1MgBD6nfEQT9Xh{)cqWhqKBJU9ty!-ah)82paBllIz9RAHpS;QK}MJpu4$ zR={gzDp>x9R8WKhdQgF9lAwZfGV`!qwY`RJkb#~ip-H*(Ak<_Hq9t&NC*{1&J3Z@MK&-m6m z1zVV}-%Y!oB~UzUq2pPrIEX8*$)erBgNJ+@Y<{=0`8`|rq_O`VRKp-CCfUE{6}#nW zFT!cI2X}6mZkUzX=NICT!*Gf2PKo=(cKHt7JUc$#1_ru&*HL7UMz75+LP{$gFh{l# z2F3{**1$gGQNENJFFX8>g3y{KG18QckaI->3@6#akDjK=jWRZVNB9x8et!i`f?HiO zpMBFLwHgH)%3dSHe4FekVZiKfsbB(gG*h4TI=L8B60H7`?6DOc^c}KlQI-V=w@JRj zkUzFW?YH77_at`92I(dUP}w_iqPX5f+VDiC!@D|{Nq(!mCPB|l*irP+NKG1WQoI#_GY?bW7U!)pU4{(ltpFQw<}ZSBvYk~J<%`l)+XuKFLNRH@J^@#?wzUyilu8VXrZ6Aj#dJUvvWCAkz zmc+(zmi5I2%TYq&4yAY;D54N6elMNN#s7?kr8eFx`pN`S7=fD2y-anxZhnxQ6c_l| zDMvu|zTVIT2Gu*JYxF1#T&=wNF2Bi6%mF`$wkOEN$nJc}*ly|9{4AX`SYba&n;xP@ zD(kL4%H?b4yg|+j4yvkCMg`EOg!J+|aksgG!^Td;lYZiKNsk@x4%n82u90>0r{~t0 z8IG>ILQ&5&sUPO|3wO0eoDb#U3N0zQ`YPrgr&1x!^D#VkryDHTB9dFH#~?J7L^hNz z=`nKS#>X}Vx`D{uPhqS+cDPZ#_Pw_YI@z7gd|GLkSyO}P@J!Up_J=)Y&lwmxrAMuw z8ehPHCJ}4zQ2SF+86uByF!O0^7pgGGZYrrwD~i}EF!-LZ@tg@q(FDjJevA`Lc-i5# ziCZz$y(r*;;=tvx($go}EHykAS*2WV2-X(b#hI@uE*#z#c?_>-6*?Su@+B#qxkz(R zW0fA#ka(S4cY_?pz(zXG1Se*dR5^2w5vPU>28GV60+kl$x9W<{_(S}&%a#uB+3D4o zpG;*)1&Qqk>o#~c4?M!ceAVMsxk%d|YK#N@D{3?Nxvd&axt8*61G3Q!hFwmi#j^sz zar$UI5MKw>VN&e2Qgama*=>8u8j*97CKK3VJo~yzjI{5nC~@PKgvl`3*``12M)?h= zKWzP6b4}g#@cwoB>{HM0EZI8t=?(cbBur{^#mX+3_|VJ%a^P!D+oZ`DDg)Tj6v(?i zxx|Q-yuHK+g!T7l$q(IYJk=Om)wvbIUQyDD_|HC?aff_!bP~@mIARc!|AG|9c^jo6 z|B93;P3YXG2$o)qJ<5$!BfEwn_?#Gyq4m`+6=CIAcXR95Pqe^GJx9z`jz}j*vDb3r zXIV6C=p(uAYywaY$Va{@WJd0awa}7tp0P_(@sLTM;8%C%5h9;YO1s07?VbbQ+=s;g64bTqYdNy9BQ)63 z*OWtiB4;`#&4mAJOMWtYs5Hwbk;;p%xsGmr&lJ zpHKD8W!hH$y7lRK3e{K~2r^VfV{4!z32ZBxx0J>JKc zi2ln>g7^rypcRYg!tQM$?gf@MUy7v$%yn@x^Qj0E=n6QQ`Lt`;(x#Aej|zgP`9zXU zvOW^UgUz<7>5B@r=Q;KJwQ)d^PdaT#rTmk5*TgxQ%ng;7s8|c2m&a!2FB;YplpFzp z&r6swldS3#zX`;wEM~@_o(*S$UT>iWxtDa3*y`?iog&lJL?{(_n1miyDVnQJsn21r ze5(}Bk*pt?zykc%P>HR~L&In$?waneG;+4(B_f<5mkmzeQ>aKgcn z)_}9u41hRv%rWS300TZO1IgZ2v%9{b3Vzs+`jR1-WMK25m;#(kh+82ISj5Q+SIA#V zN)2I*O%5Gg^5Qv+WicHw3j;g#-TZ0c*1u3($?9GK$wDq@N`cC2{e9Nkr68Mh*Fx;7 zkaxXsGfI|{&_4L)h&aAOy-~`Jq*3m3MrDt`U(WLBNu}Gk=(i^g>?R~l-Ca#bxR+n&RhGaeavz7omg@$aoFl(Hsk3&SK`BmU%3a* z{_js$-V5jWDhnt9iko(P^kZyl#C4{Rz*sp@-a&yQu&S)dug6FK7QBwbfq;LUYMH? z4EAt-XikqMY&5MC#pdf$>bzL5&M-uuSqZ87d!ct-3dYL8SX6yB@Z21w=^T4$srZr^ zafu_FzDj+L)Me4K4d26XxeC`ocJJ65b@Ws7(phL9_dD8Ogl^(rMaH?Zhta~`It@(O`t8 z%)R+nJ3_fjrn@FHnX2qIg>*(AoSC$x7~J$jW7s~xvt#)xVU0Wf9wIU|)T0FC?jChi z?3c>E9J!*)vAPLsZqKO-(gr9PTrSHVZXwrf``l;P12Z-?j$X(^4$R zKu49=znz3%mp7^Z5W)b2coNnnPE4LfB&&NSxh!vP4A%ZevRV0PkQD^=HXoVVN{a9@XADEPc~H7x{2+Pu_`4Kz&A zFoHRw&TphzRPlyB%6Tp9v#-9`Q4U zz1vU6KKwA4Q?<`_=ZEQG*JZC8pZ@ME$5CWph-1BC(q^5aZv5QxOLmF-irZ?3gG|T@NP61zJY8W@gNj*HX9B zxHa4NsXCMLg+L#UY}KK;(sq6T{P=8x-@=xOfg)pO}pk&tOOB4(ubI9FnTrof}jP}Is}i@iNi zx1Y#p7THM@TluK`#=hIq%yF7JDwj*ip|_HQ`vb1t1H&@2aR?WBgy58qaqRFZvDWhq z4;hJLhkLQrZ4-_de-m(Nq}SM{C}a+7%HbZt4uCZ8J6SrQrab`2baGD$RBr7D&{|DV zZXs-4;9xkEG9W$C)Vf-ljIM~?+J2SBnsXspuZ=g&tJDyhT(X0hBFK_*b;R0!VQ&%i zsvBxSER*jYr@?4Th-&95g`kB@uVniszNUPcdF^>k=w84TnwNw?s!la_PsPPvNc<%a zFAOfY5(Opb%?n|Qyo&{D4QwY$u_t@L2W5N9%(oPwFN;CC&oedsJj=)x5nE~LIhTEw z1&ImJn4qn6LuOm#$(?w6c(u4Y$z}`-ucIy_$S%xM5Wg}&g_x$A2{~2ZczKpfHo7csbx+Mystqm_%_?6Rv;}4!R}zrFVP;9gM8MN472|I*Bx8GV{fCBT zzw`W~zw|VVy?#RHWkV|d6iM-Pxqj7)?@Ky$QE~w=h5ah*xZSD|gS*1&4Pxcxx)GCQ zGY>pZ;LsPgSXCbTkW*GRDrfH3pVM^_Gw&seLFD!9GHaPt=4+SDM9>8{Af7adSni8d zpj#6^OL|+$tXD1AUl+YD&Rr0KfnmTGxpvE^4DjOgx>B8wUPHn5Nh?bgVhqHmTO!kL z>%&!%9rlP2$+QlwLb)UdhRNxe?@0i^JcQ9SCPeqoTD0M*@^}QGK*m2lx`?@M413DYTWJ#JU`HK9glVs(a zEwM8k#R=#?1V>8(Hk%9YB$Zv{q3OrwKa*BEXUrZ`S1e|Dvdv};>Ua_MzN-XAu)88ZQ`kX>UWZ>e< zkDQCcz6?+k=~+-_?GBvW%pW-}q0dRSPK;=;$z?`t5r>Nlij?d`zSm$N%fK5zMP|Cp zhOl{_(Ihd=j`G4`GTuac7RC(lthI?;0c;`qTw->i=cj4so6~S5^#mNQ)Mt^@_=k@2 zTRDjhPQi>hGJ0mf59m~sdr&ZY_x3WeUshVU=Tw-aj5oA}aH03mTe-vKN=9P&2-G3m zfpN+xU@gPf>m&7IsZZ7F{O2dBTcOa=1b>La(Y9rb9ZbzQTQvZl)hsCIb?OnFn$n7d zV4e#EbR_b3$8m%gfizHtA3dAfi7+}9NtL8vHx4=e6$Bc4LTsa;vinB%Z$#nFpVNX4-V4lsyYJayk1cbOVhH!u7t@s<=85g@X;y+A z&7mpoyeFz$3`2}8 zWeJCgnOV}ICug4Aq@zl59&dtH{AtP@*@%Fo6q<%Ky^Aj3Y+#rZlb%oqdy*oHLc!M& z4z+!pw&8WUx0?F4@S$>S+&M>RABwPYm@e7kfa3b5(RA36{WP7Vf`1xoXkP+lVf&}4 z!t9-<=1T2x5Oi-x5cdpkr)Y<-f2RH-2vXr#$Ssqmj3=cA>#y<1{!o+8h6n5y@iLB*8Ity}*pCH`-7>MqQeTy#2)Q;a`;MBzmd?ngA6 z^g{zj?$>yYbj9VYR;UQ6yOQ=jqZtf-SQ&^J|UT-;8MAwm5G}MW?{`lwZJ119c|qU6Z>LSa71S!CaYf# zt>y|QH2EZn)Ou&UMkAm}=aesz5~tm!f*CJY+7|M{vsE)nnB-|C>E9hfA_|7t_ctZm z5arwImcp7%+^Wa*L5$)8I2H}*@{+I9)56`Z5C^sIyhz1fIOnghyrUYPo z-=^odFk(WYD!OjRE1UaAX+a6l$!UPIq8sKD^P4yg^IYX}p_AT_e9tzEC~}lA&&8E9 zXyFxgG7q>@aX+t&Mk5hc!C^FAihsaPvmNWSE`bHqU;Q;XK4Whnjn2SPTy%T_c8D_*)^H9cqJjBwj5cF4)4RP}uQS;UPnqSf8i+eTi=HD!) zZkH4*EkaP)CIqRF(}|@bDO$|-a;qNT99J}-M#)4f=e;detUyaDdB75%v|)MRfsrH- zPv8yoIfa9JXA4(GM@I`#B`asHy~1jl(y;ABcl|v)q#}>Cb}y~=8rr?I+P&M_TWj}C zYj3T+-gZy8_MWwuZSO;Se*iT=%D>xdxKDp;-cS6(-0(!V`#CDw&=uWBN2^fr;A0>T z1$$EYoGJND#u;P!HufAkDPK4WS}~M=b|k<=FAP7?muCfgo>4xZGXy7)dn0n^q*SJS zGgH&n_`h?X!e&5%sgH~?kiSOti&IB8EXUuMXm6W7TY2D)b>Ss+VBwCO3dQ@*Mv?R( zF5YQ;1YejA%)U}ypIBiardYWh5Zh-WChe$83+0szG6-C!Dne=ABU2!m@qUN#XEqdl zX~G5LvY!NFI950Ro~(Z%g6K`w=9QH+yt1lh4&Ksazix|>Uy={@teAAhWeP&3wfDTT z#s?pF8zxug8A3W3U!r?@AQdl-wcu6C*4EGi0cLzGiI4fJcAE7QZ2+b3_bH*@Z14kj zkR2Mj!DL}mvtN6*&3)>~hR*j)X6kU}J4TO*tGUV1Z(d8B`N9P1c$pg768Z6IC>+Up zm=WB!Y>${zusw>l`R0MHmfQ7<1v~gc$rXDC`Wfk-Mhw^&7sQtc!V-cZ;zOaKGRQ_s zUa%unK;QyE^TdPZJ`f#wmsE)fiP2@_a%sF*x^n1-CZthcln@Ce>sH$#0UC})jpH4e z&eYM?k#Rwmj|A-LK5C>Rf$-y#*ir4c-BIneae%|w`%3XF#+;eA=d~L>^?&*3O-uPF zH3Dxc&|aDKMPp;TN+o(J$~5l+WrfB>8~C$-=mYY3(VPVNl7czJn^1uIIcND)ghtN; z6MVNOX&BjpI(QQn&b^0Q+Pbh}MJa8#5;=eGHFg)G`gRjlyur1z8)eh#XZ9`$P#FCr z&ZKsrj&#lhbThtZev;p-X|XMu(TdKZ;!Pc2!#-+JTxcMLZc>SS6c_6GLOJHJbGccs zQjMFT(SK8+0q3b8Q^^;-w`gwOC(h)N!PCAa<|Cimd@<9Ck5Y}uHqn~TQpK5Wx+r-q zUi}8V-4_)TK3t1wdzV951}NP6^&v$7w4@0YV@x_h>8E#InG{DF)oLts|HfQ#ggQ%u zu%RsZQ}>^k(S~t=U#6r+)VlftuG=II(}&YZ;yOGfTatiB#fG-I5<6xF*VdwqKq~Ic zK|yvpxU)<*4)eue!=9N%{ZJzf@w(l!u2f(95k?o(#!3Ngx^ z2IlfR7Q@&0#Vp3NX}i|_vAfo7gc|^__>=UWL;D?5^uUdNzx|*$`QQ`q`7z&{xfR`c0>YFY4Eb$u5?%nb{7P(%^LEdtoq$9*ceA zwqMDe^eMb!K4_0S(baenn|s>%53Fm8*`b1ywcnHfAaD#?@bae&${-k93;(ec7FKU8 z%Oz)lM44HnjXE&gXEri*McNNtk?ygM*A6qw*6Vm{(t^S{{4}kvD~5|7*!XYV)67o{ z<8boni+%s`tqMQt2#){IVMVB!N&rN3+rmygcP2`BkXNZNoT5#5Rv+xl$PvO*ioJ>g z<^q#ji1sC@v@)?`4KpY!=}}7uuF-@>Aoe^Gx?ErgNJcdtxNv^g<6xQ+;MMYSxo|C2 zfUzSSt>sJ&7&kB@hv+2DdB$h3=QZ2jJLCQR&)`|(4CZ2JxW^eBVtOM3{1nUy$H75P zj2P{n`s#K46c&?*ov6~ED5UyrK}~IRPcp|%8j(#0V$^?{nspDwmoN&?7n34bHI0g| zn?ybyyQX+9AyXrUs~fSd+KZl`+>fm2;V8Mf-7|8C-KsD@rrq z>qJsabIK)8%u7~fjdGv-f&(zw<@s8F`<1}W*-{p5+^?C2S?>D8k@7EXWCFg7$Vb>o z>MjV8QkZ>wk{Z;0wD_>Qk7WasaK(8CuMF=*N|6EMI_w@VXi^u|Q)rcD@Kq)!F89k& z9OY)Gff8&nYn9hw7*8@eS4T$dnz*1_UR%K#h{!Q!WYW;}#Jh-2I!wT}F;7MT4LKZ% zfUR@G*bQJua_mIU@l_O;%w^v>-)3|LE@p1|KYz0~JIy{X-0OYE8<(A!?%C^n<#+bl zM*0;#vq6Vm)vwX#Y)H#ZTXsiejSH0K$>*xXD4OfJi6rG?Yx;TFf=xhKj`Zv&%~hh(?uV>N%cIuOxrIp$Km7p6dpP~)lHZ#kN6xj0n zZa+rl8@)b0U5aCU`?L~alAel${V+r@_M_@Z>l3r8uhUrR79F%6=Q}BVuj(RFy|MM_ zeeCJ`g^O_0IVDW!B}V1kI%I7L=atSukPpRJE=2>Ok zgI>G9SJ$h(n+$@UTF3Kno5rj{k=*Qd$N`zqHVEQ-wu{P-(Y}VmJm=^kL&g|&IT9l| zvwVzn)6r?p8|ce`kCs#yvL!w@wuE@O(D8q1D;&kj%kZ*MZwBkj7DoTbmuE<`g$?p{ zVru=G#tarr{VV6&!U^_1!6EOp{oSlr{xH@n5XvMh$<}ffjdunY=3#5BbU1NMZV8p^ zJukh~g5&^@&IR9AG8ABDBo^J1 z%rsXdM_H$&gEVHu$vNez8|8`~nB-FF3v70h%`o13yZzl3{2ejV_d<-oP)zr|FkM?) zwu=a4P&IA;q-%74FFP8@OmwO)(}Pwx!9o5#aDvEI?;5uH5K53Vpag$!lYD4Gzfq&v z))T+PNvpfF6$34N?dW1Mdr5khgw&lRT&TjZi}x=itP#3@ zUZwG;qS0SW6*}-Fm3kKc@E#3xo>A97ge`ZJw=I#{+9``8uqVEs--F`7*a;kU?q3VV z0ki%pm36v_;X=cjg4^^sXh?jOa;&Aul9+#oCDHx;EQyqVXR3vS@Jn~Rjw+jK9<01~ zNPFq1?h1$WJ6_-VNZNle3MKmv8{v_=w~g>#?z;s46f59;cHH+4pY`t$KJ7kb zrZzKFy4bM#m1On1bfG2&t$tr3tDo21wOIXfjKgNFe&l=E(FoGAT`tmgHQ)E5D-P2? z9Q(mqlToYIq}ct3>PyNA$u4Lb+1wB{1Fz2D-szU|*A(?e_${}sYqr7hq5~DlfIQb5 z$|LKz{y?=vapO1}jk>y%%OAORIQ4VSA~$#UyC>W`xvL)yOmP0(t;}|GUrMbPjOZaX zlNLqLkaymU^uc?KAN9O=R5JkoFMIF))yAyg*pA~o{GBADZZ)zD zLVzFyCtg@jkP(t12{2Clzu(%=+Ev{xu$`Qlx%Zwm6Ql0xdhFV@Yri*I^QJ9IctOrM z$2BcIDUM%K-Kg)QM~>w$471Akg6_#*aF<`bNZ;QkNTxftNmTZ_#n~RWjacM;pXCae zl29{^WRFLw*P++EaNN*j8!W+8i#|Tbdb-C*VzJP4kltK7(!?6R3e~>VT%4ohc-xvI z^T*3h4o1_wlm;l&mdYe)MEBn||V;r8y%x3Lwv1ina)f2B4PCWgKW?n6wx~*fr zA20<}4&~>nO}Ih@EC37o5wZ4#nkYT?K03%fwo`mk`%|U}Ee3j2PbKb^)s_fIQ1(hc3`^q{b<^>AD9yY!pn*zaz( zVjF|%-RaY`nqLsi{Ma0Z<9i+k3hE8#-2ZQwatl@6JmtEdvMR6A>f0o@?R5#dH@;k4 zd<1I1r0R#2_Rqtw>FLCjD)I3y8P%g^KI;ewpZa-1K_Y<8PlW{IU2^1;a@6tl(c8qH zM}f#Vjj*!L5Fx_}gQVv`^74NfNJ>f7GW`>QLo8D(N?*~8a04y=+duoue=mpL zhU_164h>Dkxu-c6&XW>UzOZwHN|!w{=$h;Df5_yT0LYsFz-N&ceX zF!Wm{&v(ODh$FQ0cLgRbX}&^zRa$UY#CJ=FYXdX{y^VPHo#bB$vcqosG`q0U-|S|9 zl5}hJX1uNa@7s)SR6YCdE8BzBN$&U92ET3jZ8)!e>^8`vxopUSYzE%JVoAxK)V#xL zk^Ru~V|q!IS{Hx2Nk^bMAu%=bvH zMICfua<_A@6j-9vX-7h4lcKLEcLVZ|$GX|?Ln_p)Zk-36Y-1KfP`%tH>Ux&;DO|Dr zIH44U0Dtmc-oN!#GT)QJ=Vj?V@HPoW-dAZX0wY|oP-B}4!n`cf)Nslp(yEXWzwtCN zh46e!&oToP~Eqz34#A9YFfE>`de=1x!x{& zN?)%PNhdYcsHF!69I8^uCZfX(RWqy*z0A+%=^eAd8Q3X(=4?QRS|=6iwz%00jq-Gx z+(b}WmS%_q)u)6hlA(l zi1y8fGtS}$bZ*j@=kLkBKL(j+L*D219Q(F7|J|NC`dDXXRX?CUy zpIoV9a^aXDB&=XqCkK|ZL`zkOkJ*W4vuTCiW=EluT3f&9=zm&zc$#6ob?<{IHOM>c z#Y^exP5tt1b(cC}enn#%wXC=Ve7p=QqG#llcd{rdHoi#EaTG4%$m2`|F^TNS*C1EF zlZH>-86}1>wP8#yn-h)wxmOOF&+=P4;_}_Z=B$0Vbb7P zy24A&XP<8fJ|3%RahZO!1Jf#hz-*l4>v^l|d&6^bXz{AsUDa%0)gb$I_;A}6R(V#V z;#*Cl3UN?ZWA+U>axIgF-`6dhdk3@c9mBD=-6Q^DaZ&N|+l#8119z4MuIdd1E|>W; znS7zIM~Qct+{&f@IX3yK1tDep%D-7iWLuSk&# z;c05MK;q`|Ht_*>bvE(TwQjw7g*^5peje3o<_lj1wP~t&n@b1HO0Du}DMb<`nv~(U9|~?m>6aoHAcnh2OqSO24liXi%=EUI~$m z(;zq0IS=uMon7ZiP#&$?*p;hG3`ECzMKs7U#B!O{)>()wK`rEQlB->#Wp1{$M;p#N zGBIc^wZyW|PZ7d^^MM*qsNN^0Ik1o`__2ZaI-`>)V7K25{Q3w2X@Va~{k8E>g1 zClr)Y?-IC|vK?$XP46nUP(P$x9$PkSO+>n(&v=wCEfyrdIlMBS2^l3_Xat(Yxq-wp zQ{Lv-lyfVn?TFy7Pbfjt&w$ZqNlOc*k4-6?WAV$9*)v_dG@;HD|JFz2h;bHndupnD zTzK~^jxnaQdi-r-@7Y>u+OB<{2i)7FvwYALACJt-ft+>7X8dnbY-?VvO<9@uuY9u5 z=G<2%d6zCy!_2@3@0mq}ystN@H`cuJ@%0_aQY?vCs{x766@s3dlv1cav+2=N3EfTY zf$THkN`o@9U+Tx{GVzYU?~~F*P}_cYFMUa_*(YvTkdKy~yq_e|Bw3T`p_;XOV@)%UjnmqF zCh!yT^4_&Kmy%$f%VLqy6>i+8o)jh~_%8QJPc4;cF4u!uj}I!D%OWKCKNq5Be>-LW z^o#m8iFIbHOPShj6#%*nqNw=y%#=?vdDGy4eCe~m)x8s*CS}IpG76@tYD{i(SL(_r zN?#=s)b(l>FlP1YV0hQj@D&NOkw>!GJ&`O(8w2Nr%b&*BlaiJLx{rSxVg#t!K&o)6&(MZ2AyJ zNNLs-vs1u{K*0G|#z65XBs}i6`={aTpCpD25;gYwB+Ny*4al!4J)RoOA_UD;p+A$` zrfFlG*^02k8G>Xcuk!N)Rmne-{N)9Qa7Sw6)wfK#LR~xa887vO7*ESwS#x;9Isz6I zG#hI}{f0Dw_<UPmZ`l1vivw)fi6)^7dRiy`w1Dm&iQ`3WyuYmY*zK_Qm zA0^az=&!bc5HEthM23cb`d$|Aa$5U>B%`}}5ceq!Wz%0klQehBXv9FqqRhJ_xNw=r zAXlE$lvjdP6H`)EYRgaw1EbCoD~g{mdNxBriFgqXglw60Dc#u%*46w5DCkb33+id;3w6W^eG~a zQ2=g#ACYk)^%Q)P#I8v`1eRgIX3d8MGG_dH-{h^L#0++7QQsZS3erJDP>2QFC=g>o zDbGprS;Ts5HIw)C$XALyF{cz>b<5<0jAGS4MmV78L8)_7&!>2)h5_f_q&E9?YL&Ky z8AWU``m2zhzc6+4T9%gUWC74`)7(?JAe&slR^!)?Ei&hLdgdjw1FwMFt(xP%kHuu_ zeDQKotXJOk7>jHjP$`|RFJ59x!$}VN{WxQm%?)-YwqMD1_{f{lUwGe;c2`x*-JL*v zCK1f|m1JOy6Cg^;qWZi>RUx-75>o{TCQ02;DwU+>1k*p@!2*gB?JXHVJBviKe|(!P6FnQ}n*GDk3pG^^w1_UlrtYhZ z7HH^uh>M8h3>xbE5U{PO(j1kSzDi2uS`&m~1Xi>yoT$Y#FZ*pjT`kB4X+&%SqPIzj z>|+jnaH-mX5LREN1w%|~{63G}O#i%K`fzZf$zOl;hp%#;5jf`V$nEs=^H zBLlsUb#S{!g-~d4w!UgJ0>xn=DDd-rv-z;Ar9gR<7J-79j66V6l2}j!Sp*bEGy8?0 zIQA#9d;b#|5|k$>fDn5ho_t{SQ;&fszGiTrcoQ?&_5F_jk_Kyk=Fv#cYX>^9PDd;| z)%Mueb(~?{t&~uc6tYwo+bB4iL#@u(w+aUK+Hso~8Rt34PKr_sPUdzeU2Y)57cTyt`Y`iTa^Tvh z)cY;#fYLzI#)6sLgE$=)A>f%`9JbF2jX1n1Oy)Gnvw0)w>4hpbKrp z8V5=C+Vat+D8CZdR!5$mePS^K265*pVkg(H^|a?zs!p4d>;V05Q1adS$;<`j)@HbA z#<=ZNlrm0$B?|b0(=CP*Ij)-8$Uq!2qik1B;)EQUZN<`q;+b&)$c%k7jw!Ur?^Ekl zM6Hi}_=CDILIj^KrRhu8^PYI!R7;j7&K7JIB(`?%9z!|NgbF{VIS@8f(;#W?o8V)i zCfeFxFbLs6XPYPmGQcko#Cvxm0*rp51tT-kWo2qXP+qXnmO=n^PTqW|*t+WhTsO$7 zpw7ryk}J0RR_gM>zmL!?oZBJe7O#1e={|0&&p6%RNaC6%Dk_8*RqtzHG^aYNW3u5P z?)@#&pKChX`>&V{NhMt+sl`E^lTi|(pCgo_K+I^`CZc4v86!k)ibVi)ZEs^I^;PhII)5} zwoSrFeMYXDb$ zHgi)t{TgQ#F>XVeV0v5YZ)cn!$XLSWiOHy~t}_Fg>j zI#en)@K4%kLY&`gDC65mTwPiwjAMP zn9CpgnUg-Vsd!DmB~QF`Pf=_u}tk+I3~Co{BI;qVLxI6t-KJlK=1 zsK^j`zHRqIN)*0O1Ofh9?$~lk@0L8m@R=B1z`!D zWKm#FGm5&~xf4_wX%c>;oMK#E^`{8=C4Z^c*;7{Prt!9=Y}H%&_*6(X_$&b0R~|@6 zXuqkEi$R@gi#9O~XqgyNjh+IeHEA{O51%8r=+ROCaBg7_2*7KaCnBn*lf)(}S8qN; zW%@t;bsOkKyoQ9i)+MDKtKNv}*V&^?ZtxC~xMtO3o;3&Ar1fG(XXN(_JEWI&B%~RJ zu>d)3Q7HDykA*u>MnuU5<=s0=o+K(pQ(cRO_h6(%hnAP7OL>wSXtzbR$AaLAl$9lo zN9H+bI)eK&;eL^klDh0j}ou(q`393*hJJO;*+5>B@4)@XeFd*MF(%g z-&mWvv*LDd{QtMR#KT~scDFZGzPg*{>OP?`eS39_l=lRQZn_m*(V&Oi_wGyL0jxLj zUUVZ@QAgc*;1{IB77(%c5VQ&SRT>g)#dixSN|L`OIQ{uah5W zMILqv&uZfThD<_ZEcu(+4D~+guguK=g~YtR^=H4G|b2pfc{HKX7a%!+?`Mj@LcuJgH%O2b8 ziIMR>3p0HXM~C^Lck)AL@6RXBz&Wt~GGYHtm54KV5A>MNh5Al~FQ}Helw;!T|^$Qz{t8g19J|kIa zXWLI|N-tSaEdrfh}ZC5_ALgSISDNmyxBFh>5Z@3swZN%k{#g=9RnCG1Y@Mn||pxKP`Y4Y|YGOp6fKJ7r&GV)8B)r$@UZS7 zxP1^Zf`UJF@yj8axlfS{O=Q1g>vG-0kJW?hp_kg>Vf{xoVnsRpmg!5reU}^r0IctM zJZ=0GZq_09T_-~*-}2iYg;R2KYjRF4R$X=FRAuMB*npfDa*^@pu_3xybQy41 zaYB=-SFc}gv5yimsa1DZT-2TLN%F}e@#3QtNFi`P6(epF(O~hVyP*1yrT1%YX)9hsIgPIpyodTJD8w31#+4N~&w&%p}nq)5PoNUQktk4a`#oZ6{4 znN@L`t>Q#dACq+IV`etZC7pV1ZAaZz&-|Y zO%sTmsqb6y(_T2*+w`L)y_6-rDO^Su$xK#Z{msB3lY$P6UKE&ZrufS=QkdVG+H9FA z_Ka!#; z(Kd+9x*)|ixjifmpYWmt3V^b=X5 zT7M?I_93TQ;K0hpeLsR=pUB-=>)mIQ%z8=o*!RSya6f}omPkQnSuXKiLmgTQABq(h z6J@4ZP()jTHKU&#+us;#sywcQ*}!m^3#6l+l4W{1OG2lP)XTp~Q6hB?4U1FnWj|@? z?v_@N93`gG9(M%pdA?89E;>^D8DBSE`l_FHWk*3-HB3l>zIF``-@=|xB#~DYOz-u1 zx&qf)7>8E(`SQY69l^-@#8y{{d!c;Nt8#*E&+kZd*tjFnp+xEB7_iFA%q%xVoox|5vazNCkv(jREzV~*93^%`97d*3QwiN{QAb-X)S@Vac~5V( z?yduw>BHB9?KrsC3KFOhg=z=#zPiNS*)n^dMoHpQsqInSes8M1-)b}-mn?(xv|aVY zj~w@YE3O>yF6`?(2_wY!nK}jag%BGiq;F#mBNJZvoZKN&QZ8VMx9o}GtQuquYG|a* z(5husDY5H|LpL<&LPkf&Q`Vc*=U&T^W^uXQWzCk`y{s9-W5Zjl+qC?q2EX~hb+Pnb zqg^pe)%m8aIU>giJ9~0CBF^#3xR`k9oh$98tP-PI_eg<{GD3wGI+dR2QZEwDtIRfq zZ4^tW5XBs?Eskp7oP`ongg&k5Pv}SEzTQ6cc@mGmsTm5<6ruOB7JJzvlXLuCuJsX! z0oC{^rq9H-N3~V{8gW@RDx7BZknm%h zk0kpu>t4jUP{lbf{3 zxhZXHo-oF_ju_bVx0953BO8ZhXTGTyZnLArY5P2j3A&d1y(~J)k7@=-I^?2O(^w7C zC4HTm50xx+yhX`4lSVW13B9)87S1fbt|m2KO|gYefBR3(e7=q=P50tiNPTD$SzAJ( znZvrS1$>~dUJ#pkzDWX7E?myL#9}DRHXsGGs$11-A9v95V85y<_8ticvsvnw+4L#r zP_WvezZ_PiIu4h_XnJE?Q%Xs&>mDXZ;!ltCFSzb@;@1OV)hUmbVU2Hezktv{4N2eb zJCh{#+e8Du$7z&sh%)rGOg5C`eFb#mQF0JO$ff<_R7Q2LO)%%SY8(LI)b8i3{yuwH zQ_}RNuY`-^{mN{n>+9MVMTp!vyw79c#^0!X4fy)tG769EN)62v0Bs?Co1HF z)VF2vowYAg*r#b^I?V(Yx1HtNcJv(iqHd(r@xrTiTDwofBjoILnd8L!3SAgJjFax~ zlA2tvrlyi0n}9E6O-qnlr*3lVe14xZUw=27vJ#K_CU>@H-cN=F^z%f4X(E-C78vgD zUF{f0 zy0fFr=zwBkpBZ05DmT(ll9O$H#tItWebijp=Z%vKV(X0JlL6M=`vVj~j;&ldnI|@s zpz3ohj+64KNRGvbl4kvzGzMl$;gnf5HJdLP{bAI`wK1U6l{ilVw#fCL*7#%v?ov$_QY!kXX0Wob`(Rn;VqJ#X)Dw z^x}Ek)f{1lX5L``qhBf=lb26lGK*7cxxaz;uA5o>NsMn&=9x(-srquS@lI*d~Gq*pc*JP z*i;wi*D92-DHN<#jbE8$t(ZD1(x~}L0;G_iB^=e~=hUX(>fHF$u#*?2s9ZH>^?+-e z`hbx~wP*g^zPQgZohErikW`|`*w%cu+_Qom-~vTRXpXpZd19>LnSM+E%;}$F{V(~{WEA7bg=9r% z+*CHeXqwQf`%-My>|v#ebEFb1nPewh(VmSc(EGiQU;id~UyE+~>6Uk!C-U65O*ML# zC-dIh5?fzsmQ@Lf?a+iJkZIerY|XWH8-&OY$~18)7??3N+6Wv4nz0X6ayeRKhTc1 zuRKWtRh8A=Md|L@Mg!>dxF*4MVxTd~+(dQF>A{83EsjH#XC`L+j<`7RY43ZV{-=iK zQBLF5)P^5Ya!0Rs$~70Z?VmRLVcp23J+dW{L(|cF)$m|C!>svbs-=s!P1@h@YKD39 z)KnG9m!2@qKZ$3X`h)pWcs3@Qvs4*^2HpG9nuM!F2}-i2RtwimxfnK?=2iNdw-;-D zBVM)VTmBa5zPR7*EO!Tc+5MK9(%lVJXi@Uy%tP@kGsVmSgx`1(;K`o|!iz*RSHBH2 zcBdrU$SZ~3MWWDonmpNxNNy3s$b^nCu)V7U_)*Hniv~~+aj|$|3%KivwWnQ9_C8mH zV?>zO0t%$UP#N+73<)u5JHE+cveO#*YJ%6P-zYp|oK726RlkL2Q3EO(ogkBg`Y*z( zfPS5@3X8)EZ#XT0LgHP)^2JH#GbXmKR1rzC(!{o(A=CKIZyC73P@NZB6@C*r%HXZ9leM|y@R}u z;%mC|HSulxR1DEy)DlJVEctx0Lar10v!vMmRAxjn2BW;z+Q2${h5%*HV*2~ne5rgL1^^2qhbQqu9BwJUUGXN4y;8nG_A(yr0w@Bq*;(xzR zjoOBw(^RiWO=g~1?{%PfLfKK9r5|A1uM^Fn`qZQ;S=7{N`;6TOnw%t$3pZq45^>Vt zFlLZ9W#4eGH6Q6P&oyoA2TCGSO~qDBh>V}*_TY1G{j8g)Fr!GEB;|aTxT;XSg~nxE z1#XqbQ2ZLr3?vnS63MgVzl%xI1p69IMz5Zf@k<(NkZR@&3yJrchXg5uFOx^=u$jHJ zsV3B4P`MXLJJvXsC`~7Np4X$48TsofztA*8um4ZveX>VsOvhs0r_SD7SLvU{EQO?;mk*J)xfsi)}l09^BD4v{iXAkE*&w#xFcWrXX9FMjRHfL6{XW<;-)FU*ljJq4LA?UDnmM^ zNMd%Rc|Zp(F;^+{ctgx1sgI7?T~iDq&1w3lTd|sV+(zmEYP__JwW==GD$Vsv1+uC9 zs83~)Ze17bF|7S-ui>dz1J^DH1b`l&8h#@WpRwkcU~}IzH8W~jtI;`eCo_d&om}nq zS6Z0QQ&WccV{FTQ?Sc3N4jGY^IraI4J+8~@w3m1FCmlb4u*sd84i+#?L;T7^m-Q2PIrUKHP+Rm#d0 z%K6ucHJkm0#-i%GJI!X1Wo#K{?`6v1WwZC>Uv{Fol^h=exkcV5-crK}sknGxnO*9s zH=@lG&p39)V3wD73Ru_aR<67gp5r^LYeBBp$tPLY*c3Rw%ev;yC02<}jjXc!soEI? z0#VHoWn}6S32T8N)+79PMu+-kUE+l}LuZj1N6ne(>a*AK8A!tt+N(IL^nEJDV&3j; zeaVOK7?b=w{w_(MJtd_L#RuLaWl8(a>V8=+A;=}=WcV`S(i2fltQT4!;n>#1iqgZT zKi4_8XFZ=NmlU$}$??k|rdQ%{w~_a0unL(hyn`dv6Fs5gWEq+Gwk46=HkD|{;0rR3 zrdk$UYxeYP^*?0BS>IDL72oYrHE)g9n^-mP>`5BIVw#}HGD+f+euxC^lp+U#JI0b| zwlrT$6~nV+uc&MvbkUe6T?1w)MNa{mtw%s&h%{iqcF# zS>eH-=bb6-?-zgkc=H~%ZaNG zcPJhgfLr(85E4Spf%V}-a6pJs(k-M`Y5iTztH$&U2x zm{KujTi$*cjI=;CeCHF$zhs@Awzg)dI$OE=@<-X*pu?@_KOuY?<;EJr@>DOS;{z3?D8 z$rt7A78m6m_ze6B7c4-wK}?qkT5fIs`d#IWU@ZIroLsu;pYjYQH*A}vy( zk7#^djOkhruX^%ZLdSkv6x~%VS(8?0@nQ|b4@`!iS(r62|d{$2iv}(-~J<{W( zn55;amXX=J&PmnTYFqL#C*-ta3GrG|Mv@lkFzOL`t8vzLuEv?N@+I{nPU9tHV`GdD zFELQBALUB3fBY3zjii|qBh9>u-W@9mc*5lgNd;%_zIRDp&Pl0&)KB-_YM$U6Bp-C1RQlHRAxdfS&-|0?<9I_uvU>R}@8xzf6Q>#KU$TI}-$NheR@)Be_UtrXaEwCUSUO z+%rfasZX%cKn;c_X45~-Q%Sqm7B!?}L36KI!hob9#ii3B^O2E$Mw+!XeHDLknTiJa zDSIqj)YI`nq!=&>dh4CkS4i11mEb*OAYmt%q5bcp==X8-`$V)VnGdQwBCUc@^;z;F z=zyi#Z4Fj-RE~1FZfVWbx2l+~zu<(UKzp`WcK3mYi1+Omn(?k*73EpF=jE)97;Ngg zDGsDthys~cUNn(s-`Vovwarw*)5yeE-}X!k%HoZN)>z&4rT&o3<9sptpuzf|ni=Y| zx~yXYz?*UEklSZ+W>-8tK^_4pF;f*3o~#0Ds0s*`L0;#3q%VkBu&Gat)@WEO9X0#2 zMin~gN9732c-U&`Tfbj0qf+_Xq;ok~{Ox(=m%q*C)85}U+>>d4a5}giOqPq&C;DKqoDVve^x*V#bUB;O zm$kvLb2VPtHlxYeX@Agjzvk3-v}og(@ON`G8O=J21^hjD2R$sP$-$u0?{vol`gJ@X zE#+6%+QKiZCrNgiH5-Sg*=`MAxW5mxTJW>6ThF~dIA|TfgLJ3W&hXViR>gm}c8=OF z^pEt#(e5^Wxtq3Xt|$1rmbt&P18USd=BInrBkihv)XdrMf@AgufjJyqn@5 zN$cQH|DcZAjrwkN2m5!u>@?c$GdBf%&}gUCgBrE#4~By|{4t!!*7AeVBAfI_i*ww- zYkE?h&pWrt)zCHB8C~F}b#rfi8Vzm`IHMW1Sj>Ag(gLw(IwMRtrD34e-hBG*Hk;3< zb3zv$ztw#^=q;OWO0C&)G@anfsm#scokKwLrZYcV@Bs2?F*=)c#x&XlXK^}3?Cjv* z@SooK)#L(4g!Yt0DEV zn2xUp^e3zd=eC^AX4D7#$?b3flfisWe@I8}(WK9h931DC#V!{EzElaW2os9oh!>*A-#U zDS;;yNS|JIE(QsK=Je8SFa9wZ4EhS*Q-r~E&VNs519|M|OP~M5xzgYAe%4vikh3XG z;qwy8HW5hF{2gKL-3IE&Bw0FXCN1!X=CCp~5p z*cdmub3H|jY6O14W)v=H>aE&Ki)>fgd)SALD)(n~tW}gI@HF^ydb>?97;y zyJuS?qRi7A6|XMLYihhZ^}q48eIO(7EBe#F_D%bP&Un;WY!48_5nuY|xdEm-EsV++ z)cD$*{?oUD-VWE&>E&gI&X1jT$NmT>+zEdGNkF#0x`Q@yM{&RdoDxvo4M+!;$OTVp z7QyQMc+@RDgbw)QSFSe^<*#wQt;%< zXb!FU=xpT3C{cGe(_UxE1f8iOQ7^$*n1n;j>DAeJ{0VHv?zA;i>U+Alnhoa1a>!uD znVfqef;haVD1y|`Ht7&e`un1Dqu>2q3Dn<%5B^ScYAbwpH6Djgh*;sD(}{K}x0aAA zKFRjW6*q~H@kwVnx*ojH5vB~9M2xV*<)@ z?r`=D&xSs=4`G}wq0$bm#*E^PiT+uCKf>MmJD`IwYW1rLKjx1PIydG!{&ggclKFHw z9{IoAah$moE&P+3<0AdDSBqs|{!OFjVM~NGPHA#=X^1L4-yNJGT>X>1>0+c$3^}8{ z9Las$z2&1m87yD|NNR7U`uD6er+sk~3GQLOb)YQ)9XDw~a~l$=OL@k<98KMI>^YLN zYvr=x{-7f|cE@W_befm9GonH--1R_c`FD6`@oqXKu)Kr+p3y&lUyQHjGXpfo%D0iJ z=O4RQmtE@5{ircMEP2_((L1xWk<#jG|6cCc#cVuU>K}Xht=x@nYy7zGhacDd&~bT1 zG1O>3X6E{wPp32*5AQJJa4Ov}n!r*oJL9n*YSNh;IkGVfwzFCNdH1L(a|}P2_LiNo zpZBcOZ^08jVhnujW%p=jr(Lk4=eS==gZDZJl~ewA+C`S`Y&`8!uia_?R{q@~#Bv+w z|MG}D8jSl&9B@Mxg4Nu-@8}D`kLSvmffR1Qh=y3c{Zo7+DZ9e&cSaN1W&;11e@;9m zBVx=PWf)H9mqq&*UR@K{%H6l`2d6iqNq>5?Aeaf9fD6jp-Fxd{xB|E31R&ky)z3ZO z<#E=`>83NEGzZJ`DRB&g@sRFFI=4=QUUbfa<7K|JOgAjc-~Q2d&pPk)Z(u@CfuFe5 zM=*!eOPqvZW!|}Ib#U==xXv7n^#}jGqmcgBtH$2x3nu_)2d7RlMXB(xdWb^j@qv>g zv)#jk6Ooej$8PrXq5jxAXr)=Zt-rIMk^a*^&CJWE^0$|b_m8rpjD&2KHCawKqAXq$ zyKbH+wYPRb!dBtj{%#*7=26nBotU38Hvgn0`v)w^)6CqXw0fv&2A&ImgPR!{y4Kpo z1+=Tjr$0Fv8Wa!=2Y3YM`ZU>TrQ7m^6&R>~a6)}nZCd_l56;WnaEhbFVRFEKylNlb zfn>^F%63(+}UcjI$jE;jyAnzQL;188bVtK}9MAMfW`?7P} z9r){B8L{&Y-MQ{UJY%Boj|^y%W`|DlbEM;}J?=PB(vl|ZX+e+S&Ra&G4;Pn3*CGbeg%#>9a>TCD(1&KaG7D(pyrsG|^3^v|CXgpdhL6Q*}Z03bf$MuUGqB5~6El6Hw zo(66Y)ZN)0S^Ve8D_c~k@1UhDR7M3(dW$##VX8-q+GtK=dS=rsB)UMIEZKDfT`dQ} z=(t((W{;T+VK(O4v~NLZ2ALE0dP6ct@0_`;=`lSR(J$t4Jp;NZ;!a3AYPBr|m>AxE zrToDqBJ{}L8h6~2u^?CGRg0yjvrH3shyeG|_2Hg)Yss}awTWP*%e0SikL-BRj{3&ngFZsH)m+i`EtzG*I zNjcsYtgWpcR~v`5gKA@!8tb2X2iaERXVt6dad+}$U!};IRUnAIz=7nr!{VIquCNCz zjPw?FaUa+Ac+q)28!Qj`Dv-m~9Z!1~%%NS#KEU6sYEi9J$Wl7dK{z`l-bEzA+y{k% zusIbTK*f42e0A8F3l&mW%I(&TIl2?anvY1md}{ude_g{%!rk%3KyL@DF?INOEoTl# za@cP#Nn95`nX$NhHCddGhD)QiJ@;z#<@snaQ!dz@@8yV?_)d@YY()0wq>Wxq4H;j^ z9oHX>2g^Y^y_%@iWuffqXab6%>X2`USm`88tBNwzo-k_nZkmL^jabsXPVeI7v}=!X z$IxFhdPvdUm#Cp`X`?=h1!fM*@pXKpmAO=QGd(&uaC}-sO!!Z+>d>#3E#xZQKW+Y3 zSiWklw&l5A_v^5F;F&)j8%T&FPM)6d53mZ++=Od}KU#Z-A?Ka$RB3MbC?Y5R8n}bZ z!>$-=!YY>)x+r}AmiAG|g^1g#(Zs`eDyv0$!p zLQ=1V%zg{0cfbZuyg;7KRu^1%@xe65vE6rW5Nr>pwrYLB3*W;yREI(&Q9x?ejOeh zk-4ySdVJt6Ma0abpH8>hr>#@C@0wK%ly?|jg^a4RJp(%b`HxDPy;7yOFx`0BE=xUifESo+fQ zOH!|d+uNU}vbCV(9n49JxS9x%dOY})v`lo0SoZ9T9Kg2_%;PkIsL&_TG;jMqVMm^t(OuC#~?ac zYhm$@*}Mf&>gD+X!oQ=&^uMDmmHwQ^@8(yNiK;@E=L^pZ%@|oC?cr|*hsM$c{_Cc; zuOl(3{d;dbV7Z<-w%;DBpgf6yrwDgXEx{c|Hf+Rr085A09OJs!6-Gb99)=!{)Z~ zU+OvIq&IQt*<>_IaRJv<#lM1rdN?){&kpVkuV7q$5PbI6JrpL9F$EucX zRgZQKPu=-Htz~;OOQK%NM+7(4gl#@VKz&OgEmxz-^68i1(dm(OZ5DEVp3f*|(bOz3 zv!Yay#Hkb%yJVFN>vZ~Ff)s>3GaNeKhuWLvVv(Q~f0u zmA%ECprdT>#BZKFyS(s&fZq##1EybZ3J-Yt;T1rHb;(2I5$Nwz#Q~Uw=d?dbL3%g0 zeKiUAZPXg~mIVy=mF0(vRF39Tbq%2fYIOH{L1}gJ`BNn~Y zB8aL#hW%KB>n@Il0MN*Sv&UxDz~kgOd8Gp_0-AoT5MnFUk~Q zh!|5(PpKdEpFyTG#`|J~iDwj_!mC+d`+EH!AO7S2{H6Z`%yhE&qrRKsqru|xk-NDD z?>60W*?ha$yzI>WgfSjJe*E=UUsZ~pKY9Ai)2ClQtNfp*&%S>A{a^CG-@yy~dN5xAb$MQSieBNQsv*Dd&CN&d|BxWM z`|Qe{%SZn;T68+S#iQZkp^()_i+PVxhYnZ4XLq!Pr*w{TkKz2}9x{#1JqI%IkjX&q zB{I^hrwGc)`z}Y@s=HinM7lfjO9JPehZA%j$$x|%JOz`_LrevShb%Ze1X`7A26Xr# z($Cy0P^vy8rE2aS@_-LTmVC&vWWmIG7x{ic<|!Ey7{Q0b(YulXMYJhii`bURw}$n| zD-ew-bnZDZFuBL>&U;Aff$OS#VA9U47#F3!Jlfy5%>m9X4-XR8O5Or^9$GPP1$wZW zAm0axeh*RfE5IAPtnzTeO9~#pwiF|sPL{y70^y)rt&(LGFltmDkRQy0Unl%xxZoE< z^YHhIM2S>B@M|F(uF#b3 zlYI@p?dxfm8XuSj@d~2(i{ukGfoD-OM~CB9?orU_GTIz^Vwxql z^Z`(%(b?7XYEkPfJ3mzZv+_H9P^k?2KR&O}9ZU}d=F#It{*e+C_q;oujt89yy!cQ) z*$nBQTcOU2p4>T4z*9$1hkcpB>t82!oZcA7r5~u`E;mQ17CO+s0`P>RY`{Bm%Ev$B z`TjcjfoAcGY{+X}Fc9F*crp0D^nTcXtw7>OaE4raiVWmu0^`?FTgK$l?iYpM0A|Ne zb#Gpqy@6MVZ1bz$aynmwsmaVX9E_LG^N6)Bh~i$m*}#AQ_@nas2gV8rR9JHl*QxhP z1&sWgbB<ItA!sKE0_-1~(OO zjM6@&vm;AfSXF{93-E7UHM1l$>T4-;(y}r03C`ZyWsxJbcv+pCydXZ zR~i$ze3!T32#7q;kMGqs@OVTN2H*H04Wj|$GN#GE{_S(dgWP5t$eW1=J1&rTy(U{) z88~3XO@KuBCQ67Z700+bDz~P6&M{8Jj~q3H%`0h)`)is%dh}n*#lz8=<1le=@Q(1` z79uP3RB`{;spuggy%Qm9Nzaa!{VDw_n3Vi4HsQ&dS>Q(H!TiBSWzA7T2eJ)J-L33A$am`E+!L zefxBCa5-A8JwO%*2CZ}!GU_Vi3RcCO;p-ei&~>rtgsf@rXtL-G2Ww3b)EuY279IMH z@T^5}g{1%KrqkK`qc?LOZm zmo_|*kImq^b{3a5!RUB6>Rqg@1xP|GqOE?s0TWu+@jsMIWI8kR7}5o@=C@XN4!e_X zd7>MPR*08f_~B;C^I%Ke z&mZj>Cy5H0t;1F0U$8iP*H$a2OSZavBSZGagU_%$xhV#NN1GTRQVx&C?tXHIFhrn7 zk1CUCW#Ah2mattTy5|Q)_x!`}9k%+7bx89=aK@=~p^gnSKU9Vg9z8bw)1J7N!B!NXs}Dt_G2%|{v82@u%pEL@+q`LrH1}a@?qqCC zM{_U6(EnnFCwyCR^e*@4xo{|EkM7B(teSJc14W>WZVBe9LQuK2xJg~uN9J&SsN9^7 zoKUa^@LpfBAHn(j@NdSq|8d+0Zm|<~3Iq#Pm6wqZRDPL!BC4vR`9+$y5^Wl2o`ZJ1 z&dgD>!2x;?K!0I-#Qop{RHy$adY&Q*XXdEnEz4+@B27N0t+yy3x*V&m0_^&~_tTZJ zy0r8?S{h2D|P^y?y}96{M2gG*z_19m!ucbjSD+i58%nIi+~JdHm-gDeK9BqEz8@wq3oQV`*wjYFCfGE@%p`0bj*`^ zTvn#LGr9fcb*Lq}rhQ>6T73DGGN485=ZA29g{VU)FwU@HMvOv;6lBOTa(w<)`f!h%)oarfPxMKEAGsapw-B$r=2dp`)-%qL zV7_9ScU&s;%AuGaP4J4_DUtULbBa%Ka$3t%IxlsbP1V02+ovLmhn)a}rH{xya1$6b zcwYRbev_pW7*Ir3wa;a2H25zV#$TO#FR z{-D7snDnWhO!nF=C0ysUq+)6^8IMFg&S zwMcjy#3s8HMC*<#z)vIwL4L$1IlSdALy|L{0TooER53o29E90eRRW?8is%>${qlmm zAdB^J*x`mnb@S4k`BLbFhrh&-^#3W_*-AB1peeWNrBGG=ymCDq^{sYUxK_tcO()}9 zx2c_(lb9z;8R-mqC#G~mEpW|Ie>vKrw-&`;#h3Pn;6Lq#lnI;3sx^)p?xgX?w3kVhM4v` zWK)_4=NKmFo&iP|i-bSs#gt+KS|Ft4gwjA>DW>t_p(1{Qh4d}@>hpjTF(Z*drN93F zE*;NFTq|F7J!4h%Oof7i<24k_Cd1o|Ue6-1mhxa>-z&6;<9NWj)NIZeg z(VfqtMU|M-WS(myI~AhHexg0BfN;U-xKaem|OljW{srrx0S!d(UU7(fX9JoqQ)_`5%Zv}atOA$?v*^svt}el!0KM%r zR)b))fizfuOy}-`fxsfPytw|5>MhSZOaEcdO>i`EyVB_`D>tL%`6jPXE>~iSxQd8d zF&;Y7js7}ucPRS(sc*AX5^(~EK08*gTVw>j_+r6|14hamI>Ng(*DpqN^`MDP_m4l= za$w)`+~l3FXR@|fH&10A?&l6&NzBzLUNBs^tFQ)X2t~?HXdSDUOO(SGlR3Kldg9Uu=62V{a zzO5J+Bt+UR#fnWwY?f1)H8%MZHb#0b*%*(G{}VPwX0yJ@K_5jsbJwSi(TzUz;aFK~ z%LH|}Uq0v~tmd8c^KS(W2sBAz4U4zhSr%l@T({ z@D4TILC!bxIt=r{N<-#t6w2ib5yfqyFfOT4WT(rzK;MXq7nwG4DVYJWs8KN5^d{(q ziXE92v(8ntU`VhWEP3IMh;KkimQ4eyP+^9Eib-|^cMKQt_f$tI*UJvFPI2SC5X{tc zFMzeFzm#j)hAfW0sjtmsT28eP5j1q93okLpja87LAfqSIE;!m;p$FJs*&QzN6zmT- zy1UDBcM#pp$xInzMU25A>Pq>j2*)7?C~TBJG`Rx<^``P|zVwZ-5S3|x#Z$~{$f#{! zcO8X{UI(DT1{Uq8n3ZWkb)5|Q+ZtCE$ZowmqlFXB2XljES^>*89W8pDd0#@%)JhFH zh05A+^1QMJCQ!B0e*XhfbNF|UGOulN#*4M}O-LN)zR>}>tk#`94JT{FEj%JLSP%ns z37p*nxRN}QO|OyTB*}jPmzCqTC>vU3F&p$oAS-ORp8HO!eaHlkFb!|FTl`{7!0A_p zj(=mlJrmANW<9A282OcgG1{SrW4J_x2!DDvPg$?j4ub`Qv77F_!8J@g=ntob6^@rUnGJz2OyD6h71h17tU3AXo)7WBtjcO4`!)7ZU&_U?schQxo1 zu&;9q;by=FI7D$GH6h_9ac3dlgH&wT=?zfUkZw?>qrNL3891B-WCjvAnqVxuAU2Xc zM08SC@ncY~(Z`S2NE*6=`Mzf$-Vmwei1U1J?39up-V8DGVv-#ykeC`mvPmg8A7IMD z3A(-z^NMP^f`L%(!9M;==sv@dx&q++>rmB-jvtszZzMKzG4DP1(VmC6(J+L0=n!M0 zLT{jO(Q~^S_;7-1c}Iza{KO7dEcrx3vA7+Mro7>XdSB&747@cqUBBRbKku1m(5ZWf z{}|5Gu7z8|0OZKCuuo}Ca5QjHuJ>PvUkQU0U;x)xEE5~S*P=hGIGD5a@q7I3d~oTA zuUsp4^&{$Cw2A|j1=Le9gpjwyq1WKx+9~+K;59-1Y-Jv`QTUvjkt`%s0U{8AmtQw4 z(@=vCe;THfI{+yJ=upD711lR1`u8~oMql9&P>%$i5Izxwd*${&w^d>Rzy=1q>&8Ve z0N96r+qoe3MAz{Kc7sli3yZgAx_GTRe8697z~wzG@@&ExBhs&gKxFH{a#epN=~Na1e-iyMFlIrE8VV5sc49m8GM7 zANfQ86T*T9hpPP=T?^I8Z7`)kC58A4zKSK|dLf=*`A0;YiYc@_8YmmHI%fCWJ zo)7o0d|21Upn}bI zIzFl-29Ak0`4rfo(3*n|NvgTWc+?%7;OtcI538f)Xgpfp5(F%?Mxfn99vtj~z*NH@ zC7`Qab;b?&z=02l+4mLu%kgROt$9SVptAtWud;#)2*QDr_vih8(HR3DB9v=3gm?Jm z^$+nH4$q1IhxU%OwE~Ax_7WwA)d6MMl!K3Cn0(KWXCt~STJ7*_l0xuzhuJt%a-Wap zu8+Ybq*L|kw#^Do?ZSyDqXjlZ)_F=wxq%N@`v>+553$UFv{tnpCK98T2F1ZR<)#Js zM|jCMqw&~bKKvKbDnL^60jnFKKQ8V|&CV#~4#rmCJ8tETg85AW_3~UXCjmKtaCW`R z9HuEr<5Qxs3E?*X?h}_#ID+^DfS~Js@!`kr`3(|$_X_R{o+Q6PG26Xyy)CAb_$@Pt zG5{SP|J%*Z{~(df|5ho@KSI@+|M`omL|)_EevF6z1r;2x3nu;{#$z&zz*(a^;NciV zJb*}WGT%ta- z-Mp8M@XNJc;Y6YpChM-2@kWjG& z;F#_he}7#5y=(0_5hbysA+c)ER*w5zy#KK?FeD&<7~7pgF69H7s0qWpQsoVCn>v++ zyUB#nSFRQ>M+mcJ)*o4V0ycJn7c8vX-3Wt0ZXPs5Z2d-=AxKD9sf0W)b9Bn|u#V)o zq*3^>jvjJQayEV}1Cumh4w=W~RDHS5EwBDVK_)+X0ez4a!?Nrwn8Nds6K@8@zH1MG z;3xf%!zi0+%K~M|L|gh6tgEj{$;ABz@xo*Xea-6+UU|c39MLNV=+`C82DL&XVEieY zrQPFpEohy!w#wFEEdMK;u*tuy4H@t69E7C|k7<66))uYN(yqm0S(}$&3dbO;joLMxq*e~-P#22FVXJO?I%R@|s%&k`z<$m8D;U+cRc_}sSF6^)|v@}1S>lnweF(J{@KC?BB_3v8sr+sa@B zUve)obqj7Qa|L~fEkk| z;A^GDOsR5_D>){tbR^qV46_we3S5#4VscAcuU>(1YNwmTy>?6<&&w-O zsfpYx;)t%DdKO>}b~f;sT??Bc-nDD%o+#bNe=XTj$91p%UhiKhO)IAmES=TDdt;T z7hmnFBLDDjSqCs0i;rFgIeitaf*2UP2uosq7v0YXkF$QJ^e#qozJ?OETALdtaMpb8Es6^c*TG+##=F;UzVbi*y7UPGq`b{QLm z`j1Md2PO)h?90w|r`?;6X3GbQ${YHUgCpKhD7l@3A;97A=$hLTFu^3C*z+O;i};<8 z^k%PK$V*|J3ybqp1e{>$ZoLV)<2RxN9pA#1T>)zX+C$VMMpF>j77rg#x7^VG)dy>Q z4~bg->^rp_k+mOcDTR4`OD5>M za~CO2Z&jD!lruZy=Xs^UU$}@v<$4*ulRQpFo9f>eZ>zZ}KYC*yuG&~L@agoj94MBn z`9!cR^I*Zdx)>tAuxlvBLq=H)EM$lS@Gdmo)I+*>9M$~`xrb6%^vOXcv!9pauC{kntm&h=g&`AZk?1 zVnqysLbNm!vLP12#7qTJD!T#kGc$kPP7k$?LM=>wqa2g{^~WEMf$9XAwkv&yFrfdL z-(s8&-uQ^BS4uv?DcliMP+BbAw7j_bdMz51W!SRhI&uTrTlmLKGB(EkSo10I28Hcb zoW+54k?syaS4MYvOyl`+@j;Z86d>I0^r3^8+XZ);8uc+`;(VokEPs!gaoD@2b5KEvLwk&RWxf(~qVlgc369tj{BC!2>t&bKc z*N|L10wpJi;M~`ntL5<9H+tDSqI-4epe$pko2JtCW$%2jVCx`1oDPK#(An6DP(R3= z4lOsqfefVH1T$4IG1E{cC+1N{?ykm<8_9on^`K?e2NG6R-zNp z5@>V`U@Q~H$KerjW#9o<?IG2T8wpN-0!UiVE!0&ZZdpr$B{ zdg-@fasZkQf$V~BD+h|tz^fOtoH!aSL`-UC)0f+BjfAT>R#wA*nr?N0}U zqN7QF1lOXXKxb(%T}c7zxv!9ztKJ?q*5QQ1Fvl~_VLea*UPv;mZ9vX0;9fs>%cAQ+ zArB^{Y30U^2vjuKRd9>^?Fu&3tP&>gxLcEDdUJDg{S7fb2%xYFA-n+r3mm&pL%vbz zb$=AW3DN)*^ z9*TX_Bt;L_b7_dYYPT@=kBFv1rD<FiP)JRIT+`;1k;#&WbPAp8Xds~?;EBg3%XR?lKTAodNhFh z1E?=I(GDB|f#7Aw0FEHsldkFE6_~{~ApZu)DmR_UlFvV0Br`12JNQC7afo_7P$yRy zU1zd*I5LAxnEL`l8_)qUO=CuT)mgh$Zn#+y{>CLUtddoC9?A76KTa-;B;PEj zFmi-xcr^xg*>S04%yi=YF+D^5T~yn-?H< zp!kejvi{1&QP%~t;3GuelvH-gOJa7_4|b=Mhp{h+@Jq`n`r_my&j&@YiO!$HJhJ&( z469ttz_)h-*4+`^*N`a&ZI*MBV#A^8E!2;Ps}((N-Gw%UYLo7pjmmIv;~rr}^+g4I zIp=Xk8H2Aua>5Em|ALKl>L_M+Joxe6^;@uCv6gC*nm|>9JMfqy9Dc!o+t*=I@Zu{)wQ!j{nQo}7$rw_wFc&V8QfCZ6xvkKDfz7`{PnIihtNCIrU;`r4 zjV7uSL(Gqxl8R(Kmw@x0MAuh$DkHcX3frQTmBm+}5(Z=U`RthmOW!o?`Fb8pGMddd|uCXOw9$YJ>vpA`J_$z4f5pF+?+m7IMBF)JozWd}B=FWH&i zJRCcDZ4B;T<56$4B;`1l!49QvtJmGgr2!#a>66A{Iw5NV$$p{-P%X!GXEes7Bf$V~ zChCvHZXFO-?3kPddJ~I^2xM)`i;HkBqNz9nlD%`VEm zMeFR?Bwo zAu>1ld@9|5_kz3?n*j>{h^Pdsfe<=FtWVkw346jI)viJ~ndo;o>(KCuuQ>s4xE zf(V^f0^9cYm0vugyH;%ZC+mN(IEegMd+=aAbZ+7M!X2GnXSo(vz6r+FRGz=Q-dNGl z7zq9U*4LF3>bI{8t=m)=4Euw`GOr!N{2_(+>~z3^CZfr!u%)n8n2Zn|ppA-+Aj;R8gF3<93bbfk*m;eZTg2%jk=t^D`EA#)Uf=iQY5j?F%hvRkh6{$PRr2kJ%QBk1$m zRhysxE=_EC+m)KvJ9;v@)*rdUVomCwrF)GF3*<$PQr)1Q^srNlx>1hM4}ZNHQaMRg z&Y1cwrY1tMtRXxoXL)evAM@3~u2~`s*nj_8;FOJrFHR7hMbRTVLcT!HoG5t?EGt@0 zz!_h^2P+44;uvSVnz_Q+rZ$np!I%XI+ICR)MEQ0&1JE4#x_%!cByVpzxBheVJfJc^ z%{_PHgR10;*W-9k1RD7xfYGQhp|Hv=V3a0DFY;qwzt7bbm1R&p1LbfvY$OG#0uuq| z8{^>Y6M@`=C(M(&&>!2AI`UR4DL@dglDQ%~76=7J&lO-L#&w@}Z3R0QN`m%s&Y4Kc z_dvzHd_MOaZSo`YOr<8<%Eybui zjio2bg;3-S5v0t??eHENhGT~V%2va3{=FEDV+{AWA63yP62Vq_9_5`t+%?}Dbsesm zOniYmh(0fdfu{-g9XgNUqQzmHf)s9~;p=DufypfqPwzx&&G{wXirjDU#8;|8?ltZF z!F=TFcfqUTfq6Hrgptz@eY8{|{OUiyuRJN%J((8w)*%~I6LN_)V!Q$`T!9D}qFeab z**^?sze0uZ@cYVIxlnMo*c2`>@4xzba{;+7*Fq^l7R$H9WLl%d4^do^?i!S>)e5V@ zYJ5i1*J}j=+In1kEWE6=){MD)c{2XO{dk!pS|Cra5Fg7$pN~3b;1VC?PeA{c?rq?x zXnlb6Vu)gz)Z1-zb_P~t_0D50nxzbI$^7d$AHyiAi+)(6+*HSuSL(+g50yjhd79{(l=LIRyG)9Meuxa5wp|kaz8Ijyf*2&9c z&4g_zLsVeUjq(eAh;$qRv>c7tx&m#+)#Q9Sy#==g(P`W3NNVVD^*j3YO%o zjRr=+?zw78>XMrRG1o*1bL{oH)zrsyN%AR8XFf;Fd_dmeG?<@aNfhPZi9^M(cCp!@ zPd4zvmhMrmzI#!=C|q$Sl!*~}IC6(@2D?7nR5}BH7#V9;WPc8Xz+9E6RmQtWtc*)q z-N8jiRnKksl&ux@!JsQobumNzrG4ZUKX}&~x)pA?>C3mXD0yUYq*8S}>QGXUco(OW z4`#2Ncq8#q|DyE2vS}BCTS;TT_<^Yjqz%q|t}l_3IC(N=YNHQ+!GB)cM5dAQ%3R%$ z0}-m(a&N^#PIJ0Iez*_DGKX`R{>O&(yI$UGP_7z8{^^*Q@+e5aiH7LW>PRk{*JpD& zMtDfZ(*-$+T}>tf@BoDbDqwBqs9%}P!%DT!8c#ZmQT_%zY)j%1a!0YWC$+K0y?LQ~ zB)&(v05k5dLSvJ!u<4N+3gct$#LbfFOi&etsh-2xh>A@zL392fzU|I6nOsFZ8rb*S zOiXjemCp;ep`${+;+hKbt0s;PpwYb9o0C(v8;@ij+h`OjCDZgdyMvi3&QZ^RQ6neu zGrs}dImUMp(#YxL-+SDwHH$o-r`{8Ga1B>*Ag^+c- zvw2Z%;Lv`0uiI}p{17PJY%b!z`bZYueZ%3Oa`_F1Z(_!@H)?m>Whz!lawrRv z{L6SEqoc?ziL7kp!hMk~+wi`N59In(aC>R|YDs!auZ0g3uNalb!jx#eH}89YMC>^o zB3&zMi9)Sg=qFSu=ktv+OzNGR`zrr3xQkSZ&D}s{qQZxdA!&D$fc*WCrwHz#710Dr z03T2VtVVJJ2k|oq!}`WuN1pq-`{3X2$ZH&LeDL$YSxE;5*FW+ZUvZubFXVz_?f&pa z?GijU^;C=j{0`iIoM(>$e7(aW`e&l2wPTPCTM#T{v*R2KT05*H%R;1~6uoiIE^1Y! z>MrfOki2B(5Py*yAotR%TUV>ebJRoi-^DJ3;gs?jg`{2p#lhvC`+7S?Z{t_Wq;c}K z_0j^bC9|{1g+7rq!C?P3;k;37e^m3Lk8GySK^rGUGKr1xF|1CQBoF}wGIbij7Z%|X zdgRhYt5j8!k`F?P6i!rU!Gbk(g4M-Xe748OIt{~T-dUKPpyTLocwDqXf$pG(sClei~NYz`ppy8dq#R?e*&(o>LZ`?WhhE@6*=(HP7wf! z1_2ns`{ouh%H+U!-zAggfO>@6Ca?jQ?j_?2sxc-(0s`Q+HS3*JpJB(kFo(XsS`9ZB zVnE;kk0JgXvl1Vz>ChDSl$xIG^G%gw$h$q9>>aC=YG80WJXzv70=J>_7T|JE;*AlO zH#5Zqg5y8Ea+3AK;b`sy^2sgGefJ6cd@&ba9No+{=P>Jhg;V8uKQC1HU`#nywC;%g zhSRZ25Gkz^aGsJUP;!m+{FUWcfG+~!J$}K|DEGowGmLJb&}|~Pi}F$01!{zt3+IoD zBVPL^pDUP_BF*^oIFpR#h07Uuq*mhVH3Yr7Rs%B$g4PSx5+l4u&L*$}1-Ciuzau z81V~?b#D312|Wn^grQefYrK0xAESaSn2)j0w;__BggOaE^9)S+@LrnI!bzVTT@g}< z*wF;;;We>BvXz!4r^vuarbzZn4v7sym|b(Im>2oq1(H-Qu*Ar0Ofnq`TC`x#7lWvu zw)(uNRG^9uiHY^1wsa`x0z3EB&dup5P9V05=tE&!uXh& zogT)G8m|v_djX(ZnfZQ*LYCT6L@Bfu7fJE!cOXJOSmb{5n+5(YD^H=7Lrbp<)8-CM z0oQczNQGXCN8~cSDD^>ZHcSpOC5@HX+z^CQiM;+tnB=M-r0b&ONj)cK4th&)6Xe1E zB{|lih8Y$j#!JH2GW#Lq`?^;{pO?Mt8waj1!^|(QH$0^67mt|%{jk0wcgQ-7y6Hdj ziXQM4V)yzP1JCiq;78;5c#KX}^Cn28Xmr#s!P$*0(!yw?6bC}aW|0rZCJzzR>BJJ9 z?1u-(R#ypACXdbaJO^VJ=g~b{CAy2=+f`H`*a1s;Wfowb>-ZBfj}yT`9xL$+&!Zss zHl2j7>jniiPu;gTo<5M|pNhK}?O;%!cvwOrELr^|%{TNYr#Pm>0D~jgkz; zmC)Di5z5<6ZP3CS49-Jzm=53g7>39jRs%XPN6zGG;3axEJ?OG)i<3!3ODqHA4qLDl zzfkpe$}f%uIhNBo`g-Hk>Tu)0BRU!zxa;&^1-TMRH!q(|M~I}Pdqm3uB(NjbOgB-` zL#=tcnj@FzONuJFGZvzPkxyXKm<=MYS2|i~Nc)}<&0?4=kGx@psEGT%WO_I;1N3Nqn7o_jqg*8XUdzdI3%O!2 zV?c0Wz{@W*q?mi*scZ@c|IW)m7;nfb;nNRAiF(KpJ(`iUf?eZ&zj%)0Kd%%m`G;K4 zBz*~I4?Z*%5%b}dRExpk?Odt^+oq902JOUh%T6bec=57`bF;zv2mRcJu&UV zov9cq5;2y3`pht|F}y|ODOrFJDO~nnuz;fDP^own!C4Bzf8j$ClyxXrA$g^*ea@op z+_#V3mk{US=x*c=_Nqnk7`iZ=`yF>qoYTTwc!h_9Za}>KV&D;CxzXJpxn<$wMGPef zqh3`sy_wfo_rB6uLW%RG=1M@xeuGkw(VtT?OI9wY3o*0X(&P{r z%qI7omz5}CY?87l?Uz}Kx|BnP3GO9uVYd`fY=^cw_v-u!!O3#$UEpD&f@D69ikfIo zMJX8zPK@=LSsg|0tIlycQ&3$1sYQ`d@{aRnpugb+(|h-(7#BCa`hVDa7q2#sWO4Xk z8SmyqQX&L6agx>A=3~db#=XK7I7LL1QN4YP%tdhNb065Xr$<;)-M*uGrv{z%DZ~iTUla7^fPE7YM;;9%p-;Oq+DEyi zbwB5X40mC|BYbNm73pByP5CMgQ=l7CdO@%c3@Lw;PJ0}49qOD@=3xJZsT3?aLBkBH zcgd*COrc;>W(s5_@c+LwlfPh`+bQO;q7)8?g4xs$B$kpp#%{I$>gQ?N%~vn-m7%~& z?afH~pzxIMT@qWXnv7?47mUo8h1c!`OTNgBl0M3x2 zy5naG%>3a)vNrziyYFaAm^+xX$QjS(y3w&V3x1Ccak;~V(2D94S&yG7+U-VUC+@uq zOYXowWA$o+BBp&(B26vul43Bf<)2uiP-v{crkPO{Poj;CsK^`#2^ZaYw7O_ZRc8_F zq=G32aZr*xBCp5sV5K`ZL9E~}YP@!N998B8ljAql@HpViY z-twNo2Gr@N>-w(5qn<0{d_1pKfiY24M)sBt%}G^di;LSE%Jc1RJ7puJ%X|mU=&q>tUn%6mmx@Z+afbDkPuGg<1ppN zBZa~wP5N~;R~S*f-lR_Gv zG)XZs2vN(h>hqiNbl^U%XVnq!(S*My2!W>UVAa|NG% zQi$QX$%|CH3?b~RRve9`rM{5Aod3z#;ptB{IYbtqB2}rbEnYI~^c9G#+uVgNryIn{ zWSD`c7^4Fl#(L0)D=1NT5Pu`u>%-=eIbe^P_D9{pyeCPeYz2w}2QbA3@>HW2+*P_X z&v~$qz$?SlV3wEZV%&NMao^6*$L@3GZ}d7 z6n;!m*;ePb$V_5t{=|5kHD&YsBrt!Oj>jaqN79b~m*0mLeTQ$gR?Ue%r08rB}2c}XYY9RxQnBt(n+n@T=jQ;&DrWYqWrI`IXp`20#Hn z>$uWbzfnTU;lWJCx%LoTupYYuroP0I!(JY{X?qf8=@PRf98@pc^xni-HGG3d)t;j( zoI~xmt`5%N>nCm)RU(#^;m+8qjiOGpX!dx=F{=l+k*LZSJgFK(m}lDVfSUk3XStmZ zsD)%kqz-WjlkO5CCvB9qJ13V4Z*n4G2xFoE{C*ldMo5vB@jPnQzfbX@iIlq>7<*XCcas<0$EGTI?(Io*xLM?ttr=x8&`Edy&onxVD9{s9Z6nZ4^{oQBJ2X{W4kNd1prQucZCaWq~T z(uYXdL~r!|%}7mbm(Gbi!R@!J$T!;2=`EJ1%Sy#3gy~ru#fB=vg)?_3x!C}D$mof#LK#On*R}TNoMwaU8gq@Jz_6Q5QDLU52ag#72jk7ayp3mTL|DbB9?~kkLd=)#Mf58La2DfyrYp#|s8A}H48A|2V9tmBu__xlm8H}s3A!)I3@!CV&qJLiNiF1bgbmw z7Frxt*<^nT%~{ zAZJbh!NQ*da5R{vWKXrN6z6HOA>!_(lDI~uYS0szb0J#2xkBpJ zSaQH6pAUL??}pkQ7}9W*ef*JhBa?bzSqufFctS=tBf3kRN`?1jvwpq^#b($z4kUuEjMDfZ z-r}&M80tpSG7i&ANoFn~3JSOY$RP68IfrST@QXAQjJqh);a-NdiA&fpp zcaXXqu>ov&En4#lp5R#`aaYcWT0Rpr-*7RCrevt97NJp>kh$e2;J+Odri?gdSc8 zb8CxZ(ZvU-&I^n4I96U~!7LJ6Nzf#D{dfdRv(p3-NaQL<>_j;@D4ZI;9gI?8_wrfq z%=UtaYmi;QSXLZu#)IQGq!K)JZHO+$7XM zSW?)0kaPqiz^}9ODeW8l1rP~8^y9#7rhwQUtv{43v<4fejDm>l!Q5jg(b8Lq399YH z^;%&|Wx2kEJ-72-VRe+B2-R>dt!^beW0ijnG>0R7Zdk_tKN*twG(HK z3OD02o7wF!7W~3AQvSs`3K>F}=8WoapU#*`JhLpd<#S9Q>_LQ|{HQ@-D)WhAB3z6_M>^b%$2x&~1wH6$w6h_MWxc3y3!k`dx037$r@EDq^eQCW70F9uR80*rhO=_*x< z0=78#j1kPFgE77Sh=x57I79O2f9HMV*x~Ms4I3f!vAf6omU%BrzxRK8GwCi@@8;z{ zb2sNzyLow^-4taN8f1FpBTKX3a-GqQITIF2V^G#)QGi6eEp2nYAV#WN1B`=mZS)fb6IY2Eah?uTu?- zr^7Ie?vW(Srdpb=PjLMxvh_qrcCqG|x}!SF_oqy}CM@3|sx-s&K4 z9*zFx$c91glQ7l>@%Ob)cH&6-3!~#RILdU{2i`5b^k>~Gc%@hlVT8A|dp_ZsD}g5~ zo^yKLEbRmrH6Y^o^0ERE1|nxEM`;+*gdtEU2c(rLV@}SC3sl}379N>$|DX@;4W_3V zAAWpYurCfp%n*>jT^oKRjN!XP3_nI5rQMNoSKXN2U4Spn{@cN-C1+qCn7tSyIq zMk@lUaWVk}&bJY@&yFM_Q*avHL|iBOH5bJ0ZnjlfE6$5%WB664C@@-(h-}=TV+Kby zfI4f68sVycc}3<1s1?O%G_$dxe*MfhPQU+GeKvP;r_D*w>y%PlG{SujSghZ?1(`ZC z<75=XI+jKej0Ax6y`*(4pyu@(R9pe|V5e@SaZOTP4pWoW!@W3+k|{pAT^}MU&WOjW z^zVZfNvRbsTA&Va#^Fjt!7VQ@&HT)$v_zK3Au>`%8$4Gl^)fFO=Du)=is0>|)b(&x zRF|G;Qm7L58oAEw^}`J@*$Im4LRFa+s2E{_SQenF18`LU6r|V_bAe(^7}CihoQ_9k zkrs>NYR}fj4Td#0F+26J{W zj=@Rs!BD#v9p!s(6dd5YZ(*mcIMiD65E-{}V;ot1ZpK}|ka}7qU@}hwONbVTnb3?A z7Dm3{zHZG>TKZ*GEEv1f82GOvSdk+5&0i!B#GAj+mNfkQix)Ga1{bVxragKZXPOr} z^F0>niOuH|w!9#SFqA|Y33F4h#ZhKNj9^Xp2Qrs&(F6_93hOF?eR^cdbv3>zJf%rG zpN)qpr7FR+C6=sJR!vQpl-bdEoQ~HjG19`5b*lpgCHtP?*o`_uUz5liw*Y|}86rH& zsK2DY;Id7#$sq0ag%fbZhUCyQ&%MfR>0+nQRmf660?KaFio^N7_;OcQPmy5mV?@GQ z#y;TOi*OuHIhd>=(Q(R|H(RzRV3`^j9$3OTAVtVr)gDJU1K-|E>?#sA<37)rxE<7CqnOQCgcj}bJC@(>74NfYhTW5|TkS4W_a->U|e!x?y`2*R|CbPcy3zbUr z+x*eXuJND#XzZzz&Pb4a)>3%G+9c!>@5FfX=_6yTVzUMrQr@O5RJH@!vQg|qwAnz5 z^2}m6laXhLIL{nB$eW!4a)q7Cp&G_S7fcLz7RMZpiO1@{lMO?KoYA}42tdw`&QP#$ z(EOxEXcJ=eo#+esJc4u>+^~5@xIjj2OuOg4YRlraqC%Epr;Vp%7)9Ev-n^Sx76PwP z*WDsI7iV!svSHp;^j>9jX<)>ANoB_O2T74Y!)reW1ba=-mr)4&EWddy92w%9T5&VB zEp!Hpc4_z$j#0FpJ0^&`_E{f6?c4q70nMq(Qp7xyuhMst#fC_^l!Tl&(G}|pAV@PE znJJNAh)uhQGlCn#zYI!+7n(v`8`cRC31x=LE>nWI5eCNVccnj}?SKxapjU|8V8R@+ zsym+I9{EP7qcJRHp=k`@=xsK{VFLpABmz2TI~}o8Lfb47(-O4I`pB%@)ShI8kgm7o!rzg?S%2*rMZ}q4Xq;Si3f-rFIt=?UjY*MN^2;! zBnGeTs0VkuH%|v<3z}jErezCagBw*YDa!~(WZt1b>-%y5Hf-j&%u=BXBDBvs0@>4WVn#C~;XcWemaKj*OgP3f z^_DI%y7MnAl|hR$KI@wBeB@LlV=(NRCWq*BhM1t9JDbY zDT7|3CuD1C<5Me(u3A!m8Us-iRv`|f$cX|rM4k}A6z>v{t_FO3_3!%2XUo9qOXz@T z^-6%WpnlZ$O?*F%uH)!?bE(a0CY*9C3OBeVFXUWd2vfd9>NVo zNjyVGEL9QG{)Aco|0?rh%1#)^z%t%_qpul)PKdr!` zqzM=xsys7uVIZ87%T9#WS~w%@EH)jo!Ya&V&)TtI4h->;`N#O2pbt$BN=QC$8X981 zT|7hVz8pwBafp&(;%oN{yqV)0!`kHw+#!hHan0bDQ6b5z?<^s z&6x-zS3Slwxnm z;cMEBqhIWT!fq%w+AtCT7yYSty``jM?^*LY*isX>=-;KxsiqX9O&u$$B6Z@#yeS|kyFb+o?`|QI6anJragX(B%pD^No0(X3-z#YR7 zrcJ!M|D3}=^&DK#z>hqT|M-Odd-;Tx@CFhx^3Sq?+zq8Q5_4 ziv&H&WxxiApim^*m!y^KaAHE|-%{#wp)3}GH8HU>*#B+`G5Bb_6*_-Z2)vcBvLO4` zf=o%W=Op3O>%u;ZQt^^bjf{M`ZdtsGZ9gRS%D!FFAER+{ftIV-H7tkw#IJ5)W?qD?Gl z4mfslUjxD8{fO+JGmMPe$v($|ALCu$_p}nOi>Jwh2jdn`HiPMK`p(nEkD=v`*(o(jK@PUD3xVH9XKk58q5YJ)4Kn8)zeQWH>k}l4 z_Bmdf5Z*TI|1rOXRT18~hKxhMPL5sr;?>pU=+LTUu#OmPtMJ*EV=;skS^IhBtYHyJ z>+~^iVIl6c>o75!1PIrE{1y`hU)v0L=&Ofb+PxIL!pQnl*%B}nl&m~uUs$up+*OOd zQ6dqi9|r^=rKT~K6IG&;*6QXqm+~E_fhHd~zYhgV;?bGrAtZgtQkPf3cb1Dlc2;$MoDx7WH&zXjzQ6AFOV{IEQ)xhf7ZGaKYRT z<5P1xzr@5W;Dz~ymTecG+DCTPJ#Pb?M%zo~!XHEVDDnj4(z?fpo?~HA-2EAUJ>K{F(`r=>gX<) zE^NV)J_VZY{Q}-|gA^cq?j0(JrR8WWOJCg+j~10(Fvac1Ao+dyp#U)v#ti_kB38r8t*+to|l_Re7D1) zyvY}vXwW5XbZ&G{&q+U2mXSF|&^zy&gb73GB6{_gXJR%S4#yD+Yj%8Xe7fa)C3fcl zPU`hlKJR6a6?X1}jWKK8Xh(9iOD`MI{VYmWRhCl}FyBjbQUCNKZvGR`xcM0mx%uaw za`RJ;nbiP`@vWr1z((H5OLtW)T(mgdZ?O|xr4xUWO2S*0 z+67!<`35AMwSw~19zg?=g4T6;lGM=$XLq;9zc}=JvihQCEe#WFZ;7f-+ZTY zQ4>JsYW{kaUV3U?>SkWLR+oo6t?tl{3tO_0Oj>BURA*Pv?s>g|EJg!PZxWq=LmmHr z-fg#nW%m0|TCZCn?E z;IDB^au31?CUA55#`rLwxl`ZdXpLx9+Y~UxW#XZnk9)VWXKu+nDFB3D4t9<@oxP)j z-zwf*{{Sg7_;B>dM2d!VC?-k6k?q<*$WTQ(=y5@$FPYt)M!=ufk z4zxccbKQCkeUr1A9mj#Vs&ivQpty<_s#U$I%|&mk?R9=V3ajDm46404*x%|L9)>l= zfIFz%`Bhah0U~+5uF?yy*5zP)o(?)CbzgRlHdSSeg{4M&xpNd$K)mzPtHf`js=}zt zRiH;kmH+QNo2zZ_>}_|p^$0jke-1|-*zfIN7Vr{vMnT1(iYt7*2T-I+=ZFAY@z(y{ z;p>;3tsh_S{iJG1_~FOor@BRihytI@-=1~+vmueJcQSaf{9*A{d4p~~+dnw+ zz#u&*+SXOs-rv(uG#+ikE9Z(2H-9<(d2@GX`!u{sd3y6R(tyEL!UlV%j-Lzq|W~ox>x*4lnf%55{?R$Vq7wE*g!;$aygr#ngar zHG=`e5b@T|v&;UdmV8KR{N&J|{EX6{bY<}me89D#4pSr&(8vg?;Gwkc8M%29-WwBY zZLQ9^8a6ry5)9}IUv*E($fw-fJmF>LO}Bqo7!b4qIxd@u-fUnu1b1c_Hz73|}mDFgWD{vw`7J zMGR17!oo5QIF$p&noQ0SPjZk4BsC@MsmqMfpUOU=6IE8IHm3;%IsP=k=DeqKl_M0cyN;Y&^n;t$3|F1_Bp7)ZtF_X4j?7BI|Ev6PoFEPwE z2~2cc)Beo$lVb=(3|hpQAgyQIECX1aleFd*nOzmHCN%>Z?J@PVKSg-~r_Hv}iRkXq z3u+TkTNi|*X9w&NCIWW8=wE(mKGn^)7QVlz9jMnN(|fIfn;b32!iJrc@#2R|aV~MR zfct;B^Ww)Ni7W!^U|G+N5rU9eJmp2P-P~X>k?~t(%qeR_FS*X9ypy%OkcQiZ7vU3^ z-Lh+aKr5q&QnCtsnj2`&jz6UO1JBfbLlv2R+OmloMWsPoBVt+tr31(0OXWae_kj~0 zvXIomgo~{$JsP7-cfNvjizog2;nBw(HO#u=tf{o2cA6GhvCq7JcBiR&Y@e~f+htt9 zh9#2tv)XjKCv^2}wlVYz9kV!4Clvxfn)D|eiXBg2=08Rvs}ceiUl~OopVS*323AOf zGkTW`$8G;ut=3d+95#%0>u9~jeY0Gx8Mf3T2-2nJs519BP){Tt4|9+kryMdNkSRD3 z4!zmU1benUat{qP`mx6Xp43TvXXsIQR>wJ|Coy!oU8*ArVlTf1iC}9Ywao=p8;{xd zm{SpefE~BpTp0-vY7Lk{9pgvNyEaw>23h{0O9ee_CKfb7idac+R)g}~{s{0#hKH8_iBJ@+F zYXx57t0w2veVfmR#MT#1p#lbK-K&gRQjotnaL~=oKIQzo zy~>daT3HeSJdye>=dfnBVfBCNhZ1z4v4OEezgTTy++9L>^fH)M9QwPCcysf&`e24PS&=)hbxJEBe??05;;B!cKqeE_jXjh*?SU zL~gVa4G4C0>Gc*4m^hRf`TQdM-cTx8M;i9VlE42@5gq|nWrYYUWD6C9*T&pPq)rlNP~hes zgcZfgWR#KBSAmc7X2)X+bK8hjD}OhAoEbsOB_DW9M_&U8k0OLmi?A-+NSX%X1$2&I-O`mFRB6sc)^WTS+P?qy+BYmJiqB}pAg z=*o`{$vBuZxz5*BtFNCV-NvFtki56*xT2?T5Jb#2E4u&QPhdPAD7L@uBK5nSF9QSa zB7P^W+=s4EGx^7yMB_6G5Ko!C5M^{JOZNF#f)sr|fY3+-7$YlHZ$~Jmr9q{z&Lz-O z;gCg^A0UI00Tz>c{`3K3)Ef~@6Pq}rU?y8%wOZ-)GCyfAvkr6NJZ_uzPIXlw zUiBAL(v@Z1eeh84wbLCJY-Vrcf(s3>3gE&W)WBq-HV|WaIo2?tdovRN+Uxxt8gLCV zc@TWa(ZHXhwGd3i7oeyLZ1+ISp?;;<`iF!6A)DFc^tCMcyONZ8NEQ*GTPYf*dK6Kt z>WPV0YjMU&*KD@sy0wOAv{a*=3oD+K@OL*9n!Z2kQ<@YsCA&&Ty+OuyUK9*I(!Qy! zw@7v=xvPoL?9VtmJ4L9wN+quvbftPyi6Z-EF3=7I$T^Lzhdm-v5$4As@z}(Xv#j*R zOiso$nF&Or#^KC^VU3v+W)>%UIEBU+5sHvH0zJ%ZZak+3!(u3LijbP zhdm&#pCk|X^@bJ69?35vV-Q5(Z+@2aRWThDtXCgcW(AdMF?Nb?A$1TnLoH%>n8A3| z%}gVG_59u%l}Ou}SS&9GGiQPpiEJZZiz-A3`L)9Wb+Da**9 z2%lYe6$=DXh|9aO`UvO|4Zk$#EdxE~zRygJB9OZg8cKjqHpr4h3KJgK)EqW{J%-er zsckK64xDb3sxUTTCmsP7Zqt-IH#@{6dUma3;)YB>%uJE{gjygCo%>J}Sw~(ul6RF8 zsy?B?YHAv$irCPk=5f&OB%%liH^$2X_1@`547);XTvPFk(q|4gni7ef6q*n^_ ztOd4wZNGGX&?~Fpv4OABcP%oARvf67y|ez`H9dz%{jGAxp}}6nj0?l@UMw8&1xx#Z ztX(wV9vlFg_y3sYyW`O%ri+Mdz>Cq`l@_I|**kNgaAtrH#lwp&!RsisZbbJid#4D- zcf( z*0WH%cjAIgJT9m}K;U_kHaufKJpy#r_Iu1m-EoiO)bmr;kq@6~MDLjlms2`8hR&_) zSYr)uI=Unn-+M-ko1=7Est*<~N3P~b1k)@eABvi1_6VZ>d4XQ$-{E4-XBR&>@3)B3T;CAQKUPctw!h_sIYI;Ys$qMJF8b44yq20y z9*_176C_p8Xo2`RF(5HEhh~$-d=@yh!%_d@!cnL+Z?@NgbZg~C-5bvNjEd_#XY_lF}7$nS7N0vjH>p4v$&4uBYT>({QP&a{VD3b zqp)d!)|mhmjW%tUzCwle-t9Q;Wx;pm@3@7*eiSy(wJL62QnI25B~c-u^@SVcU+_$> za8h}pAMof)?W5{8GfGGe(qSZE%~UIq~x% zK{6(Il;Igu9*R|8FUu!=&RXd8g+_viC&idBFkP_OJ>Xz6!-vDYjaSv0_-O1apNT7@3bU#w5iy z{RQvSY<3Gh4*J%J*_>YYDy5|4l8;%dqshG%9=#E#MacjjW|(Sph}qX$9uCqbRQ$it ze#*&K)|zxOjjF9LTt;hHb$Z`JtG=?n^~W+#bW(9gz2_Ua9=_ggsgdvo4D*IrBCre@ zBl=j}6mJ%#FG65;iN`{26!rIa-U+k~CgeK4KSi-J)(PD({90-jo=%x5ji;Wxh+Ne~ zVAQDSgSZnml`{fZ!%8{ZxvKU`b5eXn?M8<%6q%})9ESrM>2skcEiQZTKuzwLp4CQ2D3tm|7=f(n-{Q*j^ z8fRYj?`0?N)YnGDf;q+|`+6U*TGVnmV$E__IP?>8$!e5q3^mT&h+dxnz+&9LnykHw zMVw98g7H%-d51dhocslp^v%9lm~cLVCSQL-S$_ zZ)S?h6vK&lR5uhJ6=&!gLvVjfduto|#=&_8wi%Hbd;f^+IVGpca| zEpTlmkXUw!+#waN5%az-RSUXjkz=TeN-!i}mz>hiiS3`5XxjiHkIKW>rp+ZSX6fn|b#=&A0gKFwiLlHUiG$Cy7&! z7a%797`4?#?Wa`OJ{XaThgP89nyGp-FkV)DTK3zw8i|imaF_D;5cjjlvTOF~iy{eX^y4DTP*%m%y8A*ZElB ztdx)|K`|S8-T`q}Vx`e&dR^%0ms)m2a0NcpN>77IqDI^14aHJ+kh3NN#)hK0k=9*R zsI3fgvXA{{j@tmi4l;K+!;d{y%@P#-)QDN20`l2iDGy6U%8>fm&q$p-Faap*$@ZwqQ zxp;bxNpcAM?*{|^t#kl9L4B=Jx&b9CkJAsn{hsH(DcHi#O_t_)2LEu>GXCL3cjGH+ z!kS6+DOKSmfW;&Y;=ADoSLrLt0v zS{tM#;gRtZZi2DGu%xkRiyMZ|-2C#&pDO1c%exyb6OM-EVBXVUggbWzrxd&87qSF(k(<<4j@;zM zRYFK%!v`B$iGE4W$6mIfgDGXx>1e#6<0a|1GEmx1_MpvwAGSJJv-7T-QJezjJU*sH zLKn{kHwS@d2wuf*W;$(ImvI0_bk%F)S1U`UJByR#EN&#-jgH@-TG~Jcix;<|YKw$h z7CX}*4R2Pp-*my6FT{*B{Q(?%Sg&nl!OjJ?|wN ze#wybD6|O}w8T*#Mk`LKsHSJ(8l~^ha0Ow9hz2;KFitEU1Fp15O}Wu&U{HNg>W@&leXih2%;RZbv!4-b1G{YQ*;Uc zXm7&BV4hz+AEcM+BG_-if&x)Ozi z&A5@zfZTV{mTbrJ>2b+OPi>xP9B9K2Q-(Cc^WyjUU|`pk0OTI)Taw*JZq z8>Qzt#Sv0(0Ya*M3JhF6HcxT!p2!>bSBxUahKhyoV^B(pt9X&UL>i3$s^Gg=reWMG zVXqqidk5Y0eLRx6@e^h79+M2CTZbskG789&FsxmrOc+`>>S9TVhbhnHkr?Asz zQ6+uZ^0MxPCXd8>%iAFyYLcL;?STG+2EPv$mOS1LLviIqhTD)dIT1v)F%fglz&0BA z-G~z;coA9eSfEogt|=#g|C;41yg*GR;J}Tj-pS{3f{o)KVR?%_C=U{;<^!Fr>^>Kp zXjrrjypN0gRLT~rSWbhzj`7IYT&X1RPh`^#5c!conqnMut(FtH8s!uBwsIO(7!#J&t}izi``jaVN< zDa~e_f(v8f8AOH>jOo;4Fkr4DwB#DWO`4|toJg|yVAh|YITcO0nZVaBMXw-p2ovU< z&A~XTe!zuWgl7WVI{~9#9(eN_;WkrrFfoi9kG@}s{s*_lY+So1ikBeHo4pjz^DgXr zPR{j%Y?!yak;zTD-iUe5TI-LJO_W!n%v8i|ay>k~h8Nw8Wi_FbEze7n-!joq5oe|m z`uE7^==vNq7X)NQ2kxTal6Lnx-8MkT~A zm8tshWZ)ArrFd3GRzQ~NLNDNZ(;Fv9N02m+)|E5o?nGiIqOB3}>zBcOwiqb63#Y{k z;oS-Y8mc{9_Ci-X82t&i`cD|}W3Dnq&*^d?=1i{HoX8jaO&PDGg4UY*+uulxKxjOl zP39OELsGyjeLbyfjdwc%zt`2xWT&H8$j^vUXrW37slia;=LFUrcSA$Up-7b7`^C0< zc`BPr=bcE(q;X>C4-V&$QoQaGjASiS%;y-q7eC>xFE|&=aA)W zbBDVLXOR!aH#vr;?!gYrVV3Av>dG-1ja4xG)L_=u`aP$pHd>wHd+70!yrYV!EBF$! zlaE5_d`pEO)M~?xVqM>wJtBqS_W;*{XA_t-mVlt{)VqG|Bn-Py5RTF5o4tux6E<32 zj}FlkdQ@b)7#nlIZQ@*;%q-vmQ=+~rWc>jmQkx~S?2NUuq2j6owwkT5B?=CjHw9qJ zql$|Uy8K|8u*^u_Oyqr5TTz}YRtXU9pj>SnaM-~+6&JG5Ex(jx0dKgFwWo*5T1=z- zp1h;p7g_ECUr3AH!kr*&NGAg~T@cn8qHAW z6kUOETQLIx`EgM{z>S-5N`7w=uO3l@guqPBT6TI9(d;T$pugV>MVqdC_Z5w9-S;RG zj^Oe5O)azt>cV2r{QHFnw%0?YRU)zk$!&oaeJW5C+U^0lYQu{gSA06MECnd#U`m`x zLyjRA-e%Gt;Bn3;t&(YT=bMAUu8f@<$wtE)&PlWOUmx&&veQLD4F^002!aXWnO=>n zY`8pdjS4aDD`D~PiX~I&3&=LG*X^bw((SMnHqV2T zuNoE*Q{5K1KqsNcVB|*Y!=c%TyHFY<>_vKJjmUB#;_7Mv{LFJF8}^y!-{p(*^I`W{ zFyzv}rJ9kiQnk6ai%%K_#Qc}BFLZ~DW#&gHs%KG{2DHQ9_O=+%8ZkNgvSRc^wn9QI z=7|i|uqrToHfG)%L@A?14CZN7glueKUSScKWwt|)H^(TFKJ%Wsunx!_(nZ8^uF$`G zo)2z=kd8<;nH#KD%%gdGrwe?}NelnAFo^>5&`t9ESPPOR_FVC8@0KuwEvOAD)0&fz zsK5w%(>GfXsdaZBquN%W6KRyW@jCw*-_8E-^+IsV#eAtjV(p~vza`D$<7D^0#G&5Y zZ0^Z*piG1d>`)v`EPNH#TzSIw!beyuALT1-AI10@*;kDp3Fu{P>(FX<2prYJ74%26 zp=7+LUF?Uv*WFlTRy@~%DJ4H})>NqxAyRlaF;4nC!x>YkMzC%Y&94B~yS&7Jww(PT z$ORo@tp9?SA%Y3JImjHJvv+Ek&_^{rKNxHRSsE9l6Z-fsyDi5@i}67EH#@ z43JWqi57;V&tkj%!vxgg{CUatDCa($+40{{=J)W?qoT4Ux{MN- zW^=vI1JW;Snq?27r|As}eJclZD*ea>r)7K96L@@E@VnJtE^Pv^7o3a6MeiE4t$ zy#9PA@Va;aJca~NinBpW@ixxr?K5#V&kpvFc6UzqUv&;Pk9PL=P9+9<8Ly)<@l~)q zghB85(~P8_m@fDZf1EXj^2rkGQEHdupC_bM?Rxkon}H)-;gOxAw?~VxEUFZe>+h0YpOQ@(qKMo- zIPgB@nz>4+J<@ql2k;>0#&>+0p;00}(<7%OC+QltS;00v4EZ+Ca(3~e*=Y|#lnbMHp2Js?Cy&&p{h$09aC(^2 z&fc~^{9dQCeY(A~b>xrUIXKwcZzn73kuK2335s;}?aiZ2TcBtAvf~cUf!@lOJA0?U z?Cfpt|MG0-=ukI;vdv$;vh_!i-6*YqJyW<2nDe(mukszJSIo(B8#`LAvHsmRKYSZ> z3b47``MI;}pDlLlN@CFBN`DA?l+P<+e-)h-o0O528cgDZo?b`^8L6SDPzA#eoninA zyv`cFq~=RF_0t!fz0SeTR%A9*eAM~%C^8Q!d%nMS6q$hCR|2YHx3IDQ@Ac;H&e3nN zQrKQwy1ri4cSRKkxu*hs(LuZ_55E9ZK&!tEtL$zbyyz4wezR6KBd!KrJ&a9gXYbYP zBgX4yR^P>DRjgN>8azILwo7)G3*Gj_%XeSEbR$P+O639iCSJb1bGZ3zw{r?Z0I2N( zy4^!Cp(*X|?7h&4%WHVJ^Lyv?#~p;4M7j4hteYwYm+-E0fVt{`RUT(r6{`&eEz~LTj=FYQc z_+YQBFVzr^pmXpuKIbbB?>Q1;RX5yn^E}*n`3la>5F4AjuYTNo);aPhse80P+r+uL}#aTnIVy;l?3 zfk#U&=kREAj}CWz0Zh1+16BY)B%obia6ppB`V_Fu>zAE9+JJ`(4u`Oq_nuIz^<`QC zHv`nn!T#%4)aK#6M%sLZZ5}PtM&n&Pp@-kyw-p}J!|#`A#n659+p7*O4;S{$f-QW# z2amzlkDG#-%+{HBm<48>t@`1=4J!wsBuPn%Vc4{;E1}4osBKP3;4iWP3e9`n?`A6~ zzDP;hKvwaYi5roep#kw3`Jh7Q??jxFxzq%C!a+c7W^WtKf(Gi6F&2e2&ytI@Kf6M4 z*R2f0M$Ji11_e%}4IR`s2WXSky~@xOmJ4v8S1<=1K3@_q^5mo*DOzms9Ske>4wbE# zt?1>rH;0i-XdSY5r%XwHJfA^2z07R*9s0GxDj*5LBb7;0_CBFhUFiP1MJBNJ=N@X> zTo@m6!1dbGVDvdw$ydm6$aac`@r1=3IB_pj%#dTpI18kCzvunF41QxOM?bX8+k8Is zzTnuHsK;9q#Zs_#A!N~Q@eQLKYaW1;S z@1gfwoRu#6*`TMSf8FtLI3~v>3&yWDe-*G1XJ$(z66ZR@4e-kZNriUxh9 zXew8D>1N)daHMQB3m57wsUL*(8Q~UInxFkBcg~pKgZ4VC!H z9lpE}TR*#?C1OkD}O_SEOf{3u`^y1$46Q48s<7|;t0h6 z#MDXXf1MBJ(}`0q`~Jx?!ukBd`DmzxHVf-3EG-D9adDw0fK#@CTm3+{Fd}8I$Dvh> zUu^L;=gFu@zDfrA7}b>`V3WD8gj$U{$V(_q1C1S0bT6TCfP1v=Fmqo`9XIBw^Vw;zf33ccS#>V1btlEJ}y-smsNcL>FW2v ziG`^X`qT7ce#E_LFUqzWNL(&NYbWJ8`19+7U;n}&d-5dgOb2Xby^7iWLB~VOr)U^y(N0T8%?^uCH zXmtYEdUgGW?`@+^>Pvk~Ps6)5fS)vR$ zZ;|M~@?@A!-@+Pu{V4?nOgXs_E9RiI8aT){Km;sDxliyz^UGxM>o=RnkfTgpnA~W2k2!drn5s zBOB+&at37w`KWMGf=t$8*jD8(ErGl5HLlg!C-5z>5sSI@L#!=-e)p)+nvJDLfucET zRo}dsuhIW%g(MS|c9e{ukw`Hpn*O#(+Wd;H1E$kVzIo_73SFwsF1^k!t2_JK_r=bb zSkhi%*pYlS{koq~MEcFczu`lmf;Oqn0sJGKa|Fgq|7X1OZ@w>dUS$A`XARAdx%Ic- zKjP3&YoTu-xySZroS$PdgH({7wZWPICxa@4I?5;zLaLyT}p6=9py3>lM``hpJ)9s#b)mhi; ztXtLD4?hH*-6zmGx^ywo@B?u7YwsQk)Or41Fc5ouSxO@G_QEc{euCIWyty1hqy`H+ z_>>GE#K)yF3}u-B|Hjbet}iB zoyV+3ct9(Iv!*8FVTYejWwkGb@~$G$(*i}SiqVSL=zXr`FkFAyYb7iyqnL_bKe)52?kvROh~mc) zEcd)jfnxRhpzix5T+`u^v$M{$=ZfN)_$aQ2MCTv@8-fDSn`O1kqg-B7D)Q!dVFbLK zZ_Xt}{_;aY8E$eT%1$O4*Bdrafh;nGCUvL)trwo^k;NPlzgf{pRbNYF^+k#3w%27RRI>EBn>Q{BB9NSfE0YJ`S2Fh4BR)Vc!) zPZ$@jpD0XaM8lZ9kBc9kc&N-(00@Zj)lC|@VOJ;(%DO1ytDBB9|D?WtaDC0m6YHb9 zA~w5ex%5xzidpTZBe0k5tc2NaDu%tJFGq~Q(}r#eGB0;kDDL+w;5}xWv-+ABFwo9H zh5RZf_nSUu=9j-Bdmvp=Y^}i6CC>nmjXt8vh%XR(D+Jdgj_9%&6Mj@Y@3blWh zZkdp7s`sO8BmRABf+n-X&7JKAAKC zZzTVXN?g8Pf65Y5B9G6i(X5xS4d-K6$kH+n*usD6LTFZP`M{2v&$0|gs>wt$CYHg;Z}{0z)58! zABs4|fP#N<{6;b_;XYjD5G4KqM07n0BD@hWi-}^jE5VLigkmzA`jVR>aYgrwLPgCA z`Nf<@L;|Etkj#gpA44s41Ds>687O-0G~%PM2;pGN)>j?`+}+okUxq zL@Q85gjlYn&J{{T*%6sk%rAHlPo-cegWU1PPN!hQq0;ARHW^@UqSZHV)>>b!;^Z6N z%#bF#|GePW(U{1&qD-AzG}JJ*HV!mW<{PTJKvJ}!{%+IDw9SrOLm>MA@2~l**fXM; zd#=Mx9Vz;gM)D=lls~K)f`;t61ks0j9q$lmyW4cq!*no+?}*xvbo3gRhZ82Dn-{gC z-p}{aJuYYjJHa1)*m5IikT>Ly4iEOloz)7mU|ofiRN1t3O%@e2cuuIaQttUKwP zu`T8=4V4CKn7-=|0Tf79M;c60B%=&+WtL5WFQohrUzYPAt^c8Ei$635Ct18hDjPzfGZ)%YnFwgEi!7ZFn0Jz~S<{qCUW% z!KNr_3LU2a7p;nB?@g|j=G}f@qd3(_uut`cn54aZY*K%T>i&zt7$YLWk{w+C&?wwz z(+EfKQpUzcz#2w8i$|Ty%VLfXisi5Y>v6n9siGR% zhqEl2{{a9LIdXKC7PB-nZ}Ojx!X`pZ83Suh23sS8bkwJ$cdG`8yNjKT$YcR%*NeXR zL=VQJOALJ`DRXbK+I5y(j&07$z1O?DhmuEzcMAA(voE*@4eA+=hwV!cLF7%#Bx1HZ zvJtN3JQPJU9F0dS1V$RREdYHKSi}4`6cc226whqIhSnYU^9j?EeVAuF+qBSQU<7HW zBFPFBi0M=npE@M&48@PqDY=o0xi=d;BZo1{E;&-I*gH#L_!QWzlwzlmS^4;awtnp$ z;2D&om{!cC&?AeVIi>S8I@Sk1-!g7^XVu<21shRu40yl^AEp=hhGlS`bai!Ddkh#V zdK?U`I+k^j0q{T4>y-1HCK9p_9xM#(JEEA&1VMf7SB1&Xx_z{3Y8jafa?;E}n|I6v z0F)KU@ZhY_T27stKt$u?WG-zc(?T=SLed{9%- zvGn%)kDh9`+{qwiwT3J;p17owL8;m`T0$ixCUfCT0T40J>B@>-6iLw#*M%?90j`aCMm`(n_aOel|rGL0U}1iwmF*6+JYtVWmSBi6{k zFH`c>kZ$M3qb$e39CaL}XmZPA2V!imgSEKa$nAtq811#3-HeMv$3lb1LpsgFcd8Kz zfTkI5sc8TBD-p&<-b_`VJP}$Rk&I8iuQ%0^7~x!7H3OuzK~t}ri^0?v$JN9=lkr6J zZTC&ze=9*lF8Sf3?`%Gan$|a$<1VK4|5ezlMrYBxH@a$g$*l;H&_cYsh+A8F%y=E( zXuNx4zO%r5t>P+r7Z1Bx;poXv;bN9vJH-d~Pa3ZHqUwrWeB{l-c35zqJ9SZYm1Kei zO%!g{3TzD^CBh(+@lE|9TFmmc&>d}*2r)<}p-yb_=?C`NPR8zRY{6gi=6;Sfo5Q7r zL!UmEPFUi9Xt0LG*&4vhoBD0Ph8fuokoxjaB1`tMpROSx8||cv2*B517>0hBwXV{< z-u1K)TPC7%(DxpjdRFw!HJ+Nxw z^T&7QkMGSNm*$Um=8sLA?$>7dHGlkM{@68tyflC8nLiHAA3vKveyx=*jkiYXJ?{@} zs^R@XPygKQkKWn=DDQQ@tG{hsrI_$Hn{H?5YiT}{&71$p+H;!^&v%~h+iq;0YCZT1 zGKT7ip%|OTnX>rT!!bN7{d{xF?$e9C*W2^q1V(qMli^tH?q%<0IOLCMz6)&BuCddK z7r#9>FD{16CU#64CRW6=S>&FyPw1y@i3@Il~@gAgLt8kt0D_6og z27)d#5WjfPWV>XT$%)fK03nk;(kzf?t=$2s&Y9$=8Bdvv36UhNq zXqLde8T1|2h?YTr*YI^bUCAdv99{IgfEedYj^otca>n&zKr~J7s@Ud({@W~hBuQD2 z>SEV7PCb!dN$v@=!Q9z4&Dh;C+u1OirRLj;sDEgGONCq@fXnjnLO42-eY%O^mu;6dmCGZ~D*SQxXkuN)$?dK{i({7^nXB z8VQ8sx7Ww(C(Q)@SvxsV4*b?<-6-Cw9M#45TzLRHPjm5?(XQsEW=XBU(-^ILD%_0I zNwz6{aV~f)2R_d=OG{ zlon%I!^#V$q*b3!kU+Aw;!XwMV+(R;JMN7#zu-ZziZEy0tUsu)0|R8Hu$nmYc-t(n zpqIsPf7%3KZN(}MBmzUun7WAqkYWGwii0;?VcI(KXe6~@#MW<(ZTuqEePY&EbQ?sx z&lk3?bL##2>#t(%Zu~m@T4^cSWCaB9Hy5FY1vwLVznI<- zdmwjx7I;?S=(8>f#QJ6&LbT|0F1x;)`dTs zV>k+Pf9%&w`}Ij;I zIQuTx1*r1NNV$n5vF3fjC=%{Vsuq@d3+t+qt}3}}w44)*y&z7J#BRBdP|as{F-)Q> zzColp<8*jrPX@Ikx5ZpuV-5>9#}jxjcY(ChA;64`_bM$@x#DxY&vkYuY9wEm*P!jH zu97aU0*6&y0UoOA3iRSEm?}Tj3o7w@U0n$-(SiyHqSaNb4_0NZ;o`l+TU=dZzG%90 zo^F{77uO;b-$t$;7#YBD4MVGiiN21h=1E{-R(Muxe#`)upiuRpi;yzHRDu{HsEf&r zNE5%2Obg0zz&_rCnLF$G8XDf(WY}!XLhn98AmSAD31Key#89TKv}=c3Kkn@Q)~Y!p z?V8?fZft+no~ZG!)%Q1VMm6uXX38N-O5_clD;!>^OE!e;4(7d#;~9uP8g|L6k&rr` zUZj=vHQNhDtq|?~--vx6aYWwacNM4+Jmq!kRQWfud!+oxsuPoq)|9M!KG}%kWE!3p zj{Y2sFYB^CJVX0!eXT)4U0+zu7*aZW`ou}6*Wn@M&)RZZDt`UM^y2{>OWREyv+W*! z9ME{VwtvTv6J3___+~1_06FEHhIEhg4qT`DFq>Xxb?Wn{pUJoYyMzB+MpUp=8O6=1 zKiqi`jYo_h;hOkfy6^9xZZm-z?IhLaH#B-+eWR=_ipG#5&-$!IBwC%o*;!8Z=3Tq8 z-99E&k3^Mk6sCbyX)0)Oevoy?)81pV(URHgX%p#*OwUwnI7cLV5lg%Qjl90rutCd^ zru>;*b&1}CSxXR*A$)*W`y%ZR7+*?@gX|(jzLK&Mk0qAIC`C0mcE56dyMq7npe>`7 z9F%VzbG)|lx0A0;>uWR!{rcJzUu*4^m>rA#&UggCFzStO03k~1);Dj^zG; zFQ9kAw+zXvP3eeL+LFiu{n;tx&3HbggjcrX$n>eZmb#RKbOtZLkYZ6#j%Xkvu3JZ) z!y}B^d9-f-(JJq*7Dj%LQc4TbvA2#d@;M~j&E z{Deq~%S1NRhKq(p3njOUA{s{Isvjp=73-PkZlver)e*{gt!AqvLZue5`UfsF5CDUT z4v4&hpK9p+osxt>D;HCXv-GiCWzfIChZJ*(w-U*Qn^Rz2%*N?5!6KgP&sZsfS~kGR z29|-Kr9^HS=c47@+A#49)BAFwY$tU?@^~apdeT6GyWM29DW(1C-4YSppS3*UCQPxe zT}f>)5e$e^5Z88G>7`dJvbHCl%&$V=M2+~a*hV&j-&$3sU?+a{u4Y80sK?MUMHiOi zz)T?0p{gsclQK)^K`F_c>$Z|2-Mg5FjJ3RN|C`b32A@fL8+`LLyFpo~dJT%T@---O z>erxv6tLkizP>dmRocq7V=T`B+}^$!`BlsGjqS>6uOd|f^6P=mhkxQFo&lzUV;EnK0M>e9djRB(Ga+%o@P_Fv zQtLN>)zCqZ!slV&KPwTIxQP-NujS;37b&2LaQ1Sef;dXc3gJmU*&VDi!P(uAk!{TbzSQFj>0MU-7;#eu#n^@|H?LcdsP`W9hyr-n0I zDSg<2jmjf*K~>tm|MkMx;G;Iv4__J$H|(Ml2LVx|wZq7$IzAc8-E|7#K-WhVSa625 zlno^hYs;S&p0KLBh|LgX3~}Rt1QAz$)E^;FH-S4knf7gB=z?Z&8iO*C^i91eR|g>& z+6SH<G?b-{MDUp1jaC!;=GQLjA!kn zhV!U3lggPiP4IhM0!fkG9K6mloG1wk3^#7hP>@tw@G!9`o(tZC-#1&ApFG4VlFdxraRXZ(b%BOs1| zSjJ&d!pIb5{7GUUypX8nbJMfx7pqb)u-~FSvXPEtGU)yQ;zsTx*n`fQ+f*CH|fw3 zS7%?m$0gjglP})OFn4DS87Yph@o8f|t&NWokVqH^`f4o3qa;fu0r(M0jSyR(XBpw@ zes?|qJ{)D~04zh|8}S`9*_4nAgvW9;8S-Yqqca|fcNm&(<1WH@MpD1cYM`tqj$s%~ zy$dhe#T+vOjJj7Cqo3JH?>Zx>O^zf)|KT9bud+O%b>q!7<{`e6m4aiBSMdoB2iyocRMWJbL6ff7(C4;Eax@N> zk6ukAj7vztGoJF9W!c2@OU$X#}JVX*O=hb0#F|&{4-d8?){MWd%3_ zHc4^cF*5+3&-lW?MwXnVyW?pd^h-{kAm;i+Wlnj^zT|%u%-#`h~8)je5uW8Jdfx6^Otju;;kY%#o_S4v^!n2p+8aTytx129)nTra`HUU! zf5Xnmstu43Mg6C22Sm-`jN7d4p^e$UKpHeR-Pmy(>cd6e`URJGNG<9$7z30I@m>+UgZzs7makyKnz{eD3ma z=_lBTuk|CxX6T^YS*Xa9K^S$ci#;kOM_zQ1>P zw21^O3zFfkj1XvQwnArbyR)sziA8e7|L=9@bw?Hd?>w7lu6XP9!9izF_urjQr(}X= zsz@qqRYmlwg(^FHFN(FqPui>a-}}#s72%e-icmw3_>b{Me)KL~IjYoxQuXbMP zrQv1Pr|nNP^QTC~`>&3|8v7G9)n5*FjyhCxYj@K-*c*$cwh;LRO~Q(LW!ndvJA2-` zdO%)`Y8s&v_TUTQJGgvCeKnlg{)7|qxaMR2Qi|W5hB=~#cBtfoMV5}06gH9!l$09{ z-~Trw!l605LQ!lC^J=RZ3n%DlhtqdB{$c2gLIDA$*BL#v9`nasg!gGQ)|miZ?9R}O zW-IMpp_=<0S@J!06FaWi;@U~mNk5*Nm#m_tEiSf1`a{nFPX#G6Z>oRvC$MsS0$R_e z_wV_vXUf&9S}{Fcqd3FSc)LG6$N(kg{;V#>fT?eSU4F@S z-0EAXb7z@Zd?s90oCBghbM${_p~`V^gHJd#FR)b}(NXw@vOOUw(%TDl#Hu%0>lweh%^c47o{9fA!P>*@^pmN3{6%odiG2=Xj^xl zwUWa=roe*nfS?`D2eUrrrp5i{u$@y_Xf|lFWh&*^$|ZrVbOgUC6eZkhb^?@jVnipC zTr0UDx_L0pdC~n5a|CEDK-sUH^DfUC#y6A3O=%^+WQO+c;dZygixUld$6QZnROyNE z8gCvM(B5RV9%u4`Z8}H(k$r$A+gN{K&Vcqv8sm1OLjtiJhVG&@V~|r`AoH)1 z?u%ro$3%1hR7#7-GQp<=PRIDRpJ?+G{_Kc|lLEHn8bs=xEMXH8AXbtu1x6rRZ2{HM zqidr5wWbsCrDUi zs_{?l4mUPQGO(C_`D1ZB*QokH#>E=6>PDa)BxEUTalbKsA^XgF%eVMn8o1vj4KzlU zHr}U_W*VnSGyO>`q6_E~>g$?1!Z%zE?uw-CB)GVkkH{OX5Zik^vO+P}CY}UTUOIQo z@b9(;FuRq|aYm~)sc5OG3^`wolRleqr(n*xu*Klva5F4D;?`2SQr@SkwaQT~Sgq75U2klPJ|U&2Q##!M+zOMW z<6baTs&lW2YI@F1qcBO&u7I9LKh56*(|4n&T1WN)m{d4u2bRp#@LWt&Q-+{{7ahgJ zDE+>gqucRQPjk#4fjSW7i!*3(dO_07+htRrk znA!T+3xBeeqd7_RNZuGxG^WX8_13tL`aLCz+1BEpUSBW8WW{vz(%GySD3tU;zB9P_ z?oExUX=lTtK-Cm^xEzq5Dr=iRmH5YpVDlrj;d3+^;maKg}6uuq8?I8=bC>K3KLT2u&(g=L9-AtCpwtPWHX56`Qw zSMQ>yP~EZ_jkc|XrDemxb*pS=VqcfER#7vd2s(0_U->3gf>AhZb=goGv9aLqx|-$^ zL&sZ0XJP{hRvY>W$g}9SjBx3mi&$4Xk%yTx{LISSty#;0u1z(Sx=EUq3{h?)MtMp@ zqeYZH3xGBXMt$zCxEEaCuoH7*%O4ONw0quw#ndZ-+QEM1J+V%zJhMeMUzs><<0BDE zHb{r1w5r7cWx-0ydE#wW767W&d zhieI40E|^LnXqkCLz~T$k`C>Do6O5&ge=4F-lTnJX@tCoGK5tRMVdo$y^ z#VbLE{Yhfp60xAJTjY=s&O3uJHk zqN@D%H+Zx8PRl)R8m~ej*{oAc;cC;i(tV`C8vcgIEa{60hOlL;PyQ2d<(xGTedo|a zPm^_3KuAGyC?AWG?L?J7@TDn~a_sDj_tal6yS{77-~G|}?yOO0n2RLWPcOe}{pe9z z$;-z$fGE79&naOYTm`GCb?BLY%!d;t1_ZoHt`zC$)~KNqbog-2Qm|`QfNA0Zj1w|U z9&_wE_!o|atzdwMBl9|#!&N%%Q90>ny5k{*okwY~>S~ND$Db4Hs5$6}#)QXMe(V*ROH;t@rx1YDl^7W^(bH9^E6`$eAnnS6)l( zBDdZj63e6kQH)f!@bKK%0&%4nsDgQT1#}3*0 zo(1fOe2+ec$pado?}uYI)82X2(Fk3kvC;`VFf>FXB+~P)auJ=mH&^2&@1Et|#sV^_ zyNIf?m7^e4KI7=}C}$);=x9dxz~A)}51QB(6(x6Y5M~xY<5<^HB6RqO1UnaYb=q}~ zMGE0pZtOI=vHp`ZUAVWpeq3r@GI4)vidc@_R!E!NpV?H7M0y(cY~S$&^B5(t>Mkn5 zfgrlh+^c4IJ;&DR3ENqQccz3ct-g8pxM9)zrSY84f;!ybDOG*sXFF%LS39YTVR$Ys z5|&eKS$7m&YDrPCR&iQP7bow=gb_qe(Z1Cz~X6`yx4E+KPa>DFqDh=yeJG%ZNNFgjQe&Dx*=&8?AiEIG^hGp}LuMG2M-0y?D-DKC=b*k0 zSCnu`eVypUf0>FHSbc2)h1~)0t_z}k8YgEBD1>DgNDe7hmO-~xQHxVUAkjz$kqDG+5m7culBi9Tb z`j;T-5I=t&yi51kvm|Jgp-ta;eK~KfWn6$N+ys^jemA6`!8&doepvyE_fLwFha0kM zX!)NqCYT+P41WFsAhJ2=15DQ57YGYN~Lm7)TWm>W42HE~KuZX(ESNH{&jqe@8J$4?#|v% z+JozM$Z^|El^-_`wu3rGS*0q$W8Kj{T#ST#SFpej%oXkiUStE`jck8!x8Uzrs1gjo zK4f8qU>#h^U&;Qf&R(#y<4HF1cXxj;R&7+QxV5`~sOxmm=fM@f+~3xvh?12T-Y=Uw zN1+c{ipCq;#*J(VPcs8fo##8hdeDS`T5A*tVc+Px)C0`gYPmpq4!;mysdWDeora@s zPQzPDond_<>c*V_Xgdr|hQVaLFZBl54Xz0xIER@H5=>PZbs=aG1gf* z%Tj7UCmQ>h-dIM@Gwb>vgxGz32+(fbA3Q0Ub4dGF_>Yx4!3AD)5udowGppz$7xU)| zur#@Jg*mGz2G(vi3gfRvg3a2Z`Nf7Y*klOF!z$BgL)NKUDfz(j!>0W=VfN*MK>ztF}1PCrz#Q`@jebrf0|W;_6avt5m5oD-@T3I^{uPNP&r{*h@PX8jKKhnf(4x!MYj57*!@FwX zB<0j*xp78y3C_MU-nL(i(*nRszy)= zTagG?rQX4m10-NN-PwD-?*dIF$r-~RUZ5}Do9={{w2Q*;XR47W!_J&4uBpE>Eop)I zYquU%?asv;jOs7CdE6GlJ0PW_?&hKLNw|~~EUGXhmrAifs-Gwh4>;lb$ir12L6c6( z((%ot)oOVW5S3vYS>JK|N73>XBFGvlB@E15P!Gri?0BBY*le5W{Q@3sJSqQxO3jEr zmzAJQLs{sCwt=d~5{AFQ>{Y+EvNip6LRW2gt7WA4UE(LN6{9&zxOYs=1%K7Uv3L)N ztu9PtX>-H-hK~2`#E_vraq6kku1CUe*4L|WM*VmmLvl`J-cV-*`=+jth_`fA1*N{9&x>t!RA;G(#pkBjt|R~0{na)t|iUcsSCp&AjPGO4rye1>RGEN>@W&9UZBYc%TLPy%4$ zoE7&1$~KfCCzVXSPLI>G>qm??OEKpSpUYb`J4G*DG8JWV-el&FGf&5ty~zaK zp}@(0f~uJ{^`A5N4;bNY3a7nkx8FLOhz4l6)?pA-s!n3bii$EL+LdzMDvgsmrXpQm9jsvlOQ%mgG1v z%?t7trC}{zNZmweL}=+%fc2$`01z?=qJe1q?<%OvQ{U(x6J1P27ibLDgk1>n{Gzc7 zKXt3hW@rgp(MH*VDImuQ{|L}0Ye9}xwp4&&ImQK>&SP4j z`XuGnqWKi8oolIhZAmO>Fv)01PWF%BwWzkIs4PfcD8@fyS+*;qQ{W`StM^Kj?_@2k zUbu^|vXV(aaKWQ!7*8ptXtvsTH5mq8$cEak7ZeX|-H1OzMAUZ1_eGC*grdmYhT%N3 ziz-`q!z>RuZP}eOfj+vP9=^0V`IS_0`qt=*$cZOFs%NS(g0+0ogSn ztKWHo-GJSU!Wv#|r=WlT^{>Ak@Co0c<{QD=-< z*GsjnM8sBCaVOZTlT8p!=wAA!(Qx8D8T-X2X?c=JbJVMufm0I9gt7$!(*^F++J93B z1oob8nJxTfw*QyGVW9Ap2eGKo?PQA;Aq?chC1^0#NJR>)X>YeTMss;O;OyQ4O_(Do z&YLVBS*S%mft^}-av`+=Af8TJiszQ|2Y{PV@qUTQG@Pobj-aTf;?c-B)|xuqpm+3W z*c)J3>Q~AOJPDhl4asd-;&sSfkw7p)mjSzG%S^ATPPcT@S1i zMS&y57=2NoQWe*&`8}sbjc~94XCs3D*SYDXLbqwRLU_ak z$mB+WochYrXB{+iE6`!tcbNWGd~vLj79!6iES7I3S>42L5~jkEF@Qn<9o=#U6g zH|T?fY5ZD{l)L5B{bn}8gf4n`zMcE&XGn^zcwd_6ITX-l)RCP*P)Z9|y9)D8=?bA_ zGL zV+w>Xo4XAX-ryebZbQXy$Ti-ngbt%o`eu%!lRU&$Q8J(YLj=3&Od-rIC~_wVV1_}G zU*5f&lc1L{{9RA`2+%DoGE!o_V?B!P#^G%2)0*WAUosF1v(s@1tu(E8B)Jy7D z`pJfEY^rdI5z5YRcMI|sm2>R&XOnXZPqj%ZWn>GI1a6hdn`iuzB?Zc6UJbfG*j544 zsO%XpZ+R!X!ozUTPHkFN_daFy8ltLpAr*xxviUNF_ovk3W92XZ^Gw!CY9LZp!a@TM_GMX^eG?LW>aaaDVG3HC`W%gsC#SVlpWOI52vxi=y3BtGH;tfukJ1so7&()PZn|6O*$x%lyWv-T_`WKoBlYnpL zV4R}JSm+Q7B5SJttt`xZc4Tgpzbh54K6TcaBkbn40-^41?psawLJjhA{g&yhWLff1 zQi40-Yb~^+rM$#TPFbtWS9ytj9KMfoGQfYH=WKw!C@63CAHfSUC!pk-DHgsvhvYB= z9gFfU-W$Ao&z{PAKaYgODIT!jsl9E=uR~YS}q`fWeXEZpgk5qhP~=R ziqwlV9Tk|ZoPZlY-^5Tt5-U}LHpq1p%~hP(T@UDEXqU_Wm0!x9ub|51>k?WNMYP4Y zxjL1vb0UA7KzQMSor&hj36TFsj?0aBtZzix`boeBF{&~mcxuw_Zb%fd z8EvGX|JzrYxr3AL*vb)KznP=fiM;=3tJmytHAV@suzB>3>yPFJJ7z?P<$@f)E$YpG z^qqlk`2m5!n9HR~<%Plk$2yE&q&L@5a$b;JPSl_u6M9L--EBPOtk-dVpLxI0)y3)Z zEb}A~$LEJVw!GhM?{_$!&x`&1hIqa|+5caL3x+oH4~-nWRdn1kfq;K>2;417YgG(1 zA<#;m4a*ClKf~AT`z6X*WF0#fRZsv-BEJFhtR=1Psc~@sCRYsWlKV%yV+SG(-S>0+ zKMZ&)p2rOO3R|t6ZHLc2zd`A3?6%AcWJF)sxz2C4AJtZTd3K90&zvuj944LlRDjv$@mK5BwXfs++b_6}l8_Ox)GE${30t-fx1Ut4#UEZ!{kIbDFD z8Lt%wv;L)lugF>(_UHdkVXwxSAs3TfCk@dIh;;-nDb{>`Jc*aYPp}C;Hqhihkt4y# z5v1L>3>3M2j7VO1$hSs@lygEoya0|Rmg4w`FB_%sZLt^mVHf|4V~qbTqDsC!oa9^M zNWuXmw?yv$z2PC>7#H%b0U_TS31aWGZwm*p-+yaNi0$Eafgz5UM;qzd|c>bJ;L@6^w z`?Mro$<#c0lXL4!#*NS?PE^8j4_tv<+{EkCh4+89R<1}7%gI^5KqfQDEXXpbFj?mm zv;`TTbFLM5vrz~XGI}oWa;KHdn?enpOe)mY%X0{6ueEuNGTm~<>8IrJDftaNaX1-s z1D1mpDfQHbL7*n~Z%+&B!^i4>Cfz$^^whi~F)UPt2$F^kdY7|H;I1aa0XCRjwk8+) zLv|0I+)SqFB|9`vP)#tQ1Gql?>8FR_Ma!99_`@QUSr}eoDC6w9(CI1M98L~8mf6B@WP-pb0k|nT=u%xvs zCJ!)ASheCVQc7xuLbb1ECp~uoc{_ziY98zBN)9djzw5*M_uWML>ibS_Ou29LaJ)kG z&y6q~K*@J)fPqnQZynDm+B`Mf!*v;_K(l~7y|=!eIiljDoNwlQ68^%qkvkl($=;3$ zfE4CBDg!R=skX^Jr<`*S?w1uhfI9#op4uSra|Xw3nL!&<=IP|wkd$_VGr4OUP;XK- zZYHA^6e0Ucndlzehb=)zZJ6vNqf5n?JHshs2OcPij`H}9tD@3i)AQjZ#Y9RItSgHN_0$bDX$=&E^Cd-psbPV;EF)6l9|Q}W zTwx8nQglJlj^0#VY`PdLU@ApSL7u%Y%}0S)o%#dUmzf9V|Jo{;Aj7cE+F zrFYEy2cJ}6;nsIzZPCW(ZTp((;B?08!~I!Xd%hNLtRY0PE&jB1DY)JpK>w*!Lswu+ ztJC5-h3G;ibV$`~^8~Dy3lDXs0M+S=RJE7{0dU8Nb<#st>WjYMo%W*R3lsmEUs)9~I z5qMN{SM1F{Zh;fiyOrMo^?reWp20uQ;hzmaLf!C+3=OTT%4KU*gmL-$KR{eVJ}6eB zyaFesB9DK!u!A=*wy(7HYuuy~@WmxNz;t+wL+CWNdMNz1T6o zECFN6+iG;M4m|fdsWNJT?3x&jn;bZy3o# z!0Z9{r04_o=BNFDBK6Q95bp8!cf?gzdN7C@Q%1H!_gG!H)xW^?8{OSM_}M?~JNg5Q z^@<7H^isv0@Hke{&1>r=FlTd}-n^})s5@PlPEnOx!Q314kAyj|#SFU;<_t>P7WE$|rP3OosXOz~zY26Hr(*437SM`&`3Ht__WuEKnUbbJf8>}5 zjTIvhtQ;t&lRbBH=JQ#xMYo!d?($owG#ZXVu|h%23n;!Ejyj!443c*j<5(8KBnsFs zExEK#c{%4VhhBz)I5qBs)pyeX4b7p`3=Oqj0Z6Xko&{x)a4ru@x3s(=ky-jEmuSDV z_m*SK4;`zV`y~iU-m)+#&%YCty4WC}3n)O108r;evEoJ>S0G-`Fs#pz=WPvikz*Kc zq}Wsa#0i|yr4UCt$>Tx>u1p8>AB8)2G$-dC#qOX2=@Jmg5V$WmIQ1=A9gW33!~|yf zJch(RsMaRwzY#!S{|O*6sB5)w&jHWs>W>1C!$2AEfFv`>Sc45sw?DJHDOP8v4Dvou z*@3^c3wDdOhj?)h&^d-X%%1!Ce7#zb-s^8zmnEyqt_yUury%=5wgk>yfoC^ujY;bT zSs|bvX`y}7?x#y`&kuu#62X6g@@xuYpM|kMi1Pb+2ya{NKU)I%B{3EPsQOrk0n8Qn z>`8Fe&En0fKpVx7zIu1zD8G0$pgB_dr$M>TmD^)$#rh?fALuS&|p(rtmv0WIpYL zBd++(8Ag!l8^BG(sJc_%@u1)!yzj6Sc^pZ0M1k?T*C2D0 zIhx)O=|el$U}&a|-RJ8#T(&)*JD^#22e4HLip&+b+;Ml%Rri&_S$&Iq6Y9>R8b1Pq ze_a3Hfyl1l`hyVJlTxxH3c}+cvM(_GS%|E8jHS7{??CH-QY;^>r^6~{4f2BZT4Nnp zP_;>g9J7iq=Fh*Vy)!!=D{0!!SZvVpm$K?4yAFLmfADhrTk|`XlXpY9%OPVH*lwiG zU){b#@jH|k1CPv5@ubp3t{&Wd>MJT7o)XQ_?nn4&&S#p5o4PEBll~Sag8cyN;?K&k z2Ggad<7d9$L7wHL2vM){=RfZb_Cx|i4(}e)yg$tA)?!VL95EeYPvu3X383E!$wHB(3jEbPdceu zb{azxO&8-Tl?rH_J&i2@p1dLRU{7x|*J)<^sGYmlp>OZf(?HZ?h(d&JjO<~?9&be% zJk&>^pqX{K0R@!(Vdrh9&rS)m1}hgbV9jbB@=#hZa@^!jjuB=FE=CxcKLbyOs1xd< zH<+a3X|+2|$4cyG9X`D+7e1H5%#n-8<1ix;HlfWk^6rDsCSNI~rCd)^^Vg9NFwLJ2&9` z(hgrsJb@zfn-nb??ozOz^JK;_BI?>P+_B`SA zWE*2svn4<`V2zo5Ku-?^Wgc42Ucv@imF-(mq22&V7qZk-4=%>^U_j!n#ho@A@Rpvr z@kj7y?oF3%7J->N1WiK2!K2)nJKjPxg^a5ZEa16Z3Z4apQLeWTpojZJpNOnukJcud z6Qeymp68!0f6PFG%uF+F{Hiu+*+PO~pW?LCW0t6v@<@?s(saz5=i3spyyY0_mUNuS z44QS12@RTKWVIBQeGe5YQCPh;?!$ivDZV?oWbfhs?oC>)_GGO)S-s?3RV$`#cOrd^ zyW-7njUZ5uE>=&bZ+?QGz2Oh4=*plAJ{g8r>kvx?0kUHfxn5=K%1D>+Wv;z zT<}bEHl#P+z(<2ot9?=C|6(FS`^gL+(ihs{PyrMiFQId6{j>n7hBg9Y+eiZXa>l3M z4h3J9Yy3lH~>;@-XS=2sabWPZfxO8Iv%b<+B)>1SNsKM zgGWZ8WorAX@3w|lz=V`B?IgJH&L&vt9F*y^J|^N*+c!~H?IjfN!iXa*lx}A><`N$~ zZBg_Cgr<8xDNMSze*Yo=N3IBCiwGbJ(JJ^EJ~YcKTTepja>M+^G=O58-Ex5@&Drn^9oxe?4ZCGAW77y|W;SxCK;+sva z6T~_hSD!7lDoainJj~q>(Z=Aan;xcQky-~{d-u7-YPC8+N`J{xH)44`B3AaE;crZ* z_AErP!msTs_^V8`Uv3|&M&RLdBX5iQL4JfwCMR)yKPkTcRkBlCJKBN&D45NH9kw#Sx~1=9Zck`AVy_40!L9A zsnwpIrWm~18o=#5#5CR*>`8^(U_weZY85&?h-8GS4sfAXkPdtU2cUkWzzA3_fS$;E zcC65Gco{)9RW~T9J-!)DhmxHr>-=;Wi|DqN>;>*$HoVCUsUU`VjW+wOGjXY_$Ez4B zw+eZELTp9zqSG5wa#6vHz(b#FfoEm>>BIkus zCSId#$dGN1?^bn8Qg#U3_^Y;QujT^L6BEq^<#AvOIW3sSzC3Mm4b$^gc@jgrViH4& z58UsgGX0+TA})YNGi}=CyR-{;GPo zWh z?(vSqr(t|Pyc&p!Hk?`Z#2o6*tFxZJeM#*@d|dN4Fzv)wqUEUHnkv@z5~X=O%$0QT zxpJ5s94h#JfJ|VU>ePIA^|E@nxx3%Q*hp@uztw&9COUHTspuDC5HZBo1mf0`&Faz1 z!w=2sn-8_*6=IDR4%Bsigei!eNK_M8I#m)u8<`qxio84NMJaN-Teum{bmanDzE!bV zL&bexVM!{@nqUuJiC17CdWuV#_7u}!z;sR+u?xMLx`eAb{GG%W;AKwJb_axG@rR&z$i}W-!zb8@iF@?om~b_!gYK+P`J701Gb!0faqb(tK}qBk z__s^N4o-=$gEpO>qTSWa!(`tmjdAtoSbu>dF{d2XJA?>%40i8#fPG?%lTPlgKNedt zEL;u87iz19Gp_YjmRm?U04UH|F<_8mL4%NsgYn2@bKyE=(2h!YRSJa$0e8|Ljz%|y zi~g*0#tG!RirKp8t8H#5umRApCoIK0MFZ4OR)m zBs?dn5-b!xOzc_@QY8qTPp6~F#@gDMLYvuXMS**5FjD`o7_(Kyy{`2p6SYZe_kMn$ zz6qzlV(}Ws($cw%b1sVv@H+K7Bt5eER*bNLI#Y81{gA{i&1S<&d&)*j zWyICxUQ1pkhe>5c{Sd5d@!n6R%5+GPufn`2n0<1QVh?J=Rsu6rU@h}M}M+< z7RmS#q%>w2^#;=i_jNvzmN6{*dgjyIH|?A^I`+5aWdQu!-_#?xB3gxK&z=?53(pHJ zN`7*hZF!0&4=d^Z2rLT}wwc%9;a3+9`55ZjLx$5!@OG>6JG)6cJijCLzBZ z17E=MQTwXn)EEGsHMA~}Z=6C1{)3LpzJts3AGFWa6EV1NHS*N5ZoYrYBi#W#hNPF7jK)3k6^Sf_lB!MbJ~0cp7Z9+ygBpU zXp-Sp5C|FLsP{|)G|_+fofttD9THl5&KE_55Oni49f^}Fox9P!XSTyD>11=D2k}W{ zQMq%csO6wD%%Y7MSez$C%FePb^2@trH*f}CU~HOmX6eEnV=W~dFp4UO0MgqdT!H!NMvJ(Ep}KEL z&N*+%vtVyrZEh0}p6Wwvt0)7b`|OwJzr&0`^a4I}qJAhyQnH&>O14wb$#&pskmX}2 z6PLaj=$Aqk!&S?3jN+OxC4kgPiGWa^N4X!^0LtzO>so=CpmfM2P!^TJrlzC}{F*;h zb?1bJ6P;kCLfr@a$aVophAFhys5S-!GmtGw0RwiU=k%Cc>&BMU2IWMdQYpI`(R5#= zgP@6%1U|;3TdX^ri1bu+J!$v6F;%PvtrPanxxTTh zRtsIGtdQxJ7%<*o7?nn#;*UBJRE4xUr;4Xl@6ziY9d}Tvn2zu}UDO-S_C(LOpf$1z zY)afhD;X7Ng$0@{<{Mi#Yr{y^6;^m5SB2SKO_g#{`VMV+G@i}7=-ni!u{Tuhj^Ny$+nU@PlH9pp zW=WoWFK9UYbV^Rm+@a;Yn%6bG*vPIRaPwozL7=6WL6Ho79WdpLT43Ol2e88_8DR+e z8z4ShfBg6{3W|B+PQ%#DP7xaQXp5^jU?2RA{!w7o27g8*&vCbwYsr zQMO4|PjVlCQY=0z;e;&g%!Hn%P@uAsS4eGgcDo{KnEX}ekin7@QMLA=x*u;fUMI-9 zyKk$}?*5_V*`f1_SW1Rj%w}}f)5hs$3$(eilAozq%UE30z-R)P$@5rWDj1B(;W6!P zDe!jAD>g>>QRXH^B@6l#_D;lLNOYdkW3oeyZBJ_FE-PIrZ z6iF;s5DlWekY*9}%0^bWMdhSX$(eR*Je`Q*M+y-~{Z>1z_WQ-Pf2#kjDg0VlTPbl~ zJNQ#d$2Oaz>Zj5hwEMG8Iw`JHDl2dw1Pi~SYojgvTD0~Sg_3Lk&%4&@m-ie0{AWe| z-(S~y72q+8*#Eor_n4=7Mc+rRgsnJCQ`MtfKr4~P6u#g(%#KXjt&zG{;i?mNtLO?D zT=MrJcZ?hQ5^XE6xWcMUIBHl7^5ig`Kwi*^VtG{$YiNQ+KJc@;f;&8~8$B`XnE639 ztBSWOOlexCFK}v;9wz?=cNHLMmw;#B;_bAl9zv6}P=qQptIDi#tM zQ9=i8nd&BSe_xTXwt9mJ0_4|npgxY{cf|)|qcF;Gx#9v%!;3r8Nz77-Y&qdI zb$SVYrZS7!6}A@9EjBUy)QyDgugLw3hLhg)uV~9^b@4+0r8ajF6T=QW=-4BR{I<;I zpk0r6LNpOo+$as4N3A#3IZ1KQikcM~8&bd0pvZ(li0gc2IJu%*tc+h{=1DzZna?IZ zgyS11A+A=^n0HVpT8h1*DwUG8lQ5wqD=yFb1~F$5qDDXl5}!G><ce6pb>6(!DZAIai_;l1i@sE1g4*EBvJpY`1{o zq3sc;HIIJNJc%UIT!ZVAo5gsPx&z_NWKPR4a$Z{noB;H!nmNP}u!d}o>Fnk*K_%+>@T!0= zTZP$(9ee0zMzx~8^_XiUMbZ^$6jRd|uqC~LYfUWZa$PB@YJv4UE1z1o7`r?cO{DgoAb0Gd)PcL9k9rf4~p%#PqY&`6O95&sQY$c;j4A4)KM)xrce zu28iDhXK%_DV6d-W)X<`yj!?x>jI16uK0e(<~od|6rScNf0_Y7$-T2Pv$3yv2BW|X z{D^;#5B0R3AzspCpUrTdr7Q~2oFKeP$$tJ6CR9yIAmmODYg2hs-tBinkK>^_^k=i-Y!Z5ljI#I4DOa_T;lk~PZXW3Ev@7C4 zbwQ6>`dQ(ZKLS?v4!_!LC@IW5V}n4>B!ttuorteiea9~6s>OIiE3b1=R&7Xp)j_{m z2)Y6b6?*a_hYh~PKt{nCb^^96G+8Rl>?!D4tL`pp&$Ln=tY0L<8u#CEtH)l(*a)q| zXt)+O2t^7 z)7B<5wY#8w(I%!3a1E+~Wf#QZwxxyL^1-%{vsI!I!Jkas28Z9oYMmnl%jJ6gcpUC$wGcImg`aP-J2=n87JEoL?gpJ zTP%^HAPp^hKAYcjK{WIGR=8Cvm7GOU&(^2Q?byCpFioeUv%HS-<`lr9qeg8G2I&O$ z=+;~`XVZc;;|c9_UcYVU^W3cKUgr>MmhHV<*0L_% z{EcfnY8!j^(p0C&2^q(LQjQr9GpJ=pIjcC8vvW|QrCK0CIp#D4O090eb^(G=O=b`L zvEf9na{mxxUIKfyL-d2RrZt-mG46`}pUX0mJQ$L0@A+)FJvZ-m9Nw*~XdVnN) zzFfZy00SWOE9p202D4vXHE{KO5WLm7!4ylZ)rs73M4NHRf4t1v@^sMo>|qALxgc__ zpWKCFScdSXKu_FeZY%f?sa7y*ZroFcxz(3`bwnP4 z4+lkG7x|Ah{MVJ{6=AgoDv#E>ExR4^K%h-?QG;)VZuXAl>i}I6q2Ph^QFQi}af^x+ zIWuH;MxGr0`u%sjGHR`pDQqB zzrPPV40NUlf5ZC6B?oyn=xr&-S$;X7A`ZJeZD~1Rl8-!{frcle+E!<_RXx;7%r3~F z(W^O;7J4TTA#o#+KO&aK-vrtQBplcr0WaGJfgXaiV-o%v0DC8RrEq%4Ym*$(M65jb z9x$W;KS@y7@O_C?FF+krhr3f$>Du8KG6d15dBCbj&B1)a{?%8*K`xx>wQJl}Q^4nR z#9i@8CnNatdB~3CAt~U9#P&R9k)$sVoPnF=N8gu0F2v_UO5P?fx@2>2r2IQAr1r=| zexXbJCUR{_W3J8G?o4))0m>d|MU+-P2WT!sO}~L=8j^F%1+mk$PiFHQ)$ZI zoP;Dqi#qek&{B>TYy~Cp|$4Uo4bCmjc@5yqOkEZW-DIJKu$OS(esz+}kUp(bI`*z5xq_U&}Ix z;JX8a0Z?+WcL{vU>F3YcRqK(v@-N)P+*RdxeTx9ShJ)A5jkDc&HRlEmv0u5@7ufT()B6>#2N-Gv98Z1{xJrKaY{)BouohLEu?0L4xOaK zqe+T*!*@0lT8Ick={(FZ=#D3e;}Kq-ilVi_*VfaITI5YY=)$if&7k?`jOpUJd1NKVmN4_?*$5Ad}rMr-U|b& zdn1S}+3*?Ff$-X7%K|v*{+K`&*$JNHk7thE{JuGcNcbJ}_nPENe>Qbc-qq`9U<0aG zE8oZ@J+cSfuoxpHLzyX99JIH!6&eFlbx_5)jC!$?5y4zZ&`~8?FmtjOFL4H!G|7tV z-qLm9lVac!$oGB=_#9Kr;xZ1$x8!3z6%mhgsBV5_;nTi{zK6M)(b3y-@52Y+KDM8P6+)u=-TSvQI+;LoQtDYD_L!1#cI|( z1w3FQ4;IJ|CzEfLGOF8x3pmi^J}=AzpK;SOOAH)wU31UOY=I@mCR9Vf6#f2|(CG-3 zjc~ZjG_h0iUb#d<{!nbl4u+*ELaTv-rbL@eq&KbjUql;Z`vHekPBoYgga`US>s~Nb zrEx#^y6H`!lt~#~R%Y#U4FBeD6keFDkezg@@Ue^m;$9EnCU$Y7^BQ_7C2%T7J25z{ z{aks#0&$VqSka4{M+*S^r-Xl!Vx7`F%`A}&LXzt*-SEgK*kc3#-i#Ijh<*9nD=BCcT7}QOv=Tnmi*IEYL&ulk6_!ib zgU0J`I&(`Rs6)>2kQ5!GBc#bP2)3t7vJbZ< z%{E74F0eDEsN2FdpQSS@X~`J+Rql#8UXhv!4m&dP^jHoZZ)B*nNtrNL*%DNulydWH zF5b3yo1K?i&hmm_gH?HIWOxRl4n8-8_>SaHNJ>y zI8e=nQ^4wacv#Mx%8Ns;(v8A9A|Z$G70lj2MXnbI6?Hxb!{oZ1Vt&Rl9^v<9)o`!7 zN)_&-J1CY=lkioIOlN8A>tEiH^?2SuavgzOr??=U@09bmP$4$;!bunU5054ZYNT06 zQJ!s)_ao+25q%l5>-b7}T8rhQL9#@clLF|vnDev?rMWe9>^WSQO98CQl3h_+~z=O4+bF zN7~Pk^yf?Y-yz{=gRF7{e1}iEwb;IZFAR+_M@YYgfIe3^|3QK|qe?n{?{;rT^<36m zEXoSgS}LA{PvwB<>r338o13nBoVOooKG~B(My^2Y(isAWzf>(v%{wV2FMn}(c9Pc4 z5r8TlLAKHl)@m>!(4;qLrvX8z;!p!;i|2*IiVe45-|(T~CZ%5hk2%m-6jadp7snIG z&WDu8H!CIkS}J=Cz*P%9k`pP43KmOxEmQTxj$kA;pXJg4(;xVuh7*J!J+lqx@UN0r zD7jzdo*{=ZmA>)aj?5G8Efjrx)mn$6bbw2>Q(CAZ%ZsY;BDVs0jY7`#nB1T@A^lbh zbT#UDUD}*-{WOzO&W!VStQ$B5mNGgzL}zJASqICi6b?D3@05ptgo8JjR*-@gL_eAj zBG3NIks6hf=~7}{Vz*`!h?Vam?kTLN@>dh94bpdKh$j~oc%ZIgpO*;Z|1*747c#Sp zTuzPCDfA8DD&QdBKA(XI8OeYEVeBmXG~O_0Pa;OkFm=e4i@xx&i6u3s~r zcq+47Ic@$C4)xx?NDq6nH_}VqNfX3-!tJxBSif)KWIC5y$r;cN`CG=p{At0=B3}{u zZJwn+!u5Uuz|l?Bz?+#hHKOI*&LGY*1bh5+NzmJ27VwGlhMvC*bT8^z-C`^9DCqK@ z?43Wsi9JWfFwdX8w4??$R}P)4ioGRK$&zJpJpYA$;HBlHSA%(9GYejDi~|gzIShZ2 zdw6NVs^mWByHhj9$&?39wgcb|8%uiqNpS%V6c?(KQu!foneqG9S_QSu4 z@9Z4+SebN>qg(6rVcCDT&>!)RJw(a z?H}i2OYXq8aI(#u{6E>MV?FK<&^GYvUw`9^6P|sAhrg=5P>=2JkX%Z}A$YymK$LUO z1v9|RJ9kUor(dnLgsZ97Q>uX88bLC(aSw`uL+SyYv=~$Gu~)9H2m+qDDZRaHjbtrL zUEGvX_E9;DJ``b~Y}o3`x?DtN`EwUk~Nn=$O_}dl)fP8tU>WHCe zeAyb@;Ac9n1`@zuLb3u{j~aO}x-5VtsddKXIsk%@tGkRJ+RP5E!fEde(z~O&Ckv*E zD5Kq-aP{b}tQMV9hW3M7eD=eK?<+sMphVK4>eK4%Il-%_V{By@GNm8%tcTLcxG<O6Ymd7TFufx7ec}8xy zk&AOI+@-?<-bSqi!eHdA zzkS|=Ivj*KKM*2VuLb(fvC7f3+>E`WGEE25&y^$)k!O{|cA%Az$BW^9n1P< z1^18(3L9O7<9u?amWt;RNA;r5R* zTW>`s^#KSs?)Ub!f-yv8rN%lIq!f-On@tSo*l`vaew$;*v5FU38;xD^{Pgp!8=(Vg zx*=s@F0m`Qxr-1kj%lu^yQmzVi0k1iR0;Wo?y+H83jG*rm)E!YU%fcR%7P&DUUB9+Tmu%324 z&WU6EJfEJh5N-&G*OUkeSn2#14k2MAmOJ6GM?41eHbNP&6iz!x8Nh0(U05`iuMWrg z8~0t77@(O>dbE<2;4<83cQSHcttqMJvZqAXg&eDyh)z#yhOex(uR5#bi}7(Hn}+n8 z;xqGll_Mcm@nE=pNL`QkmNhDJSaVd6F~`KRqEz=XrPgzbr00}WN8PB`P^&_3Rn*)q zME*6n673ifzIuMQyYjmOF-b6O5Gd9|_tN#w$;`{1FnE3WJPbzEp(l;p8>=7K{{DCM`|pM0aceY!QO3jBpi>YBq=IUD zstw#411puL6)?LmRO z7)JgSKtpuFiKmByl*_KtY(Rs>gQA-A@2Cng<(Vn^oDR-uiUkBrDO@ZW%tr|oQdp~* zI#JX6)zL#^Au+D5i|bzVE+>Le4t@KAH)65@3UZ>duh=ffaK`p)s-r4Or#^pP zSRdZMZ<~lJrY6z+I%k^CxJDL=Y#YVSxS|IwQX0%fwRmYE7p3BLXgSxIX7zDydOGKQ zZsOviPB1Ks(DtzC?pgLt-Ec;%Vbpn~pE^b0#oBZ=U|9>;2!r{BfVuXsGgv6CsYE@l zR_kJ4UKo!fmUvMT$VzhQTP5f)#9dbhlFPYOR*}J3`j+6@zgi9{90_WIIgw&>n(fm$ zAs$kU`5O8PeIQ zm!$}o_d%Ge^oFo;l)PR=s0YJO2tm|^rnslAN$QZ?kg+n8liy=c${v40zX>%(`CvP( z@1Wuv_?IJfh3uRjPMz|`@}%^B&CNVy_hPAP;Q&c0nxy_6(ROy311MTUuqbn2EWXqR z-_F@pbJo@2Bjca5uiOpMWijAV#^^xRh0q>{tlNwB`FrX&P%MV?ZJ3(PqqHW60|B@= zKVbvC^_;Zmp{}YUe<|`DL=Dl#@yJq`$RlK`_$`sbfRF!eFeNw)wa(^=rRUuL?UI26 z6}#bV&+eg+Nl?u35KESB9M+li8;?w06!x6mnB#Ha&==puz|PH51>eD7ekDgAmS3~p zEMB-W^9)bTU+e{9uDWlNHFmQki1x&h4O{aR%axPtSKcVHaM|vMsO%CFAYcvQ=|n8f}8QXnkN@v zV}0w`3FXTNF6;lV;_Z<*610u-*xHjaENWS^rfQUbFmH#3X}WTr8cx)_4Dh%HR7%Co6%`7wen^^y@d08?DC%VS6W)zb7{na0FG5S!tgu z7_Pv5jXNxk)_4Xx=()7Wo(woJMM3e`zy1bqzit#_2rg6eWcB3AUw?y6zOMW#!YnJo z_Aj0?3t@N!n$MX!a~LG=QxjWi&-F)iAmtb!mVg$kQ*!{OJwXM?4CjMc!r3*M3-)=< zEL^=&%FZ-A&}REJKxS2Nf$LMk}SNha8>)D+@vpK^vQB|MKQB3VqT0w3XrN8r?XdZYFXIK>$y`LH$s%7hAc zIps1{Gnq};RrBf`qBAE`$l28bXEtbd*}Cp25{`*%feOH+6hYUc3L_a12iFJ9x7wN8 z;Aqf8bPJi`X7tXpz+vXF!*Qzz!FUJiOq{0^X^Df^t5bfzI-v&IBsbT4^e{O%Z0yuO z0Dd}tq~GgBD$Qs60)L*`BP$dq%&e;?2kG<|dipG2h}*)bLbPxoD!6e^{Kr2BjGmNj zkE$AWby5!)hENYZYzBO0)CVhTt+ms&_F8A9u==df)sl=C$$~j*?_8ftF2Q=@}A#U;YVS3`cbhf>}J)n1-~VgFdq;t(ybioHsnlv zdUyWo(=45(6Sj^vTcckzu`g;={2fu2e?2R`d;hFxjb3Uf*c`(4cj*3BsZ`#V3EAmE z0iGau|4XJn7GrYfWqFXCQ5ZB6ohe6&L=?GZfTM>`(I*{%&xl@8Gc1lA zf^p|lCdY$m4O1AYBi@&ghZ&r*)%}Bh++|yQgGkH?uwE+Y&hh>Jb(9I=XRm{ zJ)dsA;}md?>)IHJZvgwx5c^BPL=)176OlrF8B|J=z_(&xU^2&2=8VA&!ATChvTTYA z2ELmHe*^leSi+Fu6mn1(kEK&v2g|++7@HRa=6C8+fuZ2ndxr*v`^D~r4dHj)w|pcw z%*;a!{xzpc!II2BmM)lRrR+dSA02d%5lJL~m6Klry`ZI#yQvzm7`n1_@RGn~j8GzA zNQ5qht3J?{K}m_5;wJ#(C(sUkdbj=_8DI6C$WI2{hugZ;LO-sYw{YlEu-Jn-+U`l! zd6`^*>ZDHEb;)A@f?zSxu9`*AGeL(j&iq9%4J0Zvh6uNYgXznmeceIPR`IF)7jo}n z&6-qknm}H?X%?RPo#5P;ndrZexby~}6-&{PL}cZ5X>zh?I|h80P0+XyX77Av0LZ{C z`2i^hEOeK@^9hjW)AI`8`yD8H za%&|yB|~9w5OMV}bW`ZT1|Y(#+2pemVjsE%?9*cyOgG(S(l7of#z{gK_bs?3h-0fH zhl4(3dP8ZhLfd~w!NF&ZN*TCA`%mkbZwq024+*05J-N4VYvnrTs)L<@N-lru?KY-cVJw@O7Q#;Cg9Kz(O=2~yhmknGnKK87k7 zj0K0h_XxYoblPjr`oq~owH}V9y-T%$6tq19f)3sGAQ&9Ouo2x9U!ZQtertS|>bPt* zpER9N|Ft3Bk!c6B^H0wqu|6=qP(tc79kkCcTVn__uh@uOmI!0D^c1oWw1?x4(E_l@ zr*?A}H4qh2`4>4Z5yzx(R=^I#zhRePS9q=X1Bi8BoeW3kP(iCrBJ#`qBQ+;Anw~?m z`Ua}8uCIgTS0`vz?*pP|$+MbgbdFC8MI+yrjAc{$f8D{p@iLv*yA;ZDpF?(DfLN~s zl6Je*FSOci^(RHX_j_k8wf{OTmCOb20NY}?^1Z`LBVIB_X26uE7 zc1RaE1By6O$099Uv5SBro%h!NFS->V7F@QjHLQDuXSlm-s)bD{ZmBwEA;6KGl=7K{ zA=8NuvI}tI$$C&}OpSG_@bn_rdNl_9ojtpg6x29VPGC4078-Ovt9t}p>Ibc}Gvd@g z_by35CIs;?Rq4==Uv1F?i!&x}utB{Qz#E()t-p$EsH^aHH)T$VqaSe*av zOrboyX45pCe7 z*8;L($HU7@I9#?NJY8+mW9I{2+F?uk!9bW;S^Nel!86g>kluI$Q=z(r&0Z<`TE>4J z_*d3|@M`M=pbv0~SlN%rAb^9&AYoJ)<6+hPN`S*}8l3qXq>st$668l_q|2zGRpQTZ zHZF{YlO7UH2%r?!pGU=2o9FIh0s2P)OeJ(d)=NwP&~y&iZ_{! zpsz>w?vnwFB0p{lt+Q5->`a7r*aJ{sSbl+ukK2W!J5j|NU&iUE-)g7YeF;65vink| zv?5mh>YENmOz}0yp`(%|OG@-mFKw=M%A2bH(x9UD!qs4YDpl~1p-oyD-(8uTfM(ew z25xkrWRK?zesyIIuPfYTpwz-T7BTh}e?#LIM^QTL%{njc>cwXv(qzAgDB#VoMEHw~D59zv^8 z*01k%<>Pz$@z1B33TvL2-6m@~#EuOxYpx=Z;KBq3;nui)-us+RR_4_^yORZLfv!oj z=kqf;G79k-C0bVGmAE?U^9mBR*FetPeYCf-7=wd&A$e1z(DC8`#Td>%(*)kRo%Z_0 z;yJM+O8in6{2J4+0QB$reci>ro@tz2VoKxziJwsb98q<3_;vYJ#W76Ke&6q-@YDfa zo}vs_sgr89)mQ8UQs)+43&6lbZ>KQ1iRt`w*fEKc<$-b+B3Fw(laOr@`5;6p&g$>v z(REs(g@ChjomaR*xc)4xgx55eRZQ&jVVDw_M!7I5n@N}9EE1hB<@(TKr}L9IimcuM zRgN^Dn_1D#5M$@4gIDryB@XMy+aCYsr8p4|T{o=XyU3h?K{-Aj7LSz^bYJtts(VAk z@S5GQAk|@{YHF0Qnfq37;gDJQQ?q;(7z}KX_=UntSmZ>9f9sw3nz_8IlYCeiI0e?N zAV=}5zkqMTGaI>!Da4)@s^f9%rUI-}(V|86z881BaW|k#qi8|ogq+A6OD1;Y!$u&> zJfi1wCtraRHsU3HISm$640JND){#bH%>4TSTC2%Hqq(7QABtwETvdi-b_(bNZG0cJ z{%1X_BQ`-z>!I}X_J&@XU69%Rk-vQ!ggo9l7HnQXmK(y&*L<%3Mlfo`&}@%^kljm8 z14w1|DinqO)LQ-xn2Q2~H7BcN@Z$Skw!@82xfSCPnj2b&FzJ7iB^y`yz;{E(HdW z(oo>M3?5vKt~2)*lgYBABn!`J_@^`h_qyYWUFnIrL=~ndxE^R-=2_?A3upD{1`jI% z#=8c@uA>Budl$$Vk{g*Q>Jgi(n>2WKygU($*cJSQ#S9+XoQsU_S59}DpI%SLhTsvNj{2aTH!umD?BkyGtJr}<0^UE?5w|L&h{dN{91Ap z#(bO|zFD%?oGObnhPhfUd|~ZOpo4V7tl&|lecl>Zr$u!+;7R*$dC)+MT9n65eX!xB zC!`vP*cCb2-g9zO+iH;F;b6Fr8JIIKh69t2nhVpQLL2Q1ly14aD9)4`!+iW?Yw%7n z6~$5zu38`=U-x|Q<_aLf7!9Bvb{Ru%1@YEZt2bQ+?tD!l_)Bx(|0jSt3u(t#!2+NH zwa~~H3Hyy+w=90+&Xh9|pwe5SsJ3MQEbyMb(Mcu zCwXocq`KhTMSi^F9WoK1P#Sc8Sva^?$k3ESfjHDJJz3Zh9-WSd(|*r;_+>Kfc#jaP zAUx=}H$5+|sP9%v3z|%!O{UIca3#0VF*>We!(e=F5@XIEXfR}NUTdR(AeK&NjWNuP zmj*S1Yc!iVu_?DSBynD4tKI-eRr@{2ubyWV5+Cd1qHa5B1mnlTE`)kQjLK4Tu8b+x zhmAs0up>aswc&Mr3*x9l$uu)(vNDmHDCWf{CUMa zBb@vLX1s|jV4aQGA(J%5HVK%61hjpnSyz9O0fCAFaMuH;V+kp%0ZQdzibr#^3!IuS}pHZtGoE`UiqLJ zcky>zZo=>FxQV|H%4d;k8pGeisNAl`k0WlU{yl*QgNPdTOv6u6c@k9*pG4(Gwc3o! z^=kYAKT^Y}Z;s%fy=wd*f`6;!xEd!ki|uN>Pk%M5y=V)+e53wJppohu|5492skgf7 zy?k7a-jh)}yTQ&IIhF4#r{Qi$rPuS@Wc1qJrs@1Cq zAazhasV3JkKL9x3D7exCSm}{k)b__(^LAss%8a!OU7b|pd$D}F4Syb2lTnOMn$(wi zx~+c3{Rk)4qa9OwrDmWWPve+ogHKOjH`LRQ^faZXFbQ}%pr>bE7h`&SKu`B*Lh*IP zi^r!;n2&loqNjWG6#s!q(9@PXiSrm|d`wRfeCp{VYI|gG=m4JHqtykT=FTkeG|77! zm~Udhqv0@$^HyO2tU=kQwYhB*UhxS%J%+Wbr%&d=Y-#9(+a`JahM(RBz8XzZ02E_d z?&9dA{1j0qdo*gbj@XOmJ%KLPYP60THLgM%c+tG4h=zJ}f`{l_y=d^{5BN_YGyJDI zqm1;QaBOu5tF$jIAQ|R7R^eTZ>7qH2Jf>>8$$y^knhw-T{DdRrxQpuhRJk(z^){-_Y-E zB-#nAH~4!GhSMKa8;Uq5bbzVr^VocbbhQp29MDf(8v`*J$MiIew7+vi=UMmk8R=USdU|2LLXsjo_Wo(W)DU^<)gwNLJ8)im@k{6)Mpby}&ryBW z@aM?*8ms9wnYK2mYc;v^Xzms?H6XX~1T+!98b~@L>RqiktrMB>mawO>1P{QY8qT}n z1N~UsWp^8EQ4_CO#O`4%Q5ta*?+ChyYxY8wi0gkr$A>>wC*`2p8pr(_Jb9(yx!ZV2 zM?0?8M}*^-_@7-Oa&=rOJdO<_;Ztsmn*_I1l|F-^^kJ#Nzx;)M#h-1%zej}D@cT9V zizMg}f1gFV-*^WfbZOHQI7jA#x|z*K>NcTUM?d`{W`1Ix-V<#z>#5NL{AU|^8+Z!f zp&m}e`Wo=>f$8BhJ>Ap&Dx5SuW}umvaZZRF^Gs!r+p5O{oD?r~Xz1Yx@!o z+V&P5C{a-}i|&eTi+$8=m0- z0zK3Fb~WMNt4oZj+gjwRHtc!1iD;-MT!Yw-_`zL0RCT*%u=E;v;zrjV{FL4?{a0+5 zdRnjE(5=UC9V*s(0$;`tVsXPFbv$5_nLx)x_OahlOs7cC6A-7qRvS7UUq;BSH#A=< zJ7x-*>39$m6r7GfCUjroZ`DzC7@I@94f`H?ATY8L}us}>tnk)Q>6F|kL0}?ofSOp6QVK9-vAv_0|DIY zFR`0XEa|k2EJWw}WtHyEy=r|QZ<8bQAh|~x0DU^mNg@Qn{n!J-(fk;-ceoSBWBf1bS4DuykqNXrP`i&%u%JyF$9jGBQ+%+mFEa+yHj$==!CH8DXoy@w zhe8qF2Q_@vFsxTy91_qJ{Deax^^Ctznkug{lkJ}@+4j-;NPR8 zupSw*yF-{B>lJNxf5P!DfayM%#u8)-<{zY;0jx+m` zpiILb*FOrZsR=q{r?;mDO}@l;xhHt>#1fqZ_wr|hZ;Ht#A{T$-W+ngbo7JeUMW^{o za(a#PdyU;*6D79;{Li8(^HE4zd+<6Q#g>$Pwrp%&Z)^P#9LY@*YLCo&BusoEbey@W z+v|R8e!N6PBh+9D8*83Cc|i2C3lG{x(ggr0ng?w!m}dl`@+vm$;8fy4leQSO0WQXF z>yPV?>A_3WzCm}5d5FB>Yx@;^OapIjfWkw*Afd&yrctq) ze5x4)Zf2LG@9HDICjd^T9-Qvi=&n){An8!N?%~WwTks!{F5|J->9OgYQLAPIFkpyc zWD8Mgt0E`+DMzcA$@hZSgrcT7nmD48r}1LshoSWj2T` zdft;$+B1x#IZ<{0;Im>d>DR7mnkhW)09T(>eZ~j*;T^j0;JZzt_brgHaQC)1E%N}{ zzhsBa3JaKwqw<{j^lvM$m1;xWpM|hVAn!=Ng?b*oja=4D+n*bv;hnot5 zs5)UR>bH9xL$8fNOeV zTN?QgTh_-~ktJ_+LnEUwdEBxGUC1|8^R#)TSuAxsJgH^RH#}H(1@}7Zj;2g8**FGs zFnsF#c_jC|c`(#Bv$PI@9M|1@i%2O>2u7|?Nf@-4mdt9bA*{3J_B__yL0l78+L2x5 zk)Z#q2L>hsUcGP#UY#_EXEk9KwCv|?>7oYebz+ryG%MnEaC^T*9%Zf?ZRNSkTXJ`M zbbVaJq#HlL)z45!KTj-yn?@ev^eG~1kEKk8YfAdW7xVheML4dD~9>3c>A z`v!^H!4o!L0C0Yeoky^!yR3WAJlJ)uY9H{QP2$nx#}PjW=%C?YeHzhPlCcmXYoo%-5a}#oj`z5;aL=lbC3D@{#cDqaCf@ zB<8}Xqxz9g$IuuiRS^j(S?g~fM!NfBR5%T3@km7;5F?8!GT!QsHD{64?Ox4txWtBj zj*PM4K|Dk4UXuOxfX=)oIWIh!<|3k7s6h*hS={JHg7`KNnT$kZ6{BcJJCwq*p4@Kc zAzVGZn&FA+hGGnAc1=yK;csrC+2t|fL={hk;5BxwdFlzl?B~ciPs8Xj(2_WL66gSy z`jU31$*6lCeK8GH7k5$eVr2!nHy}TLXgPUv&SC~lO~Wzngl}_~#F%~1_>u^GQR4E; zNu+I>tUxB7j^!UPFtPI83Tuk#eR~nH&6Q~)Z}UgPF2`SD`(4kXEy;tZDOUeakB>mt z$+p!4&4;Z;#xzk!0)^+P`7;RxH7gfh$H9|x84IDu@bgb<#tsx4)c8`PUKccuQJ`cs z*p-o16jzrj6!;=hplTahgJ2kkj-SwxdJ_2FN1;X-g|W`scW1b=dPkNLn99n0qAPj?MK2~NU|kR){a5xS5^N{Fnh7Zy{d_& z`amnfQAlj0hODAiT^~GT%_2`NOnU4uIC52Ry{H~O^snVZ;&@;?NYU03*G>cV$;^Xg z+L6Qq(>sr8eodqP#gE<^wP8$K1#M5vA%N?={za&=p13kv^2V-m%kbmdS=@3g2Ln2h zSFt#e&L%%$hLet|d3=q8Tx};H<(J5rrLdQpQ+l^X4ncMV;`ercwtfvH0X2bnk6(x_ zv-TOOKioAs)?L&L*{Q=cX13dF+}j;oMn4H@puA;hS&eNE4z+R)$r{1tL2Zdn9bY0M zD(AIu|6i;c^os+1t9uwkWc&k$re3vdvD-_+6sg`ez<3m6hv&70nm8AQ`BH>E0=3DO zB?p!zj7L#VUaByaIw3#vfck1=F95Kw>K)fu5jiXn8pQ=l?tQZR`nWb{OXX6=R`HKK z_-kQBiHxiVYF4*H&#aL2+JSYiV=O-%7}Yj6Q+j-sa4~# z2`k?3n4Mxy;U6h3kp{oV>gi+BuGOz&JJp7v4ea|!v#hf~y|<;wu{ylMvE!9tNneWF z2ZmGZf*ub%y%42-jT)%n9pM21M8l0c)uo~p)C(@EX=FqP|RRIVp@xyH%+^5X5PDGRU*Y$+d5Sp z;QUbC^eDDMTc7zVHgxCg>KcW@p4c)_lX27X2E=2?^Mhc%P}*k@3gWzErPkrqLG7pvk~KCc%a~ zy${k1vqOk&_hJOpLy~mJBcN*inPbCWUq{x-%brHOXW6K%|64c2a5PqL&oU#6xaPUZKY6`1|!H8WWM;a~| zUR@Is-PDX<#N+6t0mh5X5Mm@d?0kyKy&g_wO%4aB^}-C7nMtzrOuWtCr~5+hJK@l- z_IuTcj(2Nfz#hAE{}?|^sG9~;m%cys&G6I#z;O`1pXUQ{OH5lMN0YF#Y23#2{KljW zB@M-vF`EQVHE`KAmuTD-?v>k3!c*X6YRJqV;M5LZBJ)f| zc1x#`XQi(>o^{#>6Xg0${B(<)I7z{4JWpNv(U6W-4L%~Lq9F$es2x8rR$Yv|fGc84 zG~8o`;{qwtxm5lyLy@+#6v?8&0LjYkWzFzyBY`9%0`RaVxpntoRKzA*!$7w#I@a#)&%v5K$yD~|V9l=KF&hR&wVQCdh5bB;j6Gr`IEyci9~to2 zH$v?k@=TXUMtuDd9@h_DDc@0vdTt#2^gQz2DeT!xj2|_wc+4h@M4JTaZ>*`gYHpt+ zVO2n1MxhaTm>5x-JjQCHckm1X$ez1)hOGh}>^P;!HGYiD4RX?Zag#KzIp zVWJT--6Yzq%U{*J$c$;EZKlZ^5f9WxSfXd@F5Uw>B=j|_+9*u6$y4?N;i)EvuGD|- zY5@{5<<|(x2cDNSf@>C`tuQg}TU!P?4c7dkH6s!pB+%!>NL$C)I#MMCa-^HKR`qGmhRq;ucwxz+o$uFeZHMR;B z+p@`5rLYRN^xYn#!K{wPo^5h7^LGBe+WGr2Z8$w%qN zU)R9Jp;8Jc`0r_6!sQ40g(O+kzKhTkZks#0qPDF~_3nRzZKSe@_L+|ZD z?4d@(2B_V&2c%v#M|#gnhZL$=H&~<9A)m$Imyy#*0y4pasg->2F#F+UOmnFjGvJ7{ zMyD?_KK4zVyJrj_Js|}pxBxQhWEay+D-yYqr*-*VX~u|2YL@^CPIjV+uj7J z{mAmnv42cqB6n>-$LGk7mED6AV;7A%B&M!;<>WPcNozIyHk!jujZ;tjDiLZ%8~Iu@ zD0@&f=Z229)vGsZ+7PM^15-X@D>}7f!o{~1rFv5AN-&E3^*4=ErjjgPU=$kKSrQDM zPROE(8;DUz$$88oePZkj4e}YHpc&v8=!SrKB!~2D51tu`LxjcEjhk`KCASmo1zPUu z{l|#!+*r1sO zWI6RIY{O8(J#v}Vg6XEdJY33mYSb79*~_mkU4A~+Zp*zOU! zh(c4Hgs1A>6LgT4xF{0C2`soWMiIK7LA20{5uzfPVGQrOd#NU0AoJZkF)!Dq-tSjt>mV-;azH4-Ulv zsv}8Rp#!INkoS2M6p+GVlL&H^f#PSDWVem*!cM{a#%r`CoO+s`xb?~tqz(;h{>FyZ z3vq2`&?7$8S52G^HO~a38xNi2C30#lD~^#1>RP;vB*qvQmUkX}qx3YjXM_(pT{M)H zsKGik#6R$oFdS;bj?^}P9?5~4B#i6utF>DSKK0LnGPK3Lb|KutvJ<9 zjrL58j|A$$wSuwCOdWoRJSqtPzPa-m?+0!^n>q>-WcX|l&6!1rj}!v`m>e`Q`Pilx zW<>EoFq`_=1Y${NE{^!or%KO6`2W6gLJVXCO4s2c6CU8$LPyvJwe}eq+y*6`p)H+= zwSceIZuJEby*H$6JSGQTS7Gcd4*VnB#np{3unoYsX1q_7NkVgSj{reAiZXTx5eNBN zu1p4oTaY}eWnx8a3XZxkvRoSiZ6mnY`j7?>ZO!aeawP7kx{(toO^j${G$@f~+nPH3 z#ISAg{#|wiPV}ij_T+^Q7SN=S^33l^@bt2+FXOhE=b+YE zsOdSif_6h}4Isl$9By-LoHHIr_7cXoe9j-aCL2C`Z=DDSZhGlbP#$0NNUpDALhMN0 z_-j_CVRbSVULplGah^c1Ihk?t8!}uDzxq6rfR+xW- zi37WK2Di{Oo4ZT;-6ezM%F`7j#sSSLSHh};xI;o#46zR}=qBjMBu~1O4E3zW*88~n zQDmEi{9-X@r9G~45=FFXk@thTy<*_sb<$bQpMV=l&DaevIf8IVeIuS}6Y$#w&vbrE z7TdKpPX}M%GjMPnT9^Ar-1Nfr#OFM5;1<*t)?a#fVyxz3tek#(a7KBA z^iv%=l%fw_(>jCM4z#hF<6_Xy_P}~*+zv3IXXrAa6Q!ai?b9%#)Shqf-?MB=!=}i{ zWgc$p+_Vs@s{ZXQ`3Z&zzX8OJFXjwoKbgjL`~)0>IIWV5LKXJCj27BGbm2(I~Ln(tYTY6R6^Dy*%B_-6nMRB2RB&^8T%h@NApGVq0XhXyCGv zU6X(1E#|DoDc)F+e2MiZ7;%eft+glj-XZhLlRn;sct^aW*&6_vnS(t!N{kj{;CGP~I@xlEqMUq9Qrn@r>1fxT zWK0$u@(A1(fzdV?lUO#vy=`-FC=5%^NiW@DAARczalGTEx59H83Z>oljyu%jWrk9l zzOKGn$Gi8O>^pdfPPW~ll8>=XKr6&^lijU;ZPV1EoKfAO-$&J|&R~0N|2(mO9_T+6 zF23g~j0jLT;k1%^PKG=YMN2D%5C8R4`&s zonsa|61p7OBvPN&5|LVQFX*$2do8tO_~p_ zxoVOg-nKj8TkMqDp%6+}D=DK|oCls;qI78g;%Sh!g70*iuN{Fo0CL8ike3o^?d@`C z#Kgu>qORZ0-08zU4lQlhSS4-u_AlFcoA3Uv_{&)V{~!VW6Cq?>$J$6pGz272*XS%q z{_QNo>m|v+^CkkXH)b)wy$g9*V1TY7lXWdB-vyM`Nw0^b*CL)Kv>f{3G;?OfKga;Y zgOY70{|5x}{ER=Icsu-%LVPG`uJeN#OA72`!oNd_PzBIb1gZ;y)@eY`0i+1UkWI%g)l zT+z2)jGPFj)Gz-;xlAct@hA0T5_9qdNI862<1pD_4Wr5GD7--iOiY^rPFv15Kx8ph z805PE;*Qy2AlCCfrDd(7PKi+YMa+ zl&jZyli$qw0hwigiaF4kfw&EM!E0P4f~-49t-rO!90R6HF;24a6USlp2Dht58fDGU zf3D$Id)V+2b<7HdDDyb=N;I5IbZkx_i`yt}P~v=Yo_=YDI>1Zr7-R4#xB`8(<9L_S zC~FVxk5QoRLh?ZPyxy>;PuqL&qNHo?gp**$78q+a6VY~DGgh|)8>Qt&LYYvuZEb%1 zIl^4vu`wVV=*M8Ei$zjE#O4aq+GKm6SusFRH3eq&I_yVd8_9uHO^ea zBJpCpth=Tm3xn85o7?0VPusk06IbZKc8;*HPmin(#LbvEj@(YSJO`ea7?6dDw~nm_ zeuozINwXHoAeJ-OV~$@N%wfxRDe0z+0o()k4TJ1$*gMM5e8Ps(hOzpZG8aVP`;m!^ zYP$KE2(HJ*ic(Ka-aH#?i_P`iZM?9A933}^AvcrxbTgLn6nDX959PA!r zF$L>3A!ty{^(6N24okK|AU=XTBs)U5Z23wB_Fuu&nhzq|@CYc*fYWF{5OyI-s@B8c z5#Xj3s2*zv8xA;8m-ierhS)?ncP9)_G8q!%t8Tb@iwxMD%BcyAP*wj;UU1v?#uciK zv&hZ@t1-C8CG&CpQG{7quB>gAx?>lE7eb2-gY45oqiblMN5){#q(T!!CCv+))(`Vc zydh~JVaqFOdmvnAj{s`IRFiwaTAP_|vsa8^gtjp`#!K14h8C02Ns_|Ya3Yq>RrRe1 zPJT>Ww;{)_0oWB}>sE{+ig}x217cx&KeeE33wH?K0ypVQ9kbOYx-3A$qo>PKbXR~Fx?^2M>G zgEd^2iCEPZmMt^(9wrz0NPdLbzUjp6+R$&b|9l4KG)XoW&WDt?);FWU8M)p{9BVEko5b`1hjzKiBa^O3{aCdO(~u9#F{t53 zkcJ(-`U~yC|;%owBd(bxoNx z*(;7x6zGiQO|p!TGqB%!t=(NJODwJ7<3J|(nA z2YeB!f7^BAxqU6}^G$kc%lw@SVou5(Lz)|32=^}|%OL2>#{|#s8U;IY8GUklscWTo zLfXkK;x<~KGax2+%ihi>nvJXvBI#VELx@LFT>~{{^`uVCR@IYWRe4KZ<`j&7plPg~ zYRuV>3<1KVWR`}Z{ysLTIdLK?Qbc%W^@wOO`WsHgjIZ)!i}7 zcgA3_67?qmhR4x-0B8d@W*wbt}5EXtgiwsdA2cWuPypT1nA15Mi;)O}jbd8qVlUg1aNM+8J59p?8 zx;cwqnr`kb=*A?@0Cp7MxohBg8ND>{{E~$yQ|WI2=a~ymhe$UJ9sgJhK(n<7nA-*l z4_;Z^Z`?)1NjI(Cv`z`S==qj>-mLC?=Dbl&U~BHys#VO#w>wBo z?MO2AlERMsXJ~iD)cUom@Z-?=dr9SAw+u;x84|&)G)zf?M&0Y;h0f-pMTMs4D{EZ) z67&jlr?|Py6e;OsqhXSVbY61Mf%dL@tIZZ*{=#e-!KPtjp0HPtG3p=eQ`o;*SQBB; zJajsW-yCriQiBB`y2HqrDnjyX_(M~8@gCUEa8Mm^tUU>s+NN+VL4(rr-TfJ_Zv$pfv0Qx17l_TR$ zRex>#TFDiBn}dKTS-9rU$*S9^yV|5tgbY;`1G+XTmf_GthJA?(g|0p3(NE*+OLVyw>DopTb^8tw8zI5cBDUlqhSZRZ}+O3^I&IFH*5bp z11=w0`#!XMU~Lm5)Oy|^k={MDPNjA|d%}@kFXw?+PHdNh5Id={CriU#Ws0ml=HkF8 zxnDYODQGnw)hVqYDctZKIh0jv^Z?A&3H@oD&742U9=@&Bh@`=)lXjf1frbvnxS+Ca z5j9Gv(F@zCVH#c3&ZC-j@WIu^%+qH)x{|l1n6Np?j+<4;d5trK=&G&s(A1W59luN& zaQX1qM!)CI2%qt_nqUn3h>xOB>$=lg7s~E0e5kdpr{dX-HYt*tR6n*l)d%wN zg*NFX*U{p21SgTx#ig;%qBvbY*>d*S$*pTI-^5leXj0JJZ+sqLV;*f%A*qc_+YL$2j`?)Z;r9@`kMq`4t6H~B*xc~|p;kLkJ-?rGpa^8zH z%&A4W=8_SW;Q(xFY5)kc)(-2U>C7DcK~EU$kdi`1Pp(K4yh1z82ArrwVaRp}5rlqRC zHrK+i+^0$)8}N51;pMGh3)Y3g-nN}YRdtk_1dWUB?Uf}=ObNx~Z);-EC>_6Xz9j~H z2WFZv+Q7}NhFG5oFS|vmcV%$HzPXHnJnbUxcIZ7MS=he(9@^FA`lNEX$;fx1=Sy=( z;8by*SW|2>YJZ^bO{5>N`Ho&M%}x|dskNf&G&#%NJ6BE9++ZnLIp+lx%~GCpC%)(Q zqo>9*Tk&$?%uByl38iARO(nF!s4fgRkIrj8LaZm>qnLCn$?dr-le{|G22w&p1XZ)M z`}ok*T9PWjzE-PPR~jtj#bRt=Didg2HBpqblE zSmuOrn`V^KO8InqDA>F;>mm+CUk2ymw5Z#)@8d^zZQq6wI?9?74x+W;#68nvAe zO$i+q1@w1uQ^$;^hM|x18WGqnIz@POVdq3>OV(WBdvgMJbHIt&3`rTzNdHNyd8RFwoVCC=5)7xwdy^OwQ-hw z#{!-+)J4cH^4&{V)d*PW{ay7Xo2U0yZPJ1a>?hIHW8>JZ7F-HPJBK?jc{Z5;ZoBt2 zlXtQ-17B1^C(35YKj%i_=FXG}BX;bcY$La_9E>B$OY67ozoa0420YB=C5 zIf(zZV2JlY0Em{@A+78%1aAo5>MtUi7A8M#CMJap(j}d~tr3O@c#-cr0RlN%Bh^7E zVt1(gxi}Lxyy?KD5Kq%mz8V4#MNWqH7YKVjMqfsVv-%~Lpr#ZYjak0OvAu2*cgWCM z4kMzrp(iHqo3Jk&Fig0hKpRKCVF*h?&yy3*mO|*?HU9=oTLzmB0;gj`;ED#(3&k?v zKmxC;pq7ggr>EI(DWYVer!2!C#e9*H4Jz}FX{kaKu=IHsp8Ry70EkU8oev(ZA8!2e z{5TGh*xmih%FdMhT0o1kixAr(d*{ZnZLKI+*l+_{m}zxNv5DmbJ;?WV{FuY+>!H|e zlUCf0vUT`D^gr<|rFC`1!De8qx5l)bs%iNSLqfFKWCi*;Mk-85t#+9nY3Vfkb8M0D z!63^P*i+n-TY>-q@#^=nre|(1z32fkoV&Ql?AfsSv#^GuZnsV#+Ya6SbR=j|N>pD( zLS$&DfhcCnw6#&wR_Ggou-XaGOL2XCxI}98cX8#IU+EL!ZbakQXg#iJ4lIVI21Z=P z8X2OX#t^cYZYB-mOC-87Tlez>!tNl*4c(7lHDv5uOf|VbSLif$%H^1h0HNu}*u6ah z4)HI|2saB5RL|pc44T=2zXTlP%`s_YM-F1^v6@ZVyF@z|DEm^SKn4R)Is~faiD7`9 ztlZOKvl}7wy^ci+@o$=@=tG3Deds-($C!Yz+yIwx1$-}l!ZXf+<|v{^md2jmB!>HG z(v^e`jD{UFkanx5u})C%p;Ru#F_UJg!*t<#%Iu7edJhrfUdMe!WE9%IvQ6mD)6*UP z);HjCx_dN@!GnV63bwPQ_sPPn>x;_F^aohTal1>%JII4QWqEKOFOSE71B1}6+~g&k zzjcoNUaa1$QBBV>-v8t_?Ib*19>V_890dRPozpQzwsLgDwvZ}O29j6KgEL)R+14@* zyu@BT`X$R2{Y}IifrL|lvOn{2D>?EdaJ-R_{$vazvBH-?&WhAJBs!rNqvGCZqMacP zVz?ZI)3dQ;qH%SM7;B89ZH}ymOr7bYR|`cbG$n|Q&7h{$Uu==$OfhRKYE=8ENhsaU7P4>XALN3Ygap$PFAV_}&q5bRIlZ(E{Y6V-vb>Os@{Pz4ibt^Tb+E$HeD z6wiEi?$WAJk~zlV6wS`{UNOe_mYX*uW|}za%S61y_qTJconb8 zHxDr(WdO0JS!g**Ng1ptU!X%E=28*ZnTTbiDTdtl)vrxTjpv*&wk;l+!eBX~a_-&3 zK54MSF$?CY77fKbuD_`1!}_W6&fx2@ni*vaN{>x+iZVzwiKv5m#Y0R~qM0Cwf*h&} zN8P53$Q1+AA`c7W!SyMs_CU{XIN6E{aaLb4&<#7z>Wj?^ztrlBwT~-<$Ws@eUnX;k zY(05rZQEDBh{5JbzUCU%xoPl3NzWsoRN~}N-0i}Iz$gXf3FC+l$nx5Xgjl^LrcJo$ z-ojD_P(J6jF=z?#$*UjR;8yL@cF~AfH*ly2M!$QC$+S+qV3c=E;w8)>f<>PM#MQb# zYwi?fqa?(nowBE>8`>uGh_S#RM<&D7nIigN2ad%D2@+t78C@7BL!b6Q_BczxhQabV zp13S@NLE2{&y<{D%V}_LTZvyrm@XYh#^M>0cw#I=qJ4l`KH7eIJHV|5Dm2x`KS zKq+O*p`(ynj;jrVx+Ff_>5DPIs~M z9=;=d>wHwTq^B&&BMbwzFQGhHS-wci>GZ@2)i{rX@JH;LhZtjtf@cjB5wODg0q-+t z&&4iUpqgqSz!&|BKm_#j+Z1_#5ft2p@-2yVDV7SwVtGbs} z9Vo^$k&R@?4_e+iMs`vXLju+$*s3P_HFI=|@+ZAEl24bhd>qQBe$69ey>WoK6lnv$ zZs;#Jaozp5wO6lWUyKc}0F@|jAeBSYW|mKgx+p~Kg7&|!`X;Y2b>Am^naCQD+@IoY zL#|ti1kfVotU;+VVIYYg)O53|=C_dh__3>^{X<&O?9r=Dqf#!PN}f?ba5Ysfa55Jn z#(dZ*ZLwvxSigQ=>F1aR)SxInM5|yU?~(Z}Rfl|2lI|Z&9(N{eJLl#g(@S{cpajvJ z@`7lMgd}F@phiFwe5i9et9hNa;gzk9oVd)WQnp%fG*Dw2f9Gz)>N%N zZNh=!w<6RTx)c&&z$`Qa8w?wh*ycQ^28hrX9xy`PW3H4UgpgZF;~d__i6E61k!*0S z6on}Y>tZPUOkiqMpAREJ6#JwaR^lWw zcfZ}FEP#vxJ@4ac-aUmra6VQ(6;l@2vhOPR7W9`O16z(4YbE3 zT}`oBPySg$o4N984ZWo((Hfx5WSFFmYoz(qt)lv@C)9i)0q9FwT~9Y!UqU^pC*!h(8<0O)nh0=)d=l{EU;5*u;H0Ln2}5T^hbRvKg-k0|yN6(ZPs5H(^ zjy@z!3K@1rd^*YQ5_3Eun7ubK6Ue<2i$$8XB#COT`sTKYzA~|R)vCD)w+yetd0b^T z&_wbO!019w+S#^I<3epCN0b))eH=4VTY3EwzycxMoWsI}SgG~NNmyhLf?kXp$Ln7C zyF@GvLVVU@U0X8mDYMo(g7g>KBK^K65z{u2!uSqCX2G7ghViBMi3nEbyExww1=#I0 z9;sWGQQ((;Y0>#iQx#U$&3IXamr7k8_la^`_#mEa$5>lJWU4($#usy2IzyXMZbqZ8 z=i-di+;+4y=UTc*2IOL6;21?kho*mLr>Y*SQ_fI`iT9aGtlC9BGj zYx2e!I)ql3Qi1TF5reaM#7RdQJVVHI@o+$`8Im-V*R>=w*ix&IXzCiAF^z=iN}k8S zSoTO&_^H%$jmVM;$~#{yv8DgwINqpnQcDnTT6$$`WlPE9hD7h+@*aoJBW_&05UB)sqUHWT8?m6+*T< zIANuR%TJ!p?_++@=a+}E6=bQK8S*L+qG+nRaAsZuPB7yCHw|dpJ7<erA5ag;&wRAT(bW|u_^dbqWkO@ebM&^0IyDwU?4%JEH z`z!g5AZ|rCqz{QakRE(h*O*>G;&|Uz_bxJhRSKB{`A)1aLGQNN5*)4Qa^~qpZRxdR zwU7ZKC4`aW+O=bNzHJ(nnOkv-nx(g-STL^?cS^6aqZ`o%foCx<%m+MuR4mliaN~EU zT1Mp!q{w8-5kaqLq9aq*;125RVbgK!C-E7XLwa5y2z1$wp~k_WU`Y*bE|Dn$I|0Ba zZ5a)=Sx35Pm*Yg)K=W5_NzW7_q$aweXa)>QSrAp0yY^l%2D%!4c5F+^4=vJzbnCif zH7SzJe_U-{6>xnW{ld(KLa_caA6jO;%z6_MZ9#Xo2~F@KJrtxo<5VBnpj}ov;y>%64pqZ;;MjG|W11F%fOnJa$7fIh5 zci|iIaohy4~h2nprE==R8Y+mlQXbPc=2F7^w{Q4up~biSBMdKHcG&TtfL0Q5{SK?J_QnO zG5{X<{c0s9nI~$sCAG>T^qN*A8Jak5RT6;5?IJPawBQ(9cDuoQ!?T%7t(ZE0tAg1F(6~A`{-f@b1=qz5s@8#pFgE%^h z1j00nf$m{FvAvMtXC|#rfuT0~S~kc22P&m!(yQVm-@Pu0J3mSWl*yrrh*bnjUjV1t9lK;O~~ zHEr=g53AFIE#PjFJkqR7e@l}BukOuIVw}1@`Bs6Ej{+lR3Ys=qjIlFV4`-i+%OP`F|^0MKh!NMN$*gg${!>7YFb z5=lULE4n}FO6mYOsENO%v?1Ia!x$kpZ*-JeU=-efn?de0MMr<58NSdNp6V%jBi8U| zd#d_US>Qzbxfxdr@e}*ESkK~`L8O?>tPd?c%*U1{L1!|(#8TJgQZs~N)!fNMkFLSS z;d}MWUb zy2SU~hAMn_@ybz2B^0PqvCOud*s$MPjj?5!o#_n+<}@7gKc|F@3rI_%N`Fce()ewS zj?3%vKu(j-I&pbG0PIjJZwYHR7-C^LmNSP08h#;qyWtww=F_*e4+&hMs7rXyQNIHA#h(Z zmk$vpiVcp8wsWBicE?xc`J=Bm5!xuxytCp`bh8v7!|5!>uMfqcr#WG_Mc@b6djYK$~Gp?8NCdTEdM$VEt{Od)Rxn4htJnnOD@BJ z%Z1R-bBvlP0HrF^X*KiS)2k({)M%4$iM(tVjQhiCh@v~h7+=f|- zwv*nQ7?}`Z7HIUyVK|!@1VZ);KH+rO>DpFv!?~4M3ieR@2qI=;5?h)q9ZW<2=vT~UPMr4!7VxEO`k5Qka-YNuZLr1Ni8Q2F1I$x>{dv^1ayy);cy5t z7o;tYtRHl$zVcjA$hNO zzQK$+vVgo-S9H?=vE~%=A!kS&1lVXWAFI8mKme(7&?SEADaRl}d{?hEbx~0ZpLm*zn6( zTYzzg7)FtyHw`xP)}cfL9beZ5tstl@R#tgX(;+6!d&z&QF+*N!R zOTf=a(O5AG3Ep@UYsj}#4w=|aV+mw!Nc1;_T4OZEj#f3H6fu@~nMP3;CbW1*0gmCs z&BiDRD=VT3LVXw*O+i?SPMJHwE#GO>C2Y6V1&?Vk#g0j?LxLFb^7Qu}X%U8MW(tL$ zXeQv0v+@`Q9QxGlAL`aoR2r5Ed!8f83$OhhnvKL^&}b=bIwHn|ClcaX&SRZDZfQPv zV|UD?J*aCO3!MN?WQbcjrN|9bJrL{zGpPy&`N^4^z|QGKjJi{AaY4XOZ6pcU-Szl#A5W`sCg^W!q0Qn@&-+JeeZl(X?-A+(b?%JF z0el97=yNI3Zb(dy6T25hz(2%7*|NYC`JtrE72*qVM_?Q3iAs#^5Ibb~euH>0m%}Iq zU}1o-EFIvu! zcB_|FaDqgA%offB!ET!r3ahk9hH_!f^pWi84zNx!5uS1{8#b?564*4Q`7JUZKy8SI zBWwZFWnv~+%LK72O|6$eWjiAZjg!b11AeK07=D@(7>Yz#D?t77zF|!!C|J#ogxRQH z52|1GU}E8Rat80tHMg8~r#wI-qZ+IL>-SNT)pB<#<+}QEk=`(0Q7%(qbTQy`&w$-Y zIzi@CiN_tvRiKV`B}6?BITwxZW0TV{;6(?O7ZuNY(YC%QtAEjULAq_qd2Xr#gZB)R z3lmlSe7>Fwy~pg1MI7mbmYs15Q9ZM0d+Mr%6z}334*=l?_l!iBO5#y{vQ2#n^~pB% zNlNu^t4}eie_MUI^$AV&HLJh3z7F;EtuLXbzDvnk%m7e8ufGKE(|a5Oyj+861+sY= z3#x$gCu6*IC9a@g@`m(2A?k{@#n*zI&$+`~|E~NQN?v{|%-V0uwTu#okO^c8j%UnI z1Jx5xxJZ1ll0Sn#r_80%!DABx3UuVtp!`8O+dUY#zyb7_6gG(6pWBlw4p+mX<1r$D z$+$t~=TrPy{9kMhLFeCa}h@O$VXxj%$b-M&{c&f#oQ1*^81kDh%6L# zZh%XnrJGdy4K>`hWUMneO5G=Qi8RqtB2BT(YQ95Y%UL)$W0F8*V+&V@B9 zGs>^;Q0ZHr^==YBo|!I^5gBqy#P8@u3j@e~FOMjGRJLQM{HtvOSi+n>n;!1YlZMIz zTJAk18D%AeV$ET`rl*DgH0k;h7Tfwu=Gz$NW5EH9;Rtov zgk?<7epWSO^~4(*EW~9I6y|F37hJ5Y@aL`F*a?0qEkw%)|j4m7$+~ zm>4QhDZ^=D4nPqZh=3-HRO-2Z<)GV?_0%<(Ep0h2M@WIHf%+{rd9$aCs(Yu&j}C3a zGFrHjpU4~1nebTh&|8y@1S-R4%+ekaWo8SeY)%CHGe}e>ABekm zU!6g9ATHb5i|R;qw2d-YOZBFX+;krc;7j$U7T=Tt8J0`Uc;)Jj3f;6lb>?ow5;b@c z>m+WQm|%gn9GKPRC^MK!ywgavbfHB~V-5c6xe8AuY}zK4wkviJxVTpp*UcJc>T&t= z7%|JN7y<(hiAHac(hV#Jz-LDB8Hq%{H~SS_{3PgxbUH0e(rrn9JRcsZU))3UXgQanCzUc{VXKEkTh8xX_vF ztRQ61{EeC__g24$X~);yv+h|rI23S}}nQ_=$HDTTNov`jO9DCTrC-F0z z_6=S1!a4rDsi9sonzeT4sNtP~T3pxt7l=oWWMr9`)I|+a9)G8WqKIxOj zlM(ysGZhUC4(no24r%EaVN|1NOkHrZ=EE4Z7ZW%>`HVFa{-DV%&*=e^1M(%z0eQyQ z-8x{QEXVG_0G;`@ceGqfv_qP%1=^#8`+*`N($%B-{6_7FhUqW_`lW5D#4i*Q%7Hto zpOSB!!72`TS2CjkT27>L1t;c6AiAQ!5Fvu6S6(x*iUfrg2G)|pSnTj|{K&amdWAxw zvI+#`zJO>)@nsK{{ynH-0}2?W)zMN>N{S%b2_qV<#%aPLzrdstd*shGN-vDmu6hhl>71eSsTMnH0+>Wp>SH)k;9_rmGdlp*&C*~SjfXAe4x z0j9~Z&e)!Uz&4ptPX6Kq2B?V~Fw_tc4tafYz&s2 z*wEna896=^tYbT&P^Qi)u_ZQsu?lt@VLeEkYid-sj-QAG6UVw-fjCbt`O3aF&C3|w z#He<>b=OpzQVyuzXJu(;h! z*Zk74hl;kf84Vk7UDn8-&s9Fj1!Gx%@^%f#vrt@z!2n{uA*JxL$_v4ypHR) zFGt3RHYO*g#=X8Rsfi;|mW7~)HAO#-cL&Q_4N70bC z&&;SUT-AV9S!pdIUC6msZeNQx9yi^IS-j6(C2BQAYPwcrEXK=PkHNE-*r>Dv6hwguFeF~3+Eb4eoT8e?Q8TnLr2>{j`(lqD3x zCs0Pf(lIo%*jSUKYL&JcQ_dOP=rcXi5VeXjb@bJ`RQfVqDmY&W#8UslGX@X?YJ{y*EL9Xg`#)j`$2aWtkX z37WjRb4de9FAT|sH-?wew6dgc$_JpZ>^`ZuwhmtE(C~NO2}NpZfR9@2cRx#oSO}d5 zday?1u&x3=GBScVAAWYh!=ckYw|+%~X4!@0_LtnGR{!cv1pv-H|0YpdAT4eYS05Ea z`a+3i2`LfES^w@e>S#Z+iG3cQr{UnJ`x-gj{3>0zuaAHD73?hQ@jp-eLkq!2cx3LY zK{ef9MgiLf`03unmP=e5b<_A|jym_B=cq#_kCk2s4Dfm4=SpEKy>A6)1JvJLDZ79s zeZ$WW=rC)4?^urHD_n4w&vL;%tI1Cc#&diBAL3+t&Sd-A=9AUiqeMODo|UiZs{C7W zs^#cZ`^|;65OAv9Rh(*UL9219rGPkPoobjA*HDaH0YjM^d-`kl?I8qJaoXQrMCpwt3yJWbrDZ4K; z31s(96OJg!7ZX1)q~B?VZ&FF{b>H0KoZhRc6TXAfEw}x6itlD@vme9;*lO4$VDlS0 zZ{Aa`Y?S2?I@U{se2(L!m@ef+GX{G62{LO^+INTi$#2oa{NYQC(P^MjSW4R#A=Wj` zNk$`mS-M~2LFBq}Y*=?{s7~~>nhTf!9X_JEhtGjFvj-v+)>;72ECmU0fKu4Bt^ME} z!lXOaQ)`ishK9Bkt@BR!h0+;26O=CvvU|9X%|bW=3ge|B2S3x$|k-__EkzF zuY@(Q4xF$%nh>|_eN?@iz~v;s)(YY@{d4JKH~5v4oyaz{+b~gf-c=nv`aRusAtPx& zkxse`SaD6GHcS6SuoTubL$PDE!gr01hIyA#N!5ThT>ZfhfN{uiy_DJ)K z#um0Qy%B@sah41y`tkd;EU&g~XLZZ+`j+i{W6S(nX$nNpsjiirGGo}aVF`+I&Vd45 zBo)UMF)vk8eP-4zUU)l-EUCnR6MfCAGtQ{vq}j@=@9JOOBtKbF>xOQ5AEXRV5e5;R z$5yKWHoE>22OW*3eB7^ksaqgfg6}7hD2Ofbc)^-XE$eTKLW{N^uXE%G(*nFY~%=7PYi%dpNT|9~pDz(!3~&a}!BMdhMNyfp3^CtaI3DYVZQ zp3A~Xpp!ef2%pBQQ@-0=Mvjq|Xj@$`{3KX1FAuK1cRth#jeG1KoCO*D+$9uET9e!( z6IYp*8TAOl9aEPK%P!gZ->gekimQeDj-7*wQ>y|}U{8|)!Sn?v{GB6J0rr=sw-Nn_ zR(GU;gZq*&e;%)x%2&2-o}O=rj#IN`{*zR$;O-i!GNgb^1qRthf~mG28Dvp^c1@NL z0r;m=MP!dASpe&*-3`2way1 z0lRJ}#oq%Oes)&w1d}*C`X0IJQ5gCKcp5voQcPJPYeG6pD8G~u2Rzz~v*f~H=1Jd2Pu!86G?>sjP1A7j zI%xE2UlZ}=JN3@p6E;$l$*DX_hQAl%f(r91Saa17;--lh(cFRQ4zZ%7Q?^=$))+t( zih5Vewb^>2Hc$gwrEjVYNNu#;XuY)nA&OII<~a%u=-xv3!iNe(*WJB4!f@=LV?sKLUgP1j<)q0&Ya;GQ z=t@(fVA>F3ld%g1ynN(Z5YAe`fEb#5o_lAPA8nix1kwSUtRs!On_G%yHN*l4(Iem? zHP9dF%Rou$uhzqa)Lczh0gb$*+EdF#gqQ*ZW*G)> zoW%lS&*4;k!8~b&fmPiw9;+iy4CGHsW^56XD@)oG^9>IuycAKa4Og*XPU7eY53;2Y z=0t>@fc-d~K0+*f;{{w6`F*PrYQ-lPPBvNQ8BRgcQ>=NV+`v;N7Q{vXKR3 z$BYH|Xuqmm$Ca{Sum`(Ay*+G-4Jv0Fg4z{WbQ619VJtbhsI0lpBig*ePzY7F-FlLk zCzRo^Fp&Qg7#oxwvP>LSvo%r)G#ALxu0_b#hz~~*DI5)>rJI8JXmD;;nl6Kk*PO(} zJS9<9g?LK;wJj30a&t@mr=WL4tJ%Y`doqCBB9;NmeiY@eSeGHF87C2x!sgCeSkxK? z6D8m{y@;2{DumafDFxcB(Xq*U>WOQTf?Vn*i(7ZLYAL)!-3pG^_jX9sD^uU$A91c?7wYQ8WG6u7+| z$#0ta!G20V&I2vxvj!qjCMywbexV@X&01WiPfjt7)hU}U=jG5+NcB`iAT^PR@hUKT za@nGLhg#i@!X_3or5?CvO?*2M9 z{M(YQyKCU_fmc#dVHdH6wywu3A%mJanqSl>Hhb9+1*n@8pM35rb%TD}GyR;+T!;}s z+=a!;%BuOw&L=B1ySkc|dn}jpd@CR@gZM``L)AV@6xp&NsM08|b8_o5Ce_3>p7ZAS zm?qj-nc65OX^+C(&bbjyLiZ%@XsahSEii8O zHnwqF8IwykMQcB%F0vF^nIdmh5Vd@#UpmR?$~3G@FlQmB33EOo$?z=p%;d%?{6@f* zk7j{}l|`e|r3)2)Mo@OtADq~hxO_%dQ^aZTCXK@Ide%cEt#4>I~D(31LZz+Y%l_eYbKAp6< zCP&Nl^Hz#mx4c97<+slaS6RbA*h$+-dDxM)Vd4pwD2SUp_&F>6g1VVYY>XfyA29V| z%AtS~ObDXZ=l7^mo_pm<2y63jEI;T}O_U*`jtQ^5bdiVWtx1B^{UE*6IL3KwNTDo0 zxdvM{>$c48l~Xbe?sDMNwX{ler zbe^-=9;Ev;L5uM0gL(($>UB)JMDiR4?JC~-6}}6RIMlfHW#QM6#@)qL!p8Jg`~0+W z5c5IAK(Lx4jE=QRDPtSXx@!gazl%c?5l)Mfa3g|Pa~$9N+b2vGvX4zeHIyguJeJz* zvdCg=Lr1}fc@V162!0a?N}E+tQ1pQ!nZ1X7;mFX(4<$u#2>ZXL8T1)2UcvN^4UCQV zfciNtm`eTtS^eHN*hiS?Z>v@*dmtzi1DFodXO+R^KBKeHvKmQi5=fU4g9_SJ=C{k( zELSBGtUVs2?~<3E2_{bM6uI%&FM}%(uZy#g$IcpDYhfyELi8*Sr8_dloyTUjYB~X* zwb&$UukvdAcRhW92PdUox)+t}4%Yt4Jldw`KLL{SZ6? z;v){_B~1b3C9D|GBZmbhi0{-Vh&MGi96Pum@(WJSShz56-kXG-%>8o#lPHCPw`ZmT zc1*b|kqGp|stx^d^ z9sThv-VOCo!sm?w^B8I&E=g6VhrI~#35Y#qu%lcwP1<>Uq)(w7B>QM~GIices&y`i zeva#WZtDz^qJJ1x`R>J4PTv}DN0nO3s8222YY!@fRBglQRsF4Hemkr%u6MSWH87tGgg`&k`Nw zNFJ5RUeILB4YV4bDlE$&Ac`~gLr!7NykDB&aZ1h7YmOkAI_I(4gwK=%d4m08e;tT4 zK2a|D<0=W9?}8rAZqUJ?TRYGPNEo#MQPKnLu?-RI$HUdlrxnh9a9HgFc<9uOwI9Tl zy|M1<`hYg;x}I=Iy$J|qwY^bFtdrV47{|Kwrtve@UR7RffJ)rZj#$M>O~5J+lzyzlr}%XPeR;QZ9O}B}sWPf8em*4gw<- z3ah0IqLTkxq zqS0W^SZhatz?vc`%OfF*!fk@Z3+vE}3`?q)5veg|``Y9<4IHOAazzg6D@Dw4DFrq3 z5Jd~)#y+U9?r6}w#NkX8@##b4z`e%W0h< z#tZLb5XWZneapw;9^|;Z9mn1}AQfIc-u}g1p_xn36qJe~-q(9KgkH}GOZPzLvX=f%v^8wMW0%@%JOs4rgD1h*Q`ID9%;)gI&kNJI*g~m zXRSIm+D;Jfsh7OyK}1;e6MCou74GQmR|G0rqtV1%Ws>e4>oK{0mP>dMsO+6xBV_#| z<#ZH)G|V7BC9BSIH#Zo|!PL%brZ)CquN{oL(aj1tlY@T9>GQn>;t$(lObYfOKLOOy5@nult1O zDq$8Bb@M3}Lik)v0S~S|UcE`^AsolTCw`0U1TmPcL+QN10 zRc@*LIM&+VQSHAZrO-%BI0clEU>5OmJzaf0hfvQ(w_$ZYe|mG3McHr~$^!*vYES&8n@;I7~IQ{ExY!EZDXI_Lw*W|;1TZ1pLVajQV-2IrhTs4lpg zqdl!OCX=-Bq#}od=DS#(NbN@Gdzqt>(b_f3xx)+_1|{2F z(JSa(nS_w|UhVRogR!h&(@HTlY4_>gNfS6benPAzqGe2U5^uyxZjU-UnW0U*B{rn7 zoT}%=-GX|E4a2N@zfCZ(BYQ&-eLlBiGd2PhoXMYXvScslmagB}Ak*XUL={46$U`hv zscCExlqJ&3h=r5nKWDV`ypr@iCgo za|Y1gpU4EbU%Tbz|5tChnB;KgFzYX(&D6UWZ(=^$*zJ_hFPmVTa*ad90_Sbh1bxab z`M$bKmNU(F;Hi2m#o3r0SNBOocR!D-?|N#t%*ZV5J0`zFm(k$ccEP(CLCbd_j<0Tq z@t&KMEb-;>zN_kMTUg{JFtfTjfjYc;hswEgNm4jnk(;J>NMue#_b98~3B(4vtSC9m zfpM}xPMl^VD90)4s(;meEGNevB}R16m>K1L&c1dRG0E>9Cb4rNllWz|OquDW!Gy|L zjlcyN@#_mkZOX<#0XW#z8Q!9>qcqzB=pDqErHsmcdEDEX8?)vYSEUB>%3eZQvE`EA z)6oYJunXU>W8z|m43UKI*5PfPL?*G8F7BQ*)Zr!hDHm~o#$V2(%NXjLEB$VGCEr5Z zbNEWc&mmZho!~|3eT=hvTVi$~H8`bXeoph58+`;v^d`l80#=?68#YZ+1SCXa1$)^@ z7&^#}lO`O!1p9eDVKiBEeI#BjN3g<*Q{dMavb)(S@Ve?0=sjQ$^qk~qv(F=w2nr?! zQiI(G9S%&!NhG5Fow1PSp}3`NN(Gq&UDh2Sz5u4-q0Z9alYTn4haD@>)6F)j|(Qb;~TCY2*w5ssB186Ob5_Q`%cA z@AZ!4loI8@p(iR`uKP+Z@;TaN7bStoB1&qiW(SrUdh~$bKIr0as-GB0L9%TPpKk7R z(Tzh{H1Zsevr7V2~WO}r< z;XeiVfyAQUQ9Q{sTo1=7N63;-KBZt;)=>{yRRC~#_5Sj!(|d{kBQ$0TZOp(15U?%g z7|7fEz_U9i|3+Uoj8i)=B;CbnclB$@X@4t!`VCVqQxmyb1j(-OKoevqhch*`$9Kbh z{yyda5cE@KpJJ2IDE-DEH;)$9+)OYuxZt57BC$1?*6N)p~XVt6}7`X-xWGf!wnA?`UC@l^rLHZiQyLiC4Z6_Ml*FZZ2iYV0) zZDtOI(4`cXk#kn{@}rthk!k2Fxb9oWp{pLO+m!ssH%OvWl|`cVMRybg4N2bLXP%;E z+0WBER~h}|+R+CV*GZg)5*m?|dKjbLZYwy=W0G)Jk}oZZ2C2G{(MdQj#qXUR23bW* z-a#-UY!E|R4xIZOz$~~IyOutuZE_Wo=qwI1F)*^BjS&$&KT^g@?6|i|ovFic*#y-T z7?WvoW}HJTo{N`@>if7wEf177o7aNq`K;g%(Mf^rbf|P&c5Eazi%@H zL>F(FviRBi_#o)OY#&;M89?vD(L#*(F3!7tDSx)L&s0f2f#mjv8iP)GU8Uy=W6moE zBO!Ff3>h)V2R=!ld1X7G?9CV}m8EZY5oh2s)*~B}DEL+#e2J0fp?EPeO+8LaJu*!_ zW==gS%u5htUQ)B`B?Ot*kAdFQSAz@jF*M(rUg>x@Gvp71lTzg@A8P8%9SHr$UABl#+&c>$Zl}VCkO(MP?MS!xr0zC5tWNoQlO(BOnlJ(6U^{fqN}4C_rgX-S!K! z+ifqk)lbPrJ-YqNTZx6G%+X3)Nuoch^8-vcd68G0AL_v@wSAE=gNQ=0a%Q8Ac$z$M z%M=Db?Wi;NCU&y9U@|+!(hKYn$K@6Ra{yN{QqCzTNuRRo20)c6rWWrb?joL(Vu^JO z#+V{Qbp#ozCx1Hfsi?s%Qy3{_>KoLM^c75g;A)_o`f#xM5LHk`nxu1SD18;lLepm% z+#b+M=4dlQqT>`Gk#dlwOk^OQ2F6YvKos|=|DqkttH=hX96%o1R01$i$VsNmc znR*Q1e2cEcCnGYTAJ0u!1D%z=mmI!^(4mcELm)*3`9LErlgw1i0R44O=Q~PTXIs_{ zID;TVy$4!dPDvk7^jXYcJzzc0=I)W%=I1*cI|TnKylouwtjwmCR-jrALa085{L`F2 z0alhj0anJzyBawCDLz%*ZCDGP7N~EF)HE@iF-=y8(}}cr%ws(dGgNm!BtS7GRCfFlF1g6OgcH_ zI$#%b{*WcIZs<5(z9wbu0WnS+SOJW*CIXg`uWc%XNB#two+yNOO%^U5Fe(heT}jW} zQ%-Y}cfYOHd`Nb2CjXO_&3T2pyiLNW8PZdyfcEDI(g?H((rnM;OO6Fi3AZWTj7=y% z+97jE2{=_FVX8;uJtZ;CCC;1Q4&illiqGbH=Egp(p@`fuZm6cZCp*~eLXvSbMU}mK zci?48Q;C}B2)x@QMmzNY#OxXN(QhVNKu?gw4(Z4+lY^fK1Z_9PDbRwLxxO^0xdoQ8ulMYjODvMaOn!N7hg;s9K03S@9cMB~ERz%sTe6oQ1*rlSVCd87U*`6ye2 z4#Y=!SyplA@By<2f~R*4tz_Y&pN=&GX}~PBLGHR*swpErohN+Ygux}+y@D@BS@3k( zo9|^}wz|u6)V+-jutvw=2SjZ(oZ3$7!1`TUo}ZEF(XqxDy~p{`q_LzBOc{eJxB&*^ z`EJV&jV}lg2b{=MMm%Y8AG?LYK$_IuNCt>>)A306{RlAh33z zJ_Pshz`u3NH!3Pv-6O4s#B9GK-$$Z36sW+d$RUv%lv)Tr6!ZllVHT(~a+dvljW8WM z&gFZHqZR3BHEP#fxwi}$PPRb6@eu3c1CL*Uz ziM)%U$QcS7YF3ygxzmFMx}KPk9}@Mkm}pMT6Cz!P>W47#dzIRxTAK@3sZDiKO%o;c zYM~B}Vf*}kaU7h*)ps)$DV`r&ELKVXSx*8jP2snzE`ez%e_02)kL?_!gN9efTTuf~ z<-GVP#Ga?7Fk+`Or;RHV3knW6yZEUbdMB?Sc=kelG6mzBQy>)}me8YJ`Q*2!-RjRH zR-vJh?~Km+n>5m6n0Nv+y^nzX5b{K`(I>6~{&DU&Ae5m|dVT5Rd_6u2a&Fv7J*-Hk zr+Tv}BjYFbOR~S@999IZf9%!o7?}|e+@If3Z_lFdvW?^Y6WplD{dN6fjsNd5js#S^b8eu3h zn8s{0=*tniR8K8NaKW|@W|1h&5laAhs`t*8?;Xg(Q4S$AsZ?0!`;cw(j2pY4a7#1q zV+|SktnFm@>i4)VWw+6=35$m1$j%WUVPpmg0QP@a2JO{8}PXv5Sr;T265e21TgBk1$qzmFvu_SlhbF4XCWv- zcOoY7QfFhm!XwYlod!pLQoO31je=@UDBi^;4qA3>5(A5*DpvBoNaQ=}zz$>KG4Mgo zAyVLAIlx@Hh0_qQ3uo`6A|R%2aH>wT}>}R{2IeR=3~DvMJZ=DfXbR)~|+H6}=v< zO^2D-(1)pUifouL?v_*jYl>ThLqcoIg?6!Na^r%8K0rO@6NC_Ww^XXllR!qx*$`6? zZNpot{M;vjz;nWlGi`&CI`Y% z-{`%Kr}`|)D_xdNq2r>+B=!dDIzTei?X-)+$f@Z7tSOg>wgQnQ?(otvbS2sF-swUj z^VRYa8t6hkcXjf{C38blc)N*WYmnT z3)f(-hihB!GgUlTT16qC@4F<>?M2Ob%}oY7v&PJ!?dvnxzP$7N*VwX2qMK5b^e9l$ ziSbon{VewTokiNDRj^^Su1(a8Fe9N2ipbF^Gk8$|B}95FY1MXQEDbBqyO=T4imE>u za6^E{saUNPZw;;4vly}7BCSamze}9jBr)J_h72jHs%PCWhJQU-R4|gBT7?_&@|ZL5 z9-Pxsg_pdk>1?9wz*t3Sr8})P+pOqT7S@|&i98}{w!$b_F;Y5mhJJhZUTJ_!`%wDx zo%`PXi6Wfc8dTG3{AUxh;Lh+LSZ82QNT)QToo29TTFTtoX~EyQ%idfH9r`3-ddvxk zM67p-4%8<}8WSsAJd2G!nP`|Zb>CGYDT`ExX`+_!8%=9grVI%t`slr4JKs<Njp-V%6yXQbI1{FSArq&uW$r&+q4^{t;Ra9Puw7l-J1L9MBK zA?m9;0r%NWA|#eg1D3g!8m&u3rr2yhsj@ZyDrIX!MZgX#TO=XRbyv@E^B$+1Q&7Q9 zNDCo}6_80^83zBh)^dTo1P)T1ePBd%$EQzjw!AA);;K(ZBueV~nKGcIC)R74&mk)PJCPx7o}3}#86a%&p>93a z`eFt)THyPYTB9V5ni!{_zSF$+gGY4tC=_oO@fqwqz9V= zwQ^j?A|=w@M2Luw4Bd^)QMdauDqs)?9GShCWBC{E+l2_m60|qtdI!%cFOBiYEE|YT zXQ%60ka=cVo43!PnpySyT%^_GmVIX8YCKZr>1kRuS(xENpR;ufO++ZU?a!zcU*SKX zGe&p8XrKm=ooS3udZKaaQ&%&?cr$pG88lmE2Cb-H<$Wi0ia$g9T;CLn=`ah*!@QN&^MKS3E+@mx@{(+it(FVSzJ zg)qWV-s23o@`Q-8flyVeyU%hHofjZqt-Yk{t}2zP+Dk@3OTW4ArKfPg;Me|HT9 zy6{LUy#Fiad1sP{h=$Qehe8bWQ8ji3gGj|R&EchtrCZ(Fe-7j$W7^vZbEGrnw?yh# zJbR`%%KLuwt@pYri)#P$Yc!RG#Lc?s($wm0f-nlcLcLWLBAdd~6?(*TYftodCUNqG zR{Hcl!4qVA0^)tlyNMsrtF(dxv@m`CtDZy=xViHx7BTxiA$&@Q0Bb2z+4rc&)AqAp1z{M1s-4T>a zRQD#Z9rY;kklhQ#Z|=MMgo-CN7>Q{#;Y!B$ld`>8VR{CVmal&IgU*e6`W}k}K z?N|J=PJujiR&%@L`G-_fz-pxK=b`m)U-7ob7`f|l z1?T@OZwI1k!f>Mi?OyQFzFHh=bG`aHK_;WdEoSs^Vta3SmE4 zCg?akB#KZ25HqDF;Q`RYC5tPEY1Ti31iiwv`CntgQ?Fx&=`{>rO9cbc zeaJQb%AjAO2@>z_?FG4-oL$)j@!&%uA&70H5Fne#m6M^zN@Dw)NW=@_`j`yog#1;2 zb%%-r|0#y)NyZOs+kv(XfInLArEQbAc(k_ZrmHmmItJx_8dtfbV1afVrigi!60!^| zCsa@DpR@Qw9bc3m$b23X>x$+OD&c2-C}?YR4(}-NZA)T35KMPhN7jU)_Kp;G<*7bT zx)sVRHQ_$Qh5+x_jEX9{q*LJT0cPXDNGJ+QQ8Pi79&mL=2N;OQ;AwUOKE#p!*sYA< z+|af*FO}2hke+Ev_${g^gh<^KW1e4v-FdQ2@ennT_nydQXo*~gD_GgqpJG``7szl1 z#6$-QhLD=GTNPwBRgBqvLx#o%Nm9z&kJG@E%WM0|(h9I?w;-aAND%2b$FYM3e^e2m zng+KdNN*!37YtI}RkI^k_bFB~^G*e2VERpGqZR|SU<2qn!I6(Ix zBE`bl_YetBng&6-f#tQBKH&mT>Z4x4(>psQ!lH~L3fcix809917rnE(f-!Z&G<4a0 zqK4Q^@u(V=p3dytNg1!HWgtkEl-|>k1F%}!P~4JntU)-6=AJSWEAN%cLW1-eUGwZd zj|?&z+kKgLI=l8rM(u0A)+@-mi zYszZAqt+mUnw+5(R@O~cnWueX!wIz6W935XOT_#|d=Z;z0{d~45I>UA59N|270@eA z<0XDYPUVD?2gWVKKIM`f?Fs}92niM^aXrH#nuQRiI-bW$1%Y-9BHnFlZf0b&r7F@1 z3u`VcfBCJ((;h2kc!hDo2nAH7VzhN%#k%=E5G|txWk;w0G`wJ-a()qql@keM-EXWAT5b~oj_Eu&r-p&E;B!p2+zj&J zGl)yciS2~~CQz$Ym~nu8O)$I(_q{!mU`?J6^yHqbx`USpEZ^?2_;Pckqq&Q}PI~F- zB3l+>oM3?#UGB`B`+cbWj%ulw*V$%(g7*@!hS+O0W#*g4W%X=vSAe+Ntr2%V)+S$& zEvv7;lzIpBW*;$qPO7uZv~m&eeJ80{&hgi-p#j&s6>b*{P3*`JH9?MaZ)1sOUq`jV zP(!@v$s2$knmNYD4Y^W{emf%`1f#^hiH(M92HQ{SU8k!GPsdko+p;xfeB>)a@~^1> zIc9!)vbILT*g%JBYNyd?&YWUO6ej%T!5nb66^IYdU#&Y`x085DZY|U5p#L-@xMQ+t zEI*eEABDVuCDQ^3AAmGP(mIUrO6XuuBx`P}*bMZx+iK0ziCG>UrWf_|c;c4GbiZPM ziYiBffjJT!SAOfuD&LG@B@WRzWcIcDc=@n^Bg4qkkB+S3d-?M|M$jEAa5r{q$8h4F zTTa|7_pPM3Geu)kKn4_IwRB?iEz7Jw=!L zmHS3^T<#H}$6ehm_58SB(HVZ9t?h!rjk70C%q~O1QdGEMRV`7yUJ7W-y_3N9XWg1w za`om0g&Q!ya88m`^R5uhd_|%D*x(eP0EpOk1b0e4nyZW~)?u?)sW&eDM8J+I@scl7 z+T}S-0pQdr}K!R!JU5e4{rNPH{Ht)xAprzy%fK7w)4iJ|JsUoQg>LC zZ^QR?4i8#=e2Fx{w<(DZBmQifT7LZ1e=c{|JqI7+*1@5Cz=Aq?wioR}`DH1)d8d4= ztO8ufJ1#m%@V=ALDGuD})c>7c%Z2exIz1WRocqtCJG>Ij=Yuct?P+<-?)VZ0?Re>z z_v6uL=$!Ek?zou`@l7`i|L^r|0W;wvzQ*6RKfk{JlFsMXbNGed-#We+4HrdOrPgdQ zzMjI5*Ic)9%9T^k{4$uI-Ovm8(#`m6I+)ml||G9Qemc=yTZ1SY)yb3T}!Ot9L}UnheFyy5uv6wA1|p4^S_qi++`ZE-!D zVHy4--3JYrj^=axzy+0;rYCf%?8o`_7yspMFuCPYp?;%#DEc$h_H((kaNuwie;nK{ zuHEGN1|Io1luy!@kEircxnOV3`PyWF{aSvy#p&=7+v~XNK3)wjM=`eb<5f9c@L@U{ zok)LughpM@>GSn$#FtAcaY7%V#`u|kpA8oH%Gotm;?wO2+x$@;^dCCo2fa$8Sbo0Z z*Wd8(`VRkz?<{Bi;C8ZTlx?NCS=JRhz{{(8S;loMC!9`O>_Qs&rm1@$QK86Rz*LR~~XfPQMZki*Qv@l~%!gtagrZdZ>P&O3q$H$=G z{5*5lS62gE47O4O`z5T-ApBacnsK?VM)bCi*puZ(hN}>16Wbd;Ca+`;5%GCp4Q*_8rqF_@y{9NI6f`S@&H3OOvRyl*(DlwAr8l3plfc=Gva zTu!&^+q3iP!@i&Qu3Iyak{@qwXQO$K*N(4J%FCIB6;wn81y53cZ#=+RW>?Q2ZU&#F zj6aAB`a|&WA5auE!fUsaNq7b25q!L!N};^dutc&Qi(R8b5xn)0J%I)Cbg&rTjke{z z*E9@!a9yMxf`670UTHTipSOkhB7utHFs#h2OW=Huwz_dRwveZlTJA#vg4(;mrZmea6+ zFF^)wmwN`z-aq(a?RZ_EV&m`q-!uH@4>yzB`OI|9$!LgLJAK)^y*g$=F-%ApXGtMlvY z#q#vvUB8?hhu2avHbI8dcgWRXGSO;G2h(mTk4}S8E}{>6-6EWHz9r$K*TcnNqOF?^ zPFns7Em0aQcy_P5y9@gGak+fBwfh6;sgLyU^)cvmXOrt=EaUk4oe>xsbPDI+k(B1IVr$SCjfrWFF>Pxc;7Wim>rfNg;y=c-0?QYsl@fb{}K{`pB!zOG4du2W0T;1C9XJ9!#+wYxjY%ayEq;J0RyXh-7 zSufC88*5fxa?zm}0;n#&JLooZ%1v5((11?V`}n>*<$4nV^@G3Um)OU6x8<6Ag-i@! zASjRBX;fIvXy4D^xoT>p1deYG;{*C|)H!@&4uq3NREZhvJlE53=IT_yzbx%WJmG`c zFQ-5dhG*By2MXMoj_3BoabJ{uRZyKxuq}iD!GpVNaCZq1Ts8!EcXwxp1cJM}y9IX- z5Zv9}-DU6Z{#EDgKAlt5H8s_bGc`Rk-M!YTK#*?UW{e+Lu8-gvD!EPZ=XrJ&o<%dl z;n6@(c|2|>h5G;KaBLIG+4;$QFy`&4P4-y<(`7LobricaS?Ic%xN}_x)w%Y+BN)o< zSSop`Ld0;#B;PUeFZbI&TX>^7DXx`tEsb4uGN!9dvg@Y!f5;oohgB>2r}_dWBeKdv zd??`0aa=n5d)MpU@*?bcl5u4AgGoO^4QB;9w-F*U0^qWD%A1;o5dDv$N!SJ?YuL&T zTSJnC&?dVLkLR@=I-X-A;w zv!c|VJn=SG`{hmuN1#w|hx=T2Jgz$@5dyOELs!LP)vCItQm!jCKl?8k2_pN*7uF2O z?XP*#W?Air$PE&UQ&0D}e^&8{_QUHBZ*U}UkK-~>T(O(EYKVL6*5Ycz*4Ou-U|M4H z`N-RWeTvbiYs;5ba2)R~hN(u`M(EhwQg~LI<)eC+f7qkQ8u4^^=x@wd6=oBjxv!x% z-gi_xcGX70doC8)(RiUWwmz#F=~ds;%@1$(eZA#Y$7!d~fpmK!(|aVIy6@yxEV4z0 z8~r@4Esw|L0Y*-AKXcI$?d4RE{;iF;Xl$IM$}_Rt#vXD3dYj%M8v<=K$!W1V=BCW4 zL!?d?*Cnn<%h8{R;Iu5=KX+wsX2pW=hbG%T`+XtG#Xs81Oh1k|K-G&J|r&n<%8%2(P=@c-nlLgpklhs7aY;`^Kj;gwzUGlOJb&qp-RcmESBFzAiJ@ z*^`xJz#L2K5LmXep0V~pF{TW*ty!wEQ$A`65-?FP*TmkluTCBIVcwq}jw6$;9LA0i zxVi-hk!udBGvxTw-~Kc-+#PVGWs}x4%R^7e4$x%z_H;)?e7(K@7vHl%zngSAV#P0S=|KE>O)ySi*O|^s=wzw?`c3wO#b#O?+k`w(iB@!PSyhU25@I1yTUl z(fAG8gk0JLxj`F)Ga{sQ$+pqcOHbt8(|cNKO83m{DsSD!B-wonZ0|1GEc&X{7`83! zu8V4UGGED0|L)=CAJU8ggj|Hroee#hyF$`?Qadp2xxiLjQrf`C_515xQpc$$>J|S0 z_)p6Y!gKG`Hsg=8yF+bK^?|#a{cqp|1-Etdf94uw$nr{=%wLZRZB$aC2=%v}s4EF3 z?H@L*3UQqutZ&@A^gRynyd(?B_m_ zjNKzl{PBVg{$xmV0Am)`{r;4dDPxaiH=@i+zl>1iM)DS6~x|2gXzHq?=bM5WEwJLiUWBiP19Uxx!uqbpmn zn}!D4P9w3s%b7h%)XYcMcG>qIV+W4RWrSGNVGrxr`C!09tF*-GGa`O_h&pY#EM^DV z2w~xQ9wr$Z0+c~DX>_z(Kcmba{Sl{CqkCjg)wV%+M8$L`YS&IHRkt1^|A$p4m+D4s zkf*=zSx1P2JjH>`9qkD)qg`Bb%lZcg9iNBs=)!eSdk*En+OAF)-I1N`^He=+UM;)2 zYLG`Wqh>;-bg%JUdaQgKr+@cPmf_2}#0n)Z9hMszGvtUBCy(2K&L)}Wpa3(tIIce& z@Na$LT_fVcw&HxL(d4JTlzToNd|J^SQ)|0whI+Q@>!4#s}>2KJOU{Gy#wv=r9<g8$!WcNf z%t=f+u@8V51keTm)Hh&|FXD&H5^%U!SzTTH0C?Kn4Zi~PIsiU^R0(+f zd+B1;diKx_e9Ypm9SwOMg+TpYc(OZG7|r|lHWT&#l5w@moLmVU1z<{4TGF9^{zT5ANE8IfnfCiDjHI&{fyk0fd7dBvKvof|x(SiGiFw4XguU7WmKp65$6_%2p|U_M4ERr;U0wb=wH_b+V~ zA3n$V=X|t1fYs61$o2L`UIb4G3`1O{sSQ`?h=filmkX266IUg4ceGag7$f zjrAx24iV+{c5#oxSCF+;^0BA)WW&d?)tieGqb2rKDyyx2~ljK0Cgp`I^BO<2p}{R^oNkqrH`WK7ZdX z?aWvTWvg~=Vzx!mSo|Y9GiI$(CNOyngyWITd*rAu&=4;7l>BCNb+t#uW}eCy@^GAx#9+WlNoCDdc?@Ly^o8hU`wd<25#0@}n%j?&Yc^=VCjmxCk`z9r*pZhphLSzmTm zpLW|EkS@tt-t*`*2VBFM$pq*6ZT?Hb2R!z+#{3{*Zv~6S%Ye7mWQ~hY+dG7fVD8=T z1p@w0%?)^enVMw)p1m)o>@vGQZS4YxmN?Mk9>AfRfO!&d6>RJN-Dh~G=ICbji?~5O z;4%+ii+t}4pYzK}(b}y<`&n6Jq-!PS zA6B=n;ho2}oM)>cAU1RVAaGlo2${F{fBL9U)8G3b^~#=%Vfp+AvHVl;e#j0ucT<^; z+3`34{6?&w9N2IM7!9fY_@sRooTkieQ+;GbB ziB=6WkOl0}+MV9l6@SCke{)L4f0=xBTj42I`GCaP0ev5KC4)+Ae6VY*r?D6xwfcpb z8SwTapd~&&r`qm%YPoHza6-6s`nq0mlR57I{PD{T&^HF9;apR`UWolY1=U}aMSecn z0`>q=V5%N?+Fk4F0lk5FQ{H=OH#=V*LV+W|7?_fO0`2d(PKZB*5+7gfAiVC}y!?;# z{M$=ZmpaGTn!?xuEj--~jQk%A><$IJT)gc=MW}%*jW5-e(A?@4v0DHd1SKbfS_uWd z!^OV&WyIIG=1dl;l4qebXD7XqB zKLf~H0V97l%xmxW;mqo#OocaaIqds?SJCnV_y(d0Tur@U{FD&RFHVIC?eUi@u!hS@ z&Adz{z8b$xm&q}DJmQZK?PGI$8mq?mcWo5m@ic~STzlV>sfM1wtP2T)JS!aY1+NqbrpT z-e&gB(7Imhs2mPKPIj7QfoQ9-&u=!*4TIcgEb~ zKYU8IvK;NRwq!>m|3N z+G7g#zzO_iJ?d3muDrxZZee}``tJ1C=Rst7iOElkD z+hdeuqies>t}-VGl8Ok;P7dK3D-I^7mf`%@PLPWoZ5mUl>H|_(YH@i`V#8NF7~)sR zVJkZGgdrf80qb9U$-yo4YQmIUkg33A@`ybySx?}bqqgxeWZ&!g9(-auN1j&@5S>^a zy!HI0!HH2PUA3a@thJBJPeY`kK%hcBspYl!?7=zv5{j*#y*wH+amUuIAW%>!W00)% zC@2>Z5u=8Qx^9e3&}@K>*RJMPtxDPu_G{4`Exrb8eEB$)kHdB+@bF2MhfOHUw@m%; zl&VsbrBLe+3|j)e$o>@)^_4C6H|*|evACgdIJ~~P#?Vu};xzW69$sf$s}DHR!)t=D zs)62>rG-O3f=9VS_p9773oRbQUmkKH0L%|T`e8I<+8^+G7~jF z-!U;Dw>t08&^$c*FNMVhCwgBi#?BGxc7*=53aJKBJ#hJJ23&u;LwNSW^g}e144H0WeBs2h zRw{eGOiJB4(77f+^?*4o>K}kp`f4j9xsEORqQG%_M+R&I$!i)1vv5?yo#MPh@0ZXU-W%~+M%nB1c zEg(_)eX+O%qH4u{W{GLRACLPg^5dg$$P8hp^iqWL%qH?vT>a#zm-Vf*47jt-Mo95S z)+Z@j1~hx~RHZ2*IDRLd5<_+y$MrKPX7+%L7Z?~u8tc-{rb6AE55uslh|TFmKMIE! z?~q`HkgFjh^ag&cc(A5|1{V|;ug3JsXMRP1;X?YFEqA|UWWRx#r~9jWprv>St5WnI zdzb|yrA-|=KMR3Ykb|wZ90qK7RUC2*pE~S1vCK-62SbF;8Ko5VI6J))ILV_>=Gr0@ z!!vyhX|ZO~H(C7SImSl==V_1N5vJ?q56@yO?9!^5>|y}zOU^+4(P%spPH97i<;#*0 ziXy}<+IozgPP#J`rD?i=@_s*oY!P>N3~6ciebgMUnNx>FElN5uG;#AR!aMw!jfYk{ zqCRNKF19}~0-^g;Y_?kjvr>w!V9O55nUFTd96D~59EMmuuR&q`KNgA(t5%zGym;}Y z%RYq0=JxIp0CYp!@33w5H1mX|Ibr#CfKdAG4@HKwAi;jNku-s9vF_41!l!UbWp=_% zoPNz%&9iuWgdX!T7iwaURGl$IX7*4kW6=yUI5%o6p?FN(7TwYuTOP16mNIJO2VDba z;e-zb&=-!$Cr*hM!+e9e10lpO-|;n3^}g0pYpyC&6#Vk`!=rNl)CAHX{rdwES(T@{ zNL&Cl)nW8s1&`k^%tqdVh#w6yUy(I{D& z^C*v_SO_i(^%37ZxV0qw6?)?}F|F?0&#|tM30g!7)Nr$4<)Cd~uZ1VaFKa_fP6&Rg z;0fn0r(Fs*)K`g5z^XX!8d9s8a;>oT7=pMoE2`HoeSrH19pme+W1GYmh-)@0*TSYg z)l)P8RF3Q;XqvrISYT@~z|p#F+#8gGbiPJ25fRsHH7+NK^f*zw@nN4An|Qn8D*)Wv z0|v0Tpyfm<|5(Tm>jjCtEss60vLnZ<)#VFt*n9_l8d|me2izQF0eXmUjOem2%Uiqg zfy@E8b}^FjFQq!DKNy>Z`zyi)H!R{mRP5UM%z-dawlz3njPtjtQDIeZ(~q<(BcSDe zShiu}&v^vF4o9kSApGcFE5R3fcq;AT8DNOuXv{7pO_@!-ekPjpfK_U(~U zBvxy%v%UD+7Ow6zdOUotg1NZRM?C+(y+0pQF}1E~f^pYrs`5w+kf9^0@RP*a5ytSrosiErXz44*LJDGMmR;r#zjizfhW?f4ftT)8M< z)YZ~_cnEBwUIG5?cVMem{OFJDM3d2zV1VxYZx)bTSNS4NT(Bl-V~HP(Dpnah0RhatR;}teT6BUS{4wd^s;c>K1XP zKZMB&RWMY(Z_pcybZmoPFx&0dka8?X5jhEQT`g}>{I{SugVRxBruw3aeS>XKi)~0{ ze4`GN;uePeTa^Y9#T#zsc|L?3*q90U;<>Q<2KJ3^_`}-9pc~Lim zc*S^H+aZSzF1R5Ci zRqJH#7TSpvNf7OWmZR(x*54Mrme{t~AwJzH{A#;7lS$uhsnxJ|@;S}oGX9v_I@5rA z9`k>V4_-CgRsl(K)}n_lBgamE39Xh&2cr2U6>s8YjLezI1N{=AY)QyXyyCY>t~<# zWP))?0XYeQ!qDl}N}W31&&7ts3d1kO*qE-PaM=EAx`taYe;Ix@TS{yOW3K*%qaxci z1Bo@9Nku^>=(?2dCg!X++$+}j$GQn3>?STijfknM*K%%MJhGw}a|M%-+%*r##x&5< z)EfejM4SG6RQ&gszI)LnwpW|!DljC9X4WnsDAe{u@@Lg6Sxl_OJUBF^_ z!0P%aPHe=J$;b*@!uGJ8ANy7%%2hp>cIqUgEm<*b-rtBY?`@{wO+67@5pc^@h~4e8 z6bP)k6m&E#y6V-_Dk?IJIt!>Po$ZuaQn5wYa13;xF5-*^OU~c z(i^o)xi%^a9btoJ0=9kG;q*V;hvB<q(S2@z+Em<6BB0{}uNvJNkHnQv*nWl7 zgcThJ_=kED_zp}as&CAXo4iKvSY8b(TFu#4pu1C{%||OI$P(nl#cdiCS;fGXe|d*{AD6@Du4(5@C=sp|vNeT58#e@Ee8?%yz!?1LW zF4nVvcQdzuSgK*>gh7ma#ls}{eRb|BSdLRRvVg1$2Q0k;?`+oc=aNe#n9SOliAgmA z9#d47eRO4`)ilfFwM(>vzC(X49LL&a#m4ILzGLEf!}CJ^b%J84&?jzl51v(2*w5YV z)u$X|`{3uluB=~c3Szbqw_MtdwgI+6Ui zl!q%qBoIN(wO>YiUMr-m z*UV7;vbw9*0OJ@t43z97D;@T)?XsMQ@##Za`ZqFioKdizrS~{2Uk8rbGt!+VLo=*9 zc_UESLc()bJ+%;S9kH`LV8i9);cyU!luzcqi-wR@+jF$5!|fQnMiO(xCZP_KWpOZd zEXF#v8H8`64#}ZuA9%A-Ref$9;k7!++fpiBDI}dTb0Zn0W)s=a(!00%O#W@j&43yF zjI#s`3Dj)u(kzKxGB1glXRIVD-@U7zrqe^qrWz#u3Cm!mAcdIZ6ZPIGpI!l{ksP@C zuX!*eG)Gjod7m_1&X*eozZeTQ&HwdkCxZNhl7G40%D8z<@Xn7Xi+ino%%XXhs9p8D zprj^c#ZRpl5M5u`V|!&z$4DjpKw|jcSNtX_dm*vnA^G_ZQw5QRi5S0~JcPQYB;)3Y z_a=yX=gM4COM}LUd$~i3^)pGaD|nVkYN(Z)ar^Ta63p7s4UJf7YKoya-0e@+vjf$} zc{#*i1C4ITf=AqpmS#z;I((-G*oU9{y$s=>O-HBHx-zN zg?+`mf8F8)##tuy9~F}KI=G$TV0R-G5=xjr2g~`+>(e`B?z^0@NgJw z`!B3F;q8LEm!HY;-Up`or0fL-m#^6;_WAI7mxdImPYo$RByd|p)So9M!@DwQ~};d>k|{B5xmx(;PO(3wU_mP=9);wYxe5DXvkC+{;JPXA8{ZIw?b z$R^^H%>Q@i{h&EFD&V*SDV=i!yDHT7Ooaow25b5rdp*sIe3I`=rIA3wT#xfHep6Y@ z%c_HIA1WhVDAlJJ(G3k9(@`HkKX$YuGbFdpX6X{hL zpF{hPkBRf8z~RqCAE#s4R=4WFv6)k3X03yT=h}lLDd(wChY~$eCH^`HY3h9X#!`PSQN3oBMdtHKhzyd%voV zfD(@a(Gz~e;!wmF@_ld|APxmHLV*30<{$DeJ$22^bvwtv+1d_txHJWzZ()F>Kj&3} zB(>enkmTc|iwqkxChpRxy!T!)nP=4)327cQ7*>iBs#`amcAAjiVTA?+HSN@zJRw-} zuPnaGn&%(oBWU%VZ<%PP9i_#Gt-?EJZX~6MjvZwA)cL&S)*)aRAH{W@zTA#CJ&ID*P$zgK`h4=`Lru2U3}~_QNG*^!Xm+;#=I;+>D3JD0YdjE~-sT(1gUL+xnb- zFVKO?%|_(yzF?%3)`w;vd{oNYD)lt19Tx#iW_bpQ3a7~ndYqtcH1U82Ui34B*z<4% zRufvWu^UJkn$u=QpFdj1;i#g$V?&yC>g;!Q6dgeDUY|{ks8x!ODLFH?d&tpahBFYP z`)*;J^I_NFjHY>ltj>;9%fE zURiN1hvFs8@{WvxPu-JDdy1dJoM=LO@^t#PmC+nVTf**|(xWrqO@yvO@G+q}szu_L zXm!1Xc+Mxj=>O7`bTc$j1E`v`QlMbJ9*aH8bC@2XOvR?dND8zaXFcJ*X_F|E?Y;bk z-sOA$)-=6KuRM=}(}T>VI|BMe-32_;<<8-Xz1-a4RdI>;;~8S88b{$i)9v_igi*~# z_<@LlU1dX2)YYL^`ST2G{p$nz7S6eXhr<-txq-lWD%LhxznWm<>~WG@UFrS8+Tnr0 z;8;!E+l;H1{Le04sTodb_-?y(pet2{Wg9# z;2f+myOxip!W86Pid|+gQRw4re8OMlWr(uVGHYyP<*3sOFD~&t+zDUeRllP^HFJ<( z)Lr8Iod|M3B}Q!^joM-BB?v6hO#AbrB|*UQth-(}l(9{@eC0GC`=`H}s8A9a+e}g9 z6)p0S1%{2^=6uY37bPXReHhPog59c?KT_rFIb4lW4hp$>{pLj%Q!B{o<3%x5fxC<^ zmn42erL2tyc0|pj7l~%O>ESlQElgQ%kxI38f&y%*jarRZkAY#S`2OhT`Aq~E&?E** zVk{4XYzuT|g)@e$tz!=%L-q7rmCacZ`}?y84<}kFk&jTIKV>Cv4R$jVu(5^yf*#Lb)*JsPIWuu2ma|Ps&_hC* zbD#Fm@!xZF#@_qiC74X7Cy3xHWEUSe8eTkFVP{dUj?jr$nyk-0W}iaTk;nYkfJtTR z|G_t0h~U{R%sj<-(@&;<2%zvq_5kkcVZ~&8-U z$W`)N^j@)p;6mv3qIDnZN3D4YUeZ6<6 zDz8kh6=}S$Qk7yOf^+_^ZB>Y6R{X4}M|ft_ROguWuOYp&{h(i~h0=)KW>yLprBjAY zoqUZb$GM%=c_-4-J1j)?U68(QqS(d@i=Ba5QpXHV$7Jp!$ zY?p%5QytS9*5OusE3_8QjB-OAXDhHFD|XkYSj+ZY4I3J#42p0_QhF zzx)ulG)gRY(m%g2-yxWJ|5C9wbO_uV$*tekF<4xY@Sj-1aQmEYu!7wrL6Hr{x{PIzdNmUI@Q9?K&IOY(U zs#gtWN-z7ZP&c`@9e|ydPuq)fL^K-Yx+mTm3_|(T1Uc2G5_nk8hH*-?M88w{`Cqej&~<64PA$*}~nZJIgq~ zi+}eo0$&~?Ig-x6?OC$+^(s&)Qn5%GfgO^_latxZ6uuz|eXqw!-H+G%u-jNt$m;zc zRq-;&!JbBT@cKBE@jTA_j`M?NsA*vXD>KzgQc~!Hb)Tg{;u~st2@*RkXuq0dZ<7QO z!5s^SkL}ycBa7`qJk*0mJDX-tvcKv3?Mux^xe|`{4?#*G-RLYoEktHk)1DRztS zB(GwDwdj5Yw4c->Y4DT=2U)t0{#-hf@Kn~NS#;1cFe+}>mt67JPzYNk7Q_lMciifl zwe7Gd$Uwe@b#mpj?(Q(brKW0}c6@8UGllsdcNj(p~n`Qk!MD}>ukz?hLT<`#C!^yb|+K)S;{#_F4C)DMA z=_>SO&G8ETvp>(vgY0I80t9raP3X~bH&eA%zaehtleh0a-6x6-V}H;8gQiy-WoXFh zrUk>=WJUFkJ$tRG3Q4JH+HN?TlM|aC2(t$Uc|X?w)+{ZN{GhxqV!cF`{IO=*+a_cA zwgkV^@2W2IBOQF|5VBnsUSuz9V_m{s-BKV6%4K*_sWWFMqM_^xc(qb_6x@K3n?nAhsljbP3=byRc+mrA|(}>JS(61g#Rc*f=ZZR4af12F#5z;lo7F-QJ;_28JF@W>!Owt_VIUB?Y&`brm1l07_ ziKc1CIf?(!Im>Ao&9ml>nl7n+N?t=OIR(5<9%)Djo8-L4=_R5EuwQV6z2qwi%p|; z#FDjs-QcAQ(rFL|eY?@@JPz3Z+ZsF0Mo~HXv^^kFz4lm;n(E|lRSjv=*I9cLcB+C{ zTUobfci7oJ_BS<%e2n?ZEUx0joDoAZ>U^BU6Zh%0`)GDw&X5~k|bEz}d z?Be8)QaxLRhClsN$1l?IV&W>Nd}s5py5SMu@1zP+ewh^@?{-NJUbCm1vyS((ya4%4 zR6$Oh(wp$R%@?8PS7{gEORe#KgL>yw=5<;WuaWmDXPI95-S- z+Jzbl-}b0G3JL@PfyYK+d*6;o!p~jrJ|pRshW=6nDmvB1X`f*>eqVzIO{2_(cIy69 zSd6&gf~bP|iGLDi;=P11#)+wVB|k=%wKA8i#AO~x1vAxzO}@>U9iMD=O&niyo?3Rf z^QPVY9{a*Q8mjZr^YNTYLR@47g+0;EVtRrWCaJ|3 zkDI5qEU$vEKyb@r7umt=1qk`8aN@=d=67RNm#is-jpNTqsw!*+S{Z8@m+Je_^#y-7 z4~;v0c4lYgr8K5xXL8$U`Bio9n-=zLlG#CyBC{V;{SB%$z}6-RmTB*dAg`(0V{&9THHGtE?CeWhA_X`4? zJc5CHwhH9d>PnBFsqHdxVx5o6{(`&ok4qMv$seb-h8F-Quahlj$d;MHmnz^7bl??W zegrUX5Y%gd=nIEoXpff@ODFIuPz@x;HomTee^nD^oGp@(y6lY=x;LXO-}*)VbUf_& zeJhwe^WH471LOGd-prR~%$521((hN7p!E`8-}|OLCeG2#2McMwk=|x9DwRct%&jl@ zpc&m+g^kw0k&02Pw)@aWc|$H)VW%cEQx4xpa|El!C1t$3}1fCg9^*F4>dJjI}Tg-+y)4Z!Zi)MTyiO75p?m zLM-5aZHSi&8<&I^#0B&vOFpkzgtmR_M9X_jbH(Q3x+D8&u>2hy=Fs zPwU{o8qg2YgeH_7i~XHV=CZcsw$4xkL1 z#-Ho1L%7XPZfEDnbrm=_8#pGwld!IjZh<*U35`FHSN^F%Q4CG^#wN~a?FlyQsD&sdo_O-A`g365Ma&2&fq7$ zf-<^^UwXdL3s?y|dJZK1uzLfRRGCm;x2*C2fjMvh&oqo`HHzpQ=)(h`|2@>DxQ8GnYBy@E@lSJ)TZuBS33_6U$#9(DT1YZB`TL ziEiy}<-Hn2S4_&lPN|!jL+ZHnUlp^(K~UHpwE9^1bXshBpxXM;#?__^BZuIGZf%Xl z^Rf?q%Ix-B1+9KH`Y9GW=eGCyQd@_+Y?9(p`+9Trac=W;#`ZvteM^|FVYcsm-@H~v zhn)O49Qw}n;g@;HPnIcT%l2E2rLnSqLnkyLVr@QX6IO*#DN^Df%G_Io?7bv1!)#+k zW=`Y@YP+8^#lE%HatWBlVBul@sT+z5b4=Z57*g?DO+pTgA(6j~F-D7I=D@n$Qvx z_PYtr`L~TLrFX6d9eDG;A*Z+}1%R&V>In(}(6|KU3YAjE=aS%ZfM&eGs9(O_H(BNXw@gZ?m*?+(*zSC$GD)`HPasA=R z_TW~PFbYSgycfktK#`?gqC zEx;W|tflrZo~3<0L+^>mSYa^4>7S#-1Fju`uzgk0Fq2G?E|s`P`_!h2b@PS$3XElf zx@!T38&_9O20Y65FM^AQhv|>-gw+AoqeYNGt+1b9rIAZLnxO=ubgFUFKsfwNCl-hW ztUxk%V&u0ms9mtQsAcw^QQCFu#fVAR=Wm9poh=2wM%W?#UkE}Hd!pvovLEL=lZlPok-@ni`y7 zbG}mVxVSm1C?E9MLL|W}9+tr-pGs;%s%l)gw2tYPjXAwsC37w5qgQ!_`hu%*bK}0d z#u%s%h~`J=(%qv-I)GtD#iNO<05i#%_~KHnD~50%Pk{{;-& zVvVMqI;{v2Z!Dg4*43ZBc&YXQyDNpm&qc|l#nUMAkBZ6BUeq(!ZHVlbH#c9_r5$c0 zd1uKtA$X(R2hlV^3E>-M4&1u2C(w}CgkgtF0rx$1;nIVxffv%Ck_kAkyhx$RUKp8} z(0kldezLx$!oOt8=^JHe(dzH<(|n#y55pq<-o#QMIabXe4;z@lgNhW^wqo&8rM8c+ zkdQnKraTmuKEwbE%Hy)JDyCyALHFCjq_2p@X0XRjOnH%hWTMAfC_9_^gek#t>xiXY zy-Ro>a+2YIvb0ESW%BFjkRRlPv%;|JAwWunBZzll(|N0zWk``oDm$Lf*i+(D$o- zO%Sk*LSFf2p|-wM=y7qiWZU1~GFGSn$7ipZZa|R@3lDHim8Z=I>l6^PbZ5GzSLbocR`nl>TnH~yW&V@7CiX&Nrx+rUVNzw_=oLA&tCyB``rQMM85E*&wjPF7{OUjknA`qJDoKb&Pk!0w zY`(hE132m#Uln|;#Pn&;VTn#F=j^w_U%3AL9+D-{|AMN?#NH}?G_SO154Ll!Sy!HZ z$vE|g3=QxJ8trAP@%8@c^xEmeLZ*M{&iCEw9GUJSRm1r6eeEeKCfQj2uMo!k&05HB z7CGVuWq#_W&^oAnV>XP&z3Mn|7Fy2Hm}4%{HV{Kuw#0{3Cs-c4QXr|lw~aI{O8!A~ z@4QN6@m=pjR;B$PHAtDHkMxlU6U&4vG^ODwt%Sa(OQZcIKux7Fw>5EuMEc3}WmHC{ zK*&aKv~98FcE>bB*A9;-ru4SyZ=m0*;&{c3u7*pFtdDS$At3+~k$G*txvG=YJ=o54{A835D0rMw3##{n!Kq? zv3E^V+tpDo@vffqd4e&bJHa@yNbs7ucg>QDt$p3IQY5WxVC%tn4SiR*7d=(FHE9f9 zv8&yFOW1fn;LfhFr5>+bW6IKHt8ZK*Q=(6;w={!KZ2d1COwACZ9JzF2J}+Ndz6fK4 z-6J$!GVHTtE&i}2Rm(9@y@6ERwcv+2)d}L9k*yqt^$)+BXvekGJF@N1WLU|T<%%vXz-1A#z7P(4*T-`vx7*1lRn92cXV z14T6I?((vZtPB!ypXxY7Rd%2$2pBCR>3S2}mjEKXL6I@r zRsTw3zJ9bwBom!4TK$7Rt|brL;Lk^z_2w}h54(wCn^5=O3j7$PPq>DZZX{c&uw)jY z`nw36l7Mb8i&3n89lX~|V?=%WRZC?UZjz=+#2DTN`=*WGc0aqYtFvMjHJl~a7nRytE1 z#l(M(SYKs$YjC8twIvvNv7+8~YAxlDF(FSY6+8Xz2BbDqrr!Ak8&EjqH7H&)xNhYvSI+4(P0bUHr>N1ZzW;Ra;`*-xndK}@kf;onfMy6_`^yyqIRk{SMU85;Tm^N51; z@&|cOq3`!!#u*w!arZy2Uki|VBI}YW{^HT0&$uEi=Xd5^YO!jvYSpwx`1S_Q>kA7A z7m!`bBsGNOGyYW*Y&SQ3cqeFD6Q67-%{poj$6wlDzv^#B9QXb7mbWbsU@uYj|Cl?c zAW@=lJI|c4ZQHhO+qP}nwr$(CZJn`a&e$`VB$c|iDtWkhNL3!XYt`;u)x95jH~zK1 zCD~6J(f4-Z@-VXW`*Pp+Cd%l_iGET}4?DXgrO9Uz*K`1nYW&#zW%UuF{m=oQ5GaA} zW17#*Z&Kc$;ztlvvUf2x zx}Y%?$}mi>iyBZap&^&u$eE2qR{!wq3UdxH7+N%8rOP~c&w6!OxbN(G|{Cf0V9LJP~JmL;f!+iW* zwFq+e=lOZ|8Qt1k@=EejLlWLs$_)sM?gSF5pSMzGr?AxaKPG` zb8-#@;^a+u82FFLJ!F$`n#{C=xKrc?vRC=F_^QA|Awtgy1iZyIbS=GL0fLUtD7r#zL2Y8d(5Lux3@E=?(>}pC%Ndjgub>~=gt!4R)KcWK zt7kXwdjRql@)wm$Z{r@qS&sP^4^naWw?L<3`=SOQiy%5-0OlP_q*5zFt2RZpMpK&-N19hQ0MU~*Um^KAz!=GO40g_; z@{@Vu+$c8g%W`}K+y@Xm-gv3om~jzK{ZJ*)<}FAWDIb$}`iio4 zpagd}Rn7`I_)?~}d(@dylp))cVN@GJS zaUtMwgbD6yv)oDBdc`=N*CYu7lMIcByBn~ihM%WL|Mut5C$$oP1owNt0W%Hu_(2u+ zGhD7q!H|k3otVSkw0{1KeBV-DpexxXMoUI&G`5&8rqVp4o48u%WFyfwgS^)M^mr-( zO^Ku$e_|{%4*L9*#fun&b$vfzrI?+WPxHFL_0eGT-}eU1F>5*|*Hqt^2U60SV@pfi zubky<6@`a0&gG*pm3nRIrv#5CeTQGV2ghI1WLkj@2~h$$tqTM-CJAR<#x!^hoC?=? zV%f1`NeUJuRWMgBL_NXIdm~&)`Is`k#dDdk_r&ke2?}ia<(AkOG{6F$e2z&jAk+LW zH5?fET?8jey>m++)+5g7Mb^uE;sbw*cd!#<3r@Bo4yWJ(lR`W^hsA~c?rqclc^NSf z+!KiW&czvMOAG5i7;#HYzOofY&hwCJ`wMa3?tc>hd1xZr{j$iG?q(+^&AF`~!>G{P z=|gW>ZgPyw8)p8n#(Xb?V__E8DTX?n5R1<&kwvgqes9k+z+k^kneGCkeF>bRyHcEl z!Ov>tP=wq7o;NtE= zBH_k3Iu+_oqDX5o*?zWn;Zrxp1)3co< zpsAQq)4|0nLR_O!qvY!oJiUv(57xu3Crb|d%(*byTl;~yfhH(UJ|aj^9&9?L6Df-g zgU5G{S{75EX^S8aYHF^7F%!;Xjv2xKwPrauZ&HkSZ(eP1tF5B{YWW+eQ)BI6T%(~I z98<5hA`rk1a`!qK!ftxiF7!@XZhnQn-|puuy$|Y6nHghV*#10az|H{p6UWPT`<98y zB+#YgnOc-}%)XQn611dlnt^eMj66K6Zb^&f0J^wF5@Qt0T6ZgO0}dW2tmAoj;q1&I zO~*mpa!8*54QX9E8WsrYHU36E^OWCJ+>9`bm9H$~V5`VIxDU4NeM&M7H=Ka_LPB_N zEQ90(U%Plo;#v(o61z;Lf6FDe(OMM1tevDyrO=h|hcpcjF_@{sOxs@GygL!*T z%Lp_NX#z%r+JjeC7Fec(f>A2YBav}p9}~CE!*ip}V<67<7OdASR16T!CnURMTL`S^8`MR}6jP#B6GK!tek^>Za0aB) z&G3P_fv|Lcq73Dr$v^%!zIhT1HXVj`_%Nvg?XkCxrWDb0>&zkCy<7QeVZF*0O=Tpw zb4HhL2R~_F{CySsR%-Zd{JsJp&FQ)5{st!-$eAQz(RPkM%CGPSN}~@_?@*{%Qygoj zss4(rk)1cHB<~e75^gSL6ySg~wo08t8=eebwUxQ0ffaGMa8?;_{_S1f)BQMijyJAmD8#4_a2)ZBhG>rmt>_YkUQy_1$ zStZzCB<3{((k0Co!_4Zt#W)V^iv>x(@k$l1Kr{24Og?vLxReWacVcW@LqC^sj)&~$ z{@4>>Ffz8|>A=ly@n-rvh71$e7jB&09-6 zosk$HQ!b&dxeuJrw9`EXJNN}`q}}MIi)bj;wt+S{TW86T(M8JCb~MP6NP%gKVl_pW z=_n7Py@#SJi;B9mwIOjCToq&Qo-`7@@(tSZ0{nT3uBEWSvq<~asgp4cLp2*rsaxei zs3!~dWz&nSdgMjnfow8)wVT`ClhA^dREopbN%P9k$O$NPQ}M!4pErocg!BNk%}a>_ z5II8C&CxVO>kZfG2ow#%a1&IgWyp|;$>YT~6eO|1IHg(7-PpNnw*qiuV(6{;5k_9adh#KZ+&xYhXZjV@U(1DYpBKv2#j&h8C3laYKq%~f$_rCIse zkXR`t>ZFF+Du=^vQpH$4a-nIdWK;H((XWZ`^vlj=C_+`0&L=?sNz;jDi|+Zuzl!n| zEb}n5TZ`$aZ|!Js!V{N2(9`d<^&8pugh^={10xxa7V}?TY63K8>(fyzeP-nYxWq=J zna{piR)1XS3TIo)pce@|f_=rC4n329<(;jaQ~-Mg3Hsj-~qsYg1EP1fV;?AnVKiBR0mIN z642!u5J7DYWU~qw(tD_lM4bcOh+h}fCpb~ZrAWv)o5yT># zm7tNLmPB3$t6;Jw)rFmB-|L&G~aELRzC9rV|c9BTyQ zyNbQI*ptE`FqvwEy+4=xMK~U*0MJof*TEch`M78N+!rU=1^fe9{-m2q8VeF*=$8Ln zQ)4(4Z8dR4TBN2*ZVKbPL_uz(olI>}*Ok6MAN;w9)S!o!xr8A-sf2P}qX@LXqLDKv zjHB_+0x_e?OA;zC+SkWG{ijDgI}Bs@6~QKRh?t#l%PqC(Bba6G6RkurDcWs~bqozO zUjeH-z3o$J+-AGD^&0~4J+dKjgX^iZ57IR)h9-@8{i^@$C_bgQT4zq3o&yWv4oft( z3r#pzpCj+cI5Q^(ss^l&M|qFlHTkC5*-O;&b~ChZIdx|e)m|Q8SoN{jN)0a1xq^h~ z2nh@+f(kvqBl%vE9IKJfuL2xb`mN(VmZeR0me>>i?NTVsc`*@kr4&^oJ6Vcr`TcP5 zD3V`setz%fM+wXR))*iLnElHxW>qeC5WJ=B?j6l$btkQsiw@N1qA%iq!FP^_WAG1& z-px1GVB#Goo3nE@)LoywpoxDe3&eYwqCI?Iboyl-ku828q+bfB+ zGC?56n&EWEYdCaowj{{iJ)X-|af+m#^5jOMc6p&dn-qu+yHxzV27=^+yMUbj!sN-1Dnod%z4yq6qdg zyh!`-XNj(1Z{tZ84-+CSUD(vr{(Ym1$6H5>a`lVb;7sP_UiI4uVTF6!nN)|KP>^$; zUZd!Yp5}WYs0|OfOA&(KFqh!Fmny35=UatbSe7@!rIXOK&&*{L2@VgbE76s$J=XL^ zSP#4F<&OGo?iWwaMO}ptf873ltd?iHk@-WjdmZic&>kn;#X>)ptav-pyU7j&O#{qp zQUV?o=)KvN)=*yVr}`I8+OruLmbe^C-S93L;etTomPia9SEfddX%v#fSKqq-6x&E#yA9ecKyY+ux~i9^8` z`L;4VdUHD+%RSW7o(tMj`1*I{{!)1twTJMtZ0!2Bqz_Ic@1N=Z{7(e$V^0M{i=zk5{{oPgPRFJ4;c}6TI6b{x7|wR6M@+_M4^!pb3M0uT ztZXR;i8V$F0O6mAIV-xbr<;&fwWu8k*^7MCkS;i!rK)fmvJ4nc*FC!>4|1!ZD%1 zLFt+V+x60rXM=nDR{(^LOudZQpM;QFzls!_S}I8?i7h_V zNGzZ>)&*Hx<6~%yjsCMl!}x8rFCfr12mkFrZ!kWJ+Sm|cZB2ls^`B%r6XySFZTCR> zU-Cb7_K4N zo*EQaV~`NeN!~Y!Bd2^)BFd8Jq|%3f7mjixq>8^eqO9$Wssjb+o5lmmks1+KSvDdY z{;mh4VUJa*Wl*h7+zD@1POq%@QN#2R9uNkY*Hu6 zr{suCkX=<*A*6o0?keu+N~nKiue6IoCJc*aAX%=O{Aak#A$t`-u1`3Droz2IRq3p) zoNy|Qq{8;->+>|zAt$@+&sm*-nIbu)wEB66qEJv_@;H$>Q}Cw`(drnOj;V96SC)ey z6Jx{DpD`*8>8`-LbaJj%Np>kc<0#gy!B0{f^!T*$^Mdt*OxFKiFh#Bw$Zz)({?u61 zwITsFk8#N)`A)*94=&?p2PtevC70V$h*2KA^8*6S86Uw{$nmNo*bTD?DM$H+hUq*v z0gAF?Z}7^lE+c;3rd7^)!a_V>qWZW&(a?WUw8H|V;xF4MLMkUvD{e)h1YCoQF_7py~Y0xQ*mqeZ1% z@`@Zlx8<9ooMjQbw<>2O4IXepSe0|#7oW8UBx%-hy@T;f_m$BTw;g-sPA_LS}u_HPzb`({@9q(DxL(_u6Z zuQUMm+ld_TS}FhvP)+F4Uq_cHNS&&Wkcwe1otS)U6@-s*F{FA+%`vPVRq|Pl?-x-T| zL+TC%b!C$U-Rk-UD;~qe&{j*QHFIJTB|W10rDgs=(*h`U3Y)xLkeH&%6PB1Q$saol zuvz`JWB8+QlGk#XHSe2lA9Z6>)!~KVG`E11cPNg|(=NHV&Si>1>I6%QGgGZ zgy*jqR`YJTE!_cSQL6M1%dqgTD9?V%2b`&0R)#hFY({F6t@aT{ETdxe#ys4jvE+6v zGi%h+>}q(>sVLg9sxuU9v`8Woup{#7vT-qMM}BTD){M=`%A#TwHxm)w7Hv zanNRu7qQ0!@mX?0iP+!i$o+!2vsdItzJa9s3(7An>C%*^Zl&HEklN8J{Ks_VYLnzq z$|3ak)Uxn{)!k>UC?S5Cg{xO+3nhHtC3zxvRkVsX*aNe5qF|oY?;ng;8tawQtAi{b z?dH=TU*tz4OEsYRQ{eZ);|7<|hP|%4b$a)&U6>#d#6GtngQ91UJ^H+OsZ{H69?Obq z>;@8EHU!V=FEQnF&o=cbv4Uyb1#6mG;2d+V7R}H}as+)*&WYq@W&PpA{LN7U70PS2 zsSAc;o23P!W!_7xGVF|J{FLCk79}QQE5gb?9YuVtBMLjOPL}d)ar47eP?-s*mGs^U z566n`gl$UT174^=`F%-(>}J$}eyg@IPd`ae`Rgb3&U2Prc|sk8WKxkF?s>wkvYpv` zK}|9kTCVbq^%Kk^T+3))pQSMzNw5&p7o!-_Rm=y6;5j|=P{&Zbq}H9hV`%lie5->` zZ!@;w$D8f(LdU*R(sGN6dRmwo%f3CbT0yKb{OJLO3RbWf2>%MwBF?g0-X&%3)0wHO zN=F{S+sY1Y)2SoiPVk=*Wf{^K-QkPtO_~3ta<_IiSH4mw`ZS72S(s&ikas#Wf{tN?T zx6w{3#^Mpyn}jgJvw9a(@`&zNGg|7e-?aYhny-u>bd)Oiw7zTdGBNoAsJv@jl{3e7 zE12`%hB?BFy4)B-+Lp(}J5a&>6{MT%$<-js=6z$_!9lhwBV)6~i%@5`e!_28X{Zr3 zZCMtp`Eph~so8a8wa4~5le6}fuI8?r6LILxD3D6B@$7|a46-hNs7{TpDCR62lyE3> z{$tM|nyW(b3MrI}R{s;?5c+PeP8&z%tZPNxib5@0qh$itNU;IhfGVs=fjYe39%u!9 z!~IP4KqAC@@`Y*k5_W&J#c9VwhI1Ua`pEg!BM?PD1aY&Vv8Z+7hiJtWk=R`8*@$VAc;jaY+Ll6P|`pVDja$hhLQpEZ@csjYqexIzdC zR@5Hi`&$YY)g}q3kev%6&Y1eRci$=h@mlEyQo@iPO1GqHeX*Du72T4$+A+jQTg_GM zOQtXViEr#6t&XbGoYVBYd(CSPz6d6ObdmFz|D&3~hyxrkM zSSO=vZ0Vp--y7{*+KA}5$9e3kTrED{;6YRDlzfU!%x(ShN~k({?uN3xNp(MI+wnOt zQrp0b^xN6_AxWe8WyzNMThlS><9)PC7vPInwQ;= zoPU^_M`0D$v`!I`aD#TV3X~s@wZT1dzKK>L=lCq@)sD=V&ZB9B&h=a;8{T4K3vwQg z-U|bIYRU?Xc+;AyNv{5wGr`l3`C0GU3*1W0*F_}Y$Qf7ciO+;i;VJcn*pRRFyi;;% z*K_QMLF7U88z~XU$bR-h1uclZ(@Nd(sg?!C!Ajvwt8cEfPc|t^uycXIl_<9y#gw$A zGlnBW_4yZYQBO|vyDj-_%CPN^k$$Zwj?sTO-wz&=KGUH711Z_59Cu~Q^`ULFQ_{T7 z5`8Ij9MK-%ⅈ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

H3q$6d$TGpl@W;yZN1MN}CZ|*V8MNo-&P0 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 literal 0 HcmV?d00001 diff --git a/third_party/source-release/npm/web-push-3.6.7.tgz b/third_party/source-release/npm/web-push-3.6.7.tgz new file mode 100644 index 0000000000000000000000000000000000000000..862f674dad37a7462b0c8a00a4281dacac284fbe GIT binary patch literal 13481 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 X+t2Oi_H+BW$>;wA<^9yU0N?-sxKVT5 literal 0 HcmV?d00001 diff --git a/third_party/source-release/npm/yallist-5.0.0.tgz b/third_party/source-release/npm/yallist-5.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d9549ce8efa1fb5eec1eea1389c5ece5f4552376 GIT binary patch literal 9821 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 literal 0 HcmV?d00001 From 9f81845fda6d087a4c43f75224b18301a0425f9a Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Sat, 9 May 2026 09:44:03 -0700 Subject: [PATCH 28/30] docs: document OpenClaw plugin replay boundaries Signed-off-by: mnajafian-nv --- integrations/openclaw/index.ts | 6 ++ integrations/openclaw/scripts/build-test.mjs | 6 ++ integrations/openclaw/scripts/build.mjs | 6 ++ .../openclaw/scripts/check-pack-payload.mjs | 12 +++ .../src/__tests__/atif-capture.test.ts | 3 + .../openclaw/src/__tests__/config.test.ts | 3 + .../src/__tests__/failure-model.test.ts | 3 + .../openclaw/src/__tests__/gateway-status.ts | 3 + .../src/__tests__/hooks-backend.test.ts | 3 + .../openclaw/src/__tests__/live-smoke.test.ts | 3 + .../openclaw/src/__tests__/llm-replay.test.ts | 3 + .../openclaw/src/__tests__/telemetry.test.ts | 3 + .../src/__tests__/tool-replay.test.ts | 3 + integrations/openclaw/src/atif-capture.ts | 13 +++ integrations/openclaw/src/config.ts | 20 +++++ integrations/openclaw/src/health.ts | 10 +++ .../openclaw/src/hook-replay/correlation.ts | 13 +++ integrations/openclaw/src/hook-replay/llm.ts | 82 +++++++++++++++++++ .../openclaw/src/hook-replay/marks.ts | 16 ++++ .../openclaw/src/hook-replay/session.ts | 25 ++++++ integrations/openclaw/src/hook-replay/tool.ts | 9 ++ integrations/openclaw/src/hooks-backend.ts | 40 +++++++++ integrations/openclaw/src/modules.ts | 7 ++ .../openclaw/src/openclaw-hook-types.ts | 9 +- integrations/openclaw/src/runtime-state.ts | 30 +++++++ integrations/openclaw/src/telemetry.ts | 10 +++ integrations/openclaw/src/types.ts | 6 ++ 27 files changed, 345 insertions(+), 2 deletions(-) diff --git a/integrations/openclaw/index.ts b/integrations/openclaw/index.ts index ded0cacc..380cef70 100644 --- a/integrations/openclaw/index.ts +++ b/integrations/openclaw/index.ts @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * OpenClaw plugin entry point. + * + * This file should stay small: it declares the public plugin metadata and hands + * registration to the runtime-state module, where lifecycle and hook wiring live. + */ import { definePluginEntry, type OpenClawPluginApi, diff --git a/integrations/openclaw/scripts/build-test.mjs b/integrations/openclaw/scripts/build-test.mjs index 6fde0568..f247966b 100644 --- a/integrations/openclaw/scripts/build-test.mjs +++ b/integrations/openclaw/scripts/build-test.mjs @@ -3,6 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ +/* + * Test build helper for the OpenClaw integration package. + * + * Tests compile to .test-dist so generated test artifacts stay out of the + * installable package and production dist directory. + */ import { spawnSync } from "node:child_process"; import { rmSync } from "node:fs"; import { createRequire } from "node:module"; diff --git a/integrations/openclaw/scripts/build.mjs b/integrations/openclaw/scripts/build.mjs index 85699482..eaf17237 100644 --- a/integrations/openclaw/scripts/build.mjs +++ b/integrations/openclaw/scripts/build.mjs @@ -3,6 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ +/* + * Production build helper for the OpenClaw integration package. + * + * The script removes stale output and invokes the workspace TypeScript compiler + * directly so npm lifecycle behavior stays predictable in CI and local builds. + */ import { spawnSync } from "node:child_process"; import { rmSync } from "node:fs"; import { createRequire } from "node:module"; diff --git a/integrations/openclaw/scripts/check-pack-payload.mjs b/integrations/openclaw/scripts/check-pack-payload.mjs index 62e2fc01..0e56d053 100644 --- a/integrations/openclaw/scripts/check-pack-payload.mjs +++ b/integrations/openclaw/scripts/check-pack-payload.mjs @@ -3,6 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ +/* + * Package payload validation for the OpenClaw integration. + * + * This script guards the npm package boundary: production source files, + * generated dist files, and OpenClaw manifest entries must be packed, while + * tests, maps, and test build output must stay out of the package. + */ import { spawnSync } from "node:child_process"; import { readdirSync, readFileSync, statSync } from "node:fs"; import path from "node:path"; @@ -12,12 +19,14 @@ const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), " const npm = process.platform === "win32" ? "npm.cmd" : "npm"; const npmExecPath = process.env.npm_execpath; +/** Fail the pack check with a precise validation message. */ function assert(condition, message) { if (!condition) { throw new Error(message); } } +/** Run a child command from the package root and surface stderr on failure. */ function run(command, args, options = {}) { const result = spawnSync(command, args, { cwd: packageRoot, @@ -34,6 +43,7 @@ function run(command, args, options = {}) { return result; } +/** Run npm through the active npm CLI when available, preserving workspace behavior. */ function runNpm(args, options = {}) { if (npmExecPath) { return run(process.execPath, [npmExecPath, ...args], options); @@ -44,10 +54,12 @@ function runNpm(args, options = {}) { }); } +/** Normalize npm pack paths to POSIX style without a leading ./ prefix. */ function normalizePackagePath(value) { return value.replace(/^\.\//, "").replaceAll("\\", "/"); } +/** Recursively list files below a package-local directory. */ function walkFiles(root, prefix = "") { const absoluteRoot = path.join(packageRoot, root, prefix); const output = []; diff --git a/integrations/openclaw/src/__tests__/atif-capture.test.ts b/integrations/openclaw/src/__tests__/atif-capture.test.ts index d9f15495..442a9654 100644 --- a/integrations/openclaw/src/__tests__/atif-capture.test.ts +++ b/integrations/openclaw/src/__tests__/atif-capture.test.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * ATIF capture/export tests for registration, failure handling, and cleanup. + */ import assert from "node:assert/strict"; import * as fs from "node:fs/promises"; import * as path from "node:path"; diff --git a/integrations/openclaw/src/__tests__/config.test.ts b/integrations/openclaw/src/__tests__/config.test.ts index 19156212..5a395fc4 100644 --- a/integrations/openclaw/src/__tests__/config.test.ts +++ b/integrations/openclaw/src/__tests__/config.test.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Plugin config and registration tests for the OpenClaw integration shell. + */ import assert from "node:assert/strict"; import { readdirSync, readFileSync } from "node:fs"; import { describe, it } from "node:test"; diff --git a/integrations/openclaw/src/__tests__/failure-model.test.ts b/integrations/openclaw/src/__tests__/failure-model.test.ts index 08b74d7a..8107601c 100644 --- a/integrations/openclaw/src/__tests__/failure-model.test.ts +++ b/integrations/openclaw/src/__tests__/failure-model.test.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Failure-model tests that ensure hook replay fails open and records diagnostics. + */ import assert from "node:assert/strict"; import { describe, it } from "node:test"; diff --git a/integrations/openclaw/src/__tests__/gateway-status.ts b/integrations/openclaw/src/__tests__/gateway-status.ts index 79c38c8b..2cc71b4e 100644 --- a/integrations/openclaw/src/__tests__/gateway-status.ts +++ b/integrations/openclaw/src/__tests__/gateway-status.ts @@ -3,6 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +/** + * Test helper for querying the OpenClaw gateway status endpoint in live smoke runs. + */ import assert from "node:assert/strict"; import type { OpenClawPluginApi } from "openclaw/plugin-sdk/plugin-entry"; diff --git a/integrations/openclaw/src/__tests__/hooks-backend.test.ts b/integrations/openclaw/src/__tests__/hooks-backend.test.ts index faba16a8..4eff5421 100644 --- a/integrations/openclaw/src/__tests__/hooks-backend.test.ts +++ b/integrations/openclaw/src/__tests__/hooks-backend.test.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * HookReplayBackend tests covering session lifecycle, aliases, marks, and cleanup. + */ import assert from "node:assert/strict"; import * as fs from "node:fs/promises"; import * as os from "node:os"; diff --git a/integrations/openclaw/src/__tests__/live-smoke.test.ts b/integrations/openclaw/src/__tests__/live-smoke.test.ts index 9a3bf367..6000253e 100644 --- a/integrations/openclaw/src/__tests__/live-smoke.test.ts +++ b/integrations/openclaw/src/__tests__/live-smoke.test.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Opt-in live smoke test for exercising the real OpenClaw plugin runtime. + */ import assert from "node:assert/strict"; import * as fs from "node:fs/promises"; import * as os from "node:os"; diff --git a/integrations/openclaw/src/__tests__/llm-replay.test.ts b/integrations/openclaw/src/__tests__/llm-replay.test.ts index 93eab25d..7619c04c 100644 --- a/integrations/openclaw/src/__tests__/llm-replay.test.ts +++ b/integrations/openclaw/src/__tests__/llm-replay.test.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * LLM replay tests for hook correlation, token accounting, capture policy, and diagnostics. + */ import assert from "node:assert/strict"; import { describe, it } from "node:test"; diff --git a/integrations/openclaw/src/__tests__/telemetry.test.ts b/integrations/openclaw/src/__tests__/telemetry.test.ts index 673324b8..2115fc8f 100644 --- a/integrations/openclaw/src/__tests__/telemetry.test.ts +++ b/integrations/openclaw/src/__tests__/telemetry.test.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Telemetry subscriber shutdown tests for deregister/flush/shutdown failure paths. + */ import assert from "node:assert/strict"; import { describe, it } from "node:test"; diff --git a/integrations/openclaw/src/__tests__/tool-replay.test.ts b/integrations/openclaw/src/__tests__/tool-replay.test.ts index d5a12b7d..61d4fd3a 100644 --- a/integrations/openclaw/src/__tests__/tool-replay.test.ts +++ b/integrations/openclaw/src/__tests__/tool-replay.test.ts @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Tool replay tests for stripped payloads, trusted payload capture, and blocked tools. + */ import assert from "node:assert/strict"; import { describe, it } from "node:test"; diff --git a/integrations/openclaw/src/atif-capture.ts b/integrations/openclaw/src/atif-capture.ts index 4dd0db1b..57910a1b 100644 --- a/integrations/openclaw/src/atif-capture.ts +++ b/integrations/openclaw/src/atif-capture.ts @@ -1,11 +1,19 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Per-session ATIF capture and export helpers. + * + * Hook replay emits spans through the shared NeMo Flow runtime. These helpers + * scope that emission to a session-local ATIF exporter, then write the final JSON + * artifact during session cleanup without letting exporter failures break replay. + */ import * as fs from "node:fs/promises"; import * as path from "node:path"; import type { SessionManager, SessionState } from "./hook-replay/session.js"; +/** Construct the session-local ATIF exporter if ATIF output is enabled. */ export function createAtifExporter(manager: SessionManager, session: SessionState): void { if (!manager.config.atif.enabled || session.atif) { return; @@ -32,6 +40,7 @@ export function createAtifExporter(manager: SessionManager, session: SessionStat } } +/** Run one replay emission while the session's ATIF exporter is registered. */ export function withAtifCapture( manager: SessionManager, session: SessionState, @@ -96,6 +105,7 @@ export function withAtifCapture( } } +/** Write the captured ATIF JSON for a session and clear exporter state. */ export async function exportAtifJson(manager: SessionManager, session: SessionState): Promise { if (!session.atif) { return; @@ -125,15 +135,18 @@ export async function exportAtifJson(manager: SessionManager, session: SessionSt } } +/** Convert arbitrary OpenClaw session ids into safe, deterministic filenames. */ export function makeSafeSessionId(sessionId: string): string { const encoded = Buffer.from(sessionId, "utf8").toString("base64url"); return encoded.length > 0 ? encoded : "empty-session-id"; } +/** Convert thrown values into stable log strings. */ function toMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); } +/** Clear exporter buffers while marking ATIF degraded if cleanup fails. */ function clearAtifExporter( manager: SessionManager, session: SessionState, diff --git a/integrations/openclaw/src/config.ts b/integrations/openclaw/src/config.ts index 23572c0d..768e0b4b 100644 --- a/integrations/openclaw/src/config.ts +++ b/integrations/openclaw/src/config.ts @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * User-facing configuration parsing for the OpenClaw plugin. + * + * Keep defaults and validation here so runtime code can consume one normalized + * config shape and avoid repeating defensive checks around optional plugin JSON. + */ import type { OpenClawPluginConfigSchema } from "openclaw/plugin-sdk/plugin-entry"; import manifest from "../openclaw.plugin.json" with { type: "json" }; @@ -116,6 +122,7 @@ export const nemoFlowConfigSchema = { jsonSchema: NEMO_FLOW_OPENCLAW_JSON_SCHEMA, } satisfies OpenClawPluginConfigSchema; +/** Parse OpenClaw plugin JSON into the normalized hook backend config. */ export function parseConfig(value: unknown): NemoFlowHookBackendConfig { const raw = asRecord(value, "config", true); const backend = optionalString(raw.backend, "backend") ?? DEFAULT_CONFIG.backend; @@ -183,6 +190,7 @@ export function parseConfig(value: unknown): NemoFlowHookBackendConfig { }; } +/** Normalize the optional NeMo Flow plugin-host config embedded in OpenClaw config. */ function parsePluginHostConfig(value: unknown): NemoFlowPluginHostConfig { if (value === undefined) { return clonePluginHostConfig(DEFAULT_PLUGIN_HOST_CONFIG); @@ -202,6 +210,7 @@ function parsePluginHostConfig(value: unknown): NemoFlowPluginHostConfig { }; } +/** Merge one telemetry sink block with defaults and validate its primitive fields. */ function parseTelemetrySinkConfig( raw: Record, defaults: TelemetrySinkConfig, @@ -236,6 +245,7 @@ function parseTelemetrySinkConfig( }; } +/** Build the disabled-by-default telemetry sink config used by both exporters. */ function defaultTelemetrySinkConfig(instrumentationScope: string): TelemetrySinkConfig { return { enabled: false, @@ -248,6 +258,7 @@ function defaultTelemetrySinkConfig(instrumentationScope: string): TelemetrySink }; } +/** Clone the mutable plugin-host component list before putting it in runtime state. */ function clonePluginHostConfig(config: NemoFlowPluginHostConfig): NemoFlowPluginHostConfig { return { ...config, @@ -255,6 +266,7 @@ function clonePluginHostConfig(config: NemoFlowPluginHostConfig): NemoFlowPlugin }; } +/** Require an object config section, optionally treating undefined as an empty object. */ function asRecord(value: unknown, path: string, optional: boolean): Record { if (value === undefined && optional) { return {}; @@ -265,6 +277,7 @@ function asRecord(value: unknown, path: string, optional: boolean): Record( key: K, value: string | undefined, @@ -344,6 +363,7 @@ function definedStringProperty( return value === undefined ? {} : { [key]: value } as Record; } +/** Return a property object only when a record value is present. */ function definedRecordProperty( key: K, value: Record | undefined, diff --git a/integrations/openclaw/src/health.ts b/integrations/openclaw/src/health.ts index 2a691639..a9d536e3 100644 --- a/integrations/openclaw/src/health.ts +++ b/integrations/openclaw/src/health.ts @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Health snapshot construction for the plugin gateway status method. + * + * Runtime state owns status transitions; this file turns that state into a + * stable, JSON-friendly status payload for operators and tests. + */ import type { NemoFlowHookBackendConfig } from "./config.js"; import type { HookReplayBackendState, SessionState } from "./hook-replay/session.js"; @@ -29,6 +35,7 @@ export type NemoFlowHealthSnapshot = { lastError?: string; }; +/** Build a complete health payload from runtime status, outputs, and counters. */ export function createHealthSnapshot(params: { status: HookReplayBackendStatus; initializedPluginHost: boolean; @@ -57,6 +64,7 @@ export function createHealthSnapshot(params: { }; } +/** Report ATIF degradation from config, global output state, or active sessions. */ function atifOutputHealth( config: NemoFlowHookBackendConfig, degradedOutputs: ReadonlySet<"atif" | "otel" | "openInference">, @@ -76,6 +84,7 @@ function atifOutputHealth( return "enabled"; } +/** Report telemetry sink health using the sink's enabled and degraded states. */ function telemetryOutputHealth(enabled: boolean, degraded: boolean): OutputHealthState { if (!enabled) { return "disabled"; @@ -83,6 +92,7 @@ function telemetryOutputHealth(enabled: boolean, degraded: boolean): OutputHealt return degraded ? "degraded" : "enabled"; } +/** Provide zero counters before hook replay has initialized. */ function emptyCounters(): HookReplayBackendState["counters"] { return { llmSpansReplayed: 0, diff --git a/integrations/openclaw/src/hook-replay/correlation.ts b/integrations/openclaw/src/hook-replay/correlation.ts index 81166395..a7256ff1 100644 --- a/integrations/openclaw/src/hook-replay/correlation.ts +++ b/integrations/openclaw/src/hook-replay/correlation.ts @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Correlation-key and timestamp utilities for hook replay. + * + * OpenClaw emits request, response, timing, and tool events separately. These + * helpers keep key construction consistent across the replay modules. + */ export type LlmKeyInput = { sessionId?: string | undefined; runId?: string | undefined; @@ -19,14 +25,17 @@ export type TimestampedRecord = { endedAtMs?: number | undefined; }; +/** Serialize correlation tuple parts while preserving empty or missing fields as null. */ export function tupleKey(parts: unknown[]): string { return JSON.stringify(parts.map((part) => (typeof part === "string" && part.length > 0 ? part : null))); } +/** Build the best available key for pairing public llm_input and llm_output hooks. */ export function llmKey(input: LlmKeyInput): string { return tupleKey([input.sessionId, input.runId, input.provider, input.model]); } +/** Build the stronger key for model timing events that include a provider call id. */ export function modelTimingKey(input: ModelTimingKeyInput): string { return tupleKey([input.runId, input.callId]); } @@ -34,6 +43,7 @@ export function modelTimingKey(input: ModelTimingKeyInput): string { // Model timing fallback uses the same provider/model tuple as LLM replay. export const modelTimingLlmKey = llmKey; +/** Remove correlation records that are too old to safely pair with later events. */ export function evictExpiredRecords( map: Map, nowMs: number, @@ -49,14 +59,17 @@ export function evictExpiredRecords( } } +/** Return wall-clock microseconds for NeMo Flow span APIs. */ export function nowMicros(): number { return Date.now() * 1000; } +/** Infer a start timestamp when OpenClaw gives end time plus duration. */ export function startMicrosFromDuration(endMicros: number, durationMs: number | undefined): number | null { return durationMs === undefined ? null : endMicros - Math.round(durationMs * 1000); } +/** Select the most recent timestamp field available on a correlation record. */ function recordTimestamp(record: TimestampedRecord): number { return record.observedAtMs ?? record.endedAtMs ?? record.startedAtMs ?? 0; } diff --git a/integrations/openclaw/src/hook-replay/llm.ts b/integrations/openclaw/src/hook-replay/llm.ts index 631aa860..7ec19a75 100644 --- a/integrations/openclaw/src/hook-replay/llm.ts +++ b/integrations/openclaw/src/hook-replay/llm.ts @@ -1,6 +1,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * LLM span reconstruction for OpenClaw hook replay. + * + * OpenClaw currently exposes public hooks for request snapshots, assistant + * outputs, message writes, and model-call timing as separate event streams. This + * module correlates those signals into NeMo Flow LLM spans while staying on the + * public plugin API. The reconstruction is intentionally best-effort until + * OpenClaw exposes a first-class provider-call lifecycle hook with a stable + * call id, request, response, usage, and timing in one contract. + */ import type { NemoFlowHookBackendConfig } from "../config.js"; import type { PluginHookAgentContext, @@ -33,6 +43,10 @@ import { startMicrosFromDuration, } from "./correlation.js"; +/** + * Store one OpenClaw llm_input snapshot and replay it immediately if the matching + * llm_output arrived first. + */ export function recordLlmInput( manager: SessionManager, event: PluginHookLlmInputEvent, @@ -81,6 +95,12 @@ export function recordLlmInput( }); } +/** + * Replay one llm_output event or hold it briefly for a late llm_input snapshot. + * + * The grace window keeps traces accurate for out-of-order hooks without blocking + * the OpenClaw process or keeping Node alive. + */ export function recordLlmOutput( manager: SessionManager, event: PluginHookLlmOutputEvent, @@ -134,6 +154,12 @@ export function recordLlmOutput( insertPendingOutput(manager, key, pending); } +/** + * Capture assistant message writes as a higher-fidelity fallback for LLM outputs. + * + * Some OpenClaw paths expose the clearest assistant text, tool calls, and usage + * during message persistence rather than through llm_output. + */ export function recordBeforeMessageWrite( manager: SessionManager, event: PluginHookBeforeMessageWriteEvent, @@ -191,6 +217,7 @@ export function recordBeforeMessageWrite( } } +/** Record the start of a provider call when OpenClaw supplies a model call id. */ export function recordModelCallStarted( manager: SessionManager, event: PluginHookModelCallStartedEvent, @@ -230,6 +257,7 @@ export function recordModelCallStarted( ); } +/** Record provider-call timing and byte counters for later LLM span correlation. */ export function recordModelCallEnded( manager: SessionManager, event: PluginHookModelCallEndedEvent, @@ -282,6 +310,7 @@ export function recordModelCallEnded( ); } +/** Flush pending llm_output records for a session before the root span closes. */ export function replayPendingLlmOutputsForSession( manager: SessionManager, session: SessionState, @@ -317,6 +346,10 @@ export function replayPendingLlmOutputsForSession( } } +/** + * Reconstruct final-run LLM spans from agent_end/message-write data when direct + * llm_output replay did not already produce the trajectory. + */ export function replayAgentEndMessages( manager: SessionManager, event: PluginHookAgentEndEvent, @@ -349,6 +382,7 @@ export function replayAgentEndMessages( return finalOutput; } +/** Emit diagnostic marks for provider-call timing records that could not pair to an LLM span. */ export function emitUnpairedModelCallTimingMarks(manager: SessionManager, session: SessionState): void { for (const records of manager.state.modelCallsByCallId.values()) { for (const record of records) { @@ -380,6 +414,7 @@ export function emitUnpairedModelCallTimingMarks(manager: SessionManager, sessio } } +/** Build the request payload passed to NeMo Flow for a replayed LLM span. */ export function buildReplayLlmRequest( input: LlmInputRecord, output: PluginHookLlmOutputEvent, @@ -406,6 +441,7 @@ export function buildReplayLlmRequest( }); } +/** Build the response payload passed to NeMo Flow for a replayed LLM span. */ export function buildReplayLlmResponse( event: PluginHookLlmOutputEvent, timing: ModelCallRecord | undefined, @@ -436,6 +472,7 @@ export function buildReplayLlmResponse( }); } +/** Replay an output whose matching input never arrived before the grace timeout. */ function replayExpiredPendingOutput( manager: SessionManager, key: string, @@ -469,6 +506,7 @@ function replayExpiredPendingOutput( } } +/** Emit the actual NeMo Flow LLM span from correlated request, output, and timing data. */ function replayLlmOutput(params: { manager: SessionManager; event: PluginHookLlmOutputEvent; @@ -528,6 +566,7 @@ function replayLlmOutput(params: { } } +/** Replay assistant message-write records as ordered LLM spans using FIFO timing candidates. */ function replayAssistantMessageWrites( manager: SessionManager, session: SessionState, @@ -585,6 +624,7 @@ function replayAssistantMessageWrites( return replayed; } +/** Consume the next unpaired timing record for message-write trajectory replay. */ function consumeNextTimingCandidate( manager: SessionManager, session: SessionState, @@ -605,6 +645,7 @@ function consumeNextTimingCandidate( return candidate; } +/** Consume a timing candidate only when the public hook data makes it unambiguous. */ function consumeTimingCandidate( manager: SessionManager, session: SessionState, @@ -639,6 +680,7 @@ function consumeTimingCandidate( return undefined; } +/** Mark a timing match as ambiguous instead of attaching possibly wrong latency. */ function emitModelTimingAmbiguousMark( manager: SessionManager, session: SessionState, @@ -662,6 +704,7 @@ function emitModelTimingAmbiguousMark( }); } +/** Emit one unpaired timing diagnostic mark. */ function emitModelTimingMark( manager: SessionManager, session: SessionState, @@ -695,6 +738,7 @@ function emitModelTimingMark( }); } +/** Emit a compact summary when multiple timing records cannot be paired safely. */ function emitModelTimingSummaryMark( manager: SessionManager, session: SessionState, @@ -714,6 +758,7 @@ function emitModelTimingSummaryMark( }); } +/** Convert an OpenClaw llm_input event into the buffered request record. */ function createInputRecord(session: SessionState, event: PluginHookLlmInputEvent): LlmInputRecord { return { sessionKey: session.sessionId, @@ -729,6 +774,7 @@ function createInputRecord(session: SessionState, event: PluginHookLlmInputEvent }; } +/** Resolve an existing session for before_message_write without creating a fake one. */ function existingSessionForMessageWrite( manager: SessionManager, event: PluginHookBeforeMessageWriteEvent, @@ -740,6 +786,7 @@ function existingSessionForMessageWrite( return key === undefined ? undefined : manager.state.sessions.get(key); } +/** Build a minimal request placeholder when only an llm_output hook is available. */ function placeholderInputRecord(record: PendingLlmOutputRecord): LlmInputRecord { return { sessionKey: record.sessionKey, @@ -755,6 +802,7 @@ function placeholderInputRecord(record: PendingLlmOutputRecord): LlmInputRecord }; } +/** Append the current user prompt unless the history snapshot already ends with it. */ function appendPromptIfMissing(historyMessages: unknown[], prompt: string): unknown[] { if (!prompt) { return historyMessages; @@ -766,6 +814,7 @@ function appendPromptIfMissing(historyMessages: unknown[], prompt: string): unkn return [...historyMessages, { role: "user", content: prompt }]; } +/** Apply prompt-capture privacy settings to one historical message. */ function sanitizePromptMessage(message: unknown, config: NemoFlowHookBackendConfig): unknown { if (!isRecord(message)) { return message; @@ -783,6 +832,7 @@ function sanitizePromptMessage(message: unknown, config: NemoFlowHookBackendConf return sanitized; } +/** Strip tool call arguments from assistant messages while preserving call names. */ function stripAssistantToolArgs(message: Record): Record { const stripped: Record = { ...message }; if (Array.isArray(stripped.toolCalls)) { @@ -799,6 +849,7 @@ function stripAssistantToolArgs(message: Record): Record 0) { @@ -840,6 +893,7 @@ function responseContent(assistantTexts: string[], assistantToolCallNames: strin return undefined; } +/** Return the last assistant text in a message trajectory. */ function lastAssistantText(messages: unknown[]): string | undefined { for (let index = messages.length - 1; index >= 0; index -= 1) { const message = messages[index]; @@ -854,6 +908,7 @@ function lastAssistantText(messages: unknown[]): string | undefined { return undefined; } +/** Build the final root-span output from agent_end messages without using shutdown reasons. */ function finalOutputFromAgentEnd( messages: unknown[], event: PluginHookAgentEndEvent, @@ -879,6 +934,7 @@ function finalOutputFromAgentEnd( return undefined; } +/** Extract textual content blocks from OpenClaw/OpenAI/Anthropic-like messages. */ function extractTextBlocks(message: Record): string[] { const content = message.content; if (typeof content === "string" && content.length > 0) { @@ -898,6 +954,7 @@ function extractTextBlocks(message: Record): string[] { return texts; } +/** Extract assistant tool calls from common OpenClaw/OpenAI/Anthropic message shapes. */ function extractToolCalls(message: Record): unknown[] { if (Array.isArray(message.toolCalls)) { return message.toolCalls; @@ -914,6 +971,7 @@ function extractToolCalls(message: Record): unknown[] { ); } +/** Identify likely tool-call content blocks across provider-specific shapes. */ function isToolCallLike(value: unknown): boolean { return ( isRecord(value) && @@ -925,6 +983,7 @@ function isToolCallLike(value: unknown): boolean { ); } +/** Return display names for assistant tool calls without exposing arguments. */ function toolCallNames(toolCalls: unknown[] | undefined): string[] { if (!Array.isArray(toolCalls)) { return []; @@ -945,6 +1004,7 @@ function toolCallNames(toolCalls: unknown[] | undefined): string[] { return names; } +/** Convert stored message-write usage back into the llm_output usage contract. */ function mapHookUsage(usage: unknown): PluginHookLlmOutputEvent["usage"] | undefined { const mapped = mapUsage(usage); if (!mapped) { @@ -972,10 +1032,12 @@ function mapHookUsage(usage: unknown): PluginHookLlmOutputEvent["usage"] | undef return Object.keys(hookUsage).length > 0 ? hookUsage : undefined; } +/** Report whether this run already has a replayed LLM trajectory. */ function hasTrajectoryReplay(session: SessionState, runId?: string): boolean { return session.trajectoryReplayedRuns?.has(trajectoryRunKey(session, runId)) === true; } +/** Remember the latest llm_input snapshot so message-write replay can include context. */ function rememberAgentRunInputSnapshot( session: SessionState, runId: string | undefined, @@ -1002,11 +1064,13 @@ function rememberAgentRunInputSnapshot( } } +/** Snapshot messages into JSON-compatible values before storing them for later replay. */ function snapshotMessages(messages: unknown[]): unknown[] { const snapshot = toJsonValue(messages); return Array.isArray(snapshot) ? snapshot : []; } +/** Return the most recent input history snapshot, including the current prompt if needed. */ function initialHistoryFromLlmInputSnapshot(session: SessionState): unknown[] { let snapshot: { historyMessages: unknown[]; observedAtMs: number; prompt: string } | undefined; for (const current of session.agentRunInputSnapshots?.values() ?? []) { @@ -1020,6 +1084,7 @@ function initialHistoryFromLlmInputSnapshot(session: SessionState): unknown[] { return appendPromptIfMissing([...snapshot.historyMessages], snapshot.prompt); } +/** Trim agent_end messages to only the current run's trajectory when a snapshot exists. */ function currentRunAgentMessages(session: SessionState, runId: string | undefined, messages: unknown[]): unknown[] { const inputSnapshot = session.agentRunInputSnapshots?.get(trajectoryRunKey(session, runId)); if (!inputSnapshot || inputSnapshot.historyMessageCount <= 0) { @@ -1032,6 +1097,7 @@ function currentRunAgentMessages(session: SessionState, runId: string | undefine return promptIndex === undefined ? [] : messages.slice(promptIndex); } +/** Find the current prompt in a full message transcript. */ function findCurrentPromptIndex(messages: unknown[], prompt: string): number | undefined { if (!prompt) { return undefined; @@ -1048,11 +1114,13 @@ function findCurrentPromptIndex(messages: unknown[], prompt: string): number | u return undefined; } +/** Drop per-run replay bookkeeping once that run no longer needs correlation. */ function cleanupAgentRunReplayBookkeeping(session: SessionState, runKey: string): void { session.agentRunInputSnapshots?.delete(runKey); session.hookLlmOutputReplayCounts?.delete(runKey); } +/** Mark a run as trajectory-replayed while bounding long-lived session memory. */ function markTrajectoryReplay(session: SessionState, runKey: string, maxRuns: number): void { session.trajectoryReplayedRuns ??= new Set(); session.trajectoryReplayedRuns.delete(runKey); @@ -1066,10 +1134,12 @@ function markTrajectoryReplay(session: SessionState, runKey: string, maxRuns: nu } } +/** Return how many llm_output hooks have already replayed for this run. */ function hookLlmOutputReplayCount(session: SessionState, runId?: string): number { return session.hookLlmOutputReplayCounts?.get(trajectoryRunKey(session, runId)) ?? 0; } +/** Increment direct llm_output replay count and keep the count map bounded. */ function incrementHookLlmOutputReplayCount(session: SessionState, runId: string | undefined, maxRuns: number): void { const runKey = trajectoryRunKey(session, runId); session.hookLlmOutputReplayCounts ??= new Map(); @@ -1085,10 +1155,12 @@ function incrementHookLlmOutputReplayCount(session: SessionState, runId: string } } +/** Build the per-session run key used for trajectory de-duplication. */ function trajectoryRunKey(session: SessionState, runId?: string): string { return runId ?? session.sessionId; } +/** Normalize provider usage into OpenInference-friendly token/cost fields. */ function mapUsage(usage: unknown): Record | undefined { if (!isRecord(usage)) { return undefined; @@ -1128,16 +1200,19 @@ function mapUsage(usage: unknown): Record | undefined { return Object.keys(mapped).length > 0 ? mapped : undefined; } +/** Read a non-empty string field from a generic hook record. */ function stringField(record: Record, key: string): string | undefined { const value = record[key]; return typeof value === "string" && value.length > 0 ? value : undefined; } +/** Read a finite numeric field from a generic hook record. */ function numberField(record: Record, key: string): number | undefined { const value = record[key]; return typeof value === "number" && Number.isFinite(value) ? value : undefined; } +/** Copy model_call_ended details into a retained timing record. */ function applyModelCallEnd(record: ModelCallRecord, event: PluginHookModelCallEndedEvent, nowMs: number): void { record.observedAtMs = nowMs; record.endedAtMs = nowMs; @@ -1153,6 +1228,7 @@ function applyModelCallEnd(record: ModelCallRecord, event: PluginHookModelCallEn record.upstreamRequestIdHash = event.upstreamRequestIdHash; } +/** Find the newest started-but-not-ended timing record for a session. */ function latestUnendedRecord(records: ModelCallRecord[] | undefined, session: SessionState): ModelCallRecord | undefined { if (!records) { return undefined; @@ -1166,6 +1242,7 @@ function latestUnendedRecord(records: ModelCallRecord[] | undefined, session: Se return undefined; } +/** Insert a pending output and clear timers for any evicted records. */ function insertPendingOutput(manager: SessionManager, key: string, record: PendingLlmOutputRecord): void { const records = manager.state.llmOutputsPendingInput.get(key) ?? []; records.push(record); @@ -1178,6 +1255,7 @@ function insertPendingOutput(manager: SessionManager, key: string, record: Pendi manager.state.llmOutputsPendingInput.set(key, records); } +/** Remove and return the first record matching a predicate from a keyed map. */ function shiftOldest(map: Map, key: string, predicate: (record: T) => boolean): T | undefined { const records = map.get(key); if (!records) { @@ -1194,6 +1272,7 @@ function shiftOldest(map: Map, key: string, predicate: (record: return record; } +/** Remove a specific record object from a keyed map. */ function removeRecord(map: Map, key: string, record: T): boolean { const records = map.get(key); if (!records) { @@ -1210,6 +1289,7 @@ function removeRecord(map: Map, key: string, record: T): boolean return true; } +/** Clear the grace timer owned by a pending llm_output record. */ function clearPendingTimer(record: PendingLlmOutputRecord): void { if (record.timer) { clearTimeout(record.timer); @@ -1217,10 +1297,12 @@ function clearPendingTimer(record: PendingLlmOutputRecord): void { } } +/** Evict stale replay state before accepting another hook event. */ function evictExpiredReplayRecords(manager: SessionManager): void { evictExpiredCorrelationRecords(manager.state, Date.now(), manager.config.correlation.recordTtlMs); } +/** Narrow unknown values to plain records for payload traversal. */ function isRecord(value: unknown): value is Record { return typeof value === "object" && value !== null && !Array.isArray(value); } diff --git a/integrations/openclaw/src/hook-replay/marks.ts b/integrations/openclaw/src/hook-replay/marks.ts index 4542e610..c5486114 100644 --- a/integrations/openclaw/src/hook-replay/marks.ts +++ b/integrations/openclaw/src/hook-replay/marks.ts @@ -1,11 +1,19 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Shared event/mark emission and JSON normalization helpers. + * + * Hook payloads can contain undefined values, circular objects, errors, and + * prototype-sensitive keys. This module normalizes them before they cross the + * NeMo Flow NAPI boundary. + */ import type { PluginHookAfterToolCallEvent } from "../openclaw-hook-types.js"; import type { JsonObject as JsonRecord, JsonValue } from "nemo-flow-node/typed"; import type { HookReplayBackendState, SessionState } from "./session.js"; import type { NemoFlowRuntimeModule } from "../modules.js"; +/** Emit a NeMo Flow event under an existing OpenClaw session root span. */ export function emitMark(params: { nf: NemoFlowRuntimeModule; state: HookReplayBackendState; @@ -23,6 +31,7 @@ export function emitMark(params: { params.state.counters.marksEmitted += 1; } +/** Return a blocked-tool event payload when OpenClaw denied the tool call. */ export function blockedToolDetails( event: PluginHookAfterToolCallEvent, context?: { runId?: string | undefined }, @@ -42,14 +51,17 @@ export function blockedToolDetails( }); } +/** Convert an object to a JSON record, dropping undefined fields recursively. */ export function toJsonRecord(input: Record): JsonRecord { return stripUndefined(input, new WeakSet()); } +/** Convert arbitrary hook payload data into NAPI-safe JSON. */ export function toJsonValue(input: unknown): JsonValue { return normalizeJsonValue(input, new WeakSet()); } +/** Preserve useful error fields in telemetry without requiring Error instances. */ export function errorToJson(error: unknown): JsonRecord { if (error instanceof Error) { return toJsonRecord({ @@ -64,6 +76,7 @@ export function errorToJson(error: unknown): JsonRecord { return { message: String(error) }; } +/** Extract OpenClaw tool result details when the result uses that envelope. */ function resultDetails(result: unknown): Record | undefined { if (!isRecord(result)) { return undefined; @@ -72,6 +85,7 @@ function resultDetails(result: unknown): Record | undefined { return isRecord(details) ? details : undefined; } +/** Strip undefined properties and protect prototype-like keys during JSON conversion. */ function stripUndefined(input: Record, seen: WeakSet): JsonRecord { const output: JsonRecord = {}; for (const [key, value] of Object.entries(input)) { @@ -92,6 +106,7 @@ function stripUndefined(input: Record, seen: WeakSet): return output; } +/** Normalize any hook value into JSON, replacing cycles and unsupported primitives. */ function normalizeJsonValue(value: unknown, seen: WeakSet): JsonValue { if (value === null || typeof value === "string" || typeof value === "boolean") { return value; @@ -120,6 +135,7 @@ function normalizeJsonValue(value: unknown, seen: WeakSet): JsonValue { return String(value); } +/** Narrow unknown values to plain records for payload traversal. */ function isRecord(value: unknown): value is Record { return typeof value === "object" && value !== null && !Array.isArray(value); } diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts index d960bdc8..c84cb3dd 100644 --- a/integrations/openclaw/src/hook-replay/session.ts +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -1,6 +1,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Session identity and root-span management for hook replay. + * + * OpenClaw can reference the same conversation by session id, session key, run id, + * requester key, or child key depending on the hook. This module canonicalizes + * those identifiers and owns the root `openclaw.session` scope lifecycle. + */ import type { NemoFlowHookBackendConfig } from "../config.js"; import { createAtifExporter } from "../atif-capture.js"; import { evictExpiredRecords, tupleKey as tupleKeyFromCorrelation } from "./correlation.js"; @@ -155,18 +162,21 @@ export type SessionManager = { logBoundedWarn: (key: string, message: string) => void; }; +/** Return all keys that may identify an existing OpenClaw session. */ export function lookupSessionKeys(input: SessionLookupInput): string[] { return [input.sessionId, input.sessionKey, input.requesterSessionKey, input.childSessionKey, input.runId].filter( (value): value is string => typeof value === "string" && value.length > 0, ); } +/** Return keys that should alias to a canonical session once it is known. */ export function aliasSessionKeys(input: SessionLookupInput): string[] { return [input.sessionId, input.sessionKey, input.requesterSessionKey, input.runId].filter( (value): value is string => typeof value === "string" && value.length > 0, ); } +/** Resolve a hook's session identity to the canonical session id used in replay state. */ export function resolveSessionKey( state: HookReplayBackendState, input: SessionLookupInput, @@ -181,6 +191,7 @@ export function resolveSessionKey( return input.sessionId ?? input.sessionKey ?? input.childSessionKey ?? input.runId; } +/** Remember equivalent hook identifiers so later events attach to the same root span. */ export function rememberSessionAliases( state: HookReplayBackendState, session: SessionState, @@ -191,6 +202,7 @@ export function rememberSessionAliases( } } +/** Create the mutable in-memory state used by the hook replay backend. */ export function createHookReplayState(): HookReplayBackendState { return { sessions: new Map(), @@ -210,6 +222,7 @@ export function createHookReplayState(): HookReplayBackendState { }; } +/** Return an existing session or lazily create a root session scope for replay. */ export function ensureSession(manager: SessionManager, input: EnsureSessionInput): SessionState | undefined { const key = resolveSessionKey(manager.state, input); if (!key) { @@ -255,6 +268,7 @@ export function ensureSession(manager: SessionManager, input: EnsureSessionInput return session; } +/** Flush pending LLM output/timing state before the root session closes. */ export function drainSession(manager: SessionManager, session: SessionState): void { cancelPendingLlmOutputTimers(manager.state, session); manager.replayPendingLlmOutputsForSession(session, { allowPlaceholderRequest: true }); @@ -262,6 +276,7 @@ export function drainSession(manager: SessionManager, session: SessionState): vo evictSessionCorrelationRecords(manager.state, session); } +/** Close the root session scope with separate lifecycle summary and user-visible output. */ export function closeSessionRoot( manager: SessionManager, session: SessionState, @@ -281,10 +296,12 @@ export function closeSessionRoot( }); } +/** Remove a closed session from active replay state. */ export function deleteSession(state: HookReplayBackendState, session: SessionState): void { state.sessions.delete(session.sessionId); } +/** Insert a correlation record while bounding retained entries per key. */ export function insertBoundedRecord( map: Map, key: string, @@ -299,10 +316,12 @@ export function insertBoundedRecord( map.set(key, records); } +/** Build a stable tuple key for session alias maps. */ export function tupleKey(parts: Array): string { return tupleKeyFromCorrelation(parts); } +/** Evict stale cross-hook correlation records across all replay maps. */ export function evictExpiredCorrelationRecords(state: HookReplayBackendState, nowMs: number, ttlMs: number): void { evictExpiredRecords(state.llmInputs, nowMs, ttlMs); evictExpiredPendingLlmOutputs(state.llmOutputsPendingInput, nowMs, ttlMs); @@ -310,6 +329,7 @@ export function evictExpiredCorrelationRecords(state: HookReplayBackendState, no evictExpiredRecords(state.modelTimingsByLlmKey, nowMs, ttlMs); } +/** Open the root NeMo Flow scope for one OpenClaw session and emit session_start. */ function openSessionRoot(manager: SessionManager, session: SessionState, input: EnsureSessionInput): void { const data: JsonRecord = { sessionId: session.sessionId, @@ -336,6 +356,7 @@ function openSessionRoot(manager: SessionManager, session: SessionState, input: }); } +/** Cancel timers that would otherwise replay late LLM outputs after session close. */ function cancelPendingLlmOutputTimers(state: HookReplayBackendState, session: SessionState): void { for (const records of state.llmOutputsPendingInput.values()) { for (const record of records) { @@ -347,6 +368,7 @@ function cancelPendingLlmOutputTimers(state: HookReplayBackendState, session: Se } } +/** Remove all correlation records and aliases owned by a closed session. */ function evictSessionCorrelationRecords(state: HookReplayBackendState, session: SessionState): void { evictFromRecordMap(state.llmInputs, session.sessionId); evictFromRecordMap(state.llmOutputsPendingInput, session.sessionId); @@ -360,6 +382,7 @@ function evictSessionCorrelationRecords(state: HookReplayBackendState, session: } } +/** Drop records for one session from a single keyed correlation map. */ function evictFromRecordMap(map: Map, sessionKey: string): void { for (const [key, records] of map) { const retained = records.filter((record) => record.sessionKey !== sessionKey); @@ -371,6 +394,7 @@ function evictFromRecordMap(map: Map, nowMs: number, @@ -396,6 +420,7 @@ function evictExpiredPendingLlmOutputs( } } +/** Resolve the runtime's Agent scope enum while tolerating older Node bindings. */ function agentScopeType(nf: NemoFlowRuntimeModule): Parameters[1] { return (nf.ScopeType?.Agent ?? 0) as Parameters[1]; } diff --git a/integrations/openclaw/src/hook-replay/tool.ts b/integrations/openclaw/src/hook-replay/tool.ts index 56464ea2..a1ea0ae8 100644 --- a/integrations/openclaw/src/hook-replay/tool.ts +++ b/integrations/openclaw/src/hook-replay/tool.ts @@ -1,11 +1,18 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Tool-call replay from OpenClaw hooks into NeMo Flow spans. + * + * Tool payloads can be large or sensitive, so this module applies capture policy + * before exporting arguments/results while keeping enough metadata for debugging. + */ import type { PluginHookAfterToolCallEvent, PluginHookToolContext } from "../openclaw-hook-types.js"; import { blockedToolDetails, emitMark, errorToJson, toJsonRecord, toJsonValue } from "./marks.js"; import { ensureSession, type SessionManager } from "./session.js"; import { nowMicros, startMicrosFromDuration } from "./correlation.js"; +/** Convert one OpenClaw after_tool_call event into a NeMo Flow tool span or blocked-tool mark. */ export function replayAfterToolCall( manager: SessionManager, event: PluginHookAfterToolCallEvent, @@ -81,6 +88,7 @@ export function replayAfterToolCall( }); } +/** Build the compact default tool output shown in trace UIs. */ function toolDisplayPayload(event: PluginHookAfterToolCallEvent, stripped: boolean): Record { const hasError = Boolean(event.error); return { @@ -96,6 +104,7 @@ function toolDisplayPayload(event: PluginHookAfterToolCallEvent, stripped: boole }; } +/** Include result keys as a low-noise hint when full tool results are stripped. */ function resultKeys(result: unknown): string[] | undefined { return result && typeof result === "object" && !Array.isArray(result) ? Object.keys(result) : undefined; } diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts index e1d936f6..bcd25e40 100644 --- a/integrations/openclaw/src/hooks-backend.ts +++ b/integrations/openclaw/src/hooks-backend.ts @@ -1,6 +1,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Main OpenClaw hook replay dispatcher. + * + * OpenClaw hook callbacks arrive here as lifecycle, LLM, model-timing, tool, and + * subagent events. This class routes each event to focused replay modules and + * owns fail-open behavior so observability never breaks the agent runtime. + */ import type { NemoFlowHookBackendConfig } from "./config.js"; import { exportAtifJson, withAtifCapture } from "./atif-capture.js"; import { emitMark, toJsonRecord } from "./hook-replay/marks.js"; @@ -61,6 +68,7 @@ export type HookReplayBackendOptions = { markOutputDegraded: (output: "atif" | "otel" | "openInference") => void; }; +/** Replays OpenClaw public hook events into NeMo Flow scopes, spans, and marks. */ export class HookReplayBackend { private readonly nf: NemoFlowRuntimeModule; private readonly config: NemoFlowHookBackendConfig; @@ -80,15 +88,18 @@ export class HookReplayBackend { this.markOutputDegradedValue = options.markOutputDegraded; } + /** Return mutable replay state for tests and health snapshots. */ state(): HookReplayBackendState { return this.stateValue; } + /** Keep gateway_start registered even though session roots are created lazily. */ onGatewayStart(_event: PluginHookGatewayStartEvent, _ctx: PluginHookGatewayContext): void { // Gateway events have no session root in the hook backend. Keep this hook // registered so later telemetry lifecycle can attach without changing the shell. } + /** Open or alias an explicit OpenClaw session root. */ onSessionStart(event: PluginHookSessionStartEvent, ctx: PluginHookSessionContext): void { this.ensureSession({ sessionId: event.sessionId, @@ -101,6 +112,7 @@ export class HookReplayBackend { // ensureSession opens the root scope and emits openclaw.session_start for both explicit and lazy sessions. } + /** Close one explicit OpenClaw session and export its ATIF artifact. */ async onSessionEnd(event: PluginHookSessionEndEvent, ctx: PluginHookSessionContext): Promise { const session = this.ensureSession({ sessionId: event.sessionId, @@ -116,30 +128,37 @@ export class HookReplayBackend { await this.closeSession(session, sessionEndSummary(event)); } + /** Buffer an LLM request snapshot until a matching response or trajectory replay arrives. */ onLlmInput(event: PluginHookLlmInputEvent, ctx: PluginHookAgentContext): void { recordLlmInput(this.sessionManager(), event, ctx); } + /** Replay an LLM output immediately or keep it briefly for a late input snapshot. */ onLlmOutput(event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void { recordLlmOutput(this.sessionManager(), event, ctx); } + /** Record provider-call start timing when OpenClaw exposes a call id. */ onModelCallStarted(event: PluginHookModelCallStartedEvent, ctx: PluginHookAgentContext): void { recordModelCallStarted(this.sessionManager(), event, ctx); } + /** Record provider-call completion timing for later LLM-span correlation. */ onModelCallEnded(event: PluginHookModelCallEndedEvent, ctx: PluginHookAgentContext): void { recordModelCallEnded(this.sessionManager(), event, ctx); } + /** Replay a finished OpenClaw tool call as a NeMo Flow tool span or blocked mark. */ onAfterToolCall(event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void { replayAfterToolCall(this.sessionManager(), event, ctx); } + /** Capture assistant message writes that may contain the clearest provider output. */ onBeforeMessageWrite(event: PluginHookBeforeMessageWriteEvent, ctx: PluginHookBeforeMessageWriteContext): void { recordBeforeMessageWrite(this.sessionManager(), event, ctx); } + /** Finalize one agent run, replaying message-write trajectory when needed. */ onAgentEnd(event: PluginHookAgentEndEvent, ctx: PluginHookAgentContext): void { const session = this.ensureSession({ sessionId: ctx.sessionId, @@ -171,6 +190,7 @@ export class HookReplayBackend { ); } + /** Remember the last assistant text before OpenClaw finalizes the response. */ onBeforeAgentFinalize(event: PluginHookBeforeAgentFinalizeEvent, ctx: PluginHookAgentContext): void { const session = this.ensureSession({ sessionId: event.sessionId, @@ -208,6 +228,7 @@ export class HookReplayBackend { ); } + /** Attach subagent spawn metadata to the requester session when possible. */ onSubagentSpawned(event: PluginHookSubagentSpawnedEvent, ctx: PluginHookSubagentContext): void { const session = this.ensureSession({ @@ -239,6 +260,7 @@ export class HookReplayBackend { ); } + /** Attach subagent completion metadata to the requester or child session. */ onSubagentEnded(event: PluginHookSubagentEndedEvent, ctx: PluginHookSubagentContext): void { const session = this.ensureSession({ @@ -272,10 +294,12 @@ export class HookReplayBackend { ); } + /** Drain all active sessions when the OpenClaw gateway is stopping. */ async drainForGatewayStop(reason?: string): Promise { await this.closeAllSessions({ reason: reason ?? "gateway_stop" }); } + /** Close one session selected by a runtime lifecycle cleanup hook. */ async cleanupSession(input: SessionLookupInput & { reason: string }): Promise { const key = resolveSessionKey(this.stateValue, input); if (!key) { @@ -290,10 +314,12 @@ export class HookReplayBackend { await this.closeSession(session, { reason: input.reason }); } + /** Stop the backend and close every active session. */ async stop(reason: string): Promise { await this.closeAllSessions({ reason }); } + /** Run replay code with bounded warning logs and no exception escape. */ safeReplay(label: string, session: SessionState | undefined, emit: () => void): void { try { emit(); @@ -306,6 +332,7 @@ export class HookReplayBackend { } } + /** Async variant of safeReplay for hooks that need export or cleanup awaits. */ async safeReplayAsync( label: string, session: SessionState | undefined, @@ -322,6 +349,7 @@ export class HookReplayBackend { } } + /** Emit spans/marks under the stored session scope stack and ATIF capture window. */ emitCapturedUnderSession(label: string, session: SessionState, emit: () => void): void { this.safeReplay(label, session, () => { const previousStack = this.nf.currentScopeStack(); @@ -334,18 +362,22 @@ export class HookReplayBackend { }); } + /** Force any pending LLM outputs for a session to replay before closure. */ replayPendingLlmOutputsForSession(session: SessionState, options: { allowPlaceholderRequest: boolean }): void { replayPendingLlmOutputsForSession(this.sessionManager(), session, options); } + /** Emit model-call timing diagnostics that could not be paired with an LLM span. */ emitUnpairedModelCallTimingMarks(session: SessionState): void { emitUnpairedModelCallTimingMarks(this.sessionManager(), session); } + /** Create or resolve a session through the shared session manager facade. */ private ensureSession(input: Parameters[1]): SessionState | undefined { return ensureSession(this.sessionManager(), input); } + /** Drain, close, export, and delete one session. */ private async closeSession(session: SessionState, summary: JsonRecord): Promise { drainSession(this.sessionManager(), session); closeSessionRoot(this.sessionManager(), session, summary, session.finalOutput ?? summary); @@ -353,6 +385,7 @@ export class HookReplayBackend { deleteSession(this.stateValue, session); } + /** Emit a session-level OpenClaw lifecycle mark. */ private emitSessionMark(name: string, session: SessionState, data: JsonRecord): void { this.emitCapturedUnderSession(name, session, () => { emitMark({ @@ -365,16 +398,19 @@ export class HookReplayBackend { }); } + /** Close every active session with the same lifecycle summary. */ private async closeAllSessions(summary: JsonRecord): Promise { for (const session of [...this.stateValue.sessions.values()]) { await this.closeSession(session, summary); } } + /** Run replay inside the session's ATIF capture window. */ private withAtifCapture(_session: SessionState, emit: () => void): void { withAtifCapture(this.sessionManager(), _session, emit); } + /** Build the narrow manager interface consumed by focused replay modules. */ private sessionManager() { return { nf: this.nf, @@ -393,6 +429,7 @@ export class HookReplayBackend { }; } + /** Log one warning per key to avoid noisy repeated hook failures. */ private logBoundedWarn(key: string, message: string): void { const count = this.warningCounts.get(key) ?? 0; this.warningCounts.set(key, count + 1); @@ -404,6 +441,7 @@ export class HookReplayBackend { export { llmKey }; +/** Expose session-key resolution for tests without exporting the full session module. */ export function resolveBackendSessionKey( state: HookReplayBackendState, input: Parameters[1], @@ -411,6 +449,7 @@ export function resolveBackendSessionKey( return resolveSessionKey(state, input); } +/** Build the lifecycle summary stored as the session_end mark payload. */ function sessionEndSummary(event: PluginHookSessionEndEvent): JsonRecord { return toJsonRecord({ sessionId: event.sessionId, @@ -425,6 +464,7 @@ function sessionEndSummary(event: PluginHookSessionEndEvent): JsonRecord { }); } +/** Convert thrown values into stable log strings. */ function toMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); } diff --git a/integrations/openclaw/src/modules.ts b/integrations/openclaw/src/modules.ts index eb4ae8d4..d030492d 100644 --- a/integrations/openclaw/src/modules.ts +++ b/integrations/openclaw/src/modules.ts @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Dynamic module loading boundary for NeMo Flow Node bindings. + * + * Keeping imports behind this loader lets the plugin register in OpenClaw even + * when the native binding is unavailable, then degrade only at runtime start. + */ import type * as NemoFlowRuntime from "nemo-flow-node"; import type * as NemoFlowPluginHost from "nemo-flow-node/plugin"; @@ -60,6 +66,7 @@ export type NemoFlowModules = { export type NemoFlowModuleLoader = () => Promise; +/** Load the runtime and plugin-host modules used by the OpenClaw integration. */ export const defaultNemoFlowModuleLoader: NemoFlowModuleLoader = async () => { const [nf, pluginHost] = await Promise.all([ import("nemo-flow-node"), diff --git a/integrations/openclaw/src/openclaw-hook-types.ts b/integrations/openclaw/src/openclaw-hook-types.ts index 5886e1d3..f50fda81 100644 --- a/integrations/openclaw/src/openclaw-hook-types.ts +++ b/integrations/openclaw/src/openclaw-hook-types.ts @@ -1,8 +1,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -// OpenClaw 2026.5.6 does not expose these plugin hook payload types through a public package subpath. -// Keep these aliases structural and remove them once the hook contracts are exported by OpenClaw. +/** + * Structural OpenClaw hook payload types consumed by this plugin. + * + * OpenClaw 2026.5.6 does not expose these hook contracts through a public package + * subpath. Keep these aliases structural and remove them once OpenClaw exports + * stable plugin hook types. + */ export type PluginHookAgentContext = { runId?: string; agentId?: string; diff --git a/integrations/openclaw/src/runtime-state.ts b/integrations/openclaw/src/runtime-state.ts index 22311de5..8625d645 100644 --- a/integrations/openclaw/src/runtime-state.ts +++ b/integrations/openclaw/src/runtime-state.ts @@ -1,6 +1,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Runtime lifecycle coordinator for the OpenClaw plugin. + * + * This module validates config, lazy-loads NeMo Flow Node bindings, registers + * OpenClaw service/lifecycle/gateway surfaces, and forwards hooks to the replay + * backend once runtime state is ready. + */ import * as path from "node:path"; import type { @@ -33,6 +40,7 @@ const LIFECYCLE_ID = "nemo-flow-observability-cleanup"; const STATUS_METHOD = "nemoFlow.status"; type RuntimeCleanupContext = Parameters>[0]; +/** Owns one plugin runtime instance across OpenClaw service start/stop cycles. */ export class NemoFlowRuntimeState { private readonly api: OpenClawPluginApi; private readonly config: NemoFlowHookBackendConfig; @@ -58,10 +66,12 @@ export class NemoFlowRuntimeState { this.moduleLoader = options.moduleLoader ?? defaultNemoFlowModuleLoader; } + /** Return the current coarse backend status. */ status(): HookReplayBackendStatus { return this.statusValue; } + /** Build the operator-facing health payload served through the gateway method. */ health() { const backendState = this.backendValue?.state(); return createHealthSnapshot({ @@ -80,6 +90,7 @@ export class NemoFlowRuntimeState { }); } + /** Start NeMo Flow modules, telemetry outputs, and the hook replay backend. */ async start(ctx: StartContext): Promise { this.lastStartContext = copyStartContext(ctx); this.missingStartContextLogged = false; @@ -101,6 +112,7 @@ export class NemoFlowRuntimeState { } } + /** Do the startup work behind a single-flight guard. */ private async startInternal(ctx: StartContext): Promise { delete this.lastCounters; this.degradedOutputs.clear(); @@ -178,10 +190,12 @@ export class NemoFlowRuntimeState { this.statusValue = degradedReason === undefined ? { state: "ready" } : { state: "degraded", reason: degradedReason }; } + /** Stop the runtime because OpenClaw service or gateway shutdown is happening. */ async stop(reason: string, logger?: PluginLogger): Promise { await this.stopWithStatus(reason, logger, { state: "stopped", reason }); } + /** Shared stop implementation that controls the final health status. */ private async stopWithStatus( reason: string, logger: PluginLogger | undefined, @@ -237,6 +251,7 @@ export class NemoFlowRuntimeState { this.statusValue = finalStatus; } + /** Handle OpenClaw runtime lifecycle cleanup for either a session or the backend. */ async cleanup(ctx: RuntimeCleanupContext): Promise { if (ctx.sessionKey !== undefined || ctx.runId !== undefined) { await this.backendValue?.cleanupSession({ @@ -254,6 +269,7 @@ export class NemoFlowRuntimeState { ); } + /** Return a backend for a hook, lazily starting from runtime context if needed. */ private async backendForHook(workspaceDir?: string): Promise { if (this.backendValue) { return this.backendValue; @@ -276,6 +292,7 @@ export class NemoFlowRuntimeState { return this.backendValue; } + /** Run a synchronous hook against the backend with fail-open replay handling. */ private async replayWithBackend( label: string, workspaceDir: string | undefined, @@ -289,6 +306,7 @@ export class NemoFlowRuntimeState { backend.safeReplay(label, undefined, () => emit(backend)); } + /** Run an asynchronous hook against the backend with fail-open replay handling. */ private async replayWithBackendAsync( label: string, workspaceDir: string | undefined, @@ -302,6 +320,7 @@ export class NemoFlowRuntimeState { await backend.safeReplayAsync(label, undefined, () => emit(backend)); } + /** Register every OpenClaw hook used by the observability backend. */ registerHooks(): void { this.api.on("gateway_start", async (event, ctx) => { await this.replayWithBackend("gateway_start", ctx.workspaceDir, (backend) => @@ -378,6 +397,7 @@ export class NemoFlowRuntimeState { }); } + /** Resolve the NeMo Flow plugin-host config, degrading unsupported custom components. */ private resolvePluginHostConfig( modules: NemoFlowModules, logger: PluginLogger, @@ -406,10 +426,12 @@ export class NemoFlowRuntimeState { }; } + /** Mark one telemetry output degraded for health reporting. */ private markOutputDegraded(output: "atif" | "otel" | "openInference"): void { this.degradedOutputs.add(output); } + /** Reconstruct enough service-start context for hooks that arrive before service start. */ private startContextFromRuntime(workspaceDir?: string): StartContext | undefined { try { const stateDir = this.api.runtime.state.resolveStateDir(); @@ -426,6 +448,7 @@ export class NemoFlowRuntimeState { } } + /** Register a process beforeExit cleanup guard for local OpenClaw shutdown paths. */ private registerBeforeExit(logger: PluginLogger): void { if (this.beforeExitListener) { return; @@ -439,6 +462,7 @@ export class NemoFlowRuntimeState { this.beforeExitListener = listener; } + /** Remove the beforeExit listener once normal shutdown begins. */ private removeBeforeExitListener(): void { if (!this.beforeExitListener) { return; @@ -448,6 +472,7 @@ export class NemoFlowRuntimeState { } } +/** Register the NeMo Flow observability plugin with the OpenClaw plugin API. */ export function registerNemoFlowPlugin( api: OpenClawPluginApi, moduleLoader?: NemoFlowModuleLoader, @@ -507,6 +532,7 @@ export function registerNemoFlowPlugin( runtime.registerHooks(); } +/** Validate the NeMo Flow plugin-host config and log diagnostics. */ function validatePluginHostConfig( modules: NemoFlowModules, config: Parameters[0], @@ -517,6 +543,7 @@ function validatePluginHostConfig( return report; } +/** Log plugin-host diagnostics at warning or info level based on severity. */ function logDiagnostics(logger: PluginLogger, diagnostics: ConfigDiagnostic[]): void { for (const diagnostic of diagnostics) { const prefix = diagnostic.component ? `${diagnostic.component}: ` : ""; @@ -529,6 +556,7 @@ function logDiagnostics(logger: PluginLogger, diagnostics: ConfigDiagnostic[]): } } +/** Resolve ATIF output relative to OpenClaw config when the path is not absolute. */ function resolveAtifOutputDir(config: NemoFlowHookBackendConfig, ctx: StartContext): string { const configured = config.atif.outputDir; if (!configured) { @@ -537,6 +565,7 @@ function resolveAtifOutputDir(config: NemoFlowHookBackendConfig, ctx: StartConte return path.isAbsolute(configured) ? configured : ctx.resolvePath(configured); } +/** Copy service-start context so later lazy hook startup cannot mutate it. */ function copyStartContext(ctx: StartContext): StartContext { return { stateDir: ctx.stateDir, @@ -547,6 +576,7 @@ function copyStartContext(ctx: StartContext): StartContext { }; } +/** Convert thrown values into stable log strings. */ function toMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); } diff --git a/integrations/openclaw/src/telemetry.ts b/integrations/openclaw/src/telemetry.ts index 8d80a0c3..ddee3d95 100644 --- a/integrations/openclaw/src/telemetry.ts +++ b/integrations/openclaw/src/telemetry.ts @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * OpenInference and OpenTelemetry subscriber lifecycle management. + * + * This module owns exporter registration and shutdown ordering so hook replay can + * focus on span construction and runtime-state can report degraded outputs. + */ import type { NemoFlowHookBackendConfig, TelemetrySinkConfig } from "./config.js"; import type { NemoFlowRuntimeModule, NemoFlowSubscriber } from "./modules.js"; import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry"; @@ -18,6 +24,7 @@ export type RegisterTelemetrySubscribersOptions = { markOutputDegraded: (output: "otel" | "openInference") => void; }; +/** Register all enabled telemetry subscribers, failing open per output. */ export function registerTelemetrySubscribers( options: RegisterTelemetrySubscribersOptions, ): TelemetrySubscriberEntry[] { @@ -73,6 +80,7 @@ export function registerTelemetrySubscribers( return entries; } +/** Deregister, flush, and shut down subscribers while continuing after failures. */ export function shutdownTelemetrySubscribers(params: { subscribers: TelemetrySubscriberEntry[]; logger: PluginLogger; @@ -106,6 +114,7 @@ export function shutdownTelemetrySubscribers(params: { } } +/** Convert plugin telemetry config into the shape expected by NeMo Flow subscribers. */ function toSubscriberConfig(config: TelemetrySinkConfig): Record { const raw = { transport: config.transport, @@ -121,6 +130,7 @@ function toSubscriberConfig(config: TelemetrySinkConfig): Record value !== undefined)); } +/** Convert thrown values into stable log strings. */ function toMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); } diff --git a/integrations/openclaw/src/types.ts b/integrations/openclaw/src/types.ts index 0fce4ca6..499d3381 100644 --- a/integrations/openclaw/src/types.ts +++ b/integrations/openclaw/src/types.ts @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 +/** + * Shared runtime option and context types. + * + * These types avoid importing OpenClaw implementation modules outside the public + * plugin SDK surface and keep runtime-state constructor signatures explicit. + */ import type { OpenClawPluginApi, OpenClawPluginServiceContext } from "openclaw/plugin-sdk/plugin-entry"; import type { NemoFlowHookBackendConfig } from "./config.js"; From bbc12bd661590ee30bd09a03bf1ac1da58c47fd9 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Sat, 9 May 2026 10:20:30 -0700 Subject: [PATCH 29/30] docs: clean up OpenClaw plugin README Signed-off-by: mnajafian-nv --- integrations/openclaw/README.md | 87 +++++++++++++++++---------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/integrations/openclaw/README.md b/integrations/openclaw/README.md index d61a37a2..b9b63c5c 100644 --- a/integrations/openclaw/README.md +++ b/integrations/openclaw/README.md @@ -5,31 +5,40 @@ SPDX-License-Identifier: Apache-2.0 # NeMo Flow OpenClaw Observability -This package provides the `nemo-flow` OpenClaw plugin. It replays OpenClaw hook -events through NeMo Flow manual lifecycle APIs so OpenClaw sessions can emit ATIF -JSON, OpenTelemetry, and OpenInference telemetry without patching OpenClaw. +This package provides the `nemo-flow` OpenClaw plugin. It converts supported +OpenClaw hook events into NeMo Flow sessions, LLM spans, tool spans, lifecycle +marks, ATIF JSON, OpenTelemetry spans, and OpenInference/Phoenix spans. The package declares both OpenClaw entrypoint styles: - `openclaw.extensions`: `./index.ts` for source-based plugin workflows. - `openclaw.runtimeExtensions`: `./dist/index.js` for built runtime workflows. -## Build And Validate +## Build and Validate + +Run these commands from the repository root: ```bash -npm install --ignore-scripts +npm ci --ignore-scripts +npm run build --workspace=nemo-flow-openclaw npm run typecheck --workspace=nemo-flow-openclaw npm test --workspace=nemo-flow-openclaw -npm run build --workspace=nemo-flow-openclaw +``` + +The CI-equivalent repo recipe is `just --set ci true test-openclaw`. + +Optional package payload check: + +```bash npm run pack:check --workspace=nemo-flow-openclaw ``` -`npm run build --workspace=nemo-flow-openclaw` emits production files -under `integrations/openclaw/dist/`. Tests compile to -`integrations/openclaw/.test-dist/` so test artifacts do not enter the -installable package. +`npm run build --workspace=nemo-flow-openclaw` emits production files under +`integrations/openclaw/dist/`. Tests compile to `integrations/openclaw/.test-dist/` +so test artifacts do not enter the installable package. -The optional live smoke test requires a working installed `nemo-flow-node` binding: +The optional live smoke test requires a working installed `nemo-flow-node` +binding: ```bash npm run test:live --workspace=nemo-flow-openclaw @@ -64,7 +73,8 @@ as LLM prompts, LLM responses, agent finalization messages, and tool payloads. ## Configuration ATIF export is enabled by default. OTel and OpenInference subscribers are disabled -until explicitly configured. +until explicitly configured. The snippets below are values for +`plugins.entries["nemo-flow"].config`. ATIF-only local export: @@ -132,29 +142,32 @@ Prompts and responses are captured by default. Tool arguments and tool results a stripped by default because they often contain user data, local paths, tokens, or large payloads. -## Event Mapping +## Hook Mapping | OpenClaw hook | NeMo Flow behavior | | --- | --- | -| `gateway_start` | Ensures the backend is available before session-scoped hook replay begins. | -| `gateway_stop` | Stops the runtime, drains sessions, shuts down subscribers, and clears the NeMo Flow plugin host. | +| `gateway_start` | Touches the replay backend early; session roots still open lazily from session-scoped hooks. | +| `gateway_stop` | Drains open sessions, shuts down subscribers, and clears the NeMo Flow plugin host. | | `session_start` | Opens or aliases a NeMo Flow session scope. | | `session_end` | Closes the session, flushes pending replay state, and exports ATIF if enabled. | -| `llm_input` / `llm_output` | Replays an LLM span through `llmCall` and `llmCallEnd` with bounded FIFO correlation. | -| `model_call_started` / `model_call_ended` | Enriches matching LLM spans with provider timing when correlation is unambiguous. | -| `after_tool_call` | Replays successful tool calls through `toolCall` and `toolCallEnd`; blocked tools emit marks. | -| `before_message_write` | Records assistant turns at the message-write boundary so multi-step sessions can be replayed as ordered LLM spans when provider timing is available. | +| `model_call_started` / `model_call_ended` | Records provider timing for later LLM span correlation. | +| `llm_input` / `llm_output` | Replays direct LLM spans when request and response hooks can be paired safely. | +| `before_message_write` | Records assistant turns for ordered LLM replay when provider timing can be paired later. | +| `after_tool_call` | Replays successful tool calls as tool spans; blocked tools emit marks. | | `agent_end` | Emits an agent lifecycle mark, flushes recorded assistant-turn LLM spans, and preserves the final assistant answer as the session output. | -| `before_agent_finalize` | Emits a lifecycle mark and does not mutate the finalization payload. | +| `before_agent_finalize` | Preserves the last assistant message as fallback session output and emits a lifecycle mark without mutating the finalization payload. | | `subagent_spawned` / `subagent_ended` | Emits subagent lifecycle marks under the best available parent or child session. | -OpenClaw's current public hooks do not attach the model `callId` to assistant -message write events. When replaying recorded assistant turns, the plugin pairs -them with `model_call_ended` timing records FIFO within the same session, -provider, model, and run. The replay metadata marks this as -`fifo_model_call_timing`. If a safe timing pair is not available, the plugin -falls back to run-level `llm_output` replay or emits timing diagnostic marks -instead of inventing latency. +For LLM spans, OpenClaw currently exposes request, response, message-write, and +provider-timing details through separate hook events. The plugin correlates those +events within the same session, provider, model, and run. When model timing cannot +be safely paired with an assistant turn, the plugin emits diagnostic marks instead +of inventing latency. + +The OpenClaw hook payload and context types used by this plugin are represented +by narrow structural aliases in `src/openclaw-hook-types.ts`. Replace those +aliases with package imports if OpenClaw publishes the relevant hook contract +types through a stable public subpath. ## Health @@ -164,8 +177,8 @@ The response reports: - backend status: `not_initialized`, `disabled`, `ready`, `degraded`, `stopping`, or `stopped` - output health for `atif`, `otel`, and `openInference` -- replay counters, including replayed LLM spans, replayed tool spans, emitted marks, - ATIF files written, replay errors, and skipped events +- replay counters, including replayed LLM spans, replayed tool spans, emitted + marks, ATIF files written, replay errors, and skipped events - last degraded or unavailable reason when present Use the output health independently: @@ -176,22 +189,10 @@ Use the output health independently: ## Packaging -`npm run pack:check --workspace=nemo-flow-openclaw` builds a fresh -production `dist/`, runs `npm pack --dry-run`, and verifies that: +`npm run pack:check --workspace=nemo-flow-openclaw` builds a fresh production +`dist/`, runs `npm pack --dry-run`, and verifies that: - declared OpenClaw source and runtime entrypoints are present - production source files needed by `index.ts` are present - compiled tests and `.test-dist/` files are absent - packed `dist/**` matches the fresh production build - -The package is currently marked `private` while the in-tree integration and -distribution path are finalized. - -## Hook Type Surface - -OpenClaw's public `api.on(...)` typing infers hook event and context types at hook -registration sites. The concrete hook payload/context types are not directly -exported through a public package subpath in `openclaw@2026.5.6`, so -`src/openclaw-hook-types.ts` keeps narrow structural aliases for backend method -boundaries. Those aliases should be replaced with package imports if OpenClaw -publishes hook contract types through a public subpath. From 556be5a229095b9996c12984b0556c56af54d61b Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Sat, 9 May 2026 10:37:27 -0700 Subject: [PATCH 30/30] chore: remove vendored OpenClaw dependency artifacts Signed-off-by: mnajafian-nv --- docs/resources/legal/oss.md | 4 -- third_party/source-release/README.md | 37 ------------------ third_party/source-release/npm/SHA256SUMS | 3 -- third_party/source-release/npm/tar-7.5.13.tgz | Bin 454961 -> 0 bytes .../source-release/npm/web-push-3.6.7.tgz | Bin 13481 -> 0 bytes .../source-release/npm/yallist-5.0.0.tgz | Bin 9821 -> 0 bytes 6 files changed, 44 deletions(-) delete mode 100644 third_party/source-release/README.md delete mode 100644 third_party/source-release/npm/SHA256SUMS delete mode 100644 third_party/source-release/npm/tar-7.5.13.tgz delete mode 100644 third_party/source-release/npm/web-push-3.6.7.tgz delete mode 100644 third_party/source-release/npm/yallist-5.0.0.tgz diff --git a/docs/resources/legal/oss.md b/docs/resources/legal/oss.md index 954c1bf2..77587091 100644 --- a/docs/resources/legal/oss.md +++ b/docs/resources/legal/oss.md @@ -13,8 +13,4 @@ Dependency attribution files live at the repository root: - [`ATTRIBUTIONS-Python.md`](../../../ATTRIBUTIONS-Python.md) - [`ATTRIBUTIONS-Node.md`](../../../ATTRIBUTIONS-Node.md) -Source release artifacts for third-party dependencies that require source -availability review live under -[`third_party/source-release/`](../../../third_party/source-release/README.md). - Use the repository root `LICENSE` file for the NeMo Flow project license. diff --git a/third_party/source-release/README.md b/third_party/source-release/README.md deleted file mode 100644 index 7dd1192f..00000000 --- a/third_party/source-release/README.md +++ /dev/null @@ -1,37 +0,0 @@ - - -# Source Release Artifacts - -This directory contains exact, as-received source/package artifacts for -third-party dependencies that require source availability review. The artifacts -are checked in without NVIDIA modifications and are accompanied by checksum -metadata. - -Notices and license text for the Node.js dependency surface are maintained in -[`../../ATTRIBUTIONS-Node.md`](../../ATTRIBUTIONS-Node.md). - -## npm Source Packages - -| Package | Version | License | Dependency path | Source package | Attribution | -| --- | --- | --- | --- | --- | --- | -| `web-push` | `3.6.7` | `MPL-2.0` | `nemo-flow-openclaw -> openclaw -> web-push` | [`npm/web-push-3.6.7.tgz`](npm/web-push-3.6.7.tgz) | [`../../ATTRIBUTIONS-Node.md`](../../ATTRIBUTIONS-Node.md) | -| `tar` | `7.5.13` | `BlueOak-1.0.0` | `nemo-flow-openclaw -> openclaw -> tar` | [`npm/tar-7.5.13.tgz`](npm/tar-7.5.13.tgz) | [`../../ATTRIBUTIONS-Node.md`](../../ATTRIBUTIONS-Node.md) | -| `yallist` | `5.0.0` | `BlueOak-1.0.0` | `nemo-flow-openclaw -> openclaw -> tar -> yallist` | [`npm/yallist-5.0.0.tgz`](npm/yallist-5.0.0.tgz) | [`../../ATTRIBUTIONS-Node.md`](../../ATTRIBUTIONS-Node.md) | - -The npm package archives are the lockfile-resolved package artifacts from the -public npm registry. They include the upstream license files and package -contents used by the Node.js package manager. - -Checksums for the checked-in artifacts are recorded in -[`npm/SHA256SUMS`](npm/SHA256SUMS). - -## npm Lockfile Provenance - -| Package | Resolved package URL | npm integrity | -| --- | --- | --- | -| `web-push@3.6.7` | `https://registry.npmjs.org/web-push/-/web-push-3.6.7.tgz` | `sha512-OpiIUe8cuGjrj3mMBFWY+e4MMIkW3SVT+7vEIjvD9kejGUypv8GPDf84JdPWskK8zMRIJ6xYGm+Kxr8YkPyA0A==` | -| `tar@7.5.13` | `https://registry.npmjs.org/tar/-/tar-7.5.13.tgz` | `sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==` | -| `yallist@5.0.0` | `https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz` | `sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==` | diff --git a/third_party/source-release/npm/SHA256SUMS b/third_party/source-release/npm/SHA256SUMS deleted file mode 100644 index 01071b4d..00000000 --- a/third_party/source-release/npm/SHA256SUMS +++ /dev/null @@ -1,3 +0,0 @@ -95765dfeca9a8a421e2f217176d871b2a67d5fa4dc2efb4fe9ac7d2346fc2af6 third_party/source-release/npm/tar-7.5.13.tgz -85774fffee09f70bde084cebcebae20b3cf6f48239f61659e45aed9fd513463e third_party/source-release/npm/web-push-3.6.7.tgz -7c9d43dbab7cab3b3133b0e6a5af14014482285316b39ec9f508efadd9ebce95 third_party/source-release/npm/yallist-5.0.0.tgz diff --git a/third_party/source-release/npm/tar-7.5.13.tgz b/third_party/source-release/npm/tar-7.5.13.tgz deleted file mode 100644 index 59cc6b1dab8efb26c6cbf94bb11e5dbf3d397ab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454961 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

QbSB+hcmA3MqK`4vr~`AOf1=YrmN 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ⅈ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

H3q$6d$TGpl@W;yZN1MN}CZ|*V8MNo-&P0 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 diff --git a/third_party/source-release/npm/web-push-3.6.7.tgz b/third_party/source-release/npm/web-push-3.6.7.tgz deleted file mode 100644 index 862f674dad37a7462b0c8a00a4281dacac284fbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13481 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 X+t2Oi_H+BW$>;wA<^9yU0N?-sxKVT5 diff --git a/third_party/source-release/npm/yallist-5.0.0.tgz b/third_party/source-release/npm/yallist-5.0.0.tgz deleted file mode 100644 index d9549ce8efa1fb5eec1eea1389c5ece5f4552376..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9821 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