@spinajs/configuration 2.0.557 → 3.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 (89) hide show
  1. package/lib/cjs/config/configuration.d.ts +1 -5
  2. package/lib/cjs/config/configuration.d.ts.map +1 -1
  3. package/lib/cjs/config/configuration.js +3 -1
  4. package/lib/cjs/config/configuration.js.map +1 -1
  5. package/lib/cjs/configuration.d.ts +24 -1
  6. package/lib/cjs/configuration.d.ts.map +1 -1
  7. package/lib/cjs/configuration.js +357 -82
  8. package/lib/cjs/configuration.js.map +1 -1
  9. package/lib/cjs/decorators.d.ts +77 -4
  10. package/lib/cjs/decorators.d.ts.map +1 -1
  11. package/lib/cjs/decorators.js +212 -11
  12. package/lib/cjs/decorators.js.map +1 -1
  13. package/lib/cjs/exception.d.ts +9 -1
  14. package/lib/cjs/exception.d.ts.map +1 -1
  15. package/lib/cjs/exception.js +2 -1
  16. package/lib/cjs/exception.js.map +1 -1
  17. package/lib/cjs/helpers.d.ts.map +1 -1
  18. package/lib/cjs/helpers.js +3 -2
  19. package/lib/cjs/helpers.js.map +1 -1
  20. package/lib/cjs/index.browser.d.ts +1 -0
  21. package/lib/cjs/index.browser.d.ts.map +1 -1
  22. package/lib/cjs/index.browser.js +4 -0
  23. package/lib/cjs/index.browser.js.map +1 -1
  24. package/lib/cjs/index.d.ts +3 -0
  25. package/lib/cjs/index.d.ts.map +1 -1
  26. package/lib/cjs/index.js +6 -0
  27. package/lib/cjs/index.js.map +1 -1
  28. package/lib/cjs/lib-dirs.d.ts +8 -0
  29. package/lib/cjs/lib-dirs.d.ts.map +1 -0
  30. package/lib/cjs/lib-dirs.js +16 -0
  31. package/lib/cjs/lib-dirs.js.map +1 -0
  32. package/lib/cjs/schemas.d.ts +20 -0
  33. package/lib/cjs/schemas.d.ts.map +1 -0
  34. package/lib/cjs/schemas.js +58 -0
  35. package/lib/cjs/schemas.js.map +1 -0
  36. package/lib/cjs/sources.d.ts +9 -3
  37. package/lib/cjs/sources.d.ts.map +1 -1
  38. package/lib/cjs/sources.js +27 -10
  39. package/lib/cjs/sources.js.map +1 -1
  40. package/lib/cjs/util.d.ts +8 -0
  41. package/lib/cjs/util.d.ts.map +1 -1
  42. package/lib/cjs/util.js +7 -1
  43. package/lib/cjs/util.js.map +1 -1
  44. package/lib/mjs/config/configuration.d.ts +1 -5
  45. package/lib/mjs/config/configuration.d.ts.map +1 -1
  46. package/lib/mjs/config/configuration.js +3 -1
  47. package/lib/mjs/config/configuration.js.map +1 -1
  48. package/lib/mjs/configuration.d.ts +24 -1
  49. package/lib/mjs/configuration.d.ts.map +1 -1
  50. package/lib/mjs/configuration.js +326 -84
  51. package/lib/mjs/configuration.js.map +1 -1
  52. package/lib/mjs/decorators.d.ts +77 -4
  53. package/lib/mjs/decorators.d.ts.map +1 -1
  54. package/lib/mjs/decorators.js +207 -12
  55. package/lib/mjs/decorators.js.map +1 -1
  56. package/lib/mjs/exception.d.ts +9 -1
  57. package/lib/mjs/exception.d.ts.map +1 -1
  58. package/lib/mjs/exception.js +2 -1
  59. package/lib/mjs/exception.js.map +1 -1
  60. package/lib/mjs/helpers.d.ts.map +1 -1
  61. package/lib/mjs/helpers.js +3 -2
  62. package/lib/mjs/helpers.js.map +1 -1
  63. package/lib/mjs/index.browser.d.ts +1 -0
  64. package/lib/mjs/index.browser.d.ts.map +1 -1
  65. package/lib/mjs/index.browser.js +1 -0
  66. package/lib/mjs/index.browser.js.map +1 -1
  67. package/lib/mjs/index.d.ts +3 -0
  68. package/lib/mjs/index.d.ts.map +1 -1
  69. package/lib/mjs/index.js +3 -0
  70. package/lib/mjs/index.js.map +1 -1
  71. package/lib/mjs/lib-dirs.d.ts +8 -0
  72. package/lib/mjs/lib-dirs.d.ts.map +1 -0
  73. package/lib/mjs/lib-dirs.js +13 -0
  74. package/lib/mjs/lib-dirs.js.map +1 -0
  75. package/lib/mjs/schemas.d.ts +20 -0
  76. package/lib/mjs/schemas.d.ts.map +1 -0
  77. package/lib/mjs/schemas.js +54 -0
  78. package/lib/mjs/schemas.js.map +1 -0
  79. package/lib/mjs/sources.d.ts +9 -3
  80. package/lib/mjs/sources.d.ts.map +1 -1
  81. package/lib/mjs/sources.js +27 -10
  82. package/lib/mjs/sources.js.map +1 -1
  83. package/lib/mjs/util.d.ts +8 -0
  84. package/lib/mjs/util.d.ts.map +1 -1
  85. package/lib/mjs/util.js +4 -0
  86. package/lib/mjs/util.js.map +1 -1
  87. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  88. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  89. package/package.json +7 -7
@@ -20,16 +20,80 @@ import _ from 'lodash';
20
20
  import { InternalLogger } from '@spinajs/internal-logger';
21
21
  import { InvalidArgument, InvalidOperation } from '@spinajs/exceptions';
22
22
  import { ConfigurationSource, Configuration, ConfigVarProtocol, ConfigVar, } from '@spinajs/configuration-common';
23
- import { Autoinject, Container, Injectable, DI } from '@spinajs/di';
23
+ import { Autoinject, Container, Injectable } from '@spinajs/di';
24
24
  import { InvalidConfiguration } from './exception.js';
25
- import { mapObject, mergeArrays, parseArgv, pickObjects, pickString } from './util.js';
26
- import config from './config/configuration.js';
25
+ import { mapObject, mergeArrays, parseArgv, pickObjects, pickString, sameSchema, schemaNameOf } from './util.js';
26
+ import config, { buildEnvironmentFlags } from './config/configuration.js';
27
27
  import './sources.js';
28
28
  import { default as ajvMergePath } from 'ajv-merge-patch';
29
29
  import { default as ajvFormats } from 'ajv-formats';
30
30
  import { default as ajvKeywords } from 'ajv-keywords';
31
31
  const PROTOCOL_REGEXP = /^([a-zA-Z0-9\-]+:\/\/)+(.+)$/gm;
32
32
  const COMMON_WEB_PROTOCOLS = ['http://', 'https://', 'ws://', 'wss://', 'ftp://', 'ftps://', 'file://', 'data://', 'blob://', 'mailto:'];
33
+ // A Configuration whose check ran but which DI has not cached yet (the microtasks after resolve() returns), by container.
34
+ const CHECKED = new WeakMap();
35
+ // The target of each lazy-var proxy load() builds, by proxy: copying a proxy property by property would load every var.
36
+ const LAZY_TARGETS = new WeakMap();
37
+ // Set while Ajv validates the stored value in place: it writes coerced values back through the proxies.
38
+ let keepUnresolvedVars = false;
39
+ const UNSAFE_PATH_SEGMENTS = new Set(['__proto__', 'constructor', 'prototype']);
40
+ // _.set skips these keys, but _.get resolves them, so merge() into `__proto__` would write to Object.prototype.
41
+ function assertSafePath(path) {
42
+ const unsafe = _.toPath(path).find((s) => UNSAFE_PATH_SEGMENTS.has(s));
43
+ if (unsafe !== undefined)
44
+ throw new InvalidArgument(`Configuration path '${_.toPath(path).join('.')}' contains the reserved segment '${unsafe}'`);
45
+ }
46
+ const isUnresolved = (v) => v instanceof ConfigVar && (v.get() ?? null) === null;
47
+ function withLazyVars(obj) {
48
+ const proxy = new Proxy(obj, {
49
+ get: (o, prop) => (o[prop] instanceof ConfigVar ? o[prop].get() : o[prop]),
50
+ set: (o, prop, value) => {
51
+ // A var that is not ready yet reads as null; its coercion ('' for a string) must not replace it for good.
52
+ if (!(keepUnresolvedVars && isUnresolved(o[prop])))
53
+ o[prop] = value;
54
+ return true;
55
+ },
56
+ });
57
+ LAZY_TARGETS.set(proxy, obj);
58
+ return proxy;
59
+ }
60
+ // A copy that validates as the stored value does: behind a copied lazy-var proxy only the vars the schema reads load,
61
+ // and a class instance (a ConfigVar, one with #private fields a copy would lack) is kept by reference.
62
+ function copyForCheck(value) {
63
+ return _.cloneDeepWith(value, function copy(v) {
64
+ const target = typeof v === 'object' && v !== null ? LAZY_TARGETS.get(v) : undefined;
65
+ if (target)
66
+ return withLazyVars(_.cloneDeepWith(target, copy));
67
+ if (Object.prototype.toString.call(v) === '[object Object]' && !_.isPlainObject(v))
68
+ return v;
69
+ return undefined;
70
+ });
71
+ }
72
+ const decodePointer = (segment) => segment.replace(/~1/g, '/').replace(/~0/g, '~');
73
+ // Ajv tags the sub-errors of a propertyNames check with `propertyName`; the check itself reports the key in `params`.
74
+ const isNameError = (e) => e.propertyName !== undefined;
75
+ const keyOf = (e) => {
76
+ const p = e.params;
77
+ return p.missingProperty ?? p.additionalProperty ?? p.propertyName;
78
+ };
79
+ function toViolations(module, schema, errors) {
80
+ const violations = [];
81
+ for (const e of errors) {
82
+ if (isNameError(e))
83
+ continue;
84
+ const segments = e.instancePath.split('/').filter((p) => p !== '').map(decodePointer);
85
+ const key = keyOf(e);
86
+ if (key !== undefined)
87
+ segments.push(String(key));
88
+ let message = e.message ?? e.keyword;
89
+ if (e.keyword === 'propertyNames') {
90
+ const detail = errors.filter((n) => isNameError(n) && n.instancePath === e.instancePath && n.propertyName === key).map((n) => n.message ?? n.keyword);
91
+ message = `property name is invalid${detail.length ? `: ${detail.join(', ')}` : ''}`;
92
+ }
93
+ violations.push({ path: [module, ...segments].join('.'), schema, message });
94
+ }
95
+ return violations;
96
+ }
33
97
  /**
34
98
  * HACK:
35
99
  * Becouse of ajv not supporting esm default exports we need to
@@ -59,6 +123,9 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
59
123
  * Loaded & merged configuration
60
124
  */
61
125
  this.Config = {};
126
+ /** Schemas applied after boot that refused the loaded value, by schema; a read of their module throws. */
127
+ this.RefusedModules = new Map();
128
+ this.Loading = false;
62
129
  this.CustomConfigPaths = options?.cfgCustomPaths ?? [];
63
130
  this.RunApp = options?.app ?? parseArgv('--app') ?? '';
64
131
  this.AppBaseDir = options?.appBaseDir ?? parseArgv('--apppath') ?? join(process.cwd(), '../apps/');
@@ -71,7 +138,33 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
71
138
  * @param defaultValue - optional, if value at specified path not exists returns default value
72
139
  */
73
140
  get(path, defaultValue) {
74
- return _.get(this.Config, path, defaultValue);
141
+ if (this.RefusedModules.size !== 0)
142
+ this.throwIfRefused(path);
143
+ const value = _.get(this.Config, path, defaultValue);
144
+ if (value === null && defaultValue !== undefined && this.isUnresolvedVar(path))
145
+ return defaultValue;
146
+ return value;
147
+ }
148
+ isUnresolvedVar(path) {
149
+ const segments = _.toPath(path);
150
+ if (segments.length === 0)
151
+ return false;
152
+ const parent = segments.length === 1 ? this.Config : _.get(this.Config, segments.slice(0, -1));
153
+ const target = typeof parent === 'object' && parent !== null ? LAZY_TARGETS.get(parent) : undefined;
154
+ return target !== undefined && isUnresolved(target[segments[segments.length - 1]]);
155
+ }
156
+ // A schema applied after boot cannot fail the boot; reading the value it refused, or a part of it, must still fail.
157
+ throwIfRefused(path) {
158
+ const segments = _.toPath(path);
159
+ // An empty path names no module (and reads nothing): it must not match every refused one.
160
+ if (segments.length === 0)
161
+ return;
162
+ for (const { module, error } of this.RefusedModules.values()) {
163
+ const n = Math.min(module.length, segments.length);
164
+ if (_.isEqual(module.slice(0, n), segments.slice(0, n))) {
165
+ throw new InvalidConfiguration(error.message, error.validationExceptions, error.violations);
166
+ }
167
+ }
75
168
  }
76
169
  /**
77
170
  * Sets at given path configuration value. Use when you want to override config
@@ -81,7 +174,11 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
81
174
  * @param value - value to set
82
175
  */
83
176
  set(path, value) {
177
+ assertSafePath(path);
178
+ const schemas = this.schemasAt(path);
179
+ this.checkChange(schemas, path, (root) => _.set(root, path, copyForCheck(value)));
84
180
  this.Config = _.set(this.Config, path, value);
181
+ this.applySchemas(schemas);
85
182
  }
86
183
  /**
87
184
  * Merge existing config value with new options instead overriding
@@ -90,7 +187,11 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
90
187
  * @param value - value to merge
91
188
  */
92
189
  merge(path, value) {
190
+ assertSafePath(path);
191
+ const schemas = this.schemasAt(path);
192
+ this.checkChange(schemas, path, (root) => _.mergeWith(_.get(root, path), copyForCheck(value), mergeArrays));
93
193
  _.mergeWith(this.get(path), value, mergeArrays);
194
+ this.applySchemas(schemas);
94
195
  }
95
196
  async resolve() {
96
197
  await super.resolve();
@@ -104,48 +205,76 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
104
205
  throw new InvalidArgument(`ConfigurationConfigPaths should be an array`);
105
206
  }
106
207
  this.CustomConfigPaths.forEach((p) => {
107
- InternalLogger.trace(`Custom config path at: ${p}`, 'Configuration');
208
+ InternalLogger.trace({ path: p }, 'Custom config path at: ${path}', 'Configuration');
108
209
  });
109
210
  }
110
211
  if (this.RunApp) {
111
- InternalLogger.info(`Run app is ${this.RunApp}`, 'Configuration');
212
+ InternalLogger.info({ runApp: this.RunApp }, 'Run app is ${runApp}', 'Configuration');
112
213
  }
113
- InternalLogger.info(`App base dir is ${this.AppBaseDir}`, 'Configuration');
214
+ InternalLogger.info({ appBaseDir: this.AppBaseDir }, 'App base dir is ${appBaseDir}', 'Configuration');
114
215
  this.initValidator();
115
- this.applyAppDirs();
116
- // add default configuration of this module
117
- // so we dont need to import it
118
- this.set('configuration', config);
119
216
  /**
120
217
  * Load and validate data from cfg sources
121
218
  * in proper order
122
219
  */
123
220
  this.loadSources();
124
221
  await this.load();
125
- this.validate();
126
- this.configure();
222
+ try {
223
+ this.validate();
224
+ this.configure();
225
+ }
226
+ catch (e) {
227
+ // DI does not cache a Configuration whose resolve failed: a schema registered later must not be checked against it.
228
+ if (CHECKED.get(this.Container) === this)
229
+ CHECKED.delete(this.Container);
230
+ throw e;
231
+ }
127
232
  }
128
233
  async mergeSource(sType) {
129
234
  const source = this.Container.resolve(sType);
130
235
  const sCfg = await source.Load(this);
236
+ const schemas = sCfg ? _.uniq(Object.keys(sCfg).flatMap((k) => this.schemasAt([k]))) : [];
237
+ this.checkChange(schemas, [], (root) => _.mergeWith(root, copyForCheck(sCfg), mergeArrays));
131
238
  this.Sources.push(source);
132
239
  if (sCfg) {
133
- _.mergeWith(sCfg, mergeArrays);
240
+ _.mergeWith(this.Config, sCfg, mergeArrays);
134
241
  }
242
+ this.applySchemas(schemas);
135
243
  }
136
244
  /**
137
245
  * Reloads configuration data
138
246
  */
139
247
  async load() {
248
+ const previous = this.Config;
249
+ this.Loading = true;
250
+ try {
251
+ await this.loadTree();
252
+ // resolve() checks the first load itself.
253
+ if (this.ValidationSchemas !== undefined)
254
+ this.checkAll();
255
+ }
256
+ catch (e) {
257
+ this.Config = previous;
258
+ throw e;
259
+ }
260
+ finally {
261
+ this.Loading = false;
262
+ }
263
+ }
264
+ async loadTree() {
140
265
  this.Config = {};
266
+ this.NamedEnv = this.Env ?? this.Container.get('process.env')?.APP_ENV ?? process.env.NODE_ENV;
141
267
  // add env variables to config
142
- const env = DI.get('process.env');
268
+ const env = this.Container.get('process.env');
269
+ const appEnv = this.Env ?? env?.APP_ENV ?? process.env.NODE_ENV ?? 'development';
143
270
  this.set('process.env', {
144
271
  ...process.env,
145
272
  ...env,
146
- APP_ENV: this.Env ?? env?.APP_ENV ?? process.env.NODE_ENV ?? 'development',
273
+ APP_ENV: appEnv,
147
274
  });
148
- InternalLogger.info(`APP_ENV set to ${this.get('process.env.APP_ENV')}`, 'Configuration');
275
+ // Defaults of this module, which sources may override. The flags follow the APP_ENV that selects the config files.
276
+ _.mergeWith(this.Config, _.cloneDeep(config), { configuration: buildEnvironmentFlags({ APP_ENV: appEnv }) }, mergeArrays);
277
+ InternalLogger.info({ appEnv: this.get('process.env.APP_ENV') }, 'APP_ENV set to ${appEnv}', 'Configuration');
149
278
  for (const source of this.Sources) {
150
279
  const rCfg = await source.Load(this);
151
280
  if (rCfg) {
@@ -158,11 +287,11 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
158
287
  * eg. when custom modules have config and dont want to use files
159
288
  * eg. in webpack environment
160
289
  */
290
+ // Merged at the root: merge() writes nothing at a key no source defines.
161
291
  this.Container.resolve(Array.ofType('__configuration__')).forEach((c) => {
162
- Object.keys(c).forEach((k) => {
163
- this.merge(k, c[`${k}`]);
164
- });
292
+ _.mergeWith(this.Config, c, mergeArrays);
165
293
  });
294
+ this.applyAppDirs();
166
295
  // load config vars from various protocols
167
296
  await this.loadProtocolVars();
168
297
  /**
@@ -179,14 +308,7 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
179
308
  if (!haveProtoVals) {
180
309
  return obj;
181
310
  }
182
- return new Proxy(obj, {
183
- get: (obj, prop) => {
184
- if (obj[prop] instanceof ConfigVar) {
185
- return obj[prop].get();
186
- }
187
- return obj[prop];
188
- },
189
- });
311
+ return withLazyVars(obj);
190
312
  };
191
313
  // omit system config prop couse dir dynamic loading.
192
314
  // NOTE: the root object must be wrapped by proxyFunc AFTER merging - spreading
@@ -199,7 +321,7 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
199
321
  });
200
322
  }
201
323
  async loadProtocolVars() {
202
- const configProtocols = await DI.resolve(Array.ofType(ConfigVarProtocol));
324
+ const configProtocols = await this.Container.resolve(Array.ofType(ConfigVarProtocol));
203
325
  if (!configProtocols || configProtocols.length === 0) {
204
326
  InternalLogger.warn(`No configuration protocols registered`, 'Configuration');
205
327
  return;
@@ -207,54 +329,55 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
207
329
  // Build protocol map for O(1) lookup
208
330
  const protocolMap = new Map();
209
331
  configProtocols.forEach((p) => {
210
- InternalLogger.info(`Registered configuration protocol: ${p.Protocol}`, 'Configuration');
332
+ InternalLogger.info({ protocol: p.Protocol }, 'Registered configuration protocol: ${protocol}', 'Configuration');
211
333
  protocolMap.set(p.Protocol, p);
212
334
  });
213
335
  // Build common web protocol prefix set for fast checking
214
336
  const webProtocolSet = new Set(COMMON_WEB_PROTOCOLS.map(p => p.toLowerCase()));
337
+ const resolveString = async (obj, key, val, currentPath) => {
338
+ // Quick check: does it contain ://?
339
+ const protocolIndex = val.indexOf('://');
340
+ if (protocolIndex === -1) {
341
+ return;
342
+ }
343
+ // Extract potential protocol (everything before ://)
344
+ const potentialProtocol = val.substring(0, protocolIndex + 3).toLowerCase();
345
+ // Skip common web protocols using Set lookup (O(1))
346
+ if (webProtocolSet.has(potentialProtocol)) {
347
+ return;
348
+ }
349
+ // Use regex only if we passed initial checks
350
+ PROTOCOL_REGEXP.lastIndex = 0;
351
+ const match = PROTOCOL_REGEXP.exec(val);
352
+ if (!match) {
353
+ return;
354
+ }
355
+ // O(1) protocol lookup using Map
356
+ const protocol = protocolMap.get(match[1]);
357
+ if (!protocol) {
358
+ InternalLogger.warn({ protocol: match[1] }, 'Protocol ${protocol} used in configuration is not registered.', 'Configuration');
359
+ return;
360
+ }
361
+ const fullPath = [...currentPath, key].join('.');
362
+ try {
363
+ obj[key] = await protocol.getVar(match[2], this.Config);
364
+ }
365
+ catch (err) {
366
+ InternalLogger.error({ error: err, key: fullPath, protocol: protocol.Protocol, value: val }, 'Error loading configuration var for key ${key} using protocol ${protocol}, value: ${value}', 'Configuration');
367
+ }
368
+ };
215
369
  const iterate = async (obj, currentPath = []) => {
216
370
  if (!obj) {
217
371
  return;
218
372
  }
219
373
  if (Array.isArray(obj)) {
220
- await Promise.all(obj.map((c, index) => iterate(c, [...currentPath, `[${index}]`])));
374
+ await Promise.all(obj.map((c, index) => (typeof c === 'string' ? resolveString(obj, String(index), c, currentPath) : iterate(c, [...currentPath, `[${index}]`]))));
221
375
  return;
222
376
  }
223
377
  const stringEntries = pickString(obj);
224
378
  const objectEntries = pickObjects(obj);
225
379
  // Process strings in parallel
226
- await Promise.all(stringEntries.map(async ([key, val]) => {
227
- // Quick check: does it contain ://?
228
- const protocolIndex = val.indexOf('://');
229
- if (protocolIndex === -1) {
230
- return;
231
- }
232
- // Extract potential protocol (everything before ://)
233
- const potentialProtocol = val.substring(0, protocolIndex + 3).toLowerCase();
234
- // Skip common web protocols using Set lookup (O(1))
235
- if (webProtocolSet.has(potentialProtocol)) {
236
- return;
237
- }
238
- // Use regex only if we passed initial checks
239
- PROTOCOL_REGEXP.lastIndex = 0;
240
- const match = PROTOCOL_REGEXP.exec(val);
241
- if (!match) {
242
- return;
243
- }
244
- // O(1) protocol lookup using Map
245
- const protocol = protocolMap.get(match[1]);
246
- if (!protocol) {
247
- InternalLogger.warn(`Protocol ${match[1]} used in configuration is not registered.`, 'Configuration');
248
- return;
249
- }
250
- const fullPath = [...currentPath, key].join('.');
251
- try {
252
- obj[key] = await protocol.getVar(match[2], this.Config);
253
- }
254
- catch (err) {
255
- InternalLogger.error(err, `Error loading configuration var for key ${fullPath} using protocol ${protocol.Protocol}, value: ${val}`, 'Configuration');
256
- }
257
- }));
380
+ await Promise.all(stringEntries.map(([key, val]) => resolveString(obj, key, val, currentPath)));
258
381
  // Process nested objects in parallel
259
382
  await Promise.all(objectEntries.map(([key, val]) => iterate(val, [...currentPath, key])));
260
383
  };
@@ -276,21 +399,130 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
276
399
  });
277
400
  }
278
401
  validate() {
279
- this.ValidationSchemas.forEach((s) => {
280
- const config = this.get(s.$configurationModule);
281
- if (!config) {
282
- InternalLogger.warn(`Cannot validate configuration for module ${s.$configurationModule}, configuration is not set`, 'Configuration');
283
- return;
402
+ this.checkAll();
403
+ const container = this.Container;
404
+ CHECKED.set(container, this);
405
+ container.once('di.resolved.Configuration', () => {
406
+ if (CHECKED.get(container) === this)
407
+ CHECKED.delete(container);
408
+ });
409
+ }
410
+ /** The Configuration of `container` that has run its check but is not resolved (cached) yet. */
411
+ static checkedIn(container) {
412
+ return CHECKED.get(container);
413
+ }
414
+ checkAll() {
415
+ this.ValidationSchemas = this.schemasOfLineage();
416
+ const errors = [];
417
+ const violations = [];
418
+ for (const s of this.ValidationSchemas) {
419
+ const r = this.checkModule(s);
420
+ errors.push(...r.errors);
421
+ violations.push(...r.violations);
422
+ }
423
+ this.throwIfInvalid(errors, violations);
424
+ this.RefusedModules.clear();
425
+ }
426
+ // The registered schemas whose module is at, under or above `path`. None before the boot check, and none while load()
427
+ // rebuilds the tree: it checks the whole tree once it is complete.
428
+ schemasAt(path) {
429
+ if (this.ValidationSchemas === undefined || this.Loading)
430
+ return [];
431
+ const target = _.toPath(path);
432
+ return this.schemasOfLineage().filter((s) => {
433
+ const module = _.toPath(s.$configurationModule);
434
+ const n = Math.min(module.length, target.length);
435
+ return _.isEqual(module.slice(0, n), target.slice(0, n));
436
+ });
437
+ }
438
+ // Runs `change` on a copy of the modules of `schemas` and throws when one of them would become invalid, so that a
439
+ // refused change is never applied.
440
+ checkChange(schemas, path, change) {
441
+ if (schemas.length === 0)
442
+ return;
443
+ const top = _.minBy([_.toPath(path), ...schemas.map((s) => _.toPath(s.$configurationModule))], (p) => p.length) ?? [];
444
+ const root = (top.length === 0 ? copyForCheck(this.Config) : _.set({}, top, copyForCheck(_.get(this.Config, top))));
445
+ change(root);
446
+ const errors = [];
447
+ const violations = [];
448
+ for (const s of schemas) {
449
+ const value = _.get(root, s.$configurationModule);
450
+ if (value === undefined || this.Validator.validate(s, value))
451
+ continue;
452
+ const r = this.failureOf(s);
453
+ errors.push(...r.errors);
454
+ violations.push(...r.violations);
455
+ }
456
+ this.throwIfInvalid(errors, violations);
457
+ }
458
+ // Fills the defaults and coercion of the modules a change that passed checkChange() reached.
459
+ applySchemas(schemas) {
460
+ for (const s of schemas) {
461
+ const r = this.checkModule(s);
462
+ this.throwIfInvalid(r.errors, r.violations);
463
+ this.RefusedModules.delete(schemaNameOf(s));
464
+ }
465
+ }
466
+ /** Validates one module after boot; a refused module stays refused for reads until a later check passes. */
467
+ validateModule(s) {
468
+ const key = schemaNameOf(s);
469
+ const r = this.checkModule(s);
470
+ try {
471
+ this.throwIfInvalid(r.errors, r.violations);
472
+ }
473
+ catch (e) {
474
+ this.RefusedModules.set(key, { module: _.toPath(s.$configurationModule), error: e });
475
+ throw e;
476
+ }
477
+ this.RefusedModules.delete(key);
478
+ }
479
+ throwIfInvalid(errors, violations) {
480
+ if (violations.length === 0)
481
+ return;
482
+ violations.forEach((v) => InternalLogger.error({ path: v.path, schema: v.schema, violation: v.message }, 'Invalid configuration at ${path} ( schema ${schema} ): ${violation}', 'Configuration'));
483
+ throw new InvalidConfiguration(`Invalid configuration: ${violations.map((v) => `${v.path} ${v.message} ( schema ${v.schema} )`).join('; ')}`, errors, violations);
484
+ }
485
+ checkModule(s) {
486
+ // Not this.get: a refused module is read here to check it again.
487
+ const config = _.get(this.Config, s.$configurationModule);
488
+ if (config === undefined) {
489
+ // An unconfigured module still gets its schema defaults, unless the schema needs values from the app.
490
+ const empty = {};
491
+ if (this.Validator.validate(s, empty)) {
492
+ _.set(this.Config, s.$configurationModule, empty);
284
493
  }
285
- const result = this.Validator.validate(s, config);
286
- if (!result) {
287
- // @ts-ignore
288
- this.Validator.errors.forEach((ve) => {
289
- InternalLogger.error('Invalid configuration ! Message: %s, path: %s, keyword: %s, schemaPath: %s, configuration module: %s', 'Configuration', ve.message, ve.instancePath, ve.keyword, ve.schemaPath, s.$configurationModule);
290
- });
291
- throw new InvalidConfiguration('Validation error', this.Validator.errors);
494
+ else {
495
+ InternalLogger.warn({ module: s.$configurationModule }, 'Cannot validate configuration for module ${module}, configuration is not set', 'Configuration');
292
496
  }
293
- });
497
+ return { errors: [], violations: [] };
498
+ }
499
+ // Ajv coerces and fills defaults in place, and evaluates `if` before `properties` coerces. Checking the stored value
500
+ // directly would rewrite a refused value (a null guard's null into 0) so that the next check of it passes; only a
501
+ // value whose copy passes gets its defaults and coercion.
502
+ if (this.Validator.validate(s, copyForCheck(config)) && this.validateInPlace(s, config)) {
503
+ return { errors: [], violations: [] };
504
+ }
505
+ return this.failureOf(s);
506
+ }
507
+ // The violations of the last failed this.Validator.validate(s, ...) call.
508
+ failureOf(s) {
509
+ const errors = this.Validator.errors ?? [];
510
+ const schema = schemaNameOf(s);
511
+ let violations = toViolations(s.$configurationModule, schema, errors);
512
+ if (violations.length === 0) {
513
+ // An invalid configuration must never pass, whatever shape Ajv reported.
514
+ violations = errors.map((e) => ({ path: [s.$configurationModule, ...e.instancePath.split('/').filter((p) => p !== '').map(decodePointer)].join('.'), schema, message: e.message ?? e.keyword }));
515
+ }
516
+ return { errors, violations };
517
+ }
518
+ validateInPlace(s, config) {
519
+ keepUnresolvedVars = true;
520
+ try {
521
+ return this.Validator.validate(s, config);
522
+ }
523
+ finally {
524
+ keepUnresolvedVars = false;
525
+ }
294
526
  }
295
527
  initValidator() {
296
528
  const options = {
@@ -307,6 +539,8 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
307
539
  useDefaults: true,
308
540
  // The option coerceTypes allows you to have your data types coerced to the types specified in your schema type keywords
309
541
  coerceTypes: true,
542
+ // allow rules across fields, eg. minimum: { $data: '1/min' }
543
+ $data: true,
310
544
  };
311
545
  // @ts-ignore
312
546
  if (Ajv.default) {
@@ -329,11 +563,17 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
329
563
  // we use $configurationModule keyword to identify
330
564
  // to match config module with config schema
331
565
  this.Validator.addKeyword('$configurationModule');
332
- /**
333
- * load all registered configuration json schemas
334
- * for config value validation
335
- */
336
- this.ValidationSchemas = this.Container.get(Array.ofType('__configurationSchema__'), true);
566
+ }
567
+ // A child that registers a schema of its own must not hide the schemas of its ancestors.
568
+ schemasOfLineage() {
569
+ const found = [];
570
+ for (let c = this.Container; c; c = c.Parent) {
571
+ for (const s of (c.Cache.get('__configurationSchema__', false) ?? [])) {
572
+ if (!found.some((f) => sameSchema(f, s)))
573
+ found.push(s);
574
+ }
575
+ }
576
+ return found;
337
577
  }
338
578
  dir(toJoin) {
339
579
  return normalize(join(resolve(this.AppBaseDir), toJoin));
@@ -345,8 +585,10 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
345
585
  if (!this.RunApp) {
346
586
  return;
347
587
  }
348
- for (const prop of Object.keys(this.get(['system', 'dirs'], []))) {
349
- this.get(['system', 'dirs', prop]).push(this.dir(`/${this.RunApp}/${prop}`));
588
+ for (const prop of Object.keys(this.get(['system', 'dirs'], {}))) {
589
+ const dirs = this.get(['system', 'dirs', prop]);
590
+ if (Array.isArray(dirs))
591
+ dirs.push(this.dir(`/${this.RunApp}/${prop}`));
350
592
  }
351
593
  }
352
594
  /**
@@ -357,7 +599,7 @@ let FrameworkConfiguration = class FrameworkConfiguration extends Configuration
357
599
  for (const prop of Object.keys(this.Config)) {
358
600
  const subconfig = this.Config[`${prop}`];
359
601
  if (!subconfig) {
360
- InternalLogger.warn(`Configuration for ${prop} not exists, check configuration file`, 'configuration');
602
+ InternalLogger.warn({ section: prop }, 'Configuration for ${section} not exists, check configuration file', 'configuration');
361
603
  continue;
362
604
  }
363
605
  if (subconfig.configure && typeof subconfig.configure === 'function') {
@@ -1 +1 @@
1
- {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/configuration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/configuration.ts"],"names":[],"mappings":";;;;;;;;;AAAA,4DAA4D;AAC5D,+DAA+D;AAC/D,0DAA0D;AAC1D,sDAAsD;AACtD,sCAAsC;AACtC,uDAAuD;AACvD,sDAAsD;AACtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,GAAoB,MAAM,KAAK,CAAC;AACvC,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,mBAAmB,EAEnB,aAAa,EAIb,iBAAiB,EACjB,SAAS,GACV,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAS,SAAS,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,EAA0B,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,MAAM,EAAE,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,eAAe,GAAG,gCAAgC,CAAC;AACzD,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAEzI,0HAA0H;AAC1H,MAAM,OAAO,GAAG,IAAI,OAAO,EAAsC,CAAC;AAElE,wHAAwH;AACxH,MAAM,YAAY,GAAG,IAAI,OAAO,EAAkB,CAAC;AAEnD,wGAAwG;AACxG,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAEhF,gHAAgH;AAChH,SAAS,cAAc,CAAC,IAAuB;IAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,eAAe,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,oCAAoC,MAAM,GAAG,CAAC,CAAC;AACpJ,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,YAAY,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;AAE1F,SAAS,YAAY,CAAmB,GAAM;IAC5C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;QAC3B,GAAG,EAAE,CAAC,CAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/E,GAAG,EAAE,CAAC,CAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAC3B,0GAA0G;YAC1G,IAAI,CAAC,CAAC,kBAAkB,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;IACH,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sHAAsH;AACtH,uGAAuG;AACvG,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAU;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,IAAI,MAAM;YAAE,OAAO,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC7F,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAE3F,sHAAsH;AACtH,MAAM,WAAW,GAAG,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC;AAErE,MAAM,KAAK,GAAG,CAAC,CAAc,EAAE,EAAE;IAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAiC,CAAC;IAC9C,OAAO,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,YAAY,CAAC;AACrE,CAAC,CAAC;AAEF,SAAS,YAAY,CAAC,MAAc,EAAE,MAAc,EAAE,MAAqB;IACzE,MAAM,UAAU,GAA6B,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,WAAW,CAAC,CAAC,CAAC;YAAE,SAAS;QAE7B,MAAM,QAAQ,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtF,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,GAAG,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAElD,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;YACtJ,OAAO,GAAG,2BAA2B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACvF,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AAGI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,aAAa;IAuCvD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,MAAqB,CAAC;IACpC,CAAC;IAKD;;;;;OAKG;IACH,YAAY,OAA8B;QACxC,KAAK,EAAE,CAAC;QApDV;;WAEG;QACI,eAAU,GAAG,IAAI,CAAC;QAOzB;;WAEG;QACI,WAAM,GAAG,EAAE,CAAC;QAEnB;;WAEG;QACO,WAAM,GAA4B,EAAE,CAAC;QAe/C,0GAA0G;QAChG,mBAAc,GAAG,IAAI,GAAG,EAA6D,CAAC;QAExF,YAAO,GAAG,KAAK,CAAC;QAiBtB,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,cAAc,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QACnG,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACI,GAAG,CAAI,IAAuB,EAAE,YAAgB;QACrD,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAM,CAAC;QAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,OAAO,YAAY,CAAC;QACpG,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,eAAe,CAAC,IAAuB;QAC7C,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,MAAM,MAAM,GAAY,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAyC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7I,OAAO,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,oHAAoH;IAC5G,cAAc,CAAC,IAAuB;QAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,0FAA0F;QAC1F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,GAAG,CAAC,IAAuB,EAAE,KAAc;QAChD,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,IAAuB,EAAE,KAAc;QAClD,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5G,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,OAAO;QAElB,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,gBAAgB,CACxB,sGAAsG,CACvG,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,yEAAyE;YACzE,wBAAwB;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAC;YAC3E,CAAC;YAED,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,eAAe,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,EAAE,eAAe,CAAC,CAAC;QACxF,CAAC;QAED,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,+BAA+B,EAAE,eAAe,CAAC,CAAC;QAEvG,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB;;;WAGG;QACH,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAElB,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,oHAAoH;YACpH,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzE,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAiC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QAE5F,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,0CAA0C;YAC1C,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAoB,aAAa,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAElH,8BAA8B;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAoB,aAAa,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;QACjF,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YACtB,GAAG,OAAO,CAAC,GAAG;YACd,GAAG,GAAG;YACN,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,mHAAmH;QACnH,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAE1H,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAS,qBAAqB,CAAC,EAAE,EAAE,0BAA0B,EAAE,eAAe,CAAC,CAAC;QAEtH,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAErC,IAAI,IAAI,EAAE,CAAC;gBACT,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;QAGrD;;;;WAIG;QACH,yEAAyE;QACzE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAc,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAc,EAAE,EAAE;YAChG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,0CAA0C;QAC1C,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B;;;WAGG;QACH,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE;YAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClD,IAAI,CAAC,YAAY,SAAS,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,GAAG,CAAC;YACb,CAAC;YAED,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,qDAAqD;QACrD,+EAA+E;QAC/E,0EAA0E;QAC1E,kFAAkF;QAClF,+EAA+E;QAC/E,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACtB,MAAM,EAAE,EAAE,GAAI,IAAI,CAAC,MAAM,CAAC,MAAa,EAAE;YACzC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,gBAAgB;QAC9B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAEtF,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,eAAe,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QAED,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;QACzD,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,gDAAgD,EAAE,eAAe,CAAC,CAAC;YACjH,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAE/E,MAAM,aAAa,GAAG,KAAK,EAAE,GAA+B,EAAE,GAAW,EAAE,GAAW,EAAE,WAAqB,EAAE,EAAE;YAC/G,oCAAoC;YACpC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,qDAAqD;YACrD,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAE5E,oDAAoD;YACpD,IAAI,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,6CAA6C;YAC7C,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YAED,iCAAiC;YACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,+DAA+D,EAAE,eAAe,CAAC,CAAC;gBAC9H,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,4FAA4F,EAAE,eAAe,CAAC,CAAC;YAC9M,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,EAAE,GAA+B,EAAE,WAAW,GAAa,EAAE,EAAE,EAAE;YACpF,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,OAAO,CAAC,GAAG,CACf,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAChJ,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAEvC,8BAA8B;YAC9B,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;YAEhG,qCAAqC;YACrC,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC,CAAC;QAEF,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAES,MAAM;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAES,WAAW;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE;YACvE,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,GAAG;SACT,CAAC,CAAC;QAEH,mBAAmB;QACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACzB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;IAES,QAAQ;QAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7B,SAAS,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;YAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gGAAgG;IACzF,MAAM,CAAC,SAAS,CAAC,SAAqB;QAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,UAAU,GAA6B,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,sHAAsH;IACtH,mEAAmE;IAC3D,SAAS,CAAC,IAAuB;QACvC,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kHAAkH;IAClH,mCAAmC;IAC3B,WAAW,CAAC,OAA+B,EAAE,IAAuB,EAAE,MAA+C;QAC3H,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAA4B,CAAC;QAC/I,MAAM,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,UAAU,GAA6B,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAClD,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;gBAAE,SAAS;YACvE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,6FAA6F;IACrF,YAAY,CAAC,OAA+B;QAClD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,4GAA4G;IACrG,cAAc,CAAC,CAAuB;QAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAyB,EAAE,CAAC,CAAC;YAC7G,MAAM,CAAC,CAAC;QACV,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAEO,cAAc,CAAC,MAAqB,EAAE,UAAoC;QAChF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,qEAAqE,EAAE,eAAe,CAAC,CAAC,CAAC;QAClM,MAAM,IAAI,oBAAoB,CAAC,0BAA0B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACpK,CAAC;IAEO,WAAW,CAAC,CAAuB;QACzC,iEAAiE;QACjE,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAE1D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,sGAAsG;YACtG,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBACtC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,oBAAoB,EAAE,EAAE,8EAA8E,EAAE,eAAe,CAAC,CAAC;YAC3J,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACxC,CAAC;QAED,qHAAqH;QACrH,kHAAkH;QAClH,0DAA0D;QAC1D,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;YACxF,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACxC,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,0EAA0E;IAClE,SAAS,CAAC,CAAuB;QACvC,MAAM,MAAM,GAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,oBAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,yEAAyE;YACzE,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnM,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IAEO,eAAe,CAAC,CAAuB,EAAE,MAAe;QAC9D,kBAAkB,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;gBAAS,CAAC;YACT,kBAAkB,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAES,aAAa;QACrB,MAAM,OAAO,GAAG;YACd,MAAM,EAAE;gBACN,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;gBAC/D,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;gBAChE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,CAAC;aACnE;YAED,qEAAqE;YACrE,SAAS,EAAE,IAAI;YAEf,mDAAmD;YACnD,gBAAgB,EAAE,IAAI;YAEtB,iCAAiC;YACjC,WAAW,EAAE,IAAI;YAEjB,wHAAwH;YACxH,WAAW,EAAE,IAAI;YAEjB,6DAA6D;YAC7D,KAAK,EAAE,IAAI;SACZ,CAAC;QAEF,aAAa;QACb,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,aAAa;YACb,mEAAmE;YACnE,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,aAAa;YACb,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,sCAAsC;QACtC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7B,8CAA8C;QAC9C,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnC,eAAe;QACf,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpC,qCAAqC;QACrC,mCAAmC;QACnC,kDAAkD;QAClD,4CAA4C;QAC5C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACpD,CAAC;IAED,yFAAyF;IACjF,gBAAgB;QACtB,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAA2B,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACrE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,IAAI,EAAE,CAA2B,EAAE,CAAC;gBAChG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAES,GAAG,CAAC,MAAc;QAC1B,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACO,YAAY;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACzD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;;OAGG;IACO,SAAS;QACjB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAkB,CAAC;YAE1D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,mEAAmE,EAAE,eAAe,CAAC,CAAC;gBAC7H,SAAS;YACX,CAAC;YAED,IAAI,SAAS,CAAC,SAAS,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBACrE,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAljBW;IADT,UAAU,EAAE;8BACQ,SAAS;yDAAC;AA5CpB,sBAAsB;IADlC,UAAU,CAAC,aAAa,CAAC;;GACb,sBAAsB,CA8lBlC"}