@kongyo2/kongyoroid 1.0.0 → 2.0.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.
Files changed (199) hide show
  1. package/README.md +233 -0
  2. package/dist/cache.d.ts +32 -7
  3. package/dist/cache.d.ts.map +1 -1
  4. package/dist/cache.js +138 -9
  5. package/dist/cache.js.map +1 -1
  6. package/dist/cli/flags.d.ts +270 -0
  7. package/dist/cli/flags.d.ts.map +1 -0
  8. package/dist/cli/flags.js +240 -0
  9. package/dist/cli/flags.js.map +1 -0
  10. package/dist/cli/help.d.ts +11 -0
  11. package/dist/cli/help.d.ts.map +1 -0
  12. package/dist/cli/help.js +336 -0
  13. package/dist/cli/help.js.map +1 -0
  14. package/dist/cli.js +598 -232
  15. package/dist/cli.js.map +1 -1
  16. package/dist/errors.d.ts +43 -3
  17. package/dist/errors.d.ts.map +1 -1
  18. package/dist/errors.js +56 -3
  19. package/dist/errors.js.map +1 -1
  20. package/dist/index.d.ts +59 -22
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +32 -14
  23. package/dist/index.js.map +1 -1
  24. package/dist/io.d.ts +11 -0
  25. package/dist/io.d.ts.map +1 -1
  26. package/dist/io.js +149 -5
  27. package/dist/io.js.map +1 -1
  28. package/dist/kongyoroid.d.ts +237 -10
  29. package/dist/kongyoroid.d.ts.map +1 -1
  30. package/dist/kongyoroid.js +777 -86
  31. package/dist/kongyoroid.js.map +1 -1
  32. package/dist/limits.d.ts +5 -0
  33. package/dist/limits.d.ts.map +1 -1
  34. package/dist/limits.js +6 -1
  35. package/dist/limits.js.map +1 -1
  36. package/dist/request.d.ts +1 -0
  37. package/dist/request.d.ts.map +1 -1
  38. package/dist/request.js +102 -15
  39. package/dist/request.js.map +1 -1
  40. package/dist/schema.d.ts +3 -0
  41. package/dist/schema.d.ts.map +1 -1
  42. package/dist/schema.js +271 -68
  43. package/dist/schema.js.map +1 -1
  44. package/dist/song/mml.d.ts +15 -0
  45. package/dist/song/mml.d.ts.map +1 -0
  46. package/dist/song/mml.js +184 -0
  47. package/dist/song/mml.js.map +1 -0
  48. package/dist/song/pitch.d.ts.map +1 -0
  49. package/dist/{pitch.js → song/pitch.js} +1 -1
  50. package/dist/song/pitch.js.map +1 -0
  51. package/dist/song/score.d.ts +92 -0
  52. package/dist/song/score.d.ts.map +1 -0
  53. package/dist/song/score.js +454 -0
  54. package/dist/song/score.js.map +1 -0
  55. package/dist/synth/acoustics.d.ts +27 -0
  56. package/dist/synth/acoustics.d.ts.map +1 -0
  57. package/dist/synth/acoustics.js +608 -0
  58. package/dist/synth/acoustics.js.map +1 -0
  59. package/dist/synth/analysis.d.ts +22 -0
  60. package/dist/synth/analysis.d.ts.map +1 -0
  61. package/dist/synth/analysis.js +170 -0
  62. package/dist/synth/analysis.js.map +1 -0
  63. package/dist/synth/engine.d.ts +115 -0
  64. package/dist/synth/engine.d.ts.map +1 -0
  65. package/dist/synth/engine.js +223 -0
  66. package/dist/synth/engine.js.map +1 -0
  67. package/dist/synth/filters.d.ts +60 -0
  68. package/dist/synth/filters.d.ts.map +1 -0
  69. package/dist/synth/filters.js +166 -0
  70. package/dist/synth/filters.js.map +1 -0
  71. package/dist/synth/glottal.d.ts +20 -0
  72. package/dist/synth/glottal.d.ts.map +1 -0
  73. package/dist/synth/glottal.js +76 -0
  74. package/dist/synth/glottal.js.map +1 -0
  75. package/dist/synth/phonemes.d.ts +42 -0
  76. package/dist/synth/phonemes.d.ts.map +1 -0
  77. package/dist/synth/phonemes.js +311 -0
  78. package/dist/synth/phonemes.js.map +1 -0
  79. package/dist/synth/plan.d.ts +127 -0
  80. package/dist/synth/plan.d.ts.map +1 -0
  81. package/dist/synth/plan.js +81 -0
  82. package/dist/synth/plan.js.map +1 -0
  83. package/dist/synth/prosody.d.ts +30 -0
  84. package/dist/synth/prosody.d.ts.map +1 -0
  85. package/dist/synth/prosody.js +46 -0
  86. package/dist/synth/prosody.js.map +1 -0
  87. package/dist/synth/random.d.ts +15 -0
  88. package/dist/synth/random.d.ts.map +1 -0
  89. package/dist/synth/random.js +59 -0
  90. package/dist/synth/random.js.map +1 -0
  91. package/dist/synth/renderer.d.ts +77 -0
  92. package/dist/synth/renderer.d.ts.map +1 -0
  93. package/dist/synth/renderer.js +343 -0
  94. package/dist/synth/renderer.js.map +1 -0
  95. package/dist/synth/song.d.ts +30 -0
  96. package/dist/synth/song.d.ts.map +1 -0
  97. package/dist/synth/song.js +453 -0
  98. package/dist/synth/song.js.map +1 -0
  99. package/dist/synth/speech.d.ts +49 -0
  100. package/dist/synth/speech.d.ts.map +1 -0
  101. package/dist/synth/speech.js +354 -0
  102. package/dist/synth/speech.js.map +1 -0
  103. package/dist/synth/stream.d.ts +26 -0
  104. package/dist/synth/stream.d.ts.map +1 -0
  105. package/dist/synth/stream.js +67 -0
  106. package/dist/synth/stream.js.map +1 -0
  107. package/dist/synth/textstream.d.ts +35 -0
  108. package/dist/synth/textstream.d.ts.map +1 -0
  109. package/dist/synth/textstream.js +127 -0
  110. package/dist/synth/textstream.js.map +1 -0
  111. package/dist/synth/voice.d.ts +64 -0
  112. package/dist/synth/voice.d.ts.map +1 -0
  113. package/dist/synth/voice.js +208 -0
  114. package/dist/synth/voice.js.map +1 -0
  115. package/dist/text/dictionary.d.ts +50 -0
  116. package/dist/text/dictionary.d.ts.map +1 -0
  117. package/dist/text/dictionary.js +0 -0
  118. package/dist/text/dictionary.js.map +1 -0
  119. package/dist/text/frontend.d.ts +34 -0
  120. package/dist/text/frontend.d.ts.map +1 -0
  121. package/dist/text/frontend.js +550 -0
  122. package/dist/text/frontend.js.map +1 -0
  123. package/dist/text/lexicon.d.ts +10 -0
  124. package/dist/text/lexicon.d.ts.map +1 -0
  125. package/dist/text/lexicon.js +763 -0
  126. package/dist/text/lexicon.js.map +1 -0
  127. package/dist/{mora.d.ts → text/mora.d.ts} +15 -3
  128. package/dist/text/mora.d.ts.map +1 -0
  129. package/dist/{mora.js → text/mora.js} +87 -9
  130. package/dist/text/mora.js.map +1 -0
  131. package/dist/text/normalize.d.ts +34 -0
  132. package/dist/text/normalize.d.ts.map +1 -0
  133. package/dist/text/normalize.js +496 -0
  134. package/dist/text/normalize.js.map +1 -0
  135. package/dist/text/notation.d.ts +32 -0
  136. package/dist/text/notation.d.ts.map +1 -0
  137. package/dist/text/notation.js +182 -0
  138. package/dist/text/notation.js.map +1 -0
  139. package/dist/text/reading.d.ts +52 -0
  140. package/dist/text/reading.d.ts.map +1 -0
  141. package/dist/text/reading.js +32 -0
  142. package/dist/text/reading.js.map +1 -0
  143. package/dist/text/sentences.d.ts +10 -0
  144. package/dist/text/sentences.d.ts.map +1 -0
  145. package/dist/text/sentences.js +84 -0
  146. package/dist/text/sentences.js.map +1 -0
  147. package/dist/{text.d.ts → text/split.d.ts} +2 -2
  148. package/dist/text/split.d.ts.map +1 -0
  149. package/dist/{text.js → text/split.js} +2 -2
  150. package/dist/text/split.js.map +1 -0
  151. package/dist/types.d.ts +58 -3
  152. package/dist/types.d.ts.map +1 -1
  153. package/dist/version.d.ts +4 -0
  154. package/dist/version.d.ts.map +1 -1
  155. package/dist/version.js +5 -1
  156. package/dist/version.js.map +1 -1
  157. package/dist/voicevox/client.d.ts +1 -1
  158. package/dist/voicevox/client.d.ts.map +1 -1
  159. package/dist/voicevox/dictionary.js +1 -1
  160. package/dist/voicevox/dictionary.js.map +1 -1
  161. package/dist/voicevox/song.js +1 -1
  162. package/dist/voicevox/song.js.map +1 -1
  163. package/dist/voicevox/speech.d.ts +1 -0
  164. package/dist/voicevox/speech.d.ts.map +1 -1
  165. package/dist/voicevox/speech.js +8 -2
  166. package/dist/voicevox/speech.js.map +1 -1
  167. package/docs/cli.md +251 -0
  168. package/examples/batch.jsonl +4 -3
  169. package/examples/builtin/dictionary.json +7 -0
  170. package/examples/builtin/song-compact.json +13 -0
  171. package/examples/builtin/song-mml.json +9 -0
  172. package/examples/builtin/song-notes.json +25 -0
  173. package/examples/builtin/speech-dictionary.json +9 -0
  174. package/examples/builtin/speech-kana.json +7 -0
  175. package/examples/builtin/speech.json +7 -0
  176. package/package.json +11 -3
  177. package/dist/formant.d.ts +0 -34
  178. package/dist/formant.d.ts.map +0 -1
  179. package/dist/formant.js +0 -622
  180. package/dist/formant.js.map +0 -1
  181. package/dist/mora.d.ts.map +0 -1
  182. package/dist/mora.js.map +0 -1
  183. package/dist/notation.d.ts +0 -15
  184. package/dist/notation.d.ts.map +0 -1
  185. package/dist/notation.js +0 -114
  186. package/dist/notation.js.map +0 -1
  187. package/dist/pitch.d.ts.map +0 -1
  188. package/dist/pitch.js.map +0 -1
  189. package/dist/score.d.ts +0 -37
  190. package/dist/score.d.ts.map +0 -1
  191. package/dist/score.js +0 -166
  192. package/dist/score.js.map +0 -1
  193. package/dist/text.d.ts.map +0 -1
  194. package/dist/text.js.map +0 -1
  195. package/examples/song-notes.json +0 -24
  196. /package/dist/{pitch.d.ts → song/pitch.d.ts} +0 -0
  197. /package/examples/{song.json → voicevox/song.json} +0 -0
  198. /package/examples/{speech-kana.json → voicevox/speech-kana.json} +0 -0
  199. /package/examples/{speech.json → voicevox/speech.json} +0 -0
@@ -0,0 +1,608 @@
1
+ import { MORAIC_NASAL_TARGETS, PHONEMES, isVowelPhoneme, moraicNasalPlace } from "./phonemes.js";
2
+ import { PARAM_COUNT, P_AF, P_AH, P_AV, P_B1, P_B2, P_B3, P_B4, P_B5, P_F1, P_F2, P_F3, P_F4, P_F5, P_FB1, P_FB2, P_FF1, P_FF2, P_FG1, P_FG2, P_FHP, P_NMIX, P_NPOLE, P_NZERO, P_RD, } from "./plan.js";
3
+ const OFF = -120;
4
+ function scaledFormants(context, f) {
5
+ const s = context.voice.formantScale;
6
+ return [f[0] * s, f[1] * s, f[2] * s];
7
+ }
8
+ function scaledBandwidths(context, bw, factor = 1) {
9
+ const s = context.voice.bandwidthScale * factor;
10
+ return [bw[0] * s, bw[1] * s, bw[2] * s];
11
+ }
12
+ class Params {
13
+ values;
14
+ constructor(values) {
15
+ this.values = values;
16
+ }
17
+ static of(context, spec) {
18
+ const values = new Float64Array(PARAM_COUNT);
19
+ const f = scaledFormants(context, spec.f);
20
+ const bw = scaledBandwidths(context, spec.bw);
21
+ values[P_F1] = f[0];
22
+ values[P_F2] = f[1];
23
+ values[P_F3] = f[2];
24
+ values[P_F4] = context.voice.f4 * context.voice.formantScale;
25
+ values[P_F5] = context.voice.f5 * context.voice.formantScale;
26
+ values[P_B1] = bw[0];
27
+ values[P_B2] = bw[1];
28
+ values[P_B3] = bw[2];
29
+ values[P_B4] = 260 * context.voice.bandwidthScale;
30
+ values[P_B5] = 320 * context.voice.bandwidthScale;
31
+ values[P_AV] = OFF;
32
+ values[P_AH] = OFF;
33
+ values[P_AF] = OFF;
34
+ values[P_RD] = context.voice.rd;
35
+ values[P_NMIX] = 0;
36
+ values[P_NPOLE] = 270 * context.voice.formantScale;
37
+ values[P_NZERO] = 1000 * context.voice.formantScale;
38
+ const fric = spec.fric ?? PHONEMES.s.fric;
39
+ values[P_FF1] = fric?.f1 ?? 6000;
40
+ values[P_FB1] = fric?.bw1 ?? 1000;
41
+ values[P_FG1] = fric?.g1 ?? 1;
42
+ values[P_FF2] = fric?.f2 ?? 8000;
43
+ values[P_FB2] = fric?.bw2 ?? 2000;
44
+ values[P_FG2] = fric?.g2 ?? 0.5;
45
+ values[P_FHP] = fric?.hp ?? 3000;
46
+ return new Params(values);
47
+ }
48
+ clone() {
49
+ return new Params(new Float64Array(this.values));
50
+ }
51
+ formants(f) {
52
+ this.values[P_F1] = f[0];
53
+ this.values[P_F2] = f[1];
54
+ this.values[P_F3] = f[2];
55
+ return this;
56
+ }
57
+ bandwidths(bw) {
58
+ this.values[P_B1] = bw[0];
59
+ this.values[P_B2] = bw[1];
60
+ this.values[P_B3] = bw[2];
61
+ return this;
62
+ }
63
+ set(index, value) {
64
+ this.values[index] = value;
65
+ return this;
66
+ }
67
+ fric(spec) {
68
+ this.values[P_FF1] = spec.f1;
69
+ this.values[P_FB1] = spec.bw1;
70
+ this.values[P_FG1] = spec.g1;
71
+ this.values[P_FF2] = spec.f2;
72
+ this.values[P_FB2] = spec.bw2;
73
+ this.values[P_FG2] = spec.g2;
74
+ this.values[P_FHP] = spec.hp;
75
+ return this;
76
+ }
77
+ getFormants() {
78
+ return [this.values[P_F1] ?? 0, this.values[P_F2] ?? 0, this.values[P_F3] ?? 0];
79
+ }
80
+ }
81
+ function mixTriple(a, b, t) {
82
+ return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];
83
+ }
84
+ function locusLambda(phoneme) {
85
+ switch (phoneme) {
86
+ case "k":
87
+ case "ky":
88
+ case "kw":
89
+ case "g":
90
+ case "gy":
91
+ case "gw":
92
+ return 0.55;
93
+ case "p":
94
+ case "py":
95
+ case "b":
96
+ case "by":
97
+ case "m":
98
+ case "my":
99
+ case "f":
100
+ case "v":
101
+ case "w":
102
+ return 0.42;
103
+ case "h":
104
+ return 1;
105
+ default:
106
+ return 0.5;
107
+ }
108
+ }
109
+ function steadyFormants(context, phoneme, next) {
110
+ const spec = PHONEMES[phoneme];
111
+ if (spec.kind === "moraic-nasal")
112
+ return scaledFormants(context, MORAIC_NASAL_TARGETS[moraicNasalPlace(next)].f);
113
+ return scaledFormants(context, spec.f);
114
+ }
115
+ function nasalZeroFor(context, phoneme, next) {
116
+ const spec = PHONEMES[phoneme];
117
+ if (spec.kind === "moraic-nasal")
118
+ return MORAIC_NASAL_TARGETS[moraicNasalPlace(next)].zero * context.voice.formantScale;
119
+ return (spec.nasalZero > 0 ? spec.nasalZero : 1000) * context.voice.formantScale;
120
+ }
121
+ function vowelFormantsOf(context, phoneme) {
122
+ if (phoneme === undefined)
123
+ return undefined;
124
+ const spec = PHONEMES[phoneme];
125
+ if (spec.kind === "vowel" || spec.kind === "devoiced")
126
+ return scaledFormants(context, spec.f);
127
+ return undefined;
128
+ }
129
+ function onsetFormantsFrom(context, previous, steady, phoneme) {
130
+ if (previous === undefined)
131
+ return steady;
132
+ const spec = PHONEMES[previous.phoneme];
133
+ switch (spec.kind) {
134
+ case "vowel":
135
+ case "devoiced":
136
+ return scaledFormants(context, spec.f);
137
+ case "glide":
138
+ case "nasal":
139
+ case "moraic-nasal":
140
+ case "flap":
141
+ return steadyFormants(context, previous.phoneme, phoneme);
142
+ case "stop":
143
+ case "fricative":
144
+ case "affricate": {
145
+ if (spec.locus === null)
146
+ return steady;
147
+ const locus = scaledFormants(context, spec.locus);
148
+ const lambda = locusLambda(previous.phoneme);
149
+ const onset = mixTriple(locus, steady, lambda);
150
+ return [Math.min(onset[0], steady[0]), onset[1], onset[2]];
151
+ }
152
+ default:
153
+ return steady;
154
+ }
155
+ }
156
+ function offsetFormantsToward(context, next, steady) {
157
+ if (next === undefined)
158
+ return steady;
159
+ const spec = PHONEMES[next.phoneme];
160
+ switch (spec.kind) {
161
+ case "vowel":
162
+ case "devoiced":
163
+ return mixTriple(steady, scaledFormants(context, spec.f), 0.3);
164
+ case "glide":
165
+ case "nasal":
166
+ case "moraic-nasal":
167
+ case "flap":
168
+ return mixTriple(steady, steadyFormants(context, next.phoneme, undefined), 0.5);
169
+ case "stop":
170
+ case "fricative":
171
+ case "affricate": {
172
+ if (spec.locus === null)
173
+ return steady;
174
+ const locus = scaledFormants(context, spec.locus);
175
+ const mixed = mixTriple(steady, locus, 1 - locusLambda(next.phoneme));
176
+ return [Math.min(mixed[0], steady[0]), mixed[1], mixed[2]];
177
+ }
178
+ default:
179
+ return steady;
180
+ }
181
+ }
182
+ function keyframe(at, params) {
183
+ return { at, values: params.values };
184
+ }
185
+ function buildVowel(context, draft, previous, next, duration) {
186
+ const spec = PHONEMES[draft.phoneme];
187
+ const steady = scaledFormants(context, spec.f);
188
+ const base = Params.of(context, spec);
189
+ const gain = spec.av + draft.gainDb + draft.emphasis * 1.5;
190
+ const rd = Math.max(0.3, Math.min(2.7, context.voice.rd + draft.rdOffset - draft.emphasis * 0.1));
191
+ base.set(P_RD, rd).set(P_AH, context.voice.aspirationDb + draft.gainDb);
192
+ const continuing = draft.articulation === "continue";
193
+ const prevSpec = previous === undefined ? undefined : PHONEMES[previous.phoneme];
194
+ const nextSpec = next === undefined ? undefined : PHONEMES[next.phoneme];
195
+ const onsetFormants = continuing ? steady : onsetFormantsFrom(context, previous, steady, draft.phoneme);
196
+ const prevIsVowel = prevSpec?.kind === "vowel";
197
+ const onsetTime = continuing
198
+ ? 0
199
+ : Math.min(prevIsVowel ? 0.06 : (prevSpec?.transition ?? 0.03), Math.max(0.006, duration * 0.42));
200
+ const anticipates = nextSpec !== undefined && nextSpec.kind !== "silence" && nextSpec.kind !== "closure";
201
+ const offsetTime = anticipates && !draft.sustain ? Math.min(0.045, Math.max(0.004, duration * 0.33)) : 0;
202
+ const offsetFormants = anticipates ? offsetFormantsToward(context, next, steady) : steady;
203
+ const frames = [];
204
+ const start = base.clone().formants(onsetFormants);
205
+ let startAv = gain;
206
+ if (continuing)
207
+ startAv = gain;
208
+ else if (draft.articulation === "rearticulate")
209
+ startAv = gain - 18;
210
+ else if (draft.boundaryBefore || previous === undefined || prevSpec?.kind === "silence")
211
+ startAv = gain - 26;
212
+ else if (prevSpec !== undefined && !prevSpec.voiced)
213
+ startAv = gain - 10;
214
+ else if (prevSpec?.kind === "closure")
215
+ startAv = gain - 14;
216
+ start.set(P_AV, startAv);
217
+ if (prevSpec?.kind === "nasal" || prevSpec?.kind === "moraic-nasal") {
218
+ start.set(P_NMIX, 0.55).set(P_NZERO, nasalZeroFor(context, previous?.phoneme ?? "n", draft.phoneme));
219
+ }
220
+ if (previous?.phoneme === "h" || previous?.phoneme === "hy")
221
+ start.set(P_AH, context.voice.aspirationDb + 14);
222
+ frames.push(keyframe(0, start));
223
+ const attackTime = continuing
224
+ ? 0
225
+ : draft.articulation === "rearticulate"
226
+ ? Math.min(0.05, duration * 0.4)
227
+ : Math.min(0.018, duration * 0.3);
228
+ if (attackTime > 0 && attackTime < onsetTime) {
229
+ const attack = base
230
+ .clone()
231
+ .formants(mixTriple(onsetFormants, steady, attackTime / onsetTime))
232
+ .set(P_AV, gain);
233
+ if (prevSpec?.kind === "nasal" || prevSpec?.kind === "moraic-nasal") {
234
+ attack
235
+ .set(P_NMIX, 0.55 * (1 - attackTime / onsetTime))
236
+ .set(P_NZERO, nasalZeroFor(context, previous?.phoneme ?? "n", draft.phoneme));
237
+ }
238
+ frames.push(keyframe(attackTime, attack));
239
+ }
240
+ const steadyStart = Math.max(onsetTime, attackTime);
241
+ if (steadyStart > 0)
242
+ frames.push(keyframe(steadyStart, base.clone().formants(steady).set(P_AV, gain)));
243
+ const steadyEnd = Math.max(steadyStart, duration - offsetTime);
244
+ if (steadyEnd > steadyStart + 1e-6)
245
+ frames.push(keyframe(steadyEnd, base.clone().formants(steady).set(P_AV, gain)));
246
+ const end = base.clone().formants(offsetFormants);
247
+ let endAv = gain;
248
+ if (draft.sustain)
249
+ endAv = gain;
250
+ else if (draft.boundaryAfter || next === undefined || nextSpec?.kind === "silence")
251
+ endAv = gain - 12;
252
+ else if (next?.articulation === "rearticulate")
253
+ endAv = gain - 14;
254
+ else if (nextSpec?.kind === "closure")
255
+ endAv = gain - 10;
256
+ else if (nextSpec !== undefined && !nextSpec.voiced)
257
+ endAv = gain - 6;
258
+ end.set(P_AV, endAv);
259
+ if (next?.articulation === "rearticulate")
260
+ end.set(P_RD, Math.min(2.7, rd + 0.3));
261
+ if (nextSpec?.kind === "nasal" || nextSpec?.kind === "moraic-nasal") {
262
+ end.set(P_NMIX, 0.5).set(P_NZERO, nasalZeroFor(context, next?.phoneme ?? "n", undefined));
263
+ }
264
+ if (draft.boundaryAfter && !draft.sustain)
265
+ end.set(P_RD, Math.min(2.7, rd + 0.35));
266
+ frames.push(keyframe(duration, end));
267
+ return frames;
268
+ }
269
+ function buildDevoiced(context, draft, previous, duration) {
270
+ const spec = PHONEMES[draft.phoneme];
271
+ const base = Params.of(context, spec).bandwidths(scaledBandwidths(context, spec.bw, 1.6));
272
+ const prevSpec = previous === undefined ? undefined : PHONEMES[previous.phoneme];
273
+ const level = -13 + draft.gainDb;
274
+ const frames = [];
275
+ const start = base
276
+ .clone()
277
+ .set(P_AH, prevSpec?.kind === "fricative" || prevSpec?.kind === "affricate" ? level : level - 10);
278
+ frames.push(keyframe(0, start));
279
+ const rise = Math.min(0.012, duration * 0.3);
280
+ frames.push(keyframe(rise, base.clone().set(P_AH, level)));
281
+ const fall = Math.max(rise, duration - Math.min(0.02, duration * 0.3));
282
+ frames.push(keyframe(fall, base.clone().set(P_AH, level)));
283
+ frames.push(keyframe(duration, base.clone().set(P_AH, level - 16)));
284
+ return frames;
285
+ }
286
+ function buildNasal(context, draft, previous, next, duration) {
287
+ const spec = PHONEMES[draft.phoneme];
288
+ const steady = steadyFormants(context, draft.phoneme, next?.phoneme);
289
+ const zero = nasalZeroFor(context, draft.phoneme, next?.phoneme);
290
+ const base = Params.of(context, spec)
291
+ .formants(steady)
292
+ .set(P_NMIX, 1)
293
+ .set(P_NZERO, zero)
294
+ .set(P_RD, Math.max(0.3, Math.min(2.7, context.voice.rd + draft.rdOffset)))
295
+ .set(P_AH, context.voice.aspirationDb + draft.gainDb - 6);
296
+ const gain = spec.av + draft.gainDb;
297
+ const prevSpec = previous === undefined ? undefined : PHONEMES[previous.phoneme];
298
+ const onsetFormants = onsetFormantsFrom(context, previous, steady, draft.phoneme);
299
+ const onsetTime = Math.min(0.02, duration * 0.3);
300
+ const frames = [];
301
+ const startAv = draft.boundaryBefore || previous === undefined || prevSpec?.kind === "silence"
302
+ ? gain - 24
303
+ : prevSpec !== undefined && !prevSpec.voiced
304
+ ? gain - 10
305
+ : gain;
306
+ frames.push(keyframe(0, base.clone().formants(onsetFormants).set(P_AV, startAv)));
307
+ frames.push(keyframe(onsetTime, base.clone().set(P_AV, gain)));
308
+ const nextSpec = next === undefined ? undefined : PHONEMES[next.phoneme];
309
+ const endAv = draft.boundaryAfter || next === undefined || nextSpec?.kind === "silence" ? gain - 10 : gain;
310
+ frames.push(keyframe(duration, base.clone().set(P_AV, endAv)));
311
+ return frames;
312
+ }
313
+ function buildGlide(context, draft, previous, next, duration) {
314
+ const spec = PHONEMES[draft.phoneme];
315
+ const steady = scaledFormants(context, spec.f);
316
+ const base = Params.of(context, spec)
317
+ .formants(steady)
318
+ .set(P_RD, Math.max(0.3, Math.min(2.7, context.voice.rd + draft.rdOffset)))
319
+ .set(P_AH, context.voice.aspirationDb + draft.gainDb);
320
+ const gain = spec.av + draft.gainDb;
321
+ const prevSpec = previous === undefined ? undefined : PHONEMES[previous.phoneme];
322
+ const onsetFormants = onsetFormantsFrom(context, previous, steady, draft.phoneme);
323
+ const onsetTime = Math.min(0.025, duration * 0.4);
324
+ const frames = [];
325
+ const startAv = draft.boundaryBefore || previous === undefined || prevSpec?.kind === "silence"
326
+ ? gain - 24
327
+ : prevSpec !== undefined && !prevSpec.voiced
328
+ ? gain - 8
329
+ : gain;
330
+ frames.push(keyframe(0, base.clone().formants(onsetFormants).set(P_AV, startAv)));
331
+ frames.push(keyframe(onsetTime, base.clone().set(P_AV, gain)));
332
+ const nextVowel = vowelFormantsOf(context, next?.phoneme);
333
+ const end = base.clone().set(P_AV, gain);
334
+ if (nextVowel !== undefined)
335
+ end.formants(mixTriple(steady, nextVowel, 0.25));
336
+ frames.push(keyframe(duration, end));
337
+ return frames;
338
+ }
339
+ function buildFlap(context, draft, previous, next, duration) {
340
+ const spec = PHONEMES[draft.phoneme];
341
+ const steady = scaledFormants(context, spec.f);
342
+ const base = Params.of(context, spec)
343
+ .formants(steady)
344
+ .set(P_RD, Math.max(0.3, Math.min(2.7, context.voice.rd + draft.rdOffset)))
345
+ .set(P_AH, context.voice.aspirationDb + draft.gainDb);
346
+ const gain = draft.gainDb;
347
+ const prevVowel = vowelFormantsOf(context, previous?.phoneme);
348
+ const nextVowel = vowelFormantsOf(context, next?.phoneme);
349
+ const prevSpec = previous === undefined ? undefined : PHONEMES[previous.phoneme];
350
+ const startAv = draft.boundaryBefore || previous === undefined || prevSpec?.kind === "silence" ? gain - 20 : gain - 2;
351
+ const frames = [];
352
+ frames.push(keyframe(0, base
353
+ .clone()
354
+ .formants(prevVowel === undefined ? steady : mixTriple(prevVowel, steady, 0.5))
355
+ .set(P_AV, startAv)));
356
+ frames.push(keyframe(duration * 0.35, base.clone().set(P_AV, spec.av + gain)));
357
+ frames.push(keyframe(duration * 0.65, base.clone().set(P_AV, spec.av + gain)));
358
+ frames.push(keyframe(duration, base
359
+ .clone()
360
+ .formants(nextVowel === undefined ? steady : mixTriple(steady, nextVowel, 0.5))
361
+ .set(P_AV, gain - 2)));
362
+ return frames;
363
+ }
364
+ function requiredFrication(phoneme) {
365
+ const fric = PHONEMES[phoneme].fric;
366
+ if (fric === null)
367
+ throw new Error(`phoneme table: ${phoneme} has no frication spectrum`);
368
+ return fric;
369
+ }
370
+ function burstSpecFor(phoneme, next) {
371
+ const spec = PHONEMES[phoneme];
372
+ const fallback = spec.fric ?? requiredFrication("k");
373
+ if ((phoneme === "k" || phoneme === "g") && next !== undefined) {
374
+ const vowel = next.toLowerCase();
375
+ if (vowel === "i" || vowel === "e")
376
+ return PHONEMES.ky.fric ?? fallback;
377
+ }
378
+ return fallback;
379
+ }
380
+ function buildStop(context, draft, previous, next, duration) {
381
+ const spec = PHONEMES[draft.phoneme];
382
+ const nominal = spec.closure + spec.burst + spec.aspiration;
383
+ const scale = duration / nominal;
384
+ const burstTime = Math.max(0.005, Math.min(spec.burst * scale, duration * 0.4));
385
+ const aspirationTime = Math.max(0, Math.min(spec.aspiration * scale, duration - burstTime - 0.004));
386
+ const closureTime = Math.max(0.002, duration - burstTime - aspirationTime);
387
+ const locus = scaledFormants(context, spec.locus ?? spec.f);
388
+ const nextVowel = vowelFormantsOf(context, next?.phoneme);
389
+ const release = nextVowel === undefined ? locus : mixTriple(locus, nextVowel, locusLambda(draft.phoneme) * 0.6);
390
+ const base = Params.of(context, spec)
391
+ .formants(locus)
392
+ .fric(burstSpecFor(draft.phoneme, next?.phoneme))
393
+ .set(P_RD, Math.max(0.3, Math.min(2.7, context.voice.rd + draft.rdOffset)))
394
+ .set(P_AH, OFF);
395
+ const voiceBar = spec.voiced ? spec.av + draft.gainDb : OFF;
396
+ const prevSpec = previous === undefined ? undefined : PHONEMES[previous.phoneme];
397
+ const closure = base
398
+ .clone()
399
+ .bandwidths(scaledBandwidths(context, [150, 700, 700]))
400
+ .set(P_AV, voiceBar);
401
+ const frames = [];
402
+ const startAv = prevSpec !== undefined && prevSpec.voiced && spec.voiced ? voiceBar : spec.voiced ? voiceBar - 8 : OFF;
403
+ frames.push(keyframe(0, closure.clone().set(P_AV, startAv)));
404
+ frames.push(keyframe(closureTime, closure
405
+ .clone()
406
+ .set(P_AV, voiceBar)
407
+ .set(P_AF, spec.af + draft.gainDb + draft.emphasis * 2)));
408
+ const afterBurst = base
409
+ .clone()
410
+ .formants(release)
411
+ .set(P_AF, spec.af + draft.gainDb - 9);
412
+ if (spec.voiced)
413
+ afterBurst.set(P_AV, voiceBar + 6);
414
+ else
415
+ afterBurst.set(P_AH, -6 + draft.gainDb);
416
+ frames.push(keyframe(closureTime + burstTime, afterBurst));
417
+ const end = base.clone().formants(release).set(P_AF, OFF);
418
+ if (spec.voiced)
419
+ end.set(P_AV, draft.gainDb - 4);
420
+ else
421
+ end.set(P_AH, -10 + draft.gainDb);
422
+ frames.push(keyframe(duration, end));
423
+ return frames;
424
+ }
425
+ function buildFricative(context, draft, previous, next, duration) {
426
+ const spec = PHONEMES[draft.phoneme];
427
+ const locus = scaledFormants(context, spec.locus ?? spec.f);
428
+ const nextVowel = vowelFormantsOf(context, next?.phoneme);
429
+ const isH = draft.phoneme === "h";
430
+ const shaped = isH && nextVowel !== undefined ? nextVowel : locus;
431
+ const base = Params.of(context, spec)
432
+ .formants(shaped)
433
+ .set(P_RD, Math.max(0.3, Math.min(2.7, context.voice.rd + draft.rdOffset)))
434
+ .set(P_AH, OFF);
435
+ if (spec.fric !== null)
436
+ base.fric(spec.fric);
437
+ if (isH)
438
+ base.bandwidths(scaledBandwidths(context, PHONEMES.a.bw, 1.7));
439
+ const level = spec.af + draft.gainDb + draft.emphasis;
440
+ const voiced = spec.voiced ? spec.av + draft.gainDb : OFF;
441
+ const frames = [];
442
+ const closureTime = spec.closure > 0 ? Math.min(spec.closure * (duration / spec.duration), duration * 0.45) : 0;
443
+ const prevSpec = previous === undefined ? undefined : PHONEMES[previous.phoneme];
444
+ const rise = Math.min(0.015, Math.max(0.003, (duration - closureTime) * 0.25));
445
+ const fall = Math.min(0.02, Math.max(0.003, (duration - closureTime) * 0.25));
446
+ const noiseParam = isH ? P_AH : P_AF;
447
+ const hLevel = -26 + draft.gainDb + draft.emphasis;
448
+ const target = isH ? hLevel : level;
449
+ if (closureTime > 0) {
450
+ const closure = base.clone().bandwidths(scaledBandwidths(context, [150, 700, 700]));
451
+ frames.push(keyframe(0, closure.clone().set(P_AV, spec.voiced ? (prevSpec?.voiced === true ? voiced - 6 : voiced - 12) : OFF)));
452
+ frames.push(keyframe(closureTime, closure
453
+ .clone()
454
+ .set(P_AV, spec.voiced ? voiced - 4 : OFF)
455
+ .set(noiseParam, target + 2)));
456
+ }
457
+ else {
458
+ frames.push(keyframe(0, base
459
+ .clone()
460
+ .set(noiseParam, target - 12)
461
+ .set(P_AV, spec.voiced ? voiced - 8 : OFF)));
462
+ }
463
+ const plateauStart = closureTime + rise;
464
+ frames.push(keyframe(Math.min(plateauStart, duration), base.clone().set(noiseParam, target).set(P_AV, voiced)));
465
+ const plateauEnd = Math.max(plateauStart, duration - fall);
466
+ if (plateauEnd > plateauStart + 1e-6)
467
+ frames.push(keyframe(plateauEnd, base.clone().set(noiseParam, target).set(P_AV, voiced)));
468
+ const end = base
469
+ .clone()
470
+ .set(noiseParam, target - 10)
471
+ .set(P_AV, spec.voiced ? voiced - 2 : OFF);
472
+ if (nextVowel !== undefined && !isH)
473
+ end.formants(mixTriple(locus, nextVowel, 0.35));
474
+ frames.push(keyframe(duration, end));
475
+ return frames;
476
+ }
477
+ function buildClosure(context, draft, next, duration) {
478
+ const spec = PHONEMES[draft.phoneme];
479
+ const nextSpec = next === undefined ? undefined : PHONEMES[next.phoneme];
480
+ const base = Params.of(context, spec);
481
+ if (nextSpec !== undefined &&
482
+ (nextSpec.kind === "fricative" || nextSpec.kind === "affricate") &&
483
+ nextSpec.fric !== null &&
484
+ next?.phoneme !== "h") {
485
+ const level = nextSpec.af + draft.gainDb - 3;
486
+ const shaped = base
487
+ .clone()
488
+ .fric(nextSpec.fric)
489
+ .formants(scaledFormants(context, nextSpec.locus ?? nextSpec.f));
490
+ const isH = false;
491
+ const param = isH ? P_AH : P_AF;
492
+ return [
493
+ keyframe(0, shaped.clone().set(param, level - 12)),
494
+ keyframe(Math.min(0.015, duration * 0.3), shaped.clone().set(param, level)),
495
+ keyframe(duration, shaped.clone().set(param, level)),
496
+ ];
497
+ }
498
+ const silent = base.clone().set(P_AV, OFF).set(P_AF, OFF).set(P_AH, OFF);
499
+ return [keyframe(0, silent), keyframe(duration, silent.clone())];
500
+ }
501
+ function buildSilence(context, draft, duration) {
502
+ const base = Params.of(context, PHONEMES[draft.phoneme]).set(P_AV, OFF).set(P_AF, OFF).set(P_AH, OFF);
503
+ return [keyframe(0, base), keyframe(duration, base.clone())];
504
+ }
505
+ function buildKeyframes(context, drafts, index, duration) {
506
+ const draft = drafts[index];
507
+ if (draft === undefined)
508
+ return [];
509
+ const previous = drafts[index - 1];
510
+ const next = drafts[index + 1];
511
+ const spec = PHONEMES[draft.phoneme];
512
+ switch (spec.kind) {
513
+ case "vowel":
514
+ return buildVowel(context, draft, previous, next, duration);
515
+ case "devoiced":
516
+ return buildDevoiced(context, draft, previous, duration);
517
+ case "nasal":
518
+ case "moraic-nasal":
519
+ return buildNasal(context, draft, previous, next, duration);
520
+ case "glide":
521
+ return buildGlide(context, draft, previous, next, duration);
522
+ case "flap":
523
+ return buildFlap(context, draft, previous, next, duration);
524
+ case "stop":
525
+ return buildStop(context, draft, previous, next, duration);
526
+ case "fricative":
527
+ case "affricate":
528
+ return buildFricative(context, draft, previous, next, duration);
529
+ case "closure":
530
+ return buildClosure(context, draft, next, duration);
531
+ default:
532
+ return buildSilence(context, draft, duration);
533
+ }
534
+ }
535
+ function sanitize(frames, duration) {
536
+ const sorted = frames
537
+ .map((frame) => ({ at: Math.min(duration, Math.max(0, frame.at)), values: frame.values }))
538
+ .sort((a, b) => a.at - b.at);
539
+ const out = [];
540
+ for (const frame of sorted) {
541
+ const last = out.at(-1);
542
+ if (last !== undefined && frame.at - last.at < 1e-6) {
543
+ out[out.length - 1] = frame;
544
+ continue;
545
+ }
546
+ out.push(frame);
547
+ }
548
+ return out;
549
+ }
550
+ export function compileSegments(drafts, voice, sampleRate) {
551
+ const context = { voice, sampleRate };
552
+ const segments = [];
553
+ const boundaries = [0];
554
+ let cursor = 0;
555
+ let seconds = 0;
556
+ const kept = [];
557
+ for (const draft of drafts) {
558
+ seconds += Math.max(0, draft.seconds);
559
+ const end = Math.round(seconds * sampleRate);
560
+ if (end <= cursor)
561
+ continue;
562
+ kept.push({ draft, start: cursor, end });
563
+ cursor = end;
564
+ boundaries.push(cursor);
565
+ }
566
+ const keptDrafts = kept.map((entry) => entry.draft);
567
+ for (const [index, entry] of kept.entries()) {
568
+ const duration = (entry.end - entry.start) / sampleRate;
569
+ const frames = sanitize(buildKeyframes(context, keptDrafts, index, duration), duration);
570
+ const spec = PHONEMES[entry.draft.phoneme];
571
+ segments.push({
572
+ id: index,
573
+ phoneme: entry.draft.phoneme,
574
+ start: entry.start,
575
+ end: entry.end,
576
+ voiced: spec.voiced,
577
+ keyframes: frames,
578
+ moraIndex: entry.draft.moraIndex,
579
+ phraseIndex: entry.draft.phraseIndex,
580
+ noteId: entry.draft.noteId,
581
+ sustainId: entry.draft.sustainId,
582
+ articulation: entry.draft.articulation,
583
+ });
584
+ }
585
+ return { segments, frames: cursor, boundaries };
586
+ }
587
+ export function phoneDraft(phoneme, seconds, partial = {}) {
588
+ return {
589
+ phoneme,
590
+ seconds,
591
+ moraIndex: null,
592
+ phraseIndex: null,
593
+ noteId: null,
594
+ sustainId: null,
595
+ articulation: "onset",
596
+ gainDb: 0,
597
+ rdOffset: 0,
598
+ boundaryBefore: false,
599
+ boundaryAfter: false,
600
+ sustain: false,
601
+ emphasis: 0,
602
+ ...partial,
603
+ };
604
+ }
605
+ export function isVowelOrDevoiced(phoneme) {
606
+ return isVowelPhoneme(phoneme) || PHONEMES[phoneme].kind === "devoiced";
607
+ }
608
+ //# sourceMappingURL=acoustics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acoustics.js","sourceRoot":"","sources":["../../src/synth/acoustics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjG,OAAO,EACL,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,IAAI,GACL,MAAM,WAAW,CAAC;AAyBnB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC;AASjB,SAAS,cAAc,CAAC,OAAgB,EAAE,CAAS;IACjD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;IACrC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB,EAAE,EAAU,EAAE,SAAiB,CAAC;IACxE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,MAAM;IACM,MAAM,CAAe;IAErC,YAAoB,MAAoB;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,EAAE,CAAC,OAAgB,EAAE,IAAiB;QAClD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,GAAG,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;QACjC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAEM,QAAQ,CAAC,CAAS;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,GAAG,CAAC,KAAa,EAAE,KAAa;QACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,IAAI,CAAC,IAAmB;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,WAAW;QAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;CACF;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAChD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,GAAG,CAAC;QACT,KAAK,IAAI,CAAC;QACV,KAAK,IAAI,CAAC;QACV,KAAK,GAAG,CAAC;QACT,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACP,OAAO,IAAI,CAAC;QACd,KAAK,GAAG,CAAC;QACT,KAAK,IAAI,CAAC;QACV,KAAK,GAAG,CAAC;QACT,KAAK,IAAI,CAAC;QACV,KAAK,GAAG,CAAC;QACT,KAAK,IAAI,CAAC;QACV,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB,EAAE,OAAgB,EAAE,IAAyB;IACnF,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC,OAAO,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB,EAAE,OAAgB,EAAE,IAAyB;IACjF,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;QAC9B,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;IACxF,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;AACnF,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB,EAAE,OAA4B;IACrE,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9F,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAgB,EAChB,QAAgC,EAChC,MAAc,EACd,OAAgB;IAEhB,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,UAAU;YACb,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,cAAc,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;gBAAE,OAAO,MAAM,CAAC;YACvC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgB,EAAE,IAA4B,EAAE,MAAc;IAC1F,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,UAAU;YACb,OAAO,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjE,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,cAAc,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAClF,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;gBAAE,OAAO,MAAM,CAAC;YACvC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU,EAAE,MAAc;IAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,UAAU,CACjB,OAAgB,EAChB,KAAiB,EACjB,QAAgC,EAChC,IAA4B,EAC5B,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;IAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;IAClG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,KAAK,UAAU,CAAC;IACrD,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxG,MAAM,WAAW,GAAG,QAAQ,EAAE,IAAI,KAAK,OAAO,CAAC;IAC/C,MAAM,SAAS,GAAG,UAAU;QAC1B,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;IACpG,MAAM,WAAW,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC;IACzG,MAAM,UAAU,GAAG,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzG,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1F,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,UAAU;QAAE,OAAO,GAAG,IAAI,CAAC;SAC1B,IAAI,KAAK,CAAC,YAAY,KAAK,cAAc;QAAE,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;SAC/D,IAAI,KAAK,CAAC,cAAc,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;SACxG,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;SACpE,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3D,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,IAAI,QAAQ,EAAE,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;QACpE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,QAAQ,EAAE,OAAO,KAAK,GAAG,IAAI,QAAQ,EAAE,OAAO,KAAK,IAAI;QAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9G,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,UAAU;QAC3B,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,cAAc;YACrC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC;IACtC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI;aAChB,KAAK,EAAE;aACP,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;aAClE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnB,IAAI,QAAQ,EAAE,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;YACpE,MAAM;iBACH,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;iBAChD,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,IAAI,WAAW,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACvG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;IAC/D,IAAI,SAAS,GAAG,WAAW,GAAG,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACpH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,GAAG,IAAI,CAAC;SAC3B,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS;QAAE,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;SACjG,IAAI,IAAI,EAAE,YAAY,KAAK,cAAc;QAAE,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;SAC7D,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS;QAAE,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;SACpD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;IACtE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,IAAI,IAAI,EAAE,YAAY,KAAK,cAAc;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAClF,IAAI,QAAQ,EAAE,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;QACpE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACnF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CACpB,OAAgB,EAChB,KAAiB,EACjB,QAAgC,EAChC,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IACjC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI;SACf,KAAK,EAAE;SACP,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,WAAW,IAAI,QAAQ,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CACjB,OAAgB,EAChB,KAAiB,EACjB,QAAgC,EAChC,IAA4B,EAC5B,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;SAClC,QAAQ,CAAC,MAAM,CAAC;SAChB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;SACd,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;SAClB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IACpC,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC;IACjD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,OAAO,GACX,KAAK,CAAC,cAAc,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS;QAC5E,CAAC,CAAC,IAAI,GAAG,EAAE;QACX,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC1C,CAAC,CAAC,IAAI,GAAG,EAAE;YACX,CAAC,CAAC,IAAI,CAAC;IACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3G,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CACjB,OAAgB,EAChB,KAAiB,EACjB,QAAgC,EAChC,IAA4B,EAC5B,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;SAClC,QAAQ,CAAC,MAAM,CAAC;SAChB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IACpC,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC;IAClD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,OAAO,GACX,KAAK,CAAC,cAAc,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS;QAC5E,CAAC,CAAC,IAAI,GAAG,EAAE;QACX,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC1C,CAAC,CAAC,IAAI,GAAG,CAAC;YACV,CAAC,CAAC,IAAI,CAAC;IACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,SAAS,KAAK,SAAS;QAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAChB,OAAgB,EAChB,KAAiB,EACjB,QAAgC,EAChC,IAA4B,EAC5B,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;SAClC,QAAQ,CAAC,MAAM,CAAC;SAChB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1B,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACtH,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,CAAC,IAAI,CACT,QAAQ,CACN,CAAC,EACD,IAAI;SACD,KAAK,EAAE;SACP,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;SAC9E,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CACtB,CACF,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,CAAC,IAAI,CACT,QAAQ,CACN,QAAQ,EACR,IAAI;SACD,KAAK,EAAE;SACP,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;SAC9E,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CACvB,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAgB;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IACpC,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,4BAA4B,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB,EAAE,IAAyB;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,QAAQ,CAAC;IAC1E,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAChB,OAAgB,EAChB,KAAiB,EACjB,QAAgC,EAChC,IAA4B,EAC5B,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;IAC5D,MAAM,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;IACpG,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IAChH,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;SAClC,QAAQ,CAAC,KAAK,CAAC;SACf,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SAChD,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,IAAI;SACjB,KAAK,EAAE;SACP,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;SACtD,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvB,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,OAAO,GACX,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,IAAI,CACT,QAAQ,CACN,WAAW,EACX,OAAO;SACJ,KAAK,EAAE;SACP,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;SACnB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAC1D,CACF,CAAC;IACF,MAAM,UAAU,GAAG,IAAI;SACpB,KAAK,EAAE;SACP,QAAQ,CAAC,OAAO,CAAC;SACjB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM;QAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;;QAC/C,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;QAC5C,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CACrB,OAAgB,EAChB,KAAiB,EACjB,QAAgC,EAChC,IAA4B,EAC5B,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,IAAI,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;SAClC,QAAQ,CAAC,MAAM,CAAC;SAChB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,GAAG;QAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;IACnD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,IAAI,CACT,QAAQ,CACN,CAAC,EACD,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CACtG,CACF,CAAC;QACF,MAAM,CAAC,IAAI,CACT,QAAQ,CACN,WAAW,EACX,OAAO;aACJ,KAAK,EAAE;aACP,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;aACzC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,CAC/B,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CACT,QAAQ,CACN,CAAC,EACD,IAAI;aACD,KAAK,EAAE;aACP,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,EAAE,CAAC;aAC5B,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAC7C,CACF,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC3D,IAAI,UAAU,GAAG,YAAY,GAAG,IAAI;QAClC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,GAAG,GAAG,IAAI;SACb,KAAK,EAAE;SACP,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,EAAE,CAAC;SAC5B,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,GAAG;QAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACrF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB,EAAE,KAAiB,EAAE,IAA4B,EAAE,QAAgB;IACvG,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,IACE,QAAQ,KAAK,SAAS;QACtB,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC;QAChE,QAAQ,CAAC,IAAI,KAAK,IAAI;QACtB,IAAI,EAAE,OAAO,KAAK,GAAG,EACrB,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI;aAChB,KAAK,EAAE;aACP,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;aACnB,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,KAAK,CAAC;QAClB,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,OAAO;YACL,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACrD,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzE,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB,EAAE,KAAiB,EAAE,QAAgB;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACtG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB,EAAE,MAA6B,EAAE,KAAa,EAAE,QAAgB;IACtG,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9D,KAAK,UAAU;YACb,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3D,KAAK,OAAO,CAAC;QACb,KAAK,cAAc;YACjB,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9D,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9D,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7D,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7D,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClE,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtD;YACE,OAAO,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAAkB,EAAE,QAAgB;IACpD,MAAM,MAAM,GAAG,MAAM;SAClB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;SACzF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAA6B,EAC7B,KAAmB,EACnB,UAAkB;IAElB,MAAM,OAAO,GAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAa,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,IAAI,GAAwD,EAAE,CAAC;IACrE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC;QAC7C,IAAI,GAAG,IAAI,MAAM;YAAE,SAAS;QAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,CAAC;QACb,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;YAChC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;YACpC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;YAC1B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;YAChC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY;SACvC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,OAAe,EAAE,UAA+B,EAAE;IAC7F,OAAO;QACL,OAAO;QACP,OAAO;QACP,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,OAAO;QACrB,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;QACpB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,CAAC;QACX,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC1E,CAAC"}