@kingkoo1985/ink 6.6.6

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.
Files changed (225) hide show
  1. package/build/colorize.d.ts +4 -0
  2. package/build/colorize.js +59 -0
  3. package/build/colorize.js.map +1 -0
  4. package/build/components/AccessibilityContext.d.ts +3 -0
  5. package/build/components/AccessibilityContext.js +5 -0
  6. package/build/components/AccessibilityContext.js.map +1 -0
  7. package/build/components/App.d.ts +68 -0
  8. package/build/components/App.js +290 -0
  9. package/build/components/App.js.map +1 -0
  10. package/build/components/AppContext.d.ts +52 -0
  11. package/build/components/AppContext.js +16 -0
  12. package/build/components/AppContext.js.map +1 -0
  13. package/build/components/BackgroundContext.d.ts +4 -0
  14. package/build/components/BackgroundContext.js +3 -0
  15. package/build/components/BackgroundContext.js.map +1 -0
  16. package/build/components/Box.d.ts +171 -0
  17. package/build/components/Box.js +40 -0
  18. package/build/components/Box.js.map +1 -0
  19. package/build/components/ErrorOverview.d.ts +6 -0
  20. package/build/components/ErrorOverview.js +84 -0
  21. package/build/components/ErrorOverview.js.map +1 -0
  22. package/build/components/FocusContext.d.ts +16 -0
  23. package/build/components/FocusContext.js +16 -0
  24. package/build/components/FocusContext.js.map +1 -0
  25. package/build/components/Newline.d.ts +13 -0
  26. package/build/components/Newline.js +8 -0
  27. package/build/components/Newline.js.map +1 -0
  28. package/build/components/Spacer.d.ts +7 -0
  29. package/build/components/Spacer.js +11 -0
  30. package/build/components/Spacer.js.map +1 -0
  31. package/build/components/Static.d.ts +24 -0
  32. package/build/components/Static.js +29 -0
  33. package/build/components/Static.js.map +1 -0
  34. package/build/components/StaticRender.d.ts +8 -0
  35. package/build/components/StaticRender.js +19 -0
  36. package/build/components/StaticRender.js.map +1 -0
  37. package/build/components/StderrContext.d.ts +15 -0
  38. package/build/components/StderrContext.js +12 -0
  39. package/build/components/StderrContext.js.map +1 -0
  40. package/build/components/StdinContext.d.ts +22 -0
  41. package/build/components/StdinContext.js +16 -0
  42. package/build/components/StdinContext.js.map +1 -0
  43. package/build/components/StdoutContext.d.ts +15 -0
  44. package/build/components/StdoutContext.js +12 -0
  45. package/build/components/StdoutContext.js.map +1 -0
  46. package/build/components/Text.d.ts +63 -0
  47. package/build/components/Text.js +50 -0
  48. package/build/components/Text.js.map +1 -0
  49. package/build/components/Transform.d.ts +16 -0
  50. package/build/components/Transform.js +15 -0
  51. package/build/components/Transform.js.map +1 -0
  52. package/build/data-limited-lru-map.d.ts +20 -0
  53. package/build/data-limited-lru-map.js +65 -0
  54. package/build/data-limited-lru-map.js.map +1 -0
  55. package/build/debug-log.d.ts +2 -0
  56. package/build/debug-log.js +44 -0
  57. package/build/debug-log.js.map +1 -0
  58. package/build/devtools-window-polyfill.d.ts +1 -0
  59. package/build/devtools-window-polyfill.js +65 -0
  60. package/build/devtools-window-polyfill.js.map +1 -0
  61. package/build/devtools.d.ts +1 -0
  62. package/build/devtools.js +8 -0
  63. package/build/devtools.js.map +1 -0
  64. package/build/dom.d.ts +114 -0
  65. package/build/dom.js +169 -0
  66. package/build/dom.js.map +1 -0
  67. package/build/get-max-width.d.ts +3 -0
  68. package/build/get-max-width.js +10 -0
  69. package/build/get-max-width.js.map +1 -0
  70. package/build/hooks/use-app.d.ts +5 -0
  71. package/build/hooks/use-app.js +8 -0
  72. package/build/hooks/use-app.js.map +1 -0
  73. package/build/hooks/use-focus-manager.d.ts +28 -0
  74. package/build/hooks/use-focus-manager.js +17 -0
  75. package/build/hooks/use-focus-manager.js.map +1 -0
  76. package/build/hooks/use-focus.d.ts +29 -0
  77. package/build/hooks/use-focus.js +42 -0
  78. package/build/hooks/use-focus.js.map +1 -0
  79. package/build/hooks/use-input.d.ts +93 -0
  80. package/build/hooks/use-input.js +92 -0
  81. package/build/hooks/use-input.js.map +1 -0
  82. package/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  83. package/build/hooks/use-is-screen-reader-enabled.js +11 -0
  84. package/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  85. package/build/hooks/use-stderr.d.ts +5 -0
  86. package/build/hooks/use-stderr.js +8 -0
  87. package/build/hooks/use-stderr.js.map +1 -0
  88. package/build/hooks/use-stdin.d.ts +5 -0
  89. package/build/hooks/use-stdin.js +8 -0
  90. package/build/hooks/use-stdin.js.map +1 -0
  91. package/build/hooks/use-stdout.d.ts +5 -0
  92. package/build/hooks/use-stdout.js +8 -0
  93. package/build/hooks/use-stdout.js.map +1 -0
  94. package/build/index.d.ts +38 -0
  95. package/build/index.js +27 -0
  96. package/build/index.js.map +1 -0
  97. package/build/ink.d.ts +110 -0
  98. package/build/ink.js +576 -0
  99. package/build/ink.js.map +1 -0
  100. package/build/instances.d.ts +3 -0
  101. package/build/instances.js +8 -0
  102. package/build/instances.js.map +1 -0
  103. package/build/layout.d.ts +18 -0
  104. package/build/layout.js +54 -0
  105. package/build/layout.js.map +1 -0
  106. package/build/log-update.d.ts +28 -0
  107. package/build/log-update.js +529 -0
  108. package/build/log-update.js.map +1 -0
  109. package/build/measure-element.d.ts +119 -0
  110. package/build/measure-element.js +825 -0
  111. package/build/measure-element.js.map +1 -0
  112. package/build/measure-text.d.ts +50 -0
  113. package/build/measure-text.js +237 -0
  114. package/build/measure-text.js.map +1 -0
  115. package/build/output.d.ts +242 -0
  116. package/build/output.js +607 -0
  117. package/build/output.js.map +1 -0
  118. package/build/parse-keypress.d.ts +14 -0
  119. package/build/parse-keypress.js +225 -0
  120. package/build/parse-keypress.js.map +1 -0
  121. package/build/reconciler.d.ts +4 -0
  122. package/build/reconciler.js +326 -0
  123. package/build/reconciler.js.map +1 -0
  124. package/build/render-background.d.ts +4 -0
  125. package/build/render-background.js +37 -0
  126. package/build/render-background.js.map +1 -0
  127. package/build/render-border.d.ts +4 -0
  128. package/build/render-border.js +81 -0
  129. package/build/render-border.js.map +1 -0
  130. package/build/render-cached.d.ts +18 -0
  131. package/build/render-cached.js +66 -0
  132. package/build/render-cached.js.map +1 -0
  133. package/build/render-container.d.ts +27 -0
  134. package/build/render-container.js +169 -0
  135. package/build/render-container.js.map +1 -0
  136. package/build/render-node-to-output.d.ts +32 -0
  137. package/build/render-node-to-output.js +177 -0
  138. package/build/render-node-to-output.js.map +1 -0
  139. package/build/render-screen-reader.d.ts +5 -0
  140. package/build/render-screen-reader.js +54 -0
  141. package/build/render-screen-reader.js.map +1 -0
  142. package/build/render-scrollbar.d.ts +23 -0
  143. package/build/render-scrollbar.js +70 -0
  144. package/build/render-scrollbar.js.map +1 -0
  145. package/build/render-sticky.d.ts +53 -0
  146. package/build/render-sticky.js +317 -0
  147. package/build/render-sticky.js.map +1 -0
  148. package/build/render-text-node.d.ts +20 -0
  149. package/build/render-text-node.js +155 -0
  150. package/build/render-text-node.js.map +1 -0
  151. package/build/render.d.ts +165 -0
  152. package/build/render.js +60 -0
  153. package/build/render.js.map +1 -0
  154. package/build/renderer.d.ts +24 -0
  155. package/build/renderer.js +292 -0
  156. package/build/renderer.js.map +1 -0
  157. package/build/replay.d.ts +59 -0
  158. package/build/replay.js +128 -0
  159. package/build/replay.js.map +1 -0
  160. package/build/resize-observer.d.ts +24 -0
  161. package/build/resize-observer.js +102 -0
  162. package/build/resize-observer.js.map +1 -0
  163. package/build/scroll.d.ts +11 -0
  164. package/build/scroll.js +123 -0
  165. package/build/scroll.js.map +1 -0
  166. package/build/selection.d.ts +52 -0
  167. package/build/selection.js +359 -0
  168. package/build/selection.js.map +1 -0
  169. package/build/serialization.d.ts +25 -0
  170. package/build/serialization.js +224 -0
  171. package/build/serialization.js.map +1 -0
  172. package/build/squash-text-nodes.d.ts +16 -0
  173. package/build/squash-text-nodes.js +58 -0
  174. package/build/squash-text-nodes.js.map +1 -0
  175. package/build/styled-line.d.ts +58 -0
  176. package/build/styled-line.js +629 -0
  177. package/build/styled-line.js.map +1 -0
  178. package/build/styles.d.ts +286 -0
  179. package/build/styles.js +257 -0
  180. package/build/styles.js.map +1 -0
  181. package/build/terminal-buffer.d.ts +57 -0
  182. package/build/terminal-buffer.js +507 -0
  183. package/build/terminal-buffer.js.map +1 -0
  184. package/build/text-wrap.d.ts +12 -0
  185. package/build/text-wrap.js +154 -0
  186. package/build/text-wrap.js.map +1 -0
  187. package/build/tokenize.d.ts +47 -0
  188. package/build/tokenize.js +419 -0
  189. package/build/tokenize.js.map +1 -0
  190. package/build/vertical-gap.d.ts +17 -0
  191. package/build/vertical-gap.js +20 -0
  192. package/build/vertical-gap.js.map +1 -0
  193. package/build/worker/animation-controller.d.ts +72 -0
  194. package/build/worker/animation-controller.js +128 -0
  195. package/build/worker/animation-controller.js.map +1 -0
  196. package/build/worker/ansi-utils.d.ts +16 -0
  197. package/build/worker/ansi-utils.js +40 -0
  198. package/build/worker/ansi-utils.js.map +1 -0
  199. package/build/worker/canvas.d.ts +49 -0
  200. package/build/worker/canvas.js +90 -0
  201. package/build/worker/canvas.js.map +1 -0
  202. package/build/worker/compositor.d.ts +33 -0
  203. package/build/worker/compositor.js +308 -0
  204. package/build/worker/compositor.js.map +1 -0
  205. package/build/worker/platform.d.ts +15 -0
  206. package/build/worker/platform.js +19 -0
  207. package/build/worker/platform.js.map +1 -0
  208. package/build/worker/render-worker.d.ts +112 -0
  209. package/build/worker/render-worker.js +944 -0
  210. package/build/worker/render-worker.js.map +1 -0
  211. package/build/worker/scene-manager.d.ts +26 -0
  212. package/build/worker/scene-manager.js +109 -0
  213. package/build/worker/scene-manager.js.map +1 -0
  214. package/build/worker/scroll-optimizer.d.ts +32 -0
  215. package/build/worker/scroll-optimizer.js +110 -0
  216. package/build/worker/scroll-optimizer.js.map +1 -0
  217. package/build/worker/terminal-writer.d.ts +116 -0
  218. package/build/worker/terminal-writer.js +708 -0
  219. package/build/worker/terminal-writer.js.map +1 -0
  220. package/build/worker/worker-entry.d.ts +6 -0
  221. package/build/worker/worker-entry.js +130 -0
  222. package/build/worker/worker-entry.js.map +1 -0
  223. package/license +9 -0
  224. package/package.json +208 -0
  225. package/readme.md +2353 -0
@@ -0,0 +1,629 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { FULL_WIDTH_MASK, INVERSE_MASK } from './tokenize.js';
7
+ const MAX_SAFE_OFFSET = 0x7f_ff;
8
+ export class StyledLine {
9
+ static empty(length) {
10
+ const safeLength = Math.min(length, MAX_SAFE_OFFSET);
11
+ if (safeLength <= 0) {
12
+ return new StyledLine();
13
+ }
14
+ const cached = StyledLine.emptyCache.get(safeLength);
15
+ if (cached) {
16
+ return cached.clone();
17
+ }
18
+ const line = new StyledLine();
19
+ line.length = safeLength;
20
+ line.text = ' '.repeat(safeLength);
21
+ line.charData = new Uint16Array(Math.max(safeLength, 16));
22
+ for (let i = 0; i < safeLength; i++) {
23
+ line.charData[i] = i;
24
+ }
25
+ line.spans = [{ length: safeLength, formatFlags: 0 }];
26
+ if (StyledLine.emptyCache.size > 100) {
27
+ StyledLine.emptyCache.clear();
28
+ }
29
+ Object.freeze(line.spans[0]);
30
+ Object.freeze(line.spans);
31
+ Object.freeze(line);
32
+ StyledLine.emptyCache.set(safeLength, line);
33
+ return line.clone();
34
+ }
35
+ static legacyCreateStyledLine(values = [], spans = []) {
36
+ const line = new StyledLine();
37
+ line.applyValuesAndSpans(values, spans);
38
+ return line;
39
+ }
40
+ static emptyCache = new Map();
41
+ length;
42
+ text;
43
+ charData;
44
+ spans;
45
+ constructor() {
46
+ this.length = 0;
47
+ }
48
+ getValue(index) {
49
+ if (this.text === undefined || index < 0 || index >= this.length)
50
+ return '';
51
+ const start = this.charData[index] & 0x7f_ff;
52
+ const end = index + 1 < this.length
53
+ ? this.charData[index + 1] & 0x7f_ff
54
+ : this.text.length;
55
+ return this.text.slice(start, end);
56
+ }
57
+ getSpan(index) {
58
+ if (this.spans === undefined || index < 0 || index >= this.length)
59
+ return undefined;
60
+ let current = 0;
61
+ for (const span of this.spans) {
62
+ if (index < current + span.length)
63
+ return span;
64
+ current += span.length;
65
+ }
66
+ return undefined;
67
+ }
68
+ getFullWidth(index) {
69
+ if (this.charData === undefined || index < 0 || index >= this.length)
70
+ return false;
71
+ return (this.charData[index] & 0x80_00) !== 0;
72
+ }
73
+ hasStyles(index) {
74
+ const span = this.getSpan(index);
75
+ if (!span)
76
+ return false;
77
+ return ((span.formatFlags & ~FULL_WIDTH_MASK) !== 0 ||
78
+ span.fgColor !== undefined ||
79
+ span.bgColor !== undefined ||
80
+ span.link !== undefined);
81
+ }
82
+ getFormatFlags(index) {
83
+ let flags = this.getSpan(index)?.formatFlags ?? 0;
84
+ if (this.getFullWidth(index)) {
85
+ flags |= FULL_WIDTH_MASK;
86
+ }
87
+ return flags;
88
+ }
89
+ getFgColor(index) {
90
+ return this.getSpan(index)?.fgColor;
91
+ }
92
+ getBgColor(index) {
93
+ return this.getSpan(index)?.bgColor;
94
+ }
95
+ getLink(index) {
96
+ return this.getSpan(index)?.link;
97
+ }
98
+ setInverted(index, inverted) {
99
+ if (index < 0 || index >= this.length)
100
+ return;
101
+ this.ensureInitialized();
102
+ this.splitSpansAt(index);
103
+ this.splitSpansAt(index + 1);
104
+ let current = 0;
105
+ for (const span of this.spans) {
106
+ if (current === index && span.length === 1) {
107
+ if (inverted) {
108
+ span.formatFlags |= INVERSE_MASK;
109
+ }
110
+ else {
111
+ span.formatFlags &= ~INVERSE_MASK;
112
+ }
113
+ break;
114
+ }
115
+ current += span.length;
116
+ }
117
+ this.mergeSpans();
118
+ }
119
+ setBackgroundColor(index, color) {
120
+ if (index < 0 || index >= this.length)
121
+ return;
122
+ this.ensureInitialized();
123
+ this.splitSpansAt(index);
124
+ this.splitSpansAt(index + 1);
125
+ let current = 0;
126
+ for (const span of this.spans) {
127
+ if (current === index && span.length === 1) {
128
+ span.bgColor = color;
129
+ break;
130
+ }
131
+ current += span.length;
132
+ }
133
+ this.mergeSpans();
134
+ }
135
+ setForegroundColor(index, color) {
136
+ if (index < 0 || index >= this.length)
137
+ return;
138
+ this.ensureInitialized();
139
+ this.splitSpansAt(index);
140
+ this.splitSpansAt(index + 1);
141
+ let current = 0;
142
+ for (const span of this.spans) {
143
+ if (current === index && span.length === 1) {
144
+ span.fgColor = color;
145
+ break;
146
+ }
147
+ current += span.length;
148
+ }
149
+ this.mergeSpans();
150
+ }
151
+ // eslint-disable-next-line max-params
152
+ setChar(index, value, formatFlags, fgColor, bgColor, link) {
153
+ if (index < 0 || index >= this.length)
154
+ return;
155
+ this.ensureInitialized();
156
+ const isFullWidth = (formatFlags & FULL_WIDTH_MASK) !== 0;
157
+ const cleanFormatFlags = formatFlags & ~FULL_WIDTH_MASK;
158
+ const start = this.charData[index] & 0x7f_ff;
159
+ const end = index + 1 < this.length
160
+ ? this.charData[index + 1] & 0x7f_ff
161
+ : this.text.length;
162
+ const oldLen = end - start;
163
+ let newValue = value;
164
+ if (this.text.length - oldLen + value.length > MAX_SAFE_OFFSET) {
165
+ newValue = value.slice(0, Math.max(0, MAX_SAFE_OFFSET - (this.text.length - oldLen)));
166
+ }
167
+ const newLen = newValue.length;
168
+ if (oldLen === newLen) {
169
+ this.text = this.text.slice(0, start) + newValue + this.text.slice(end);
170
+ }
171
+ else {
172
+ this.text = this.text.slice(0, start) + newValue + this.text.slice(end);
173
+ const diff = newLen - oldLen;
174
+ for (let i = index + 1; i < this.length; i++) {
175
+ const data = this.charData[i];
176
+ const oldOffset = data & 0x7f_ff;
177
+ const fw = data & 0x80_00;
178
+ this.charData[i] = (oldOffset + diff) | fw;
179
+ }
180
+ }
181
+ this.charData[index] = start | (isFullWidth ? 0x80_00 : 0);
182
+ this.splitSpansAt(index);
183
+ this.splitSpansAt(index + 1);
184
+ let current = 0;
185
+ for (let i = 0; i < this.spans.length; i++) {
186
+ const span = this.spans[i];
187
+ if (current === index && span.length === 1) {
188
+ this.spans[i] = {
189
+ length: 1,
190
+ formatFlags: cleanFormatFlags,
191
+ fgColor,
192
+ bgColor,
193
+ link,
194
+ };
195
+ break;
196
+ }
197
+ current += span.length;
198
+ }
199
+ this.mergeSpans();
200
+ }
201
+ // eslint-disable-next-line max-params
202
+ pushChar(value, formatFlags, fgColor, bgColor, link) {
203
+ this.ensureInitialized();
204
+ const isFullWidth = (formatFlags & FULL_WIDTH_MASK) !== 0;
205
+ const cleanFormatFlags = formatFlags & ~FULL_WIDTH_MASK;
206
+ const offset = this.text.length;
207
+ if (value !== '…' && offset + value.length > MAX_SAFE_OFFSET - 1) {
208
+ if (offset < MAX_SAFE_OFFSET && !this.text.endsWith('…')) {
209
+ this.pushChar('…', formatFlags, fgColor, bgColor, link);
210
+ }
211
+ return;
212
+ }
213
+ if (offset + value.length > MAX_SAFE_OFFSET) {
214
+ return;
215
+ }
216
+ this.text += value;
217
+ if (this.length >= this.charData.length) {
218
+ const newData = new Uint16Array(this.charData.length * 2 || 16);
219
+ newData.set(this.charData);
220
+ this.charData = newData;
221
+ }
222
+ this.charData[this.length] = offset | (isFullWidth ? 0x80_00 : 0);
223
+ const lastSpan = this.spans.at(-1);
224
+ if (lastSpan &&
225
+ lastSpan.formatFlags === cleanFormatFlags &&
226
+ lastSpan.fgColor === fgColor &&
227
+ lastSpan.bgColor === bgColor &&
228
+ lastSpan.link === link) {
229
+ lastSpan.length++;
230
+ }
231
+ else {
232
+ this.spans.push({
233
+ length: 1,
234
+ formatFlags: cleanFormatFlags,
235
+ fgColor,
236
+ bgColor,
237
+ link,
238
+ });
239
+ }
240
+ this.length++;
241
+ }
242
+ clone() {
243
+ if (this.charData === undefined)
244
+ return new StyledLine();
245
+ const result = new StyledLine();
246
+ result.length = this.length;
247
+ result.text = this.text;
248
+ result.charData = this.charData.slice(0, Math.max(this.length, 16));
249
+ result.spans = this.spans.map(span => ({ ...span }));
250
+ return result;
251
+ }
252
+ slice(start, end) {
253
+ if (this.charData === undefined)
254
+ return new StyledLine();
255
+ const actualStart = Math.max(0, start);
256
+ const actualEnd = end === undefined ? this.length : Math.min(this.length, end);
257
+ if (actualStart >= actualEnd)
258
+ return new StyledLine();
259
+ if (actualStart === 0 && actualEnd === this.length) {
260
+ return this.clone();
261
+ }
262
+ const result = new StyledLine();
263
+ result.length = actualEnd - actualStart;
264
+ result.charData = new Uint16Array(Math.max(result.length, 16));
265
+ const textStart = this.charData[actualStart] & 0x7f_ff;
266
+ const textEnd = actualEnd < this.length
267
+ ? this.charData[actualEnd] & 0x7f_ff
268
+ : this.text.length;
269
+ result.text = this.text.slice(textStart, textEnd);
270
+ for (let i = 0; i < result.length; i++) {
271
+ const oldData = this.charData[actualStart + i];
272
+ const oldOffset = oldData & 0x7f_ff;
273
+ const fw = oldData & 0x80_00;
274
+ result.charData[i] = (oldOffset - textStart) | fw;
275
+ }
276
+ const newSpans = [];
277
+ let current = 0;
278
+ for (const span of this.spans) {
279
+ const spanStart = current;
280
+ const spanEnd = current + span.length;
281
+ const intersectStart = Math.max(actualStart, spanStart);
282
+ const intersectEnd = Math.min(actualEnd, spanEnd);
283
+ if (intersectStart < intersectEnd) {
284
+ newSpans.push({
285
+ ...span,
286
+ length: intersectEnd - intersectStart,
287
+ });
288
+ }
289
+ current += span.length;
290
+ if (current >= actualEnd)
291
+ break;
292
+ }
293
+ result.spans = newSpans;
294
+ result.mergeSpans();
295
+ return result;
296
+ }
297
+ combine(...others) {
298
+ if (others.length === 0)
299
+ return this.clone();
300
+ const allLines = [this, ...others].filter(l => l.length > 0);
301
+ if (allLines.length === 0)
302
+ return new StyledLine();
303
+ if (allLines.length === 1)
304
+ return allLines[0].clone();
305
+ let totalTextLen = 0;
306
+ let totalChars = 0;
307
+ for (const line of allLines) {
308
+ totalTextLen += line.getText().length;
309
+ totalChars += line.length;
310
+ }
311
+ if (totalTextLen > MAX_SAFE_OFFSET) {
312
+ let result = this.clone();
313
+ for (const other of others) {
314
+ result = result.instanceConcat(other);
315
+ }
316
+ return result;
317
+ }
318
+ const result = new StyledLine();
319
+ result.length = totalChars;
320
+ result.text = allLines.map(l => l.getText()).join('');
321
+ result.charData = new Uint16Array(Math.max(totalChars, 16));
322
+ let currentChar = 0;
323
+ let currentOffset = 0;
324
+ for (const line of allLines) {
325
+ const lineCharData = line.charData;
326
+ const lineText = line.getText();
327
+ if (lineCharData) {
328
+ for (let i = 0; i < line.length; i++) {
329
+ const data = lineCharData[i];
330
+ const offset = data & 0x7f_ff;
331
+ const fw = data & 0x80_00;
332
+ result.charData[currentChar + i] = (currentOffset + offset) | fw;
333
+ }
334
+ }
335
+ else {
336
+ for (let i = 0; i < line.length; i++) {
337
+ result.charData[currentChar + i] = currentOffset + i;
338
+ }
339
+ }
340
+ currentChar += line.length;
341
+ currentOffset += lineText.length;
342
+ }
343
+ result.spans = allLines.flatMap(l => l.getSpans().map(s => ({ ...s })));
344
+ result.mergeSpans();
345
+ return result;
346
+ }
347
+ getTrimmedLength() {
348
+ if (this.length === 0)
349
+ return 0;
350
+ if (this.text === undefined || this.charData === undefined)
351
+ return 0;
352
+ let currentIdx = this.length - 1;
353
+ if (this.spans) {
354
+ for (let s = this.spans.length - 1; s >= 0; s--) {
355
+ const span = this.spans[s];
356
+ const hasStyles = (span.formatFlags & ~FULL_WIDTH_MASK) !== 0 ||
357
+ span.fgColor !== undefined ||
358
+ span.bgColor !== undefined ||
359
+ span.link !== undefined;
360
+ if (hasStyles) {
361
+ return currentIdx + 1;
362
+ }
363
+ for (let i = 0; i < span.length; i++) {
364
+ const start = this.charData[currentIdx] & 0x7f_ff;
365
+ const end = currentIdx + 1 < this.length
366
+ ? this.charData[currentIdx + 1] & 0x7f_ff
367
+ : this.text.length;
368
+ if (end - start !== 1 || this.text[start] !== ' ') {
369
+ return currentIdx + 1;
370
+ }
371
+ currentIdx--;
372
+ }
373
+ }
374
+ }
375
+ return 0;
376
+ }
377
+ trimEnd() {
378
+ const trimmedLength = this.getTrimmedLength();
379
+ if (trimmedLength === this.length)
380
+ return this;
381
+ if (trimmedLength === 0)
382
+ return new StyledLine();
383
+ return this.slice(0, trimmedLength);
384
+ }
385
+ equals(other) {
386
+ if (this.length !== other.length)
387
+ return false;
388
+ if (this.length === 0)
389
+ return true;
390
+ if (this.getText() !== other.getText())
391
+ return false;
392
+ const s1 = this.getSpans();
393
+ const s2 = other.getSpans();
394
+ if (s1.length !== s2.length)
395
+ return false;
396
+ for (let i = 0; i < s1.length; i++) {
397
+ const sp1 = s1[i];
398
+ const sp2 = s2[i];
399
+ if (sp1.length !== sp2.length ||
400
+ sp1.formatFlags !== sp2.formatFlags ||
401
+ sp1.fgColor !== sp2.fgColor ||
402
+ sp1.bgColor !== sp2.bgColor ||
403
+ sp1.link !== sp2.link) {
404
+ return false;
405
+ }
406
+ }
407
+ const thisCharData = this.charData;
408
+ const otherCharData = other.charData;
409
+ if (thisCharData && otherCharData) {
410
+ for (let i = 0; i < this.length; i++) {
411
+ if (thisCharData[i] !== otherCharData[i])
412
+ return false;
413
+ }
414
+ }
415
+ return true;
416
+ }
417
+ getText() {
418
+ return this.text ?? '';
419
+ }
420
+ getSpans() {
421
+ return this.spans ?? [];
422
+ }
423
+ getValues() {
424
+ return Array.from({ length: this.length }, (_, i) => this.getValue(i));
425
+ }
426
+ *[Symbol.iterator]() {
427
+ if (this.length === 0)
428
+ return;
429
+ let currentSpanIdx = 0;
430
+ let currentSpanPos = 0;
431
+ const spans = this.getSpans();
432
+ for (let i = 0; i < this.length; i++) {
433
+ const span = spans[currentSpanIdx];
434
+ const formatFlags = span ? span.formatFlags : 0;
435
+ const isFullWidth = this.getFullWidth(i);
436
+ yield {
437
+ value: this.getValue(i),
438
+ formatFlags: formatFlags | (isFullWidth ? FULL_WIDTH_MASK : 0),
439
+ fgColor: span?.fgColor,
440
+ bgColor: span?.bgColor,
441
+ link: span?.link,
442
+ fullWidth: isFullWidth,
443
+ hasStyles: (formatFlags & ~FULL_WIDTH_MASK) !== 0 ||
444
+ span?.fgColor !== undefined ||
445
+ span?.bgColor !== undefined ||
446
+ span?.link !== undefined,
447
+ };
448
+ if (span) {
449
+ currentSpanPos++;
450
+ if (currentSpanPos >= span.length) {
451
+ currentSpanIdx++;
452
+ currentSpanPos = 0;
453
+ }
454
+ }
455
+ }
456
+ }
457
+ ensureInitialized(initialCapacity = 16) {
458
+ if (this.charData === undefined) {
459
+ this.text = '';
460
+ this.charData = new Uint16Array(Math.max(this.length, initialCapacity));
461
+ this.spans =
462
+ this.length > 0 ? [{ length: this.length, formatFlags: 0 }] : [];
463
+ if (this.length > 0 && this.text.length === 0) {
464
+ this.text = ' '.repeat(this.length);
465
+ for (let i = 0; i < this.length; i++) {
466
+ this.charData[i] = i;
467
+ }
468
+ }
469
+ }
470
+ }
471
+ applyValuesAndSpans(values, spans) {
472
+ let totalTextLen = 0;
473
+ let visibleChars = 0;
474
+ for (const val of values) {
475
+ if (totalTextLen + val.length > MAX_SAFE_OFFSET - 1) {
476
+ break;
477
+ }
478
+ totalTextLen += val.length;
479
+ visibleChars++;
480
+ }
481
+ const truncated = visibleChars < values.length;
482
+ this.length = visibleChars + (truncated ? 1 : 0);
483
+ this.text = values.slice(0, visibleChars).join('') + (truncated ? '…' : '');
484
+ this.charData = new Uint16Array(Math.max(this.length, 16));
485
+ let currentOffset = 0;
486
+ let spanIdx = 0;
487
+ let spanPos = 0;
488
+ for (let i = 0; i < visibleChars; i++) {
489
+ const val = values[i];
490
+ let isFullWidth = false;
491
+ if (spans.length > 0 && spanIdx < spans.length) {
492
+ const span = spans[spanIdx];
493
+ if ((span.formatFlags & FULL_WIDTH_MASK) !== 0) {
494
+ isFullWidth = true;
495
+ }
496
+ spanPos++;
497
+ if (spanPos >= span.length) {
498
+ spanIdx++;
499
+ spanPos = 0;
500
+ }
501
+ }
502
+ this.charData[i] = currentOffset | (isFullWidth ? 0x80_00 : 0);
503
+ currentOffset += val.length;
504
+ }
505
+ if (truncated) {
506
+ this.charData[visibleChars] = currentOffset;
507
+ }
508
+ if (truncated) {
509
+ const newSpans = [];
510
+ let remaining = visibleChars;
511
+ let sIdx = 0;
512
+ while (remaining > 0 && sIdx < spans.length) {
513
+ const span = spans[sIdx];
514
+ const take = Math.min(remaining, span.length);
515
+ newSpans.push({ ...span, length: take });
516
+ remaining -= take;
517
+ sIdx++;
518
+ }
519
+ newSpans.push({ length: 1, formatFlags: 0 });
520
+ this.spans = newSpans;
521
+ }
522
+ else {
523
+ this.spans = spans.map(s => ({
524
+ ...s,
525
+ formatFlags: s.formatFlags & ~FULL_WIDTH_MASK,
526
+ }));
527
+ }
528
+ this.mergeSpans();
529
+ }
530
+ instanceConcat(other) {
531
+ const spaceForOther = MAX_SAFE_OFFSET - 1 - this.getText().length;
532
+ if (spaceForOther <= 0) {
533
+ if (this.getText().length < MAX_SAFE_OFFSET &&
534
+ !this.getText().endsWith('…')) {
535
+ const result = this.clone();
536
+ result.pushChar('…', 0);
537
+ return result;
538
+ }
539
+ return this.clone();
540
+ }
541
+ let otherTextLenToTake = 0;
542
+ let otherCharsToTake = 0;
543
+ for (let i = 0; i < other.length; i++) {
544
+ const val = other.getValue(i);
545
+ if (otherTextLenToTake + val.length > spaceForOther) {
546
+ break;
547
+ }
548
+ otherTextLenToTake += val.length;
549
+ otherCharsToTake++;
550
+ }
551
+ const truncated = otherCharsToTake < other.length;
552
+ const result = new StyledLine();
553
+ result.length = this.length + otherCharsToTake + (truncated ? 1 : 0);
554
+ result.text =
555
+ this.getText() +
556
+ other.getText().slice(0, otherTextLenToTake) +
557
+ (truncated ? '…' : '');
558
+ result.charData = new Uint16Array(Math.max(result.length, 16));
559
+ if (this.charData) {
560
+ result.charData.set(this.charData.subarray(0, this.length), 0);
561
+ }
562
+ const textOffset = this.getText().length;
563
+ const otherCharData = other.charData;
564
+ if (otherCharData) {
565
+ for (let i = 0; i < otherCharsToTake; i++) {
566
+ const oldData = otherCharData[i];
567
+ const oldOffset = oldData & 0x7f_ff;
568
+ const fw = oldData & 0x80_00;
569
+ result.charData[this.length + i] = (oldOffset + textOffset) | fw;
570
+ }
571
+ }
572
+ if (truncated) {
573
+ result.charData[this.length + otherCharsToTake] =
574
+ this.getText().length + otherTextLenToTake;
575
+ }
576
+ const otherSpans = [];
577
+ let remaining = otherCharsToTake;
578
+ for (const span of other.getSpans()) {
579
+ if (remaining <= 0)
580
+ break;
581
+ const take = Math.min(remaining, span.length);
582
+ otherSpans.push({ ...span, length: take });
583
+ remaining -= take;
584
+ }
585
+ result.spans = [...this.getSpans(), ...otherSpans];
586
+ if (truncated) {
587
+ result.spans.push({ length: 1, formatFlags: 0 });
588
+ }
589
+ result.mergeSpans();
590
+ return result;
591
+ }
592
+ splitSpansAt(index) {
593
+ if (this.spans === undefined || index <= 0 || index >= this.length)
594
+ return;
595
+ let current = 0;
596
+ for (let i = 0; i < this.spans.length; i++) {
597
+ const span = this.spans[i];
598
+ if (index > current && index < current + span.length) {
599
+ const leftLen = index - current;
600
+ const rightLen = span.length - leftLen;
601
+ this.spans.splice(i, 1, { ...span, length: leftLen }, { ...span, length: rightLen });
602
+ return;
603
+ }
604
+ current += span.length;
605
+ }
606
+ }
607
+ mergeSpans() {
608
+ if (this.spans === undefined)
609
+ return;
610
+ const newSpans = [];
611
+ for (const span of this.spans) {
612
+ if (span.length === 0)
613
+ continue;
614
+ const last = newSpans.at(-1);
615
+ if (last &&
616
+ last.formatFlags === span.formatFlags &&
617
+ last.fgColor === span.fgColor &&
618
+ last.bgColor === span.bgColor &&
619
+ last.link === span.link) {
620
+ last.length += span.length;
621
+ }
622
+ else {
623
+ newSpans.push({ ...span });
624
+ }
625
+ }
626
+ this.spans = newSpans;
627
+ }
628
+ }
629
+ //# sourceMappingURL=styled-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styled-line.js","sourceRoot":"","sources":["../src/styled-line.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,eAAe,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAU5D,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,MAAM,OAAO,UAAU;IACtB,MAAM,CAAC,KAAK,CAAC,MAAc;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,CAAC,EAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,EAAC,CAAC,CAAC;QAEpD,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;YACtC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpB,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,sBAAsB,CAC5B,SAAmB,EAAE,EACrB,QAAqB,EAAE;QAEvB,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,MAAM,CAAU,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE5D,MAAM,CAAS;IACd,IAAI,CAAqB;IACzB,QAAQ,CAA0B;IAClC,KAAK,CAA0B;IAEvC;QACC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,KAAa;QACrB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,QAAS,CAAC,KAAK,CAAE,GAAG,OAAO,CAAC;QAC/C,MAAM,GAAG,GACR,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,KAAK,GAAG,CAAC,CAAE,GAAG,OAAO;YACtC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,KAAa;QACpB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YAChE,OAAO,SAAS,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAC/C,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,YAAY,CAAC,KAAa;QACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YACnE,OAAO,KAAK,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,CAAC,KAAa;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,CACN,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC;YAC3C,IAAI,CAAC,OAAO,KAAK,SAAS;YAC1B,IAAI,CAAC,OAAO,KAAK,SAAS;YAC1B,IAAI,CAAC,IAAI,KAAK,SAAS,CACvB,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAa;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,KAAK,IAAI,eAAe,CAAC;QAC1B,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED,UAAU,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IAClC,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,QAAiB;QAC3C,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAM,EAAE,CAAC;YAChC,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,IAAI,QAAQ,EAAE,CAAC;oBACd,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC;gBACnC,CAAC;gBAED,MAAM;YACP,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,KAAyB;QAC1D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAM,EAAE,CAAC;YAChC,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,MAAM;YACP,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,KAAyB;QAC1D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAM,EAAE,CAAC;YAChC,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,MAAM;YACP,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAED,sCAAsC;IACtC,OAAO,CACN,KAAa,EACb,KAAa,EACb,WAAmB,EACnB,OAAgB,EAChB,OAAgB,EAChB,IAAa;QAEb,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAG,CAAC,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,WAAW,GAAG,CAAC,eAAe,CAAC;QAExD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAS,CAAC,KAAK,CAAE,GAAG,OAAO,CAAC;QAC/C,MAAM,GAAG,GACR,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,KAAK,GAAG,CAAC,CAAE,GAAG,OAAO;YACtC,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;QAE3B,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,IAAK,CAAC,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YACjE,QAAQ,GAAG,KAAK,CAAC,KAAK,CACrB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,IAAI,CAAC,IAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAC3D,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE/B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1E,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,CAAC,CAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC;gBACjC,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;gBAC1B,IAAI,CAAC,QAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7C,CAAC;QACF,CAAC;QAED,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC,CAAC,CAAE,CAAC;YAC7B,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,KAAM,CAAC,CAAC,CAAC,GAAG;oBAChB,MAAM,EAAE,CAAC;oBACT,WAAW,EAAE,gBAAgB;oBAC7B,OAAO;oBACP,OAAO;oBACP,IAAI;iBACJ,CAAC;gBACF,MAAM;YACP,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAED,sCAAsC;IACtC,QAAQ,CACP,KAAa,EACb,WAAmB,EACnB,OAAgB,EAChB,OAAgB,EAChB,IAAa;QAEb,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,CAAC,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,WAAW,GAAG,CAAC,eAAe,CAAC;QAExD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC;QACjC,IAAI,KAAK,KAAK,GAAG,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;YAClE,IAAI,MAAM,GAAG,eAAe,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;YAED,OAAO;QACR,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YAC7C,OAAO;QACR,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;QAEnB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAS,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,IACC,QAAQ;YACR,QAAQ,CAAC,WAAW,KAAK,gBAAgB;YACzC,QAAQ,CAAC,OAAO,KAAK,OAAO;YAC5B,QAAQ,CAAC,OAAO,KAAK,OAAO;YAC5B,QAAQ,CAAC,IAAI,KAAK,IAAI,EACrB,CAAC;YACF,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,KAAM,CAAC,IAAI,CAAC;gBAChB,MAAM,EAAE,CAAC;gBACT,WAAW,EAAE,gBAAgB;gBAC7B,OAAO;gBACP,OAAO;gBACP,IAAI;aACJ,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACJ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,IAAI,UAAU,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAC,GAAG,IAAI,EAAC,CAAC,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,GAAY;QAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,IAAI,UAAU,EAAE,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,SAAS,GACd,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9D,IAAI,WAAW,IAAI,SAAS;YAAE,OAAO,IAAI,UAAU,EAAE,CAAC;QAEtD,IAAI,WAAW,KAAK,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;QACxC,MAAM,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAE,GAAG,OAAO,CAAC;QACxD,MAAM,OAAO,GACZ,SAAS,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAE,GAAG,OAAO;YACrC,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC;QACtB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC;YAChD,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;YACpC,MAAM,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QACnD,CAAC;QAED,MAAM,QAAQ,GAAgB,EAAE,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAM,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,OAAO,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;YAEtC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAElD,IAAI,cAAc,GAAG,YAAY,EAAE,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC;oBACb,GAAG,IAAI;oBACP,MAAM,EAAE,YAAY,GAAG,cAAc;iBACrC,CAAC,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,OAAO,IAAI,SAAS;gBAAE,MAAM;QACjC,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QACxB,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,OAAO,CAAC,GAAG,MAAoB;QAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QAE7C,MAAM,QAAQ,GAAG,CAAC,IAAkB,EAAE,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,UAAU,EAAE,CAAC;QACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,EAAE,CAAC;QAEvD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC7B,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;YACtC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YACpC,IAAI,MAAM,GAAe,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;QAC3B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QAE5D,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAI,IAAY,CAAC,QAAmC,CAAC;YACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,YAAY,EAAE,CAAC;gBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;oBAC9B,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;oBAC1B,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;gBAClE,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;gBACtD,CAAC;YACF,CAAC;YAED,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC;YAC3B,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC;QAClC,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,gBAAgB;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QAErE,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;gBAC5B,MAAM,SAAS,GACd,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC;oBAC3C,IAAI,CAAC,OAAO,KAAK,SAAS;oBAC1B,IAAI,CAAC,OAAO,KAAK,SAAS;oBAC1B,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBAEzB,IAAI,SAAS,EAAE,CAAC;oBACf,OAAO,UAAU,GAAG,CAAC,CAAC;gBACvB,CAAC;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAE,GAAG,OAAO,CAAC;oBACnD,MAAM,GAAG,GACR,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;wBAC3B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAE,GAAG,OAAO;wBAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;oBAErB,IAAI,GAAG,GAAG,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;wBACnD,OAAO,UAAU,GAAG,CAAC,CAAC;oBACvB,CAAC;oBAED,UAAU,EAAE,CAAC;gBACd,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,CAAC,CAAC;IACV,CAAC;IAED,OAAO;QACN,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9C,IAAI,aAAa,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,aAAa,KAAK,CAAC;YAAE,OAAO,IAAI,UAAU,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,KAAiB;QACvB,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE;YAAE,OAAO,KAAK,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC;YACnB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC;YACnB,IACC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;gBACzB,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,WAAW;gBACnC,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;gBAC3B,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;gBAC3B,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EACpB,CAAC;gBACF,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,MAAM,aAAa,GAAI,KAAa,CAAC,QAAmC,CAAC;QACzE,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;YACxD,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;YACnC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAEzC,MAAM;gBACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACvB,WAAW,EAAE,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,OAAO,EAAE,IAAI,EAAE,OAAO;gBACtB,OAAO,EAAE,IAAI,EAAE,OAAO;gBACtB,IAAI,EAAE,IAAI,EAAE,IAAI;gBAChB,SAAS,EAAE,WAAW;gBACtB,SAAS,EACR,CAAC,WAAW,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC;oBACtC,IAAI,EAAE,OAAO,KAAK,SAAS;oBAC3B,IAAI,EAAE,OAAO,KAAK,SAAS;oBAC3B,IAAI,EAAE,IAAI,KAAK,SAAS;aACzB,CAAC;YAEF,IAAI,IAAI,EAAE,CAAC;gBACV,cAAc,EAAE,CAAC;gBACjB,IAAI,cAAc,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACnC,cAAc,EAAE,CAAC;oBACjB,cAAc,GAAG,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAEO,iBAAiB,CAAC,eAAe,GAAG,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,KAAK;gBACT,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAEO,mBAAmB,CAAC,MAAgB,EAAE,KAAkB;QAC/D,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,YAAY,GAAG,GAAG,CAAC,MAAM,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM;YACP,CAAC;YAED,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC;YAC3B,YAAY,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAE3D,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YACvB,IAAI,WAAW,GAAG,KAAK,CAAC;YAExB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChD,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;gBAED,OAAO,EAAE,CAAC;gBACV,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC5B,OAAO,EAAE,CAAC;oBACV,OAAO,GAAG,CAAC,CAAC;gBACb,CAAC;YACF,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC;QAC7B,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC;QAC7C,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,QAAQ,GAAgB,EAAE,CAAC;YACjC,IAAI,SAAS,GAAG,YAAY,CAAC;YAC7B,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,OAAO,SAAS,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,EAAC,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;gBACvC,SAAS,IAAI,IAAI,CAAC;gBAClB,IAAI,EAAE,CAAC;YACR,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5B,GAAG,CAAC;gBACJ,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,eAAe;aAC7C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAEO,cAAc,CAAC,KAAiB;QACvC,MAAM,aAAa,GAAG,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;QAClE,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACxB,IACC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,eAAe;gBACvC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5B,CAAC;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACxB,OAAO,MAAM,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,kBAAkB,GAAG,GAAG,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;gBACrD,MAAM;YACP,CAAC;YAED,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC;YACjC,gBAAgB,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,gBAAgB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI;YACV,IAAI,CAAC,OAAO,EAAE;gBACd,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC;gBAC5C,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;QACzC,MAAM,aAAa,GAAI,KAAa,CAAC,QAAmC,CAAC;QACzE,IAAI,aAAa,EAAE,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;gBAClC,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;gBACpC,MAAM,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC;gBAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YAClE,CAAC;QACF,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC;gBAC9C,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,kBAAkB,CAAC;QAC7C,CAAC;QAED,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,IAAI,SAAS,GAAG,gBAAgB,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrC,IAAI,SAAS,IAAI,CAAC;gBAAE,MAAM;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,UAAU,CAAC,IAAI,CAAC,EAAC,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;YACzC,SAAS,IAAI,IAAI,CAAC;QACnB,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAC,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,YAAY,CAAC,KAAa;QACjC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAC3E,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAC5B,IAAI,KAAK,GAAG,OAAO,IAAI,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtD,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAChB,CAAC,EACD,CAAC,EACD,EAAC,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAC,EAC1B,EAAC,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAC,CAC3B,CAAC;gBACF,OAAO;YACR,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC;IACF,CAAC;IAEO,UAAU;QACjB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QACrC,MAAM,QAAQ,GAAgB,EAAE,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IACC,IAAI;gBACJ,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;gBACrC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;gBAC7B,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;gBAC7B,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EACtB,CAAC;gBACF,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACP,QAAQ,CAAC,IAAI,CAAC,EAAC,GAAG,IAAI,EAAC,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;IACvB,CAAC"}