@heyhuynhgiabuu/pi-pretty 0.6.25 → 0.6.27
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 +34 -0
- package/README.md +47 -17
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -0
- package/dist/config.js.map +1 -1
- package/dist/fff.d.ts +16 -1
- package/dist/fff.d.ts.map +1 -1
- package/dist/fff.js +139 -33
- package/dist/fff.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +192 -43
- package/dist/index.js.map +1 -1
- package/dist/prompt-editor.d.ts +11 -0
- package/dist/prompt-editor.d.ts.map +1 -0
- package/dist/prompt-editor.js +78 -0
- package/dist/prompt-editor.js.map +1 -0
- package/dist/render.d.ts +9 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +25 -9
- package/dist/render.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +73 -30
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +29 -10
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +20 -10
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/ls.d.ts.map +1 -1
- package/dist/tools/ls.js +10 -5
- package/dist/tools/ls.js.map +1 -1
- package/dist/tools/metrics.d.ts +6 -1
- package/dist/tools/metrics.d.ts.map +1 -1
- package/dist/tools/metrics.js +21 -8
- package/dist/tools/metrics.js.map +1 -1
- package/dist/tools/read.d.ts +2 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +93 -30
- package/dist/tools/read.js.map +1 -1
- package/dist/types.d.ts +13 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/working-indicator.d.ts +91 -26
- package/dist/working-indicator.d.ts.map +1 -1
- package/dist/working-indicator.js +259 -77
- package/dist/working-indicator.js.map +1 -1
- package/package.json +7 -6
- package/src/config.ts +51 -0
- package/src/fff.ts +158 -29
- package/src/index.ts +207 -47
- package/src/prompt-editor.ts +102 -0
- package/src/render.ts +30 -11
- package/src/tools/bash.ts +94 -32
- package/src/tools/find.ts +39 -17
- package/src/tools/grep.ts +26 -15
- package/src/tools/ls.ts +19 -10
- package/src/tools/metrics.ts +28 -8
- package/src/tools/read.ts +122 -30
- package/src/types.ts +14 -3
- package/src/working-indicator.ts +309 -88
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* omp-style shimmer working indicator
|
|
2
|
+
* omp-style shimmer working indicator.
|
|
3
3
|
*
|
|
4
4
|
* Ports the shimmer sweep from oh-my-pi's `modes/theme/shimmer.ts`: the sweep
|
|
5
5
|
* is discretized into one pre-rendered frame per band position, cycled at
|
|
6
6
|
* 1000/30 ms so the band travels 30 cells/second — omp's exact speed.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* (`setWorkingVisible(false)`) and install our own zero-padding component via
|
|
12
|
-
* `setWidget(..., "aboveEditor")`, animating it with a 33ms interval.
|
|
8
|
+
* On hosts that expose Pi's embedded working-status API, frames are delegated
|
|
9
|
+
* to the host so the row is rendered in the editor's top border. Older hosts
|
|
10
|
+
* without that API use the zero-padding widget fallback above the editor.
|
|
13
11
|
*
|
|
14
|
-
* Frame layout: `<dim spinner> <shimmer text
|
|
15
|
-
*
|
|
16
|
-
*
|
|
12
|
+
* Frame layout: `<dim spinner> <shimmer text>`, one full sweep per phrase —
|
|
13
|
+
* `texts` rotates through phrases chapter by chapter with a continuous spinner
|
|
14
|
+
* phase. The extension adds no interrupt hint or token-count suffix.
|
|
17
15
|
*/
|
|
18
16
|
import { type ThinkingIndicatorConfig, type WorkingIndicatorConfig } from "./config.js";
|
|
19
17
|
/** One cell per frame at 33ms = omp's 30 cells/second band speed. */
|
|
@@ -32,6 +30,7 @@ export interface WorkingIndicatorSettings {
|
|
|
32
30
|
mode: WorkingIndicatorMode;
|
|
33
31
|
palette: WorkingIndicatorPalette;
|
|
34
32
|
bold: boolean;
|
|
33
|
+
/** @deprecated Retained for config compatibility; no interrupt hint is rendered. */
|
|
35
34
|
hint: boolean;
|
|
36
35
|
/** Tint mid/high tiers (and dim the spinner) with a per-session accent color. */
|
|
37
36
|
sessionAccent: boolean;
|
|
@@ -70,7 +69,7 @@ export interface WorkingFrameOptions {
|
|
|
70
69
|
spinnerColor?: string;
|
|
71
70
|
/** Wrap every frame in italic (pi's hidden-thinking label is italic). */
|
|
72
71
|
italic?: boolean;
|
|
73
|
-
/**
|
|
72
|
+
/** @deprecated Retained for call-site compatibility; suffixes are not rendered. */
|
|
74
73
|
hint?: string;
|
|
75
74
|
intervalMs?: number;
|
|
76
75
|
}
|
|
@@ -83,19 +82,27 @@ export declare function buildWorkingFrames(texts: string[], options: WorkingFram
|
|
|
83
82
|
frames: string[];
|
|
84
83
|
intervalMs: number;
|
|
85
84
|
};
|
|
85
|
+
/** @deprecated The working row no longer displays token stats. */
|
|
86
|
+
export declare function workingTokens(message: unknown): number;
|
|
86
87
|
/** Slice of the pi-tui TUI instance the widget needs. */
|
|
87
88
|
export interface WidgetTuiLike {
|
|
88
89
|
requestRender(): void;
|
|
89
90
|
}
|
|
90
91
|
/**
|
|
91
92
|
* Zero-padding working-row component. The host renders whatever `render()`
|
|
92
|
-
* returns with no margins, so the row sits flush-left
|
|
93
|
-
*
|
|
93
|
+
* returns with no margins, so the legacy widget row sits flush-left without
|
|
94
|
+
* relying on the host loader's padding.
|
|
94
95
|
*/
|
|
95
96
|
export declare class WorkingWidget {
|
|
96
97
|
#private;
|
|
97
98
|
setFrames(frames: string[], intervalMs: number): void;
|
|
98
99
|
attach(tui: WidgetTuiLike): void;
|
|
100
|
+
/** Ask the host for a render — lets non-widget consumers (the thinking label
|
|
101
|
+
* ticker) reuse this widget's TUI handle instead of relying on natural
|
|
102
|
+
* streaming renders. */
|
|
103
|
+
requestRender(): void;
|
|
104
|
+
/** @deprecated Token stats are owned by Pi and are no longer rendered here. */
|
|
105
|
+
setStats(_text: string | undefined): void;
|
|
99
106
|
start(): void;
|
|
100
107
|
stop(): void;
|
|
101
108
|
/** Flush-left single line; invisible (no lines) while stopped. */
|
|
@@ -116,14 +123,58 @@ export interface ThinkingUiLike {
|
|
|
116
123
|
theme?: WorkingThemeLike;
|
|
117
124
|
setHiddenThinkingLabel(label?: string): void;
|
|
118
125
|
}
|
|
126
|
+
/** Controller for the host-component label interception. */
|
|
127
|
+
export interface PerRowThinkingLabels {
|
|
128
|
+
/** Mark the message currently streaming a thinking block (its row animates). */
|
|
129
|
+
setActive(timestamp: number): void;
|
|
130
|
+
/** Freeze a message's completed thinking duration in ms (its row shows
|
|
131
|
+
* `Thought for X` derived from this). */
|
|
132
|
+
complete(timestamp: number, durationMs: number): void;
|
|
133
|
+
/** Drop the active mark (run ended); completed rows keep their durations. */
|
|
134
|
+
clearActive(): void;
|
|
135
|
+
/** Restore the original prototype setter. */
|
|
136
|
+
uninstall(): void;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Intercept the host's per-row label fan-out method
|
|
140
|
+
* (`AssistantMessageComponent.prototype.setHiddenThinkingLabel`): each row
|
|
141
|
+
* substitutes the incoming global label with its own — the streaming row
|
|
142
|
+
* animates, completed rows stay frozen at their own `Thought for X`, unknown
|
|
143
|
+
* rows fall back to pi's default. Any per-call failure passes the incoming
|
|
144
|
+
* label through unchanged, so a host internals change degrades to pi-pretty's
|
|
145
|
+
* global-label behavior instead of breaking. Durations live per session.
|
|
146
|
+
*/
|
|
147
|
+
export declare function installPerRowThinkingLabels(componentClass: unknown): PerRowThinkingLabels | undefined;
|
|
119
148
|
export interface ThinkingLabelAnimator {
|
|
120
|
-
/** Apply the next shimmer frame
|
|
121
|
-
tick(): void;
|
|
149
|
+
/** Apply the next shimmer frame, rebuilding frames when the label changes. */
|
|
150
|
+
tick(label?: string): void;
|
|
151
|
+
/** Apply a non-animated label (the host supplies its normal thinking style). */
|
|
152
|
+
show(label: string): void;
|
|
122
153
|
/** Restore pi's default static label. */
|
|
123
154
|
restore(): void;
|
|
124
|
-
/**
|
|
155
|
+
/** Current pre-rendered label frames (exposed for diagnostics). */
|
|
125
156
|
readonly frames: readonly string[];
|
|
126
157
|
}
|
|
158
|
+
export interface ThinkingTimer {
|
|
159
|
+
/** Render the active label with the current elapsed duration. */
|
|
160
|
+
tick(): void;
|
|
161
|
+
/** Freeze the elapsed duration; returns the total in milliseconds, or
|
|
162
|
+
* undefined when the timer was already terminal. */
|
|
163
|
+
complete(): number | undefined;
|
|
164
|
+
/** Restore pi's default label and make the timer terminal. */
|
|
165
|
+
restore(): void;
|
|
166
|
+
}
|
|
167
|
+
/** Format sub-second elapsed time as milliseconds, then use compact whole seconds. */
|
|
168
|
+
export declare function formatThinkingDuration(elapsedMs: number): string;
|
|
169
|
+
/**
|
|
170
|
+
* Couple elapsed-time wording to the label animator through an injected clock.
|
|
171
|
+
* The timer starts on the first thinking delta, freezes once, and is terminal
|
|
172
|
+
* after completion or restore. `startElapsedMs` resumes a later run in the
|
|
173
|
+
* same message from its accumulated thinking time (per-message semantics:
|
|
174
|
+
* the host renders one label line per thinking run, all sharing the message
|
|
175
|
+
* label, so a fresh-zero restart would visibly rewind earlier lines).
|
|
176
|
+
*/
|
|
177
|
+
export declare function createThinkingTimer(animator: ThinkingLabelAnimator, now?: () => number, startElapsedMs?: number): ThinkingTimer;
|
|
127
178
|
/**
|
|
128
179
|
* True while a streaming assistant message is currently emitting a thinking
|
|
129
180
|
* block (its last content block). Used to gate label ticks to the thinking
|
|
@@ -135,27 +186,36 @@ export declare function thinkingBlockActive(message: unknown): boolean;
|
|
|
135
186
|
* Animate pi's hidden-thinking label ("Thinking...") with the same shimmer as
|
|
136
187
|
* the working row. Pi renders the label as static italic `thinkingText` text;
|
|
137
188
|
* the only extension lever is `setHiddenThinkingLabel(label)`, which rebuilds
|
|
138
|
-
* chat children
|
|
139
|
-
*
|
|
140
|
-
*
|
|
189
|
+
* chat children, so index.ts drives it at 30fps only while the streaming
|
|
190
|
+
* message's last block is thinking. The elapsed label is rebuilt when its
|
|
191
|
+
* displayed duration changes; the shimmer frame still advances every tick.
|
|
141
192
|
*
|
|
142
193
|
* Tiers: low = theme `thinkingText` (pi's own label look), mid/high = session
|
|
143
194
|
* accent when enabled; every frame is italic like pi's label; no spinner.
|
|
144
195
|
*/
|
|
145
196
|
export declare function createThinkingLabelAnimator(ui: ThinkingUiLike, workSettings: WorkingIndicatorSettings, sessionName?: string, thinking?: ThinkingIndicatorSettings): ThinkingLabelAnimator;
|
|
146
|
-
/** Structural slice of pi's Theme needed for the
|
|
197
|
+
/** Structural slice of pi's Theme needed for the palette and thinking label. */
|
|
147
198
|
export interface WorkingThemeLike {
|
|
148
|
-
/**
|
|
199
|
+
/** Retained for compatibility with older theme adapters. */
|
|
149
200
|
fg?: (name: "dim", text: string) => string;
|
|
150
201
|
getFgAnsi?: (name: "dim" | "muted" | "accent" | "thinkingText") => string;
|
|
151
202
|
}
|
|
203
|
+
export interface WorkingStatusOptionsLike {
|
|
204
|
+
frames?: string[];
|
|
205
|
+
intervalMs?: number;
|
|
206
|
+
}
|
|
152
207
|
export interface WorkingUiLike {
|
|
153
208
|
theme?: WorkingThemeLike;
|
|
209
|
+
/** Hosts with Pi's embedded working-status API render this in the editor border. */
|
|
210
|
+
setWorkingIndicator?: (options?: WorkingStatusOptionsLike) => void;
|
|
211
|
+
/** Clear the host message appended after a custom native frame. */
|
|
212
|
+
setWorkingMessage?: (message?: string) => void;
|
|
154
213
|
setWorkingVisible(visible: boolean): void;
|
|
155
214
|
setWidget(key: string, factory: ((tui: WidgetTuiLike, theme: unknown) => WorkingWidget) | undefined, options?: {
|
|
156
215
|
placement?: "aboveEditor" | "belowEditor";
|
|
157
216
|
}): void;
|
|
158
217
|
}
|
|
218
|
+
/** @deprecated Retained for compatibility with the former hint-resolution seam. */
|
|
159
219
|
export interface KeybindingsLike {
|
|
160
220
|
getKeys(name: string): string[];
|
|
161
221
|
}
|
|
@@ -164,18 +224,23 @@ export interface WorkingIndicatorController {
|
|
|
164
224
|
start(): void;
|
|
165
225
|
/** Streaming ended — hide the row and pause the animation. */
|
|
166
226
|
stop(): void;
|
|
167
|
-
/** Remove the
|
|
227
|
+
/** Remove the indicator and stop the animation. */
|
|
168
228
|
dispose(): void;
|
|
229
|
+
/** @deprecated Token stats are owned by Pi and are no longer rendered here. */
|
|
230
|
+
setStats(text: string | undefined): void;
|
|
231
|
+
/** Request a host render for consumers that drive another animated label. */
|
|
232
|
+
requestRender(): void;
|
|
169
233
|
/** Pre-rendered frames (exposed for diagnostics). */
|
|
170
234
|
readonly frames: readonly string[];
|
|
171
235
|
}
|
|
172
236
|
/**
|
|
173
|
-
*
|
|
237
|
+
* Install the custom working shimmer and return its lifecycle controller.
|
|
174
238
|
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
239
|
+
* Current Pi hosts receive the pre-rendered frames through the embedded
|
|
240
|
+
* working-status API, which places them in the editor's top border. Older
|
|
241
|
+
* hosts use a zero-padding widget above the editor. The host lifecycle drives
|
|
242
|
+
* the controller (`start` on agent_start, `stop` on agent_end); disabled or
|
|
243
|
+
* empty phrase settings leave host defaults untouched.
|
|
179
244
|
*/
|
|
180
245
|
export declare function installWorkingIndicator(ui: WorkingUiLike, settings: WorkingIndicatorSettings, deps?: {
|
|
181
246
|
getKeybindings?: () => KeybindingsLike | undefined | Promise<KeybindingsLike | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"working-indicator.d.ts","sourceRoot":"","sources":["../src/working-indicator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"working-indicator.d.ts","sourceRoot":"","sources":["../src/working-indicator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAA6B,KAAK,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAWnH,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AAgBzD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEjE,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,uBAAuB,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,IAAI,EAAE,OAAO,CAAC;IACd,iFAAiF;IACjF,aAAa,EAAE,OAAO,CAAC;IACvB,qFAAqF;IACrF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,0BAA0B,EAAE,wBASxC,CAAC;AA8CF;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC9C,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,wBAAwB,CAwB1B;AAID,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACb;AAED,UAAU,eAAe;IACxB,gFAAgF;IAChF,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,KAAK,MAAM,CAAC;CAC1E;AAkBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG,eAAe,CAM7G;AAsDD,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,mBAAmB,GAC1B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAyF1C;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAatD;AAID,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC7B,aAAa,IAAI,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,aAAa;;IASzB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAMrD,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAIhC;;4BAEwB;IACxB,aAAa,IAAI,IAAI;IAIrB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAEzC,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;IAQZ,kEAAkE;IAClE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAM/B,UAAU,IAAI,IAAI;IAIlB,OAAO,IAAI,IAAI;CAIf;AAID,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,2BAA2B,EAAE,yBAA6C,CAAC;AAExF;;;GAGG;AACH,wBAAgB,gCAAgC,CAC/C,MAAM,EAAE,uBAAuB,GAAG,SAAS,EAC3C,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,yBAAyB,CAM3B;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAID,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACpC,gFAAgF;IAChF,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;6CACyC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,6EAA6E;IAC7E,WAAW,IAAI,IAAI,CAAC;IACpB,6CAA6C;IAC7C,SAAS,IAAI,IAAI,CAAC;CAClB;AAQD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,OAAO,GAAG,oBAAoB,GAAG,SAAS,CAiDrG;AAED,MAAM,WAAW,qBAAqB;IACrC,8EAA8E;IAC9E,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gFAAgF;IAChF,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,yCAAyC;IACzC,OAAO,IAAI,IAAI,CAAC;IAChB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC7B,iEAAiE;IACjE,IAAI,IAAI,IAAI,CAAC;IACb;wDACoD;IACpD,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAC;IAC/B,8DAA8D;IAC9D,OAAO,IAAI,IAAI,CAAC;CAChB;AAMD,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWhE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,qBAAqB,EAC/B,GAAG,GAAE,MAAM,MAAiB,EAC5B,cAAc,SAAI,GAChB,aAAa,CAsBf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAI7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAC1C,EAAE,EAAE,cAAc,EAClB,YAAY,EAAE,wBAAwB,EACtC,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,yBAAyB,GAClC,qBAAqB,CA6DvB;AAID,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAChC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,KAAK,MAAM,CAAC;CAC1E;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACnE,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,SAAS,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,KAAK,aAAa,CAAC,GAAG,SAAS,EAC5E,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,aAAa,GAAG,aAAa,CAAA;KAAE,GACrD,IAAI,CAAC;CACR;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IAC1C,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;IACd,8DAA8D;IAC9D,IAAI,IAAI,IAAI,CAAC;IACb,mDAAmD;IACnD,OAAO,IAAI,IAAI,CAAC;IAChB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACzC,6EAA6E;IAC7E,aAAa,IAAI,IAAI,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAID;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC5C,EAAE,EAAE,aAAa,EACjB,QAAQ,EAAE,wBAAwB,EAClC,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAA;CAAE,EACpG,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,0BAA0B,CAAC,CAgHrC"}
|