@nextscope/next 0.1.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/LICENSE +21 -0
- package/README.md +272 -0
- package/dist/config.d.ts +43 -0
- package/dist/config.js +155 -0
- package/dist/config.js.map +1 -0
- package/dist/forwarder.d.ts +26 -0
- package/dist/forwarder.js +88 -0
- package/dist/forwarder.js.map +1 -0
- package/dist/inspector/model/index.d.ts +79 -0
- package/dist/inspector/model/index.js +514 -0
- package/dist/inspector/model/index.js.map +1 -0
- package/dist/inspector/model/types.d.ts +152 -0
- package/dist/inspector/model/types.js +3 -0
- package/dist/inspector/model/types.js.map +1 -0
- package/dist/inspector-assets.d.ts +2 -0
- package/dist/inspector-assets.js +7 -0
- package/dist/inspector-assets.js.map +1 -0
- package/dist/next-types.d.ts +26 -0
- package/dist/next-types.js +3 -0
- package/dist/next-types.js.map +1 -0
- package/dist/otel.d.ts +102 -0
- package/dist/otel.js +137 -0
- package/dist/otel.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.js +179 -0
- package/dist/server.js.map +1 -0
- package/dist/store.d.ts +164 -0
- package/dist/store.js +479 -0
- package/dist/store.js.map +1 -0
- package/dist/suppression.d.ts +8 -0
- package/dist/suppression.js +115 -0
- package/dist/suppression.js.map +1 -0
- package/dist/ui.d.ts +3 -0
- package/dist/ui.js +27 -0
- package/dist/ui.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { FlatSpanRow, InspectorDiagnosticSpan, InspectorSpan, InspectorSpanEvent, InspectorTrace, InspectorTraceSummary } from './types';
|
|
2
|
+
export type { FlatSpanRow, InspectorDiagnosticSpan, InspectorRequestSegment, InspectorSpan, InspectorSpanEvent, InspectorStatus, InspectorTrace, InspectorTraceSummary } from './types';
|
|
3
|
+
export interface SpanSearchResult {
|
|
4
|
+
matches: Set<string>;
|
|
5
|
+
visible: Set<string>;
|
|
6
|
+
}
|
|
7
|
+
export interface TimelineBar {
|
|
8
|
+
leftPct: number;
|
|
9
|
+
widthPct: number;
|
|
10
|
+
labelOutside: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface Tick {
|
|
13
|
+
valueMs: number;
|
|
14
|
+
leftPct: number;
|
|
15
|
+
label: string;
|
|
16
|
+
}
|
|
17
|
+
export interface RowWindow {
|
|
18
|
+
start: number;
|
|
19
|
+
end: number;
|
|
20
|
+
offsetTop: number;
|
|
21
|
+
totalHeight: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ZoomRange {
|
|
24
|
+
startMs: number;
|
|
25
|
+
endMs: number;
|
|
26
|
+
}
|
|
27
|
+
export interface TimelineHoverTarget {
|
|
28
|
+
kind: 'span' | 'event';
|
|
29
|
+
span: InspectorSpan;
|
|
30
|
+
event?: InspectorSpanEvent;
|
|
31
|
+
offsetMs: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ParsedTraceFilter {
|
|
34
|
+
text: string;
|
|
35
|
+
route: string[];
|
|
36
|
+
service: string[];
|
|
37
|
+
duration: DurationFilter[];
|
|
38
|
+
errors?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface DurationFilter {
|
|
41
|
+
operator: '>' | '>=' | '<' | '<=' | '=';
|
|
42
|
+
valueMs: number;
|
|
43
|
+
}
|
|
44
|
+
export interface RouteTraceGroup {
|
|
45
|
+
route: string;
|
|
46
|
+
traces: InspectorTraceSummary[];
|
|
47
|
+
stats: RouteStats;
|
|
48
|
+
}
|
|
49
|
+
export interface RouteStats {
|
|
50
|
+
count: number;
|
|
51
|
+
latest: string;
|
|
52
|
+
slowestMs: number;
|
|
53
|
+
p50Ms: number;
|
|
54
|
+
p95Ms: number;
|
|
55
|
+
errorRate: number;
|
|
56
|
+
}
|
|
57
|
+
export declare function traceSelectionKey(trace: Pick<InspectorTraceSummary, 'traceId' | 'requestSegmentId'>): string;
|
|
58
|
+
export declare function selectVisibleTraceKey(current: string | null, traces: Pick<InspectorTraceSummary, 'traceId' | 'requestSegmentId'>[]): string | null;
|
|
59
|
+
export declare function focusTraceOnSegment(trace: InspectorTrace, requestSegmentId: string): InspectorTrace;
|
|
60
|
+
export declare function errorSpanIds(roots: InspectorSpan[]): string[];
|
|
61
|
+
export declare function diagnosticSpanIds(spans: InspectorDiagnosticSpan[]): string[];
|
|
62
|
+
export declare function flattenVisibleSpans(roots: InspectorSpan[], collapsedIds: ReadonlySet<string>, search?: SpanSearchResult, matchesOnly?: boolean): FlatSpanRow[];
|
|
63
|
+
export declare function deriveSpanSearch(roots: InspectorSpan[], query: string): SpanSearchResult;
|
|
64
|
+
export declare function searchableSpanText(span: InspectorSpan): string;
|
|
65
|
+
export declare function searchableTraceText(trace: InspectorTraceSummary): string;
|
|
66
|
+
export declare function matchesSearchText(text: string, query: string): boolean;
|
|
67
|
+
export declare function parseTraceFilterQuery(query: string): ParsedTraceFilter;
|
|
68
|
+
export declare function traceMatchesFilter(trace: InspectorTraceSummary, filter: ParsedTraceFilter): boolean;
|
|
69
|
+
export declare function routeTraceGroups(traces: InspectorTraceSummary[]): RouteTraceGroup[];
|
|
70
|
+
export declare function routeStats(traces: InspectorTraceSummary[]): RouteStats;
|
|
71
|
+
export declare function calculateTimelineBar(span: Pick<InspectorSpan, 'offsetMs' | 'durationMs'>, range: ZoomRange, minWidthPct?: number): TimelineBar;
|
|
72
|
+
export declare function computeTicks(range: ZoomRange, maxTicks?: number): Tick[];
|
|
73
|
+
export declare function visibleRowWindow(rowCount: number, scrollTop: number, viewportHeight: number, rowHeight: number, overscan?: number): RowWindow;
|
|
74
|
+
export declare function findTimelineHoverTarget(rows: FlatSpanRow[], rowIndex: number, offsetMs: number, range: ZoomRange, viewportWidth: number, snapPx?: number): TimelineHoverTarget | null;
|
|
75
|
+
export declare function formatAbsoluteTraceTime(startTimeUnixNano: string, offsetMs: number): string;
|
|
76
|
+
export declare function zoomAt(range: ZoomRange, fullDurationMs: number, anchorPct: number, scale: number): ZoomRange;
|
|
77
|
+
export declare function formatDuration(value: number): string;
|
|
78
|
+
export declare function formatOffset(value: number): string;
|
|
79
|
+
export declare function formatTimestamp(value: string | number | Date): string;
|
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.traceSelectionKey = traceSelectionKey;
|
|
4
|
+
exports.selectVisibleTraceKey = selectVisibleTraceKey;
|
|
5
|
+
exports.focusTraceOnSegment = focusTraceOnSegment;
|
|
6
|
+
exports.errorSpanIds = errorSpanIds;
|
|
7
|
+
exports.diagnosticSpanIds = diagnosticSpanIds;
|
|
8
|
+
exports.flattenVisibleSpans = flattenVisibleSpans;
|
|
9
|
+
exports.deriveSpanSearch = deriveSpanSearch;
|
|
10
|
+
exports.searchableSpanText = searchableSpanText;
|
|
11
|
+
exports.searchableTraceText = searchableTraceText;
|
|
12
|
+
exports.matchesSearchText = matchesSearchText;
|
|
13
|
+
exports.parseTraceFilterQuery = parseTraceFilterQuery;
|
|
14
|
+
exports.traceMatchesFilter = traceMatchesFilter;
|
|
15
|
+
exports.routeTraceGroups = routeTraceGroups;
|
|
16
|
+
exports.routeStats = routeStats;
|
|
17
|
+
exports.calculateTimelineBar = calculateTimelineBar;
|
|
18
|
+
exports.computeTicks = computeTicks;
|
|
19
|
+
exports.visibleRowWindow = visibleRowWindow;
|
|
20
|
+
exports.findTimelineHoverTarget = findTimelineHoverTarget;
|
|
21
|
+
exports.formatAbsoluteTraceTime = formatAbsoluteTraceTime;
|
|
22
|
+
exports.zoomAt = zoomAt;
|
|
23
|
+
exports.formatDuration = formatDuration;
|
|
24
|
+
exports.formatOffset = formatOffset;
|
|
25
|
+
exports.formatTimestamp = formatTimestamp;
|
|
26
|
+
function traceSelectionKey(trace) {
|
|
27
|
+
return `${trace.traceId}:${trace.requestSegmentId}`;
|
|
28
|
+
}
|
|
29
|
+
function selectVisibleTraceKey(current, traces) {
|
|
30
|
+
if (current && traces.some((item) => traceSelectionKey(item) === current)) {
|
|
31
|
+
return current;
|
|
32
|
+
}
|
|
33
|
+
return traces[0] ? traceSelectionKey(traces[0]) : null;
|
|
34
|
+
}
|
|
35
|
+
function focusTraceOnSegment(trace, requestSegmentId) {
|
|
36
|
+
const segment = trace.requestSegments.find((item) => item.requestSegmentId === requestSegmentId);
|
|
37
|
+
if (!segment || segment.requestSegmentId === trace.requestSegmentId) {
|
|
38
|
+
return {
|
|
39
|
+
...trace,
|
|
40
|
+
spans: segment ? rootsForSegment(trace.spans, segment.requestSegmentId) : trace.spans,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
...trace,
|
|
45
|
+
requestSegmentId: segment.requestSegmentId,
|
|
46
|
+
spanCount: segment.spanCount,
|
|
47
|
+
rootSpan: segment.rootSpan,
|
|
48
|
+
timestamp: formatSegmentTimestamp(trace.startTimeUnixNano, segment.startOffsetMs),
|
|
49
|
+
durationMs: segment.durationMs,
|
|
50
|
+
durationRangeMs: {
|
|
51
|
+
start: segment.startOffsetMs,
|
|
52
|
+
end: segment.endOffsetMs,
|
|
53
|
+
},
|
|
54
|
+
statusBucket: segment.statusBucket,
|
|
55
|
+
requestKind: segment.requestKind,
|
|
56
|
+
routeLabel: segment.routeLabel,
|
|
57
|
+
errorSpanCount: segment.errorSpanCount,
|
|
58
|
+
topSlowSpans: segment.topSlowSpans,
|
|
59
|
+
firstError: segment.firstError,
|
|
60
|
+
exceptionSummary: segment.exceptionSummary,
|
|
61
|
+
criticalPath: segment.criticalPath,
|
|
62
|
+
spans: rootsForSegment(trace.spans, segment.requestSegmentId),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function errorSpanIds(roots) {
|
|
66
|
+
const ids = [];
|
|
67
|
+
visitSpans(roots, (span) => {
|
|
68
|
+
if (span.hasError)
|
|
69
|
+
ids.push(span.spanId);
|
|
70
|
+
});
|
|
71
|
+
return ids;
|
|
72
|
+
}
|
|
73
|
+
function diagnosticSpanIds(spans) {
|
|
74
|
+
return spans.map((span) => span.spanId);
|
|
75
|
+
}
|
|
76
|
+
function flattenVisibleSpans(roots, collapsedIds, search, matchesOnly = false) {
|
|
77
|
+
const rows = [];
|
|
78
|
+
function visit(span, depth, isLastChild, ancestorLastChild) {
|
|
79
|
+
if (matchesOnly && search && !search.visible.has(span.spanId)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const isCollapsed = collapsedIds.has(span.spanId);
|
|
83
|
+
rows.push({
|
|
84
|
+
span,
|
|
85
|
+
depth,
|
|
86
|
+
index: rows.length,
|
|
87
|
+
isLastChild,
|
|
88
|
+
ancestorLastChild,
|
|
89
|
+
hasChildren: span.children.length > 0,
|
|
90
|
+
isCollapsed,
|
|
91
|
+
isSearchMatch: search?.matches.has(span.spanId) ?? false,
|
|
92
|
+
isSearchAncestor: search ? search.visible.has(span.spanId) && !search.matches.has(span.spanId) : false,
|
|
93
|
+
});
|
|
94
|
+
if (isCollapsed) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
span.children.forEach((child, index) => {
|
|
98
|
+
visit(child, depth + 1, index === span.children.length - 1, [
|
|
99
|
+
...ancestorLastChild,
|
|
100
|
+
isLastChild,
|
|
101
|
+
]);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
roots.forEach((root, index) => {
|
|
105
|
+
visit(root, 0, index === roots.length - 1, []);
|
|
106
|
+
});
|
|
107
|
+
return rows;
|
|
108
|
+
}
|
|
109
|
+
function deriveSpanSearch(roots, query) {
|
|
110
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
111
|
+
const matches = new Set();
|
|
112
|
+
const visible = new Set();
|
|
113
|
+
if (!normalizedQuery) {
|
|
114
|
+
return { matches, visible };
|
|
115
|
+
}
|
|
116
|
+
function visit(span, ancestors) {
|
|
117
|
+
const hit = searchableSpanText(span).includes(normalizedQuery);
|
|
118
|
+
if (hit) {
|
|
119
|
+
matches.add(span.spanId);
|
|
120
|
+
for (const ancestor of ancestors) {
|
|
121
|
+
visible.add(ancestor);
|
|
122
|
+
}
|
|
123
|
+
visible.add(span.spanId);
|
|
124
|
+
}
|
|
125
|
+
for (const child of span.children) {
|
|
126
|
+
visit(child, [...ancestors, span.spanId]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
for (const root of roots) {
|
|
130
|
+
visit(root, []);
|
|
131
|
+
}
|
|
132
|
+
return { matches, visible };
|
|
133
|
+
}
|
|
134
|
+
function searchableSpanText(span) {
|
|
135
|
+
return typedSearchText([
|
|
136
|
+
span.name,
|
|
137
|
+
span.spanId,
|
|
138
|
+
span.parentSpanId,
|
|
139
|
+
span.kind,
|
|
140
|
+
span.serviceName,
|
|
141
|
+
span.spanType,
|
|
142
|
+
span.status?.code,
|
|
143
|
+
span.status?.message,
|
|
144
|
+
span.statusCode,
|
|
145
|
+
span.hasError ? 'error' : undefined,
|
|
146
|
+
entriesForSearch(span.attributes),
|
|
147
|
+
entriesForSearch(span.resourceAttributes),
|
|
148
|
+
span.events.map(eventFields),
|
|
149
|
+
span.links.map(linkFields),
|
|
150
|
+
]);
|
|
151
|
+
}
|
|
152
|
+
function searchableTraceText(trace) {
|
|
153
|
+
return typedSearchText([
|
|
154
|
+
trace.traceId,
|
|
155
|
+
trace.rootSpan.spanId,
|
|
156
|
+
trace.rootSpan.name,
|
|
157
|
+
trace.rootSpan.route,
|
|
158
|
+
trace.rootSpan.target,
|
|
159
|
+
trace.rootSpan.method,
|
|
160
|
+
trace.rootSpan.statusCode,
|
|
161
|
+
trace.rootSpan.spanType,
|
|
162
|
+
trace.routeLabel,
|
|
163
|
+
trace.statusBucket,
|
|
164
|
+
trace.requestKind,
|
|
165
|
+
trace.hasRsc ? 'rsc' : undefined,
|
|
166
|
+
trace.hasPrefetch ? 'prefetch' : undefined,
|
|
167
|
+
trace.errorSpanCount ? 'error' : undefined,
|
|
168
|
+
trace.segmentCount > 1 ? 'segment' : undefined,
|
|
169
|
+
trace.firstError ? [trace.firstError.name, trace.firstError.exceptionMessage, trace.firstError.statusMessage] : undefined,
|
|
170
|
+
trace.exceptionSummary ? [trace.exceptionSummary.firstMessage, trace.exceptionSummary.firstType] : undefined,
|
|
171
|
+
trace.topSlowSpans.map((span) => [span.name, span.serviceName]),
|
|
172
|
+
trace.serviceNames,
|
|
173
|
+
trace.rootSpan.attributes ? entriesForSearch(trace.rootSpan.attributes) : undefined,
|
|
174
|
+
(hasTraceDetail(trace) ? trace.spans : []).map(searchableSpanText),
|
|
175
|
+
]);
|
|
176
|
+
}
|
|
177
|
+
function rootsForSegment(roots, requestSegmentId) {
|
|
178
|
+
const root = findSpan(roots, requestSegmentId);
|
|
179
|
+
return root ? [root] : roots;
|
|
180
|
+
}
|
|
181
|
+
function findSpan(spans, spanId) {
|
|
182
|
+
for (const span of spans) {
|
|
183
|
+
if (span.spanId === spanId)
|
|
184
|
+
return span;
|
|
185
|
+
const child = findSpan(span.children, spanId);
|
|
186
|
+
if (child)
|
|
187
|
+
return child;
|
|
188
|
+
}
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
function visitSpans(spans, visit) {
|
|
192
|
+
for (const span of spans) {
|
|
193
|
+
visit(span);
|
|
194
|
+
visitSpans(span.children, visit);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function formatSegmentTimestamp(traceStartTimeUnixNano, offsetMs) {
|
|
198
|
+
try {
|
|
199
|
+
const startMs = Number(BigInt(traceStartTimeUnixNano) / 1000000n);
|
|
200
|
+
return new Date(startMs + Math.max(offsetMs, 0)).toISOString();
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return new Date().toISOString();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function hasTraceDetail(trace) {
|
|
207
|
+
return 'spans' in trace;
|
|
208
|
+
}
|
|
209
|
+
function matchesSearchText(text, query) {
|
|
210
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
211
|
+
return !normalizedQuery || text.includes(normalizedQuery);
|
|
212
|
+
}
|
|
213
|
+
function parseTraceFilterQuery(query) {
|
|
214
|
+
const fields = {
|
|
215
|
+
text: '',
|
|
216
|
+
route: [],
|
|
217
|
+
service: [],
|
|
218
|
+
duration: [],
|
|
219
|
+
};
|
|
220
|
+
const textTokens = [];
|
|
221
|
+
for (const token of tokenizeQuery(query)) {
|
|
222
|
+
const separator = token.indexOf(':');
|
|
223
|
+
if (separator < 1) {
|
|
224
|
+
textTokens.push(token);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
const key = token.slice(0, separator).toLowerCase();
|
|
228
|
+
const value = token.slice(separator + 1);
|
|
229
|
+
if (!value) {
|
|
230
|
+
textTokens.push(token);
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (key === 'route') {
|
|
234
|
+
fields.route.push(value.toLowerCase());
|
|
235
|
+
}
|
|
236
|
+
else if (key === 'service') {
|
|
237
|
+
fields.service.push(value.toLowerCase());
|
|
238
|
+
}
|
|
239
|
+
else if (key === 'duration') {
|
|
240
|
+
const duration = parseDurationFilter(value);
|
|
241
|
+
if (duration) {
|
|
242
|
+
fields.duration.push(duration);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
textTokens.push(token);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (key === 'errors') {
|
|
249
|
+
const errors = parseBoolean(value);
|
|
250
|
+
if (errors === undefined) {
|
|
251
|
+
textTokens.push(token);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
fields.errors = errors;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
textTokens.push(token);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
fields.text = textTokens.join(' ').toLowerCase();
|
|
262
|
+
return fields;
|
|
263
|
+
}
|
|
264
|
+
function traceMatchesFilter(trace, filter) {
|
|
265
|
+
return (matchesSearchText(searchableTraceText(trace), filter.text) &&
|
|
266
|
+
filter.route.every((route) => routeFields(trace).some((field) => field.includes(route))) &&
|
|
267
|
+
filter.service.every((service) => trace.serviceNames.some((name) => name.toLowerCase().includes(service))) &&
|
|
268
|
+
filter.duration.every((duration) => matchesDuration(trace.durationMs, duration)) &&
|
|
269
|
+
(filter.errors === undefined || (trace.errorSpanCount > 0) === filter.errors));
|
|
270
|
+
}
|
|
271
|
+
function routeTraceGroups(traces) {
|
|
272
|
+
const groups = new Map();
|
|
273
|
+
for (const trace of traces) {
|
|
274
|
+
const route = trace.routeLabel || trace.rootSpan.route || trace.rootSpan.target || trace.rootSpan.name || 'unknown';
|
|
275
|
+
const group = groups.get(route);
|
|
276
|
+
if (group) {
|
|
277
|
+
group.push(trace);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
groups.set(route, [trace]);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return [...groups.entries()].map(([route, groupTraces]) => ({
|
|
284
|
+
route,
|
|
285
|
+
traces: groupTraces,
|
|
286
|
+
stats: routeStats(groupTraces),
|
|
287
|
+
}));
|
|
288
|
+
}
|
|
289
|
+
function routeStats(traces) {
|
|
290
|
+
const sortedDurations = traces.map((trace) => trace.durationMs).sort((a, b) => a - b);
|
|
291
|
+
const latest = traces.reduce((current, trace) => {
|
|
292
|
+
return !current || Date.parse(trace.timestamp) > Date.parse(current) ? trace.timestamp : current;
|
|
293
|
+
}, '');
|
|
294
|
+
const slowestMs = sortedDurations.at(-1) ?? 0;
|
|
295
|
+
const errorCount = traces.filter((trace) => trace.errorSpanCount > 0).length;
|
|
296
|
+
return {
|
|
297
|
+
count: traces.length,
|
|
298
|
+
latest,
|
|
299
|
+
slowestMs,
|
|
300
|
+
p50Ms: percentile(sortedDurations, 0.5),
|
|
301
|
+
p95Ms: percentile(sortedDurations, 0.95),
|
|
302
|
+
errorRate: traces.length ? errorCount / traces.length : 0,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function tokenizeQuery(query) {
|
|
306
|
+
const tokens = [];
|
|
307
|
+
const pattern = /"([^"]*)"|'([^']*)'|(\S+)/g;
|
|
308
|
+
let match;
|
|
309
|
+
while ((match = pattern.exec(query)) !== null) {
|
|
310
|
+
tokens.push(match[1] ?? match[2] ?? match[3] ?? '');
|
|
311
|
+
}
|
|
312
|
+
return tokens.filter(Boolean);
|
|
313
|
+
}
|
|
314
|
+
function parseDurationFilter(value) {
|
|
315
|
+
const match = /^(>=|<=|>|<|=)?(\d+(?:\.\d+)?)(ms|s)?$/i.exec(value);
|
|
316
|
+
if (!match)
|
|
317
|
+
return undefined;
|
|
318
|
+
const operator = (match[1] ?? '=');
|
|
319
|
+
const amount = Number(match[2]);
|
|
320
|
+
if (!Number.isFinite(amount))
|
|
321
|
+
return undefined;
|
|
322
|
+
return {
|
|
323
|
+
operator,
|
|
324
|
+
valueMs: (match[3]?.toLowerCase() === 's' ? amount * 1000 : amount),
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function parseBoolean(value) {
|
|
328
|
+
const normalized = value.toLowerCase();
|
|
329
|
+
if (['true', '1', 'yes'].includes(normalized))
|
|
330
|
+
return true;
|
|
331
|
+
if (['false', '0', 'no'].includes(normalized))
|
|
332
|
+
return false;
|
|
333
|
+
return undefined;
|
|
334
|
+
}
|
|
335
|
+
function routeFields(trace) {
|
|
336
|
+
return [
|
|
337
|
+
trace.routeLabel,
|
|
338
|
+
trace.rootSpan.route,
|
|
339
|
+
trace.rootSpan.target,
|
|
340
|
+
trace.rootSpan.name,
|
|
341
|
+
].filter((field) => Boolean(field)).map((field) => field.toLowerCase());
|
|
342
|
+
}
|
|
343
|
+
function matchesDuration(valueMs, filter) {
|
|
344
|
+
if (filter.operator === '>')
|
|
345
|
+
return valueMs > filter.valueMs;
|
|
346
|
+
if (filter.operator === '>=')
|
|
347
|
+
return valueMs >= filter.valueMs;
|
|
348
|
+
if (filter.operator === '<')
|
|
349
|
+
return valueMs < filter.valueMs;
|
|
350
|
+
if (filter.operator === '<=')
|
|
351
|
+
return valueMs <= filter.valueMs;
|
|
352
|
+
return valueMs === filter.valueMs;
|
|
353
|
+
}
|
|
354
|
+
function percentile(sortedValues, rank) {
|
|
355
|
+
if (sortedValues.length === 0)
|
|
356
|
+
return 0;
|
|
357
|
+
const index = Math.ceil(sortedValues.length * rank) - 1;
|
|
358
|
+
return sortedValues[Math.min(Math.max(index, 0), sortedValues.length - 1)] ?? 0;
|
|
359
|
+
}
|
|
360
|
+
function eventFields(event) {
|
|
361
|
+
return [
|
|
362
|
+
event.name,
|
|
363
|
+
event.timeUnixNano,
|
|
364
|
+
event.offsetMs,
|
|
365
|
+
event.name === 'exception' ? 'exception error' : undefined,
|
|
366
|
+
entriesForSearch(event.attributes),
|
|
367
|
+
];
|
|
368
|
+
}
|
|
369
|
+
function linkFields(link) {
|
|
370
|
+
return [
|
|
371
|
+
link.traceId,
|
|
372
|
+
link.spanId,
|
|
373
|
+
link.traceState,
|
|
374
|
+
entriesForSearch(link.attributes),
|
|
375
|
+
];
|
|
376
|
+
}
|
|
377
|
+
function entriesForSearch(value) {
|
|
378
|
+
return Object.entries(value).flatMap(([key, item]) => [key, item]);
|
|
379
|
+
}
|
|
380
|
+
function typedSearchText(values) {
|
|
381
|
+
return values.flatMap(searchTokens).join(' ').toLowerCase();
|
|
382
|
+
}
|
|
383
|
+
function searchTokens(value) {
|
|
384
|
+
if (value === undefined || value === null)
|
|
385
|
+
return [];
|
|
386
|
+
if (Array.isArray(value))
|
|
387
|
+
return value.flatMap(searchTokens);
|
|
388
|
+
if (value instanceof Date)
|
|
389
|
+
return [value.toISOString()];
|
|
390
|
+
if (typeof value === 'object') {
|
|
391
|
+
return Object.entries(value).flatMap(([key, item]) => [key, ...searchTokens(item)]);
|
|
392
|
+
}
|
|
393
|
+
return [String(value)];
|
|
394
|
+
}
|
|
395
|
+
function calculateTimelineBar(span, range, minWidthPct = 0.35) {
|
|
396
|
+
const duration = Math.max(range.endMs - range.startMs, 1);
|
|
397
|
+
const leftPct = ((span.offsetMs - range.startMs) / duration) * 100;
|
|
398
|
+
const rawWidthPct = (span.durationMs / duration) * 100;
|
|
399
|
+
const widthPct = Math.max(rawWidthPct, minWidthPct);
|
|
400
|
+
return {
|
|
401
|
+
leftPct,
|
|
402
|
+
widthPct,
|
|
403
|
+
labelOutside: rawWidthPct < 8,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
function computeTicks(range, maxTicks = 8) {
|
|
407
|
+
const duration = Math.max(range.endMs - range.startMs, 1);
|
|
408
|
+
const roughStep = duration / Math.max(maxTicks, 1);
|
|
409
|
+
const step = niceStep(roughStep);
|
|
410
|
+
const first = Math.ceil(range.startMs / step) * step;
|
|
411
|
+
const ticks = [];
|
|
412
|
+
for (let value = first; value <= range.endMs; value += step) {
|
|
413
|
+
ticks.push({
|
|
414
|
+
valueMs: value,
|
|
415
|
+
leftPct: ((value - range.startMs) / duration) * 100,
|
|
416
|
+
label: formatDuration(value),
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
return ticks;
|
|
420
|
+
}
|
|
421
|
+
function visibleRowWindow(rowCount, scrollTop, viewportHeight, rowHeight, overscan = 6) {
|
|
422
|
+
const visibleStart = Math.floor(scrollTop / rowHeight);
|
|
423
|
+
const visibleEnd = Math.ceil((scrollTop + viewportHeight) / rowHeight);
|
|
424
|
+
const start = clamp(visibleStart - overscan, 0, rowCount);
|
|
425
|
+
const end = clamp(visibleEnd + overscan, start, rowCount);
|
|
426
|
+
return {
|
|
427
|
+
start,
|
|
428
|
+
end,
|
|
429
|
+
offsetTop: start * rowHeight,
|
|
430
|
+
totalHeight: rowCount * rowHeight,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
function findTimelineHoverTarget(rows, rowIndex, offsetMs, range, viewportWidth, snapPx = 8) {
|
|
434
|
+
const row = rows[rowIndex];
|
|
435
|
+
if (!row)
|
|
436
|
+
return null;
|
|
437
|
+
const thresholdMs = (Math.max(range.endMs - range.startMs, 1) / Math.max(viewportWidth, 1)) * snapPx;
|
|
438
|
+
const nearestEvent = row.span.events.reduce((nearest, event) => {
|
|
439
|
+
if (event.offsetMs < range.startMs || event.offsetMs > range.endMs)
|
|
440
|
+
return nearest;
|
|
441
|
+
if (Math.abs(event.offsetMs - offsetMs) > thresholdMs)
|
|
442
|
+
return nearest;
|
|
443
|
+
if (!nearest)
|
|
444
|
+
return event;
|
|
445
|
+
return Math.abs(event.offsetMs - offsetMs) < Math.abs(nearest.offsetMs - offsetMs) ? event : nearest;
|
|
446
|
+
}, null);
|
|
447
|
+
if (nearestEvent) {
|
|
448
|
+
return {
|
|
449
|
+
kind: 'event',
|
|
450
|
+
span: row.span,
|
|
451
|
+
event: nearestEvent,
|
|
452
|
+
offsetMs: nearestEvent.offsetMs,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
if (offsetMs >= row.span.offsetMs - thresholdMs && offsetMs <= row.span.endOffsetMs + thresholdMs) {
|
|
456
|
+
return {
|
|
457
|
+
kind: 'span',
|
|
458
|
+
span: row.span,
|
|
459
|
+
offsetMs,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
return null;
|
|
463
|
+
}
|
|
464
|
+
function formatAbsoluteTraceTime(startTimeUnixNano, offsetMs) {
|
|
465
|
+
try {
|
|
466
|
+
const startMs = Number(BigInt(startTimeUnixNano) / 1000000n);
|
|
467
|
+
return formatTimestamp(startMs + Math.max(offsetMs, 0));
|
|
468
|
+
}
|
|
469
|
+
catch {
|
|
470
|
+
return formatTimestamp(Date.now());
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
function zoomAt(range, fullDurationMs, anchorPct, scale) {
|
|
474
|
+
const duration = Math.max(range.endMs - range.startMs, 1);
|
|
475
|
+
const nextDuration = clamp(duration / scale, 5, Math.max(fullDurationMs, 5));
|
|
476
|
+
const anchorMs = range.startMs + duration * clamp(anchorPct, 0, 1);
|
|
477
|
+
const nextStart = clamp(anchorMs - nextDuration * anchorPct, 0, fullDurationMs - nextDuration);
|
|
478
|
+
return {
|
|
479
|
+
startMs: nextStart,
|
|
480
|
+
endMs: nextStart + nextDuration,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
function formatDuration(value) {
|
|
484
|
+
if (!Number.isFinite(value))
|
|
485
|
+
return '0 ms';
|
|
486
|
+
if (Math.abs(value) < 1)
|
|
487
|
+
return `${value.toFixed(2)} ms`;
|
|
488
|
+
if (Math.abs(value) < 1000)
|
|
489
|
+
return `${value.toFixed(1)} ms`;
|
|
490
|
+
return `${(value / 1000).toFixed(2)} s`;
|
|
491
|
+
}
|
|
492
|
+
function formatOffset(value) {
|
|
493
|
+
return `+${formatDuration(Math.max(value, 0))}`;
|
|
494
|
+
}
|
|
495
|
+
function formatTimestamp(value) {
|
|
496
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
497
|
+
return new Intl.DateTimeFormat(undefined, {
|
|
498
|
+
hour: '2-digit',
|
|
499
|
+
minute: '2-digit',
|
|
500
|
+
second: '2-digit',
|
|
501
|
+
fractionalSecondDigits: 3,
|
|
502
|
+
}).format(date);
|
|
503
|
+
}
|
|
504
|
+
function niceStep(value) {
|
|
505
|
+
const exponent = Math.floor(Math.log10(value));
|
|
506
|
+
const base = 10 ** exponent;
|
|
507
|
+
const fraction = value / base;
|
|
508
|
+
const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
|
|
509
|
+
return niceFraction * base;
|
|
510
|
+
}
|
|
511
|
+
function clamp(value, min, max) {
|
|
512
|
+
return Math.min(Math.max(value, min), max);
|
|
513
|
+
}
|
|
514
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspector/model/index.ts"],"names":[],"mappings":";;AAoEA,8CAEC;AAED,sDAQC;AAED,kDAiCC;AAED,oCAMC;AAED,8CAEC;AAED,kDAgDC;AAED,4CAgCC;AAED,gDAiBC;AAED,kDAwBC;AAsCD,8CAGC;AAED,sDAgDC;AAED,gDAQC;AAED,4CAkBC;AAED,gCAgBC;AA+FD,oDAeC;AAED,oCAgBC;AAED,4CAkBC;AAED,0DAqCC;AAED,0DAOC;AAED,wBAeC;AAED,wCAKC;AAED,oCAEC;AAED,0CAQC;AAjjBD,SAAgB,iBAAiB,CAAC,KAAkE;IAClG,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAA;AACrD,CAAC;AAED,SAAgB,qBAAqB,CACnC,OAAsB,EACtB,MAAqE;IAErE,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;QAC1E,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACxD,CAAC;AAED,SAAgB,mBAAmB,CACjC,KAAqB,EACrB,gBAAwB;IAExB,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,CAAA;IAChG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACpE,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;SACtF,CAAA;IACH,CAAC;IAED,OAAO;QACL,GAAG,KAAK;QACR,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAAC;QACjF,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,eAAe,EAAE;YACf,KAAK,EAAE,OAAO,CAAC,aAAa;YAC5B,GAAG,EAAE,OAAO,CAAC,WAAW;SACzB;QACD,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;KAC9D,CAAA;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,KAAsB;IACjD,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,IAAI,CAAC,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAgC;IAChE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACzC,CAAC;AAED,SAAgB,mBAAmB,CACjC,KAAsB,EACtB,YAAiC,EACjC,MAAyB,EACzB,WAAW,GAAG,KAAK;IAEnB,MAAM,IAAI,GAAkB,EAAE,CAAA;IAE9B,SAAS,KAAK,CACZ,IAAmB,EACnB,KAAa,EACb,WAAoB,EACpB,iBAA4B;QAE5B,IAAI,WAAW,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,OAAM;QACR,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,CAAC;YACR,IAAI;YACJ,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,WAAW;YACX,iBAAiB;YACjB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrC,WAAW;YACX,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK;YACxD,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;SACvG,CAAC,CAAA;QAEF,IAAI,WAAW,EAAE,CAAC;YAChB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1D,GAAG,iBAAiB;gBACpB,WAAW;aACZ,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAgB,gBAAgB,CAC9B,KAAsB,EACtB,KAAa;IAEb,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IAEjC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAC7B,CAAC;IAED,SAAS,KAAK,CAAC,IAAmB,EAAE,SAAmB;QACrD,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;QAC9D,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACxB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACvB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1B,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC7B,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAmB;IACpD,OAAO,eAAe,CAAC;QACrB,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,MAAM,EAAE,IAAI;QACjB,IAAI,CAAC,MAAM,EAAE,OAAO;QACpB,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACnC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;QACjC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;KAC3B,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAA4B;IAC9D,OAAO,eAAe,CAAC;QACrB,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,QAAQ,CAAC,MAAM;QACrB,KAAK,CAAC,QAAQ,CAAC,IAAI;QACnB,KAAK,CAAC,QAAQ,CAAC,KAAK;QACpB,KAAK,CAAC,QAAQ,CAAC,MAAM;QACrB,KAAK,CAAC,QAAQ,CAAC,MAAM;QACrB,KAAK,CAAC,QAAQ,CAAC,UAAU;QACzB,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACvB,KAAK,CAAC,UAAU;QAChB,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAChC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC1C,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC1C,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC9C,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;QACzH,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5G,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QACnF,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC;KACnE,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAsB,EAAE,gBAAwB;IACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;IAC9C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAsB,EAAE,MAAc;IACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC7C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;IACzB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,KAAsB,EAAE,KAAoC;IAC9E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,sBAA8B,EAAE,QAAgB;IAC9E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,QAAU,CAAC,CAAA;QACnE,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACjC,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,KAA4B;IAE5B,OAAO,OAAO,IAAI,KAAK,CAAA;AACzB,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY,EAAE,KAAa;IAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAClD,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;AAC3D,CAAC;AAED,SAAgB,qBAAqB,CAAC,KAAa;IACjD,MAAM,MAAM,GAAsB;QAChC,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;KACb,CAAA;IACD,MAAM,UAAU,GAAa,EAAE,CAAA;IAE/B,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QACxC,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QAC1C,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;YAC3C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;YAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;YACxB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IAChD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAA4B,EAAE,MAAyB;IACxF,OAAO,CACL,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1G,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChF,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAC9E,CAAA;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAA+B;IAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAA;IAEzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAA;QACnH,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1D,KAAK;QACL,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC;KAC/B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,SAAgB,UAAU,CAAC,MAA+B;IACxD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACrF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC9C,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;IAClG,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,MAAM,SAAS,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IAE5E,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,MAAM;QACN,SAAS;QACT,KAAK,EAAE,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC;QACvC,KAAK,EAAE,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC;QACxC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC1D,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,4BAA4B,CAAA;IAC5C,IAAI,KAA6B,CAAA;IAEjC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,yCAAyC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAE5B,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAA+B,CAAA;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAA;IAE9C,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;KACpE,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IACtC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1D,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3D,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,KAA4B;IAC/C,OAAO;QACL,KAAK,CAAC,UAAU;QAChB,KAAK,CAAC,QAAQ,CAAC,KAAK;QACpB,KAAK,CAAC,QAAQ,CAAC,MAAM;QACrB,KAAK,CAAC,QAAQ,CAAC,IAAI;KACpB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;AAC1F,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,MAAsB;IAC9D,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG;QAAE,OAAO,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAC5D,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,OAAO,IAAI,MAAM,CAAC,OAAO,CAAA;IAC9D,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG;QAAE,OAAO,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAC5D,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,OAAO,IAAI,MAAM,CAAC,OAAO,CAAA;IAC9D,OAAO,OAAO,KAAK,MAAM,CAAC,OAAO,CAAA;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,YAAsB,EAAE,IAAY;IACtD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IACvD,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC5C,OAAO;QACL,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;QAC1D,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;KACnC,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAuB;IACzC,OAAO;QACL,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,UAAU;QACf,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;KAClC,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA8B;IACtD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,eAAe,CAAC,MAAiB;IACxC,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC5D,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChH,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACxB,CAAC;AAED,SAAgB,oBAAoB,CAClC,IAAoD,EACpD,KAAgB,EAChB,WAAW,GAAG,IAAI;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACzD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAA;IAClE,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAA;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAEnD,OAAO;QACL,OAAO;QACP,QAAQ;QACR,YAAY,EAAE,WAAW,GAAG,CAAC;KAC9B,CAAA;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,KAAgB,EAAE,QAAQ,GAAG,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IACpD,MAAM,KAAK,GAAW,EAAE,CAAA;IAExB,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC;YACT,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG;YACnD,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAgB,gBAAgB,CAC9B,QAAgB,EAChB,SAAiB,EACjB,cAAsB,EACtB,SAAiB,EACjB,QAAQ,GAAG,CAAC;IAEZ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,CAAA;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,SAAS,CAAC,CAAA;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,GAAG,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAEzD,OAAO;QACL,KAAK;QACL,GAAG;QACH,SAAS,EAAE,KAAK,GAAG,SAAS;QAC5B,WAAW,EAAE,QAAQ,GAAG,SAAS;KAClC,CAAA;AACH,CAAC;AAED,SAAgB,uBAAuB,CACrC,IAAmB,EACnB,QAAgB,EAChB,QAAgB,EAChB,KAAgB,EAChB,aAAqB,EACrB,MAAM,GAAG,CAAC;IAEV,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;IACpG,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAA4B,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACxF,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK;YAAE,OAAO,OAAO,CAAA;QAClF,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,WAAW;YAAE,OAAO,OAAO,CAAA;QACrE,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;IACtG,CAAC,EAAE,IAAI,CAAC,CAAA;IAER,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,YAAY,CAAC,QAAQ;SAChC,CAAA;IACH,CAAC;IAED,IAAI,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC;QAClG,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ;SACT,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAgB,uBAAuB,CAAC,iBAAyB,EAAE,QAAgB;IACjF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,QAAU,CAAC,CAAA;QAC9D,OAAO,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACpC,CAAC;AACH,CAAC;AAED,SAAgB,MAAM,CACpB,KAAgB,EAChB,cAAsB,EACtB,SAAiB,EACjB,KAAa;IAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACzD,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,GAAG,YAAY,GAAG,SAAS,EAAE,CAAC,EAAE,cAAc,GAAG,YAAY,CAAC,CAAA;IAE9F,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS,GAAG,YAAY;KAChC,CAAA;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,KAAa;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAA;IAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;IACxD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;IAC3D,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AACzC,CAAC;AAED,SAAgB,YAAY,CAAC,KAAa;IACxC,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;AACjD,CAAC;AAED,SAAgB,eAAe,CAAC,KAA6B;IAC3D,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5D,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;QACxC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,sBAAsB,EAAE,CAAC;KAC1B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,MAAM,IAAI,GAAG,EAAE,IAAI,QAAQ,CAAA;IAC3B,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAA;IAC7B,MAAM,YAAY,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACnF,OAAO,YAAY,GAAG,IAAI,CAAA;AAC5B,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AAC5C,CAAC"}
|