@nxara/olio 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/olio.js ADDED
@@ -0,0 +1,514 @@
1
+ import { compose, SCALAR } from "@nxara/olio-schema";
2
+ import { defaultFieldResolver, getNamedType, isEnumType, isInputObjectType, isInterfaceType, isObjectType, isScalarType, isUnionType, parse, Source, valueFromAST, GraphQLError } from "graphql";
3
+ import { didYouMean } from "graphql/jsutils/didYouMean.js";
4
+ import { suggestionList } from "graphql/jsutils/suggestionList.js";
5
+ function suggest(name, options) {
6
+ const hint = didYouMean(suggestionList(name, [...options]));
7
+ return hint && `.${hint}`;
8
+ }
9
+ const toList = (value) => {
10
+ if (value === undefined)
11
+ return [];
12
+ return Array.isArray(value) ? value : [value];
13
+ };
14
+ function parseSDL(source, name) {
15
+ try {
16
+ return parse(new Source(source, name));
17
+ }
18
+ catch (error) {
19
+ const loc = error instanceof GraphQLError && error.locations?.[0];
20
+ if (!loc)
21
+ throw error;
22
+ throw new Error(`${name}:${loc.line}:${loc.column}: ${error.message}`);
23
+ }
24
+ }
25
+ const parseAll = (typeDefs, name) => toList(typeDefs).map((typeDef) => typeof typeDef === "string" ? parseSDL(typeDef, name) : typeDef);
26
+ function resolverMap(owner, resolvers) {
27
+ if (resolvers === undefined)
28
+ return [];
29
+ if (Array.isArray(resolvers)) {
30
+ throw new TypeError(`${owner}: resolvers must be one map keyed by type, not a list`);
31
+ }
32
+ return [resolvers];
33
+ }
34
+ function enumMap(owner, config) {
35
+ const enums = "enums" in config ? config.enums : undefined;
36
+ if (enums === undefined)
37
+ return {};
38
+ if (typeof enums !== "object" || enums === null || Array.isArray(enums)) {
39
+ throw new TypeError(`${owner}: enums must be one map keyed by enum, e.g. { Role: { ADMIN: 1 } }`);
40
+ }
41
+ return enums;
42
+ }
43
+ function checkId(kind, id) {
44
+ if (id === "" || id.includes("/")) {
45
+ throw new Error(`${kind} id ${JSON.stringify(id)} must be non-empty and can't contain "/"`);
46
+ }
47
+ }
48
+ export function createModule(id, config) {
49
+ checkId("Module", id);
50
+ return {
51
+ id,
52
+ typeDefs: parseAll(config.typeDefs, `module "${id}"`),
53
+ resolvers: resolverMap(`Module "${id}"`, config.resolvers),
54
+ enums: enumMap(`Module "${id}"`, config),
55
+ middleware: (config.middleware ?? {}),
56
+ features: config.features ?? []
57
+ };
58
+ }
59
+ export function createFeature(module, id, config) {
60
+ checkId("Feature", id);
61
+ return {
62
+ module,
63
+ id,
64
+ typeDefs: parseAll(config.typeDefs, `feature "${module}/${id}"`),
65
+ resolvers: resolverMap(`Feature "${module}/${id}"`, config.resolvers),
66
+ enums: enumMap(`Feature "${module}/${id}"`, config),
67
+ middleware: (config.middleware ?? {})
68
+ };
69
+ }
70
+ function register(seen, kind, id, value) {
71
+ const first = seen.get(id);
72
+ if (first === value)
73
+ throw new Error(`${kind} "${id}" is listed twice`);
74
+ if (first) {
75
+ throw new Error(`Two different ${kind.toLowerCase()}s use the id "${id}"; ids must be unique`);
76
+ }
77
+ seen.set(id, value);
78
+ }
79
+ const asMiddleware = (map) => map;
80
+ function owners(modules) {
81
+ const result = [];
82
+ const seen = new Map();
83
+ for (const m of modules) {
84
+ register(seen, "Module", m.id, m);
85
+ result.push({
86
+ ...m,
87
+ middleware: asMiddleware(m.middleware),
88
+ kind: "module",
89
+ label: `Module "${m.id}"`,
90
+ upperMiddleware: [],
91
+ canTarget: (id) => id === m.id || id.startsWith(`${m.id}/`)
92
+ });
93
+ for (const f of m.features) {
94
+ const id = `${m.id}/${f.id}`;
95
+ if (f.module !== m.id) {
96
+ throw new Error(`Feature "${f.module}/${f.id}" is listed in module "${m.id}"`);
97
+ }
98
+ register(seen, "Feature", id, f);
99
+ result.push({
100
+ id,
101
+ kind: "feature",
102
+ label: `Feature "${id}"`,
103
+ typeDefs: f.typeDefs,
104
+ resolvers: f.resolvers,
105
+ enums: f.enums,
106
+ middleware: asMiddleware(f.middleware),
107
+ upperMiddleware: [asMiddleware(m.middleware)],
108
+ canTarget: (owner) => owner === id
109
+ });
110
+ }
111
+ }
112
+ return result;
113
+ }
114
+ function chainFor(app, owner, type, field) {
115
+ return [
116
+ app["*"]?.["*"],
117
+ app[type]?.["*"],
118
+ app[type]?.[field],
119
+ ...[...owner.upperMiddleware, owner.middleware].flatMap((map) => [
120
+ map[type]?.["*"],
121
+ map[type]?.[field]
122
+ ])
123
+ ].flatMap((fns) => fns ?? []);
124
+ }
125
+ const NO_BYPASS = new Set();
126
+ function wrap(resolve, chain, bypass) {
127
+ if (chain.length === 0)
128
+ return resolve;
129
+ return (root, args, ctx, info) => {
130
+ const params = {
131
+ root,
132
+ args,
133
+ ctx,
134
+ info,
135
+ bypass: bypass
136
+ };
137
+ const run = (index) => {
138
+ const fn = chain[index];
139
+ return fn
140
+ ? fn(params, () => run(index + 1))
141
+ : resolve(params.root, params.args, params.ctx, info);
142
+ };
143
+ return run(0);
144
+ };
145
+ }
146
+ function claim({ owner: self, declared }, key) {
147
+ const where = self.label;
148
+ const owner = declared.get(key);
149
+ if (owner !== self.id) {
150
+ throw new Error(owner
151
+ ? `${where}: "${key}" is declared by ${owner.includes("/") ? "feature" : "module"} "${owner}"; only that ${owner.includes("/") ? "feature" : "module"} can resolve it`
152
+ : `${where}: "${key}" can't be resolved here`);
153
+ }
154
+ }
155
+ const SCALAR_METHODS = ["serialize", "parseValue", "parseLiteral"];
156
+ function applyScalar(type, value) {
157
+ const target = type;
158
+ const source = value;
159
+ for (const method of SCALAR_METHODS) {
160
+ if (typeof source[method] === "function")
161
+ target[method] = source[method];
162
+ }
163
+ }
164
+ function fieldParts(where, key, value, subscription) {
165
+ const expected = subscription
166
+ ? "a function returning an AsyncIterable (e.g. an async generator), or { resolve, extensions }"
167
+ : "a function, or { resolve, extensions }";
168
+ if (typeof value === "function")
169
+ return { resolve: value };
170
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
171
+ throw new TypeError(`${where}: "${key}" must be ${expected}`);
172
+ }
173
+ const { resolve, extensions, ...rest } = value;
174
+ const extra = Object.keys(rest)[0];
175
+ if (extra !== undefined) {
176
+ throw new TypeError(`${where}: "${key}" must be ${expected}, not "${extra}"`);
177
+ }
178
+ if (resolve !== undefined && typeof resolve !== "function") {
179
+ throw new TypeError(`${where}: "${key}".resolve must be a function`);
180
+ }
181
+ if (extensions !== undefined &&
182
+ (typeof extensions !== "object" || extensions === null)) {
183
+ throw new TypeError(`${where}: "${key}".extensions must be an object`);
184
+ }
185
+ return {
186
+ resolve: resolve,
187
+ extensions: extensions
188
+ };
189
+ }
190
+ function applyField(attach, type, fieldName, resolver) {
191
+ const { schema, owner, appMiddleware } = attach;
192
+ const key = `${type.name}.${fieldName}`;
193
+ const where = owner.label;
194
+ if (fieldName === "__resolveType" || fieldName === "__isTypeOf") {
195
+ if (typeof resolver !== "function") {
196
+ throw new TypeError(`${where}: "${key}" must be a function`);
197
+ }
198
+ claim(attach, key);
199
+ const abstract = isUnionType(type) || isInterfaceType(type);
200
+ if (fieldName === "__resolveType" && abstract) {
201
+ type.resolveType = resolver;
202
+ return;
203
+ }
204
+ if (fieldName === "__isTypeOf" && isObjectType(type)) {
205
+ type.isTypeOf = resolver;
206
+ return;
207
+ }
208
+ throw new Error(`${where}: "${key}" is not valid on ${type.name}`);
209
+ }
210
+ if (!isObjectType(type) && !isInterfaceType(type)) {
211
+ throw new Error(`${where}: ${type.name} only accepts __resolveType`);
212
+ }
213
+ const field = type.getFields()[fieldName];
214
+ if (!field) {
215
+ throw new Error(`${where}: unknown field "${key}"${suggest(fieldName, Object.keys(type.getFields()))}`);
216
+ }
217
+ claim(attach, key);
218
+ const subscription = type === schema.getSubscriptionType();
219
+ const { resolve, extensions } = fieldParts(where, key, resolver, subscription);
220
+ if (extensions) {
221
+ field.extensions = {
222
+ ...field.extensions,
223
+ ...extensions
224
+ };
225
+ }
226
+ if (!resolve) {
227
+ if (subscription) {
228
+ throw new TypeError(`${where}: "${key}" needs a resolve: a function returning an AsyncIterable`);
229
+ }
230
+ return;
231
+ }
232
+ const chain = chainFor(appMiddleware, owner, type.name, fieldName);
233
+ const bypass = attach.bypass.get(key) ?? NO_BYPASS;
234
+ if (subscription) {
235
+ field.subscribe = wrap(iterable(where, key, resolve), chain, bypass);
236
+ field.resolve = (event) => event;
237
+ return;
238
+ }
239
+ field.resolve = wrap(resolve, chain, bypass);
240
+ }
241
+ function iterable(where, key, resolve) {
242
+ return async (...args) => {
243
+ const source = await resolve(...args);
244
+ if (typeof source === "object" && source && Symbol.asyncIterator in source)
245
+ return source;
246
+ const got = Array.isArray(source)
247
+ ? "an array"
248
+ : source === null
249
+ ? "null"
250
+ : typeof source;
251
+ throw new TypeError(`${where}: "${key}" must return an AsyncIterable (e.g. an async generator), got ${got}`);
252
+ };
253
+ }
254
+ function applyEnum(attach, type, values) {
255
+ for (const [name, internal] of Object.entries(values)) {
256
+ const key = `${type.name}.${name}`;
257
+ const value = type.getValue(name);
258
+ if (!value) {
259
+ throw new Error(`${attach.owner.label}: unknown enum value "${key}"${suggest(name, type.getValues().map((v) => v.name))}`);
260
+ }
261
+ claim(attach, key);
262
+ value.value = internal;
263
+ }
264
+ const missing = type
265
+ .getValues()
266
+ .filter((v) => attach.declared.get(`${type.name}.${v.name}`) === attach.owner.id &&
267
+ !(v.name in values));
268
+ if (missing.length > 0) {
269
+ throw new Error(`${attach.owner.label}: enum "${type.name}" needs an internal value for ${missing.map((v) => v.name).join(", ")} too`);
270
+ }
271
+ attach.enums.add(type);
272
+ }
273
+ function applyEnums(attach) {
274
+ for (const [name, values] of Object.entries(attach.owner.enums)) {
275
+ blameFile(attach.owner.enums, name, () => applyEnumEntry(attach, name, values));
276
+ }
277
+ }
278
+ function applyEnumEntry(attach, name, values) {
279
+ const { schema, owner } = attach;
280
+ const type = schema.getType(name);
281
+ if (!isEnumType(type)) {
282
+ const enums = Object.values(schema.getTypeMap()).filter((t) => isEnumType(t) && !t.name.startsWith("__"));
283
+ throw new Error(type
284
+ ? `${owner.label}: enums: "${name}" is not an enum`
285
+ : `${owner.label}: enums: unknown enum "${name}"${suggest(name, enums.map((t) => t.name))}`);
286
+ }
287
+ if (typeof values !== "object" || values === null) {
288
+ throw new TypeError(`${owner.label}: enums: "${name}" must map each value to its internal value`);
289
+ }
290
+ applyEnum(attach, type, values);
291
+ }
292
+ function explainMissingValues(schema, supplied) {
293
+ for (const type of Object.values(schema.getTypeMap())) {
294
+ if (!isEnumType(type) || supplied.has(type) || type.name.startsWith("__")) {
295
+ continue;
296
+ }
297
+ const serialize = type.serialize.bind(type);
298
+ type.serialize = (value) => {
299
+ try {
300
+ return serialize(value);
301
+ }
302
+ catch (error) {
303
+ throw new GraphQLError(`${error.message}. No module gave "${type.name}" internal values: pass them as { enums: { ${type.name}: { ... } } }`);
304
+ }
305
+ };
306
+ }
307
+ }
308
+ function checkEnums(enums) {
309
+ for (const type of enums) {
310
+ const seen = new Map();
311
+ for (const value of type.getValues()) {
312
+ const other = seen.get(value.value);
313
+ if (other !== undefined) {
314
+ throw new Error(`Enum "${type.name}": ${other} and ${value.name} have the same internal value ${JSON.stringify(value.value)}`);
315
+ }
316
+ seen.set(value.value, value.name);
317
+ }
318
+ }
319
+ }
320
+ function coerceDefaults(schema) {
321
+ const done = new Set();
322
+ const recoerce = (input) => {
323
+ const named = getNamedType(input.type);
324
+ if (isInputObjectType(named))
325
+ coerceInputType(named);
326
+ const literal = input.astNode?.defaultValue;
327
+ if (!literal)
328
+ return;
329
+ const value = valueFromAST(literal, input.type);
330
+ if (value !== undefined)
331
+ input.defaultValue = value;
332
+ };
333
+ const coerceInputType = (type) => {
334
+ if (done.has(type))
335
+ return;
336
+ done.add(type);
337
+ for (const field of Object.values(type.getFields()))
338
+ recoerce(field);
339
+ };
340
+ for (const type of Object.values(schema.getTypeMap())) {
341
+ if (isInputObjectType(type))
342
+ coerceInputType(type);
343
+ if (!isObjectType(type) && !isInterfaceType(type))
344
+ continue;
345
+ for (const field of Object.values(type.getFields())) {
346
+ for (const arg of field.args)
347
+ recoerce(arg);
348
+ }
349
+ }
350
+ for (const directive of schema.getDirectives()) {
351
+ for (const arg of directive.args)
352
+ recoerce(arg);
353
+ }
354
+ }
355
+ function unknownType({ schema, owner }, name) {
356
+ const root = [
357
+ schema.getQueryType(),
358
+ schema.getMutationType(),
359
+ schema.getSubscriptionType()
360
+ ].find((t) => t?.getFields()[name]);
361
+ const hint = root
362
+ ? `. It's a ${root.name} field: key resolvers by type, e.g. { ${root.name}: { ${name}: ... } }`
363
+ : suggest(name, Object.keys(schema.getTypeMap()).filter((t) => !t.startsWith("__")));
364
+ return `${owner.label}: unknown type "${name}"${hint}`;
365
+ }
366
+ const ORIGIN = Symbol.for("nxara.origin");
367
+ function blameFile(map, type, run) {
368
+ const origin = map[ORIGIN];
369
+ let key = type;
370
+ try {
371
+ run((field) => {
372
+ key = `${type}.${field}`;
373
+ });
374
+ }
375
+ catch (error) {
376
+ const file = origin?.get(key) ?? origin?.get(type);
377
+ if (file && error instanceof Error) {
378
+ error.message += ` (exported by ${file})`;
379
+ }
380
+ throw error;
381
+ }
382
+ }
383
+ function applyResolvers(attach) {
384
+ for (const map of attach.owner.resolvers) {
385
+ for (const [typeName, value] of Object.entries(map)) {
386
+ blameFile(map, typeName, (at) => applyType(attach, typeName, value, at));
387
+ }
388
+ }
389
+ }
390
+ function applyType(attach, typeName, value, onField) {
391
+ const type = attach.schema.getType(typeName);
392
+ if (!type)
393
+ throw new Error(unknownType(attach, typeName));
394
+ if (isScalarType(type)) {
395
+ const definer = attach.declared.get(`${typeName}.${SCALAR}`);
396
+ if (definer !== attach.owner.id) {
397
+ throw new Error(definer
398
+ ? `${attach.owner.label}: scalar "${typeName}" is defined by "${definer}"; only it can implement the scalar`
399
+ : `${attach.owner.label}: scalar "${typeName}" isn't defined in any module's SDL`);
400
+ }
401
+ applyScalar(type, value);
402
+ return;
403
+ }
404
+ if (isEnumType(type)) {
405
+ throw new Error(`${attach.owner.label}: enum "${typeName}" takes its internal values through enums, not resolvers: { enums: { ${typeName}: { ... } } }`);
406
+ }
407
+ if (!isObjectType(type) && !isInterfaceType(type) && !isUnionType(type)) {
408
+ throw new Error(`${attach.owner.label}: cannot attach resolvers to ${typeName}`);
409
+ }
410
+ for (const [fieldName, resolver] of Object.entries(value)) {
411
+ onField(fieldName);
412
+ applyField(attach, type, fieldName, resolver);
413
+ }
414
+ }
415
+ function declarations(ownership) {
416
+ const declared = new Map();
417
+ for (const [id, types] of ownership) {
418
+ for (const [type, fields] of types) {
419
+ for (const field of fields)
420
+ declared.set(`${type}.${field}`, id);
421
+ }
422
+ }
423
+ return declared;
424
+ }
425
+ function checkFns(where, target, fns) {
426
+ if (!Array.isArray(fns) || fns.some((fn) => typeof fn !== "function")) {
427
+ throw new TypeError(`${where} ${target} must be a list of middleware functions`);
428
+ }
429
+ }
430
+ function checkAppMiddleware(schema, middleware) {
431
+ for (const [type, fields] of Object.entries(middleware)) {
432
+ for (const [key, fns] of Object.entries(fields ?? {})) {
433
+ const target = `"${type}.${key}"`;
434
+ checkFns("Application middleware", target, fns);
435
+ if (type === "*") {
436
+ if (key !== "*") {
437
+ throw new Error(`Application middleware ${target}: "*" only takes "*"`);
438
+ }
439
+ continue;
440
+ }
441
+ const root = [
442
+ schema.getQueryType(),
443
+ schema.getMutationType(),
444
+ schema.getSubscriptionType()
445
+ ].find((t) => t?.name === type);
446
+ if (!root) {
447
+ throw new Error(`Application middleware ${target}: the application can target "*" and root types only`);
448
+ }
449
+ if (key !== "*" && !root.getFields()[key]) {
450
+ throw new Error(`Application middleware ${target}: unknown field${suggest(key, Object.keys(root.getFields()))}`);
451
+ }
452
+ }
453
+ }
454
+ }
455
+ function checkOwnerMiddleware(schema, owner, declared) {
456
+ for (const [type, fields] of Object.entries(owner.middleware)) {
457
+ for (const [key, fns] of Object.entries(fields ?? {})) {
458
+ checkFns(`${owner.label}: middleware`, `"${type}.${key}"`, fns);
459
+ if (!isObjectType(schema.getType(type))) {
460
+ throw new Error(`${owner.label}: middleware "${type}.${key}" targets ${type}, which has no fields to wrap`);
461
+ }
462
+ const reaches = key === "*"
463
+ ? [...declared].some(([k, id]) => owner.canTarget(id) && k.startsWith(`${type}.`))
464
+ : owner.canTarget(declared.get(`${type}.${key}`) ?? "") &&
465
+ !key.startsWith("__");
466
+ if (!reaches) {
467
+ throw new Error(`${owner.label}: middleware "${type}.${key}" targets a field the ${owner.kind} doesn't declare`);
468
+ }
469
+ }
470
+ }
471
+ }
472
+ function wrapDefaults(schema, app, all, declared, bypass) {
473
+ const byId = new Map(all.map((o) => [o.id, o]));
474
+ const targets = new Set();
475
+ for (const map of [app, ...all.map((o) => o.middleware)]) {
476
+ for (const [type, fields] of Object.entries(map)) {
477
+ for (const key of Object.keys(fields ?? {})) {
478
+ if (type !== "*" && key !== "*")
479
+ targets.add(`${type}.${key}`);
480
+ }
481
+ }
482
+ }
483
+ for (const target of targets) {
484
+ const [typeName = "", fieldName = ""] = target.split(".");
485
+ const type = schema.getType(typeName);
486
+ if (!isObjectType(type) || type === schema.getSubscriptionType())
487
+ continue;
488
+ const field = type.getFields()[fieldName];
489
+ const owner = byId.get(declared.get(target) ?? "");
490
+ if (!field || field.resolve || !owner)
491
+ continue;
492
+ field.resolve = wrap(defaultFieldResolver, chainFor(app, owner, typeName, fieldName), bypass.get(target) ?? NO_BYPASS);
493
+ }
494
+ }
495
+ export function olio(config) {
496
+ const all = owners(config.modules);
497
+ const { schema, ownership, bypass } = compose(all, config.directives);
498
+ const declared = declarations(ownership);
499
+ const appMiddleware = (config.middleware ?? {});
500
+ checkAppMiddleware(schema, appMiddleware);
501
+ const enums = new Set();
502
+ for (const owner of all) {
503
+ checkOwnerMiddleware(schema, owner, declared);
504
+ const attach = { schema, owner, appMiddleware, declared, bypass, enums };
505
+ applyResolvers(attach);
506
+ applyEnums(attach);
507
+ }
508
+ checkEnums(enums);
509
+ explainMissingValues(schema, enums);
510
+ coerceDefaults(schema);
511
+ wrapDefaults(schema, appMiddleware, all, declared, bypass);
512
+ return { schema, modules: config.modules };
513
+ }
514
+ //# sourceMappingURL=olio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"olio.js","sourceRoot":"","sources":["../src/olio.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EACP,MAAM,EAIP,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,KAAK,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EAUb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AA2CnE,SAAS,OAAO,CAAC,IAAY,EAAE,OAAyB;IACtD,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,MAAM,GAAG,CAAI,KAAmC,EAAgB,EAAE;IACtE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAU,CAAC,CAAC;AACrD,CAAC,CAAC;AAIF,SAAS,QAAQ,CAAC,MAAc,EAAE,IAAY;IAC5C,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG;YAAE,MAAM,KAAK,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,CACf,QAAwD,EACxD,IAAY,EACI,EAAE,CAClB,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/B,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAChE,CAAC;AAGJ,SAAS,WAAW,CAClB,KAAa,EACb,SAA6B;IAE7B,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,uDAAuD,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,SAAwB,CAAC,CAAC;AACpC,CAAC;AAGD,SAAS,OAAO,CAAC,KAAa,EAAE,MAAc;IAC5C,MAAM,KAAK,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,oEAAoE,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,KAAoB,CAAC;AAC9B,CAAC;AAID,SAAS,OAAO,CAAC,IAA0B,EAAE,EAAU;IACrD,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,0CAA0C,CAC3E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,EAAK,EACL,MAAuB;IAEvB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACtB,OAAO;QACL,EAAE;QACF,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC;QACrD,SAAS,EAAE,WAAW,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;QAC1D,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC;QACxC,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAkB;QACtD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAS,EACT,EAAK,EACL,MAA2B;IAE3B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACvB,OAAO;QACL,MAAM;QACN,EAAE;QACF,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,MAAM,IAAI,EAAE,GAAG,CAAC;QAChE,SAAS,EAAE,WAAW,CAAC,YAAY,MAAM,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;QACrE,KAAK,EAAE,OAAO,CAAC,YAAY,MAAM,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC;QACnD,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAkB;KACvD,CAAC;AACJ,CAAC;AAgBD,SAAS,QAAQ,CACf,IAAyB,EACzB,IAA0B,EAC1B,EAAU,EACV,KAAa;IAEb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,KAAK,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACxE,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,iBAAiB,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,uBAAuB,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACtB,CAAC;AAID,MAAM,YAAY,GAAG,CAAC,GAAqB,EAAiB,EAAE,CAC5D,GAAoB,CAAC;AAEvB,SAAS,MAAM,CAAC,OAA8B;IAC5C,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,CAAC;YACJ,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;YACtC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,GAAG;YACzB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;SAC5D,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,YAAY,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,EAAE,GAAG,CAC9D,CAAC;YACJ,CAAC;YACD,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE;gBACF,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,YAAY,EAAE,GAAG;gBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;gBACtC,eAAe,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC7C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CACf,GAAkB,EAClB,KAAY,EACZ,IAAY,EACZ,KAAa;IAEb,OAAO;QACL,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QAChB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAClB,GAAG,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC;KACH,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAChC,CAAC;AAGD,MAAM,SAAS,GAAwB,IAAI,GAAG,EAAE,CAAC;AAEjD,SAAS,IAAI,CACX,OAAgB,EAChB,KAA8B,EAC9B,MAA2B;IAE3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACvC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAE/B,MAAM,MAAM,GAAqB;YAC/B,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,IAAI;YACJ,MAAM,EAAE,MAAoC;SAC7C,CAAC;QACF,MAAM,GAAG,GAAG,CAAC,KAAa,EAAW,EAAE;YACrC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAExB,OAAO,EAAE;gBACP,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAClC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC,CAAC;QACF,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAWD,SAAS,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAU,EAAE,GAAW;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,KAAK;YACH,CAAC,CAAC,GAAG,KAAK,MAAM,GAAG,oBAAoB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,gBAAgB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,iBAAiB;YACtK,CAAC,CAAC,GAAG,KAAK,MAAM,GAAG,0BAA0B,CAChD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAU,CAAC;AAE5E,SAAS,WAAW,CAAC,IAAuB,EAAE,KAAa;IACzD,MAAM,MAAM,GAAG,IAA0C,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU;YAAE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAQD,SAAS,UAAU,CACjB,KAAa,EACb,GAAW,EACX,KAAc,EACd,YAAqB;IAErB,MAAM,QAAQ,GAAG,YAAY;QAC3B,CAAC,CAAC,6FAA6F;QAC/F,CAAC,CAAC,wCAAwC,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,EAAE,OAAO,EAAE,KAAgB,EAAE,CAAC;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,MAAM,GAAG,aAAa,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,KAAgC,CAAC;IAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,MAAM,GAAG,aAAa,QAAQ,UAAU,KAAK,GAAG,CACzD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3D,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,MAAM,GAAG,8BAA8B,CAAC,CAAC;IACvE,CAAC;IACD,IACE,UAAU,KAAK,SAAS;QACxB,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,CAAC,EACvD,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,MAAM,GAAG,gCAAgC,CAAC,CAAC;IACzE,CAAC;IACD,OAAO;QACL,OAAO,EAAE,OAA8B;QACvC,UAAU,EAAE,UAAiD;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,MAAc,EACd,IAAsB,EACtB,SAAiB,EACjB,QAAiB;IAEjB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAChD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAE1B,IAAI,SAAS,KAAK,eAAe,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QAChE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,MAAM,GAAG,sBAAsB,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,SAAS,KAAK,eAAe,IAAI,QAAQ,EAAE,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,QAAmC,CAAC;YACvD,OAAO;QACT,CAAC;QACD,IAAI,SAAS,KAAK,YAAY,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,GAAG,QAAgC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,GAAG,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,6BAA6B,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,oBAAoB,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CACvF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEnB,MAAM,YAAY,GAAG,IAAI,KAAK,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAC3D,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,CACxC,KAAK,EACL,GAAG,EACH,QAAQ,EACR,YAAY,CACb,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACd,KAAiD,CAAC,UAAU,GAAG;YAC9D,GAAG,KAAK,CAAC,UAAU;YACnB,GAAG,UAAU;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,MAAM,GAAG,0DAA0D,CAC5E,CAAC;QACJ,CAAC;QAED,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IACnD,IAAI,YAAY,EAAE,CAAC;QAEjB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrE,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;QACjC,OAAO;IACT,CAAC;IACD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAGD,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAW,EAAE,OAAgB;IAC5D,OAAO,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;QACvB,MAAM,MAAM,GAAY,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM;YACxE,OAAO,MAAM,CAAC;QAChB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,MAAM,KAAK,IAAI;gBACf,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,OAAO,MAAM,CAAC;QACpB,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,MAAM,GAAG,iEAAiE,GAAG,EAAE,CACxF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAChB,MAAc,EACd,IAAqB,EACrB,MAAc;IAEd,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,yBAAyB,GAAG,IAAI,OAAO,CAC1D,IAAI,EACJ,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACpC,EAAE,CACJ,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClB,KAA4B,CAAC,KAAK,GAAG,QAAQ,CAAC;IACjD,CAAC;IAGD,MAAM,OAAO,GAAG,IAAI;SACjB,SAAS,EAAE;SACX,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE;QACjE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CACtB,CAAC;IACJ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,WAAW,IAAI,CAAC,IAAI,iCAAiC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CACtH,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAID,SAAS,UAAU,CAAC,MAAc;IAChC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CACvC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CACrC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,IAAY,EAAE,MAAe;IACnE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CACrD,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CACjD,CAAC;QACF,MAAM,IAAI,KAAK,CACb,IAAI;YACF,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,aAAa,IAAI,kBAAkB;YACnD,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,0BAA0B,IAAI,IAAI,OAAO,CACrD,IAAI,EACJ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACzB,EAAE,CACR,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,CAAC,KAAK,aAAa,IAAI,6CAA6C,CAC7E,CAAC;IACJ,CAAC;IACD,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAID,SAAS,oBAAoB,CAC3B,MAAqB,EACrB,QAAsC;IAEtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;QAEtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1E,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,YAAY,CACpB,GAAI,KAAe,CAAC,OAAO,qBAAqB,IAAI,CAAC,IAAI,8CAA8C,IAAI,CAAC,IAAI,eAAe,CAChI,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAmC;IACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,CAAC,IAAI,MAAM,KAAK,QAAQ,KAAK,CAAC,IAAI,iCAAiC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAC9G,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AAOD,SAAS,cAAc,CAAC,MAAqB;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC/C,MAAM,QAAQ,GAAG,CAAC,KAA0C,EAAQ,EAAE;QACpE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,iBAAiB,CAAC,KAAK,CAAC;YAAE,eAAe,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IACtD,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,IAA4B,EAAQ,EAAE;QAC7D,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;QACtD,IAAI,iBAAiB,CAAC,IAAI,CAAC;YAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;YACpD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC;QAC/C,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAID,SAAS,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAU,EAAE,IAAY;IAC1D,MAAM,IAAI,GAAG;QACX,MAAM,CAAC,YAAY,EAAE;QACrB,MAAM,CAAC,eAAe,EAAE;QACxB,MAAM,CAAC,mBAAmB,EAAE;KAC7B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI;QACf,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,yCAAyC,IAAI,CAAC,IAAI,OAAO,IAAI,WAAW;QAC/F,CAAC,CAAC,OAAO,CACL,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CACpE,CAAC;IACN,OAAO,GAAG,KAAK,CAAC,KAAK,mBAAmB,IAAI,IAAI,IAAI,EAAE,CAAC;AACzD,CAAC;AAID,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAI1C,SAAS,SAAS,CAChB,GAAW,EACX,IAAY,EACZ,GAA0C;IAE1C,MAAM,MAAM,GAAI,GAAkD,CAAC,MAAM,CAAC,CAAC;IAC3E,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI,CAAC;QACH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,IAAI,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACnC,KAAK,CAAC,OAAO,IAAI,iBAAiB,IAAI,GAAG,CAAC;QAC5C,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAChB,MAAc,EACd,QAAgB,EAChB,KAAa,EACb,OAAgC;IAEhC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1D,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,OAAO;gBACL,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,aAAa,QAAQ,oBAAoB,OAAO,qCAAqC;gBAC5G,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,aAAa,QAAQ,qCAAqC,CACpF,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,WAAW,QAAQ,wEAAwE,QAAQ,eAAe,CACxI,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,gCAAgC,QAAQ,EAAE,CAChE,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,SAAS,CAAC,CAAC;QACnB,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,SAAoB;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACnC,KAAK,MAAM,KAAK,IAAI,MAAM;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAID,SAAS,QAAQ,CAAC,KAAa,EAAE,MAAc,EAAE,GAAY;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,IAAI,MAAM,yCAAyC,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAqB,EACrB,UAAyB;IAEzB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC;YAClC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAChD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,sBAAsB,CACvD,CAAC;gBACJ,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG;gBACX,MAAM,CAAC,YAAY,EAAE;gBACrB,MAAM,CAAC,eAAe,EAAE;gBACxB,MAAM,CAAC,mBAAmB,EAAE;aAC7B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,sDAAsD,CACvF,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,kBAAkB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAChG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAqB,EACrB,KAAY,EACZ,QAAqC;IAErC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,cAAc,EAAE,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,KAAK,iBAAiB,IAAI,IAAI,GAAG,aAAa,IAAI,+BAA+B,CAC3F,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GACX,GAAG,KAAK,GAAG;gBACT,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAChB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAC7D;gBACH,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;oBACrD,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,KAAK,iBAAiB,IAAI,IAAI,GAAG,yBAAyB,KAAK,CAAC,IAAI,kBAAkB,CAChG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAID,SAAS,YAAY,CACnB,MAAqB,EACrB,GAAkB,EAClB,GAAqB,EACrB,QAAqC,EACrC,MAAc;IAEd,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC5C,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;oBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,QAAQ,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC,mBAAmB,EAAE;YAAE,SAAS;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK;YAAE,SAAS;QAChD,KAAK,CAAC,OAAO,GAAG,IAAI,CAClB,oBAA+B,EAC/B,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,EACzC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAChC,CAAC;IACJ,CAAC;AACH,CAAC;AAGD,MAAM,UAAU,IAAI,CAAC,MAAkB;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAkB,CAAC;IACjE,kBAAkB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACzE,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,UAAU,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IACD,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE3D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AAC7C,CAAC"}