@mastra/observability 1.13.0 → 1.14.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/client/id.d.ts +2 -0
- package/dist/client/id.d.ts.map +1 -0
- package/dist/client/index.d.ts +15 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/otlp.d.ts +72 -0
- package/dist/client/otlp.d.ts.map +1 -0
- package/dist/client/proxy.d.ts +44 -0
- package/dist/client/proxy.d.ts.map +1 -0
- package/dist/client/w3c.d.ts +35 -0
- package/dist/client/w3c.d.ts.map +1 -0
- package/dist/default.d.ts +11 -1
- package/dist/default.d.ts.map +1 -1
- package/dist/index.cjs +7349 -6963
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7342 -6967
- package/dist/index.js.map +1 -1
- package/dist/instances/base.d.ts +8 -0
- package/dist/instances/base.d.ts.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @mastra/observability
|
|
2
2
|
|
|
3
|
+
## 1.14.0-alpha.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Support ingesting client-side tool telemetry. Spans, logs, and duration metrics captured by the client SDK during tool execution are forwarded through the observability bus to your existing exporters. Client tool durations are reported via the existing `mastra_tool_duration_ms` metric with a `toolType: 'client'` label to distinguish them from server-side tool durations. ([#16425](https://github.com/mastra-ai/mastra/pull/16425))
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`2f5f58a`](https://github.com/mastra-ai/mastra/commit/2f5f58a9a8bb13bcdc6789db221eef7c9bf1ff02)]:
|
|
12
|
+
- @mastra/core@1.37.0-alpha.1
|
|
13
|
+
|
|
3
14
|
## 1.13.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/client/id.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client observability for @mastra/observability.
|
|
3
|
+
*
|
|
4
|
+
* Implements the ClientObservabilityProxy interface from @mastra/core
|
|
5
|
+
* to bridge OTLP/JSON spans and logs returned by client-side execution
|
|
6
|
+
* (via the @mastra/client-js collector) into the Mastra observability
|
|
7
|
+
* bus.
|
|
8
|
+
*/
|
|
9
|
+
export { createClientObservabilityProxy, DEFAULT_LIMITS } from './proxy.js';
|
|
10
|
+
export type { ClientObservabilityProxyLimits, CreateClientObservabilityProxyOptions } from './proxy.js';
|
|
11
|
+
export { decodeResourceLogs, decodeResourceSpans, buildExportedLog, buildExportedSpan, otlpSeverityToLogLevel, } from './otlp.js';
|
|
12
|
+
export type { DecodedOtlpLog, DecodedOtlpSpan } from './otlp.js';
|
|
13
|
+
export { formatBaggage, formatTraceparent, parseBaggage, parseTraceparent } from './w3c.js';
|
|
14
|
+
export type { TraceparentParts } from './w3c.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,8BAA8B,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzE,YAAY,EAAE,8BAA8B,EAAE,qCAAqC,EAAE,MAAM,SAAS,CAAC;AACrG,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzF,YAAY,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hand-rolled OTLP/JSON decoder for the subset we need to ingest from
|
|
3
|
+
* client-side tool execution.
|
|
4
|
+
*
|
|
5
|
+
* The full OTLP/JSON spec is defined in
|
|
6
|
+
* https://opentelemetry.io/docs/specs/otlp/#otlphttp and the
|
|
7
|
+
* opentelemetry-proto repo. We only consume `ResourceSpans` (for spans)
|
|
8
|
+
* and `ResourceLogs` (for logs). The full message types are large and
|
|
9
|
+
* include backwards-compat fields we never need; this walker reads the
|
|
10
|
+
* fields we care about and ignores the rest.
|
|
11
|
+
*
|
|
12
|
+
* Using `@opentelemetry/otlp-transformer` would pull in the full proto
|
|
13
|
+
* dependency tree (~hundreds of KB) for what amounts to a 100-line walker.
|
|
14
|
+
*/
|
|
15
|
+
import type { AnyExportedSpan, EntityType, ExportedLog, LogLevel } from '@mastra/core/observability';
|
|
16
|
+
/**
|
|
17
|
+
* Decoded shape of one span pulled out of an OTLP/JSON ResourceSpans
|
|
18
|
+
* payload. Just enough fields to construct an ExportedSpan and forward
|
|
19
|
+
* it through the bus.
|
|
20
|
+
*/
|
|
21
|
+
export interface DecodedOtlpSpan {
|
|
22
|
+
traceId: string;
|
|
23
|
+
spanId: string;
|
|
24
|
+
parentSpanId?: string;
|
|
25
|
+
name: string;
|
|
26
|
+
startTime: Date;
|
|
27
|
+
endTime?: Date;
|
|
28
|
+
attributes?: Record<string, unknown>;
|
|
29
|
+
/** OTLP status code: 0 unset, 1 ok, 2 error */
|
|
30
|
+
statusCode?: number;
|
|
31
|
+
statusMessage?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface DecodedOtlpLog {
|
|
34
|
+
traceId: string;
|
|
35
|
+
spanId?: string;
|
|
36
|
+
timestamp: Date;
|
|
37
|
+
/** OTLP severityText: "INFO", "WARN", etc. */
|
|
38
|
+
severityText?: string;
|
|
39
|
+
/** OTLP severityNumber: 1-24 */
|
|
40
|
+
severityNumber?: number;
|
|
41
|
+
body?: unknown;
|
|
42
|
+
attributes?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Walk an OTLP/JSON ResourceSpans payload and return a flat list of
|
|
46
|
+
* decoded spans. Returns an empty array (and never throws) if the
|
|
47
|
+
* payload is malformed.
|
|
48
|
+
*/
|
|
49
|
+
export declare function decodeResourceSpans(payload: unknown): DecodedOtlpSpan[];
|
|
50
|
+
export declare function decodeResourceLogs(payload: unknown): DecodedOtlpLog[];
|
|
51
|
+
/**
|
|
52
|
+
* Translate an OTLP severity (text or number) to a Mastra LogLevel.
|
|
53
|
+
*
|
|
54
|
+
* OTEL severity numbers per spec:
|
|
55
|
+
* 1-4 trace, 5-8 debug, 9-12 info, 13-16 warn, 17-20 error, 21-24 fatal.
|
|
56
|
+
*/
|
|
57
|
+
export declare function otlpSeverityToLogLevel(text: string | undefined, num: number | undefined): LogLevel;
|
|
58
|
+
/**
|
|
59
|
+
* Convert a decoded OTLP span into the Mastra ExportedSpan shape so it
|
|
60
|
+
* can be emitted via the observability bus.
|
|
61
|
+
*
|
|
62
|
+
* All ingested spans use SpanType.GENERIC because we don't know what
|
|
63
|
+
* the user instrumented inside their client tool. The original span
|
|
64
|
+
* name and attributes are preserved.
|
|
65
|
+
*/
|
|
66
|
+
export declare function buildExportedSpan(decoded: DecodedOtlpSpan, options?: {
|
|
67
|
+
entityType?: EntityType;
|
|
68
|
+
entityName?: string;
|
|
69
|
+
isInternal?: boolean;
|
|
70
|
+
}): AnyExportedSpan;
|
|
71
|
+
export declare function buildExportedLog(decoded: DecodedOtlpLog): ExportedLog;
|
|
72
|
+
//# sourceMappingURL=otlp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp.d.ts","sourceRoot":"","sources":["../../src/client/otlp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAoDrG;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,EAAE,CAqCvE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,EAAE,CAmCrE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAiBlG;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACnF,eAAe,CAuBjB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,CAUrE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClientObservabilityProxy implementation for @mastra/observability.
|
|
3
|
+
*
|
|
4
|
+
* Handles the two halves of the client observability flow:
|
|
5
|
+
*
|
|
6
|
+
* - `inject(parentSpan)` (called from request 1) — produces the W3C
|
|
7
|
+
* carrier the server attaches to the outgoing chunk so the client
|
|
8
|
+
* SDK can extract it and parent its child spans/logs correctly.
|
|
9
|
+
*
|
|
10
|
+
* - `receive(payload, parentContext)` (called from request 2 when the
|
|
11
|
+
* client returns) — decodes the OTLP/JSON payload the client sent
|
|
12
|
+
* back, validates that it actually belongs to the parent trace
|
|
13
|
+
* identified by `parentContext`, and forwards each span/log into
|
|
14
|
+
* the observability bus so existing exporters pick them up.
|
|
15
|
+
*/
|
|
16
|
+
import type { IMastraLogger } from '@mastra/core/logger';
|
|
17
|
+
import type { ClientObservabilityProxy, ObservabilityInstance } from '@mastra/core/observability';
|
|
18
|
+
/**
|
|
19
|
+
* Hard caps. A misbehaving client could ship arbitrary OTLP; reject
|
|
20
|
+
* payloads that blow past these limits to keep the server safe.
|
|
21
|
+
*/
|
|
22
|
+
export interface ClientObservabilityProxyLimits {
|
|
23
|
+
/** Maximum number of spans accepted per receive call. */
|
|
24
|
+
maxSpans: number;
|
|
25
|
+
/** Maximum number of log records accepted per receive call. */
|
|
26
|
+
maxLogs: number;
|
|
27
|
+
/** Maximum total payload size in bytes (JSON.stringify length). */
|
|
28
|
+
maxPayloadBytes: number;
|
|
29
|
+
}
|
|
30
|
+
export declare const DEFAULT_LIMITS: ClientObservabilityProxyLimits;
|
|
31
|
+
export interface CreateClientObservabilityProxyOptions {
|
|
32
|
+
/**
|
|
33
|
+
* Resolves the observability instance to forward into. Called per
|
|
34
|
+
* `receive()` so config selection works the same way as for
|
|
35
|
+
* server-side spans. Returning `undefined` causes the payload to be
|
|
36
|
+
* dropped silently.
|
|
37
|
+
*/
|
|
38
|
+
resolveInstance: () => ObservabilityInstance | undefined;
|
|
39
|
+
/** Logger for warnings about dropped/rejected payloads. */
|
|
40
|
+
logger?: IMastraLogger;
|
|
41
|
+
limits?: Partial<ClientObservabilityProxyLimits>;
|
|
42
|
+
}
|
|
43
|
+
export declare function createClientObservabilityProxy(options: CreateClientObservabilityProxyOptions): ClientObservabilityProxy;
|
|
44
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/client/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAGV,wBAAwB,EAIxB,qBAAqB,EAEtB,MAAM,4BAA4B,CAAC;AAQpC;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,cAAc,EAAE,8BAI5B,CAAC;AAEF,MAAM,WAAW,qCAAqC;IACpD;;;;;OAKG;IACH,eAAe,EAAE,MAAM,qBAAqB,GAAG,SAAS,CAAC;IACzD,2DAA2D;IAC3D,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAClD;AAqKD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qCAAqC,GAC7C,wBAAwB,CAE1B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hand-rolled W3C Trace Context and Baggage propagation.
|
|
3
|
+
*
|
|
4
|
+
* The full propagators in `@opentelemetry/core` weigh ~27KB gzipped.
|
|
5
|
+
* The W3C specs (https://www.w3.org/TR/trace-context/, https://www.w3.org/TR/baggage/)
|
|
6
|
+
* are simple text formats; for the small subset we need (parse and
|
|
7
|
+
* format `traceparent`, parse and format `baggage`), hand-rolling is
|
|
8
|
+
* cheaper and avoids adding an OTEL dependency to @mastra/observability.
|
|
9
|
+
*/
|
|
10
|
+
export interface TraceparentParts {
|
|
11
|
+
/** Version, currently always "00". */
|
|
12
|
+
version: string;
|
|
13
|
+
/** 32 hex chars. */
|
|
14
|
+
traceId: string;
|
|
15
|
+
/** 16 hex chars. Refers to the parent span this carrier identifies. */
|
|
16
|
+
spanId: string;
|
|
17
|
+
/** 2 hex chars. Bit 0 is the sampled flag. */
|
|
18
|
+
flags: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function parseTraceparent(value: string | undefined): TraceparentParts | null;
|
|
21
|
+
export declare function formatTraceparent(traceId: string, spanId: string, sampled: boolean): string;
|
|
22
|
+
/**
|
|
23
|
+
* Parse a W3C Baggage header value into a Map.
|
|
24
|
+
*
|
|
25
|
+
* Format: `key=value,key2=value2;property=...`
|
|
26
|
+
* Properties (after `;`) are ignored — we don't use them.
|
|
27
|
+
* Values are percent-decoded per the spec.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseBaggage(value: string | undefined): Map<string, string>;
|
|
30
|
+
/**
|
|
31
|
+
* Format a Map into a W3C Baggage header value.
|
|
32
|
+
* Values are percent-encoded.
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatBaggage(entries: Map<string, string> | Record<string, string>): string;
|
|
35
|
+
//# sourceMappingURL=w3c.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"w3c.d.ts","sourceRoot":"","sources":["../../src/client/w3c.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAQnF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAE3F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuB3E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQ3F"}
|
package/dist/default.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Mastra } from '@mastra/core';
|
|
2
2
|
import { MastraBase } from '@mastra/core/base';
|
|
3
3
|
import type { IMastraLogger } from '@mastra/core/logger';
|
|
4
|
-
import type { CorrelationContext, ConfigSelector, ConfigSelectorOptions, FeedbackInput, ObservabilityEntrypoint, ObservabilityInstance, RecordedTrace, ScoreInput } from '@mastra/core/observability';
|
|
4
|
+
import type { ClientObservabilityProxy, CorrelationContext, ConfigSelector, ConfigSelectorOptions, FeedbackInput, ObservabilityEntrypoint, ObservabilityInstance, RecordedTrace, ScoreInput } from '@mastra/core/observability';
|
|
5
5
|
import type { ObservabilityRegistryConfig } from './config.js';
|
|
6
6
|
/**
|
|
7
7
|
* Top-level observability entrypoint. Manages a registry of ObservabilityInstance
|
|
@@ -53,5 +53,15 @@ export declare class Observability extends MastraBase implements ObservabilityEn
|
|
|
53
53
|
clear(): void;
|
|
54
54
|
/** Shut down all registered instances, flushing any pending data. */
|
|
55
55
|
shutdown(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Returns the proxy responsible for client observability (W3C trace
|
|
58
|
+
* context injection + OTLP/JSON payload reception for spans/logs
|
|
59
|
+
* returned from client-side execution).
|
|
60
|
+
*
|
|
61
|
+
* Lazily constructed on first call. Resolves the target observability
|
|
62
|
+
* instance per receive call so config selection works the same way
|
|
63
|
+
* as for server-side spans.
|
|
64
|
+
*/
|
|
65
|
+
getClientObservabilityProxy(): ClientObservabilityProxy | undefined;
|
|
56
66
|
}
|
|
57
67
|
//# sourceMappingURL=default.d.ts.map
|
package/dist/default.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../src/default.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,aAAa,EAEb,uBAAuB,EAEvB,qBAAqB,EACrB,aAAa,EACb,UAAU,EAEX,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../src/default.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,aAAa,EAEb,uBAAuB,EAEvB,qBAAqB,EACrB,aAAa,EACb,UAAU,EAEX,MAAM,4BAA4B,CAAC;AAKpC,OAAO,KAAK,EAA+B,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAuBzF;;;GAGG;AACH,qBAAa,aAAc,SAAQ,UAAW,YAAW,uBAAuB;;gBAKlE,MAAM,EAAE,2BAA2B;IAgJ/C,yFAAyF;IACzF,gBAAgB,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkCnD,sFAAsF;IACtF,SAAS,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,aAAa,CAAA;KAAE,GAAG,IAAI;IAOnD,0FAA0F;IAC1F,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,SAAS;IAIhF,gBAAgB,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA6B1E,QAAQ,CAAC,IAAI,EAAE;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;QACxC,KAAK,EAAE,UAAU,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCX,WAAW,CAAC,IAAI,EAAE;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;QACxC,QAAQ,EAAE,aAAa,CAAC;KACzB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjB,iFAAiF;IACjF,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,SAAS,UAAQ,GAAG,IAAI;IAWxF,yCAAyC;IACzC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAI5D,8CAA8C;IAC9C,kBAAkB,IAAI,qBAAqB,GAAG,SAAS;IAIvD,mDAAmD;IACnD,aAAa,IAAI,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAI3D,gFAAgF;IAChF,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIzC,mEAAmE;IACnE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC,qEAAqE;IACrE,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIjD,8DAA8D;IAC9D,KAAK,IAAI,IAAI;IAIb,qEAAqE;IAC/D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;;;;;;;OAQG;IACH,2BAA2B,IAAI,wBAAwB,GAAG,SAAS;CA2DpE"}
|