@lossless.org/nosqldb 10.10.0 → 11.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.
- package/.smartconfig.json +21 -19
- package/dist_rust/rustdb_linux_amd64 +0 -0
- package/dist_rust/rustdb_linux_amd64.tsrust-build.json +5 -5
- package/dist_rust/rustdb_linux_amd64_musl +0 -0
- package/dist_rust/rustdb_linux_amd64_musl.tsrust-build.json +5 -5
- package/dist_rust/rustdb_linux_arm64 +0 -0
- package/dist_rust/rustdb_linux_arm64.tsrust-build.json +5 -5
- package/dist_rust/rustdb_linux_arm64_musl +0 -0
- package/dist_rust/rustdb_linux_arm64_musl.tsrust-build.json +5 -5
- package/dist_rust/rustdb_macos_amd64 +0 -0
- package/dist_rust/rustdb_macos_amd64.tsrust-build.json +5 -5
- package/dist_rust/rustdb_macos_arm64 +0 -0
- package/dist_rust/rustdb_macos_arm64.tsrust-build.json +5 -5
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/ts_local/classes.localnosqldb.d.ts +15 -4
- package/dist_ts/ts_local/classes.localnosqldb.js +31 -11
- package/dist_ts/ts_nosqldb/index.d.ts +3 -3
- package/dist_ts/ts_nosqldb/index.js +5 -4
- package/dist_ts/ts_nosqldb/rust-db-bridge.d.ts +125 -2
- package/dist_ts/ts_nosqldb/rust-db-bridge.js +261 -46
- package/dist_ts/ts_nosqldb/server/classes.nosqldbserver.d.ts +69 -3
- package/dist_ts/ts_nosqldb/server/classes.nosqldbserver.js +91 -12
- package/dist_ts/ts_nosqldb/server/index.d.ts +2 -2
- package/dist_ts/ts_nosqldb/server/index.js +2 -2
- package/dist_ts/ts_nosqldb/stopped-storage.d.ts +9 -1
- package/dist_ts/ts_nosqldb/stopped-storage.js +1 -1
- package/dist_ts/ts_nosqldb/storage-rehearsal.js +1 -1
- package/dist_ts/ts_nosqldb/storage-root-alignment.js +7 -3
- package/dist_ts/ts_nosqldb/storage-root-relocation.js +2 -2
- package/package.json +20 -16
- package/readme.md +469 -666
- package/third-party-notices.md +40 -8
- package/third_party_licenses/inventory.json +6 -6
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/ts_local/classes.localnosqldb.ts +35 -12
- package/ts/ts_nosqldb/index.ts +7 -2
- package/ts/ts_nosqldb/rust-db-bridge.ts +291 -48
- package/ts/ts_nosqldb/server/classes.nosqldbserver.ts +151 -15
- package/ts/ts_nosqldb/server/index.ts +2 -2
- package/ts/ts_nosqldb/stopped-storage.ts +9 -1
- package/ts/ts_nosqldb/storage-rehearsal.ts +1 -1
- package/ts/ts_nosqldb/storage-root-alignment.ts +6 -2
- package/ts/ts_nosqldb/storage-root-relocation.ts +1 -1
|
@@ -9,6 +9,85 @@ import { normalizeNoSqlDbStorageRehearsalInput, } from './storage-rehearsal.js';
|
|
|
9
9
|
import { normalizeNoSqlDbAllocationReadAccessGrantError, normalizeNoSqlDbResourceFenceError, } from './service-types.js';
|
|
10
10
|
import { normalizeLocalNoSqlDbOfflinePhysicalNamespaceInspectionInput, normalizeLocalNoSqlDbOfflineInspectionInput, validateNoSqlDbManagementOperationOptions, } from './offline-inspection.js';
|
|
11
11
|
import { normalizeLocalNoSqlDbStoppedStorageRootRelocationInput, } from './storage-root-relocation.js';
|
|
12
|
+
/**
|
|
13
|
+
* Bounds of the engine standard-error tail that start failures, unexpected
|
|
14
|
+
* engine exits and failed management calls carry: the engine's last 64 lines.
|
|
15
|
+
* A longer line keeps its first 1,024 characters, followed by
|
|
16
|
+
* ` [<n> more characters]`.
|
|
17
|
+
*/
|
|
18
|
+
export const noSqlDbEngineStderrTailLimits = Object.freeze({ lines: 64, lineCharacters: 1024 });
|
|
19
|
+
/**
|
|
20
|
+
* Attach the engine's last standard-error lines to an error as its own field
|
|
21
|
+
* `engineStderrTail`, leaving its message and cause unchanged. Values that
|
|
22
|
+
* cannot carry a field (primitives, frozen objects) are left as they are.
|
|
23
|
+
*/
|
|
24
|
+
export function attachNoSqlDbEngineStderrTail(errorArg, tailArg) {
|
|
25
|
+
if (errorArg === null || (typeof errorArg !== 'object' && typeof errorArg !== 'function'))
|
|
26
|
+
return;
|
|
27
|
+
if (!Object.isExtensible(errorArg) && !Object.prototype.hasOwnProperty.call(errorArg, 'engineStderrTail'))
|
|
28
|
+
return;
|
|
29
|
+
try {
|
|
30
|
+
Object.defineProperty(errorArg, 'engineStderrTail', {
|
|
31
|
+
value: Object.freeze([...tailArg]),
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: false,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// A non-configurable field of the same name stays as the caller made it.
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The engine process exited with a non-zero status or by a signal while its
|
|
43
|
+
* server was running and no stop was in progress. `engineStderrTail` holds
|
|
44
|
+
* its last standard-error lines.
|
|
45
|
+
*/
|
|
46
|
+
export class NoSqlDbEngineExitError extends Error {
|
|
47
|
+
constructor(exitCode, signal, engineStderrTailArg) {
|
|
48
|
+
super(`nosqldb Rust process exited unexpectedly (code=${exitCode}, signal=${signal})`);
|
|
49
|
+
this.exitCode = exitCode;
|
|
50
|
+
this.signal = signal;
|
|
51
|
+
this.name = 'NoSqlDbEngineExitError';
|
|
52
|
+
this.engineStderrTail = Object.freeze([...engineStderrTailArg]);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A start that the engine refused because the storage root, or a feature it
|
|
57
|
+
* carries, comes from a later NoSQLDB release than this one: the engine's
|
|
58
|
+
* management reply carried the code `UNKNOWN_ROOT`. The engine wrote nothing
|
|
59
|
+
* into the root (storage-root-names-and-start.md, "Roots of later releases";
|
|
60
|
+
* requirements A300 and A319). `code` holds the code, and `cause` the
|
|
61
|
+
* management error that carried it.
|
|
62
|
+
*/
|
|
63
|
+
export class NoSqlDbUnknownRootError extends Error {
|
|
64
|
+
constructor(options) {
|
|
65
|
+
super('NoSQLDB refuses this storage root: the root, or a feature it carries, comes from a later NoSQLDB release than this one', options);
|
|
66
|
+
this.code = 'UNKNOWN_ROOT';
|
|
67
|
+
this.responseErrorCode = 'UNKNOWN_ROOT';
|
|
68
|
+
this.name = 'NoSqlDbUnknownRootError';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** The bounded record of one engine process's last standard-error lines. */
|
|
72
|
+
class EngineStderrTail {
|
|
73
|
+
constructor() {
|
|
74
|
+
this.lines = [];
|
|
75
|
+
}
|
|
76
|
+
add(lineArg) {
|
|
77
|
+
const limit = noSqlDbEngineStderrTailLimits.lineCharacters;
|
|
78
|
+
this.lines.push(lineArg.length > limit
|
|
79
|
+
? `${lineArg.slice(0, limit)} [${lineArg.length - limit} more characters]`
|
|
80
|
+
: lineArg);
|
|
81
|
+
if (this.lines.length > noSqlDbEngineStderrTailLimits.lines)
|
|
82
|
+
this.lines.shift();
|
|
83
|
+
}
|
|
84
|
+
clear() {
|
|
85
|
+
this.lines = [];
|
|
86
|
+
}
|
|
87
|
+
snapshot() {
|
|
88
|
+
return [...this.lines];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
12
91
|
export class NoSqlDbManagementOperationTerminationError extends AggregateError {
|
|
13
92
|
constructor(operationErrorArg, terminationErrorArg) {
|
|
14
93
|
super([operationErrorArg, terminationErrorArg], 'NoSQLDB management operation failed and Rust engine termination was incomplete', { cause: operationErrorArg });
|
|
@@ -28,8 +107,8 @@ function getPackageRoot() {
|
|
|
28
107
|
return path.resolve(thisDir, '..', '..');
|
|
29
108
|
}
|
|
30
109
|
/**
|
|
31
|
-
* Map Node.js process.platform/process.arch to
|
|
32
|
-
*
|
|
110
|
+
* Map Node.js process.platform/process.arch to rsrepo's friendly name suffix.
|
|
111
|
+
* rsrepo names cross-compiled binaries as: rustdb_linux_amd64, rustdb_linux_arm64, etc.
|
|
33
112
|
*/
|
|
34
113
|
function getTsrustPlatformSuffix() {
|
|
35
114
|
const archMap = { x64: 'amd64', arm64: 'arm64' };
|
|
@@ -44,13 +123,13 @@ function getTsrustPlatformSuffix() {
|
|
|
44
123
|
}
|
|
45
124
|
/**
|
|
46
125
|
* Build local search paths for the Rust binary, including dist_rust/ candidates
|
|
47
|
-
* (built by
|
|
126
|
+
* (built by rsrepo) and local development build paths.
|
|
48
127
|
*/
|
|
49
128
|
function buildLocalPaths() {
|
|
50
129
|
const packageRoot = getPackageRoot();
|
|
51
130
|
const suffix = getTsrustPlatformSuffix();
|
|
52
131
|
const paths = [];
|
|
53
|
-
// dist_rust/ candidates (
|
|
132
|
+
// dist_rust/ candidates (rsrepo cross-compiled output)
|
|
54
133
|
if (suffix) {
|
|
55
134
|
paths.push(path.join(packageRoot, 'dist_rust', `rustdb_${suffix}`));
|
|
56
135
|
}
|
|
@@ -60,11 +139,23 @@ function buildLocalPaths() {
|
|
|
60
139
|
paths.push(path.resolve(process.cwd(), 'rust', 'target', 'debug', 'rustdb'));
|
|
61
140
|
return paths;
|
|
62
141
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
142
|
+
const binaryHelp = 'Set NOSQLDB_RUST_BINARY env var, install the platform package, or build locally with `rsrepo`.';
|
|
143
|
+
/**
|
|
144
|
+
* What a spawn() that returned false after `waitedMs` means, stating only what
|
|
145
|
+
* is known. Smartrust refuses a `binaryPath` that does not pass its validation
|
|
146
|
+
* before spawn() can return false, so with one the engine there passed
|
|
147
|
+
* Smartrust's validation and did not report ready within the bridge's limit,
|
|
148
|
+
* and its path is given as the caller gave it.
|
|
149
|
+
* Without one, whatever NOSQLDB_RUST_BINARY holds (one of the places that
|
|
150
|
+
* Smartrust's search looks), either the search found no engine or the engine
|
|
151
|
+
* it found did not report ready, and nothing tells which.
|
|
152
|
+
*/
|
|
153
|
+
export function describeRefusedSpawn(binaryPath, waitedMs) {
|
|
154
|
+
if (binaryPath !== undefined) {
|
|
155
|
+
return `the nosqldb engine at ${binaryPath} did not report ready within the bridge's limit: it waited ${waitedMs} ms`;
|
|
156
|
+
}
|
|
157
|
+
return `the nosqldb engine did not start: spawn() returned false after ${waitedMs} ms, which means either that no nosqldb Rust binary `
|
|
158
|
+
+ `was found (${binaryHelp}) or that the engine found did not report ready within the bridge's limit`;
|
|
68
159
|
}
|
|
69
160
|
/**
|
|
70
161
|
* Bridge between TypeScript NoSqlDbServer and the Rust binary.
|
|
@@ -77,12 +168,89 @@ export class RustDbBridge extends EventEmitter {
|
|
|
77
168
|
* termination, or when the bridge is connected to an external process.
|
|
78
169
|
*/
|
|
79
170
|
get processId() {
|
|
171
|
+
return this.childProcess?.pid;
|
|
172
|
+
}
|
|
173
|
+
/** The engine child process of the latest spawn, while the bridge holds it. */
|
|
174
|
+
get childProcess() {
|
|
80
175
|
const transport = this.bridge.transport;
|
|
81
|
-
return transport?.childProcess
|
|
176
|
+
return transport?.childProcess ?? undefined;
|
|
177
|
+
}
|
|
178
|
+
/** Records the exit of the engine process that a spawn has just started. */
|
|
179
|
+
watchEngineExit() {
|
|
180
|
+
const child = this.childProcess;
|
|
181
|
+
if (!child)
|
|
182
|
+
return;
|
|
183
|
+
this.engineExitPromise = new Promise((resolveArg) => {
|
|
184
|
+
const record = (code, signal) => {
|
|
185
|
+
this.engineExit = { code, signal };
|
|
186
|
+
resolveArg();
|
|
187
|
+
};
|
|
188
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
189
|
+
record(child.exitCode, child.signalCode);
|
|
190
|
+
else
|
|
191
|
+
child.once('exit', record);
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The exit code and signal of the engine process of the latest spawn, as its
|
|
196
|
+
* process exit reported them, each null where it reported none; or null
|
|
197
|
+
* while that process has not exited, or no spawn started one.
|
|
198
|
+
*/
|
|
199
|
+
get lastEngineExit() {
|
|
200
|
+
return this.engineExit;
|
|
201
|
+
}
|
|
202
|
+
/** Whether the engine process of the latest spawn exists and has not exited. */
|
|
203
|
+
get engineProcessAlive() {
|
|
204
|
+
return this.engineExitPromise !== undefined && this.engineExit === null;
|
|
205
|
+
}
|
|
206
|
+
/** Waits up to `timeoutMs` for the engine process to exit by itself; resolves whether it has. */
|
|
207
|
+
async waitForEngineExit(timeoutMs) {
|
|
208
|
+
if (!this.engineExitPromise)
|
|
209
|
+
return false;
|
|
210
|
+
let timer;
|
|
211
|
+
await Promise.race([
|
|
212
|
+
this.engineExitPromise,
|
|
213
|
+
new Promise((resolveArg) => { timer = setTimeout(resolveArg, timeoutMs); }),
|
|
214
|
+
]);
|
|
215
|
+
if (timer)
|
|
216
|
+
clearTimeout(timer);
|
|
217
|
+
return this.engineExit !== null;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Closes the engine's management input, the end of the management protocol
|
|
221
|
+
* after an acknowledged `stop`, on which the engine exits by itself. This is
|
|
222
|
+
* neither a signal nor a kill. Returns whether there was an input to close.
|
|
223
|
+
*/
|
|
224
|
+
endManagementInput() {
|
|
225
|
+
const input = this.childProcess?.stdin;
|
|
226
|
+
if (!input || input.writableEnded)
|
|
227
|
+
return false;
|
|
228
|
+
input.end();
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Why Smartrust's spawn() returned false, as far as the bridge knows. Each
|
|
233
|
+
* spawn() clears it as it starts, and sets it when Smartrust's spawn()
|
|
234
|
+
* returns false before this spawn()'s own `timeoutMs` or `signal` cuts it
|
|
235
|
+
* short, before the engine is ended. That spawn() then returns false, or
|
|
236
|
+
* throws if ending the engine fails. After any other spawn() it is
|
|
237
|
+
* undefined, including one cut short by its own `timeoutMs` or `signal`.
|
|
238
|
+
* Smartrust's spawn() returns false both when it finds no engine and when
|
|
239
|
+
* the engine it starts does not report ready within its limit; a
|
|
240
|
+
* `binaryPath` tells the two apart, as Smartrust refuses one that does not
|
|
241
|
+
* pass its validation with RustBinaryLocatorError before spawn() can return
|
|
242
|
+
* false.
|
|
243
|
+
*/
|
|
244
|
+
get spawnFailureMessage() {
|
|
245
|
+
return this.spawnRefusal;
|
|
82
246
|
}
|
|
83
247
|
constructor(options = {}) {
|
|
84
248
|
super();
|
|
249
|
+
/** How the engine process of the latest spawn exited, once it has. */
|
|
250
|
+
this.engineExit = null;
|
|
85
251
|
this.terminationConfirmed = true;
|
|
252
|
+
this.stderrTail = new EngineStderrTail();
|
|
253
|
+
this.binaryPath = options.binaryPath;
|
|
86
254
|
this.bridge = new plugins.smartrust.RustBridge({
|
|
87
255
|
binaryName: 'rustdb',
|
|
88
256
|
binaryPath: options.binaryPath,
|
|
@@ -90,7 +258,14 @@ export class RustDbBridge extends EventEmitter {
|
|
|
90
258
|
platformPackagePrefix: '@lossless.org/nosqldb',
|
|
91
259
|
localPaths: buildLocalPaths(),
|
|
92
260
|
maxPayloadSize: 100 * 1024 * 1024, // database exports/imports can be larger than command replies
|
|
93
|
-
|
|
261
|
+
});
|
|
262
|
+
// Smartrust delivers the engine's standard error one line at a time.
|
|
263
|
+
const engineLog = options.engineLog;
|
|
264
|
+
this.bridge.on('stderr', (line) => {
|
|
265
|
+
this.stderrTail.add(line);
|
|
266
|
+
// Microtasks run in order, so the lines keep their order.
|
|
267
|
+
if (engineLog)
|
|
268
|
+
queueMicrotask(() => engineLog(line));
|
|
94
269
|
});
|
|
95
270
|
// Forward events from the inner bridge
|
|
96
271
|
this.bridge.on('exit', (code, signal) => {
|
|
@@ -98,11 +273,39 @@ export class RustDbBridge extends EventEmitter {
|
|
|
98
273
|
this.emit('exit', code, signal);
|
|
99
274
|
});
|
|
100
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* The last standard-error lines of the running or most recently spawned
|
|
278
|
+
* engine process, within `noSqlDbEngineStderrTailLimits`.
|
|
279
|
+
*/
|
|
280
|
+
get engineStderrTail() {
|
|
281
|
+
return this.stderrTail.snapshot();
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Send one management command. A failure while no engine runs (it exited
|
|
285
|
+
* or never started) carries the engine's last standard-error lines.
|
|
286
|
+
*/
|
|
287
|
+
async send(methodArg, paramsArg, optionsArg) {
|
|
288
|
+
try {
|
|
289
|
+
return await this.bridge.sendCommand(methodArg, paramsArg, optionsArg);
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
if (!this.bridge.running)
|
|
293
|
+
attachNoSqlDbEngineStderrTail(error, this.stderrTail.snapshot());
|
|
294
|
+
throw error;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
101
297
|
/**
|
|
102
298
|
* Spawn the Rust binary in management mode.
|
|
103
|
-
* Returns true
|
|
299
|
+
* Returns true once the engine reported ready. Returns false when
|
|
300
|
+
* Smartrust's spawn() returned false: no engine was found, or the one found
|
|
301
|
+
* did not report ready within the bridge's limit. spawnFailureMessage then
|
|
302
|
+
* says what that means, as far as the bridge knows, and still says it if
|
|
303
|
+
* ending that engine fails and this throws instead. After any other
|
|
304
|
+
* outcome, including a throw on this spawn()'s own `timeoutMs` or `signal`,
|
|
305
|
+
* spawnFailureMessage is undefined.
|
|
104
306
|
*/
|
|
105
307
|
async spawn(optionsArg) {
|
|
308
|
+
this.spawnRefusal = undefined;
|
|
106
309
|
validateNoSqlDbManagementOperationOptions(optionsArg);
|
|
107
310
|
if (optionsArg?.signal?.aborted) {
|
|
108
311
|
throw new plugins.smartrust.RustBridgeRequestError('NoSQLDB Rust sidecar spawn was aborted before it started', {
|
|
@@ -113,6 +316,11 @@ export class RustDbBridge extends EventEmitter {
|
|
|
113
316
|
}
|
|
114
317
|
this.terminationConfirmed = false;
|
|
115
318
|
this.terminationFailure = undefined;
|
|
319
|
+
this.stderrTail.clear();
|
|
320
|
+
const spawnStartedAt = performance.now();
|
|
321
|
+
// The previous engine's exit belongs to it, also when this spawn fails.
|
|
322
|
+
this.engineExit = null;
|
|
323
|
+
this.engineExitPromise = undefined;
|
|
116
324
|
const spawnPromise = this.bridge.spawn();
|
|
117
325
|
let timeout;
|
|
118
326
|
let abortHandler;
|
|
@@ -138,7 +346,10 @@ export class RustDbBridge extends EventEmitter {
|
|
|
138
346
|
});
|
|
139
347
|
try {
|
|
140
348
|
const spawned = await Promise.race([spawnPromise, cancellationPromise]);
|
|
349
|
+
if (spawned)
|
|
350
|
+
this.watchEngineExit();
|
|
141
351
|
if (!spawned) {
|
|
352
|
+
this.spawnRefusal = describeRefusedSpawn(this.binaryPath, Math.round(performance.now() - spawnStartedAt));
|
|
142
353
|
await this.terminate({ gracePeriodMs: 0 });
|
|
143
354
|
}
|
|
144
355
|
return spawned;
|
|
@@ -229,7 +440,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
229
440
|
const request = normalizeNoSqlDbStorageRehearsalInput(inputArg);
|
|
230
441
|
validateNoSqlDbManagementOperationOptions(optionsArg);
|
|
231
442
|
try {
|
|
232
|
-
return await this.
|
|
443
|
+
return await this.send('createStoppedStorageRehearsal', { request, timeoutMs: optionsArg.timeoutMs }, optionsArg);
|
|
233
444
|
}
|
|
234
445
|
catch (error) {
|
|
235
446
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -240,7 +451,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
240
451
|
const input = normalizeLocalNoSqlDbStoppedStorageRootRelocationInput(inputArg);
|
|
241
452
|
validateNoSqlDbManagementOperationOptions(optionsArg);
|
|
242
453
|
try {
|
|
243
|
-
return await this.
|
|
454
|
+
return await this.send('relocateStoppedStorageRoot', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
|
|
244
455
|
}
|
|
245
456
|
catch (error) {
|
|
246
457
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -257,7 +468,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
257
468
|
const input = normalizeStoppedStorageRootAlignmentInput(inputArg);
|
|
258
469
|
validateNoSqlDbManagementOperationOptions(optionsArg);
|
|
259
470
|
try {
|
|
260
|
-
return await this.
|
|
471
|
+
return await this.send(method, { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
|
|
261
472
|
}
|
|
262
473
|
catch (error) {
|
|
263
474
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -268,7 +479,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
268
479
|
const input = normalizeStoppedStorageRootInspectionInput(inputArg);
|
|
269
480
|
validateNoSqlDbManagementOperationOptions(optionsArg);
|
|
270
481
|
try {
|
|
271
|
-
return await this.
|
|
482
|
+
return await this.send('inspectStoppedStorageRoot', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
|
|
272
483
|
}
|
|
273
484
|
catch (error) {
|
|
274
485
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -284,7 +495,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
284
495
|
timeoutMs: optionsArg?.timeoutMs,
|
|
285
496
|
};
|
|
286
497
|
try {
|
|
287
|
-
return await this.
|
|
498
|
+
return await this.send('inspectOfflinePhysicalNamespaces', params, optionsArg);
|
|
288
499
|
}
|
|
289
500
|
catch (error) {
|
|
290
501
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -295,7 +506,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
295
506
|
const input = normalizeLocalNoSqlDbOfflineInspectionInput(inputArg);
|
|
296
507
|
validateNoSqlDbManagementOperationOptions(optionsArg);
|
|
297
508
|
try {
|
|
298
|
-
return await this.
|
|
509
|
+
return await this.send('inspectOfflineStringValue', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
|
|
299
510
|
}
|
|
300
511
|
catch (error) {
|
|
301
512
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -306,25 +517,29 @@ export class RustDbBridge extends EventEmitter {
|
|
|
306
517
|
normalizeNoSqlDbFileStorageOptions(config);
|
|
307
518
|
validateNoSqlDbManagementOperationOptions(optionsArg);
|
|
308
519
|
try {
|
|
309
|
-
return await this.
|
|
520
|
+
return await this.send('start', { config, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
|
|
310
521
|
}
|
|
311
522
|
catch (error) {
|
|
312
523
|
await this.awaitManagementOperationTermination(error);
|
|
524
|
+
// The unknown-root refusal is told apart by its code, never by its message.
|
|
525
|
+
if (error instanceof Error && 'responseErrorCode' in error && error.responseErrorCode === 'UNKNOWN_ROOT') {
|
|
526
|
+
throw new NoSqlDbUnknownRootError({ cause: error });
|
|
527
|
+
}
|
|
313
528
|
throw error;
|
|
314
529
|
}
|
|
315
530
|
}
|
|
316
531
|
async stopDb() {
|
|
317
|
-
await this.
|
|
532
|
+
await this.send('stop', {});
|
|
318
533
|
}
|
|
319
534
|
async getStatus() {
|
|
320
|
-
return await this.
|
|
535
|
+
return await this.send('getStatus', {});
|
|
321
536
|
}
|
|
322
537
|
async getMetrics() {
|
|
323
|
-
return this.
|
|
538
|
+
return this.send('getMetrics', {});
|
|
324
539
|
}
|
|
325
540
|
async getHealth(optionsArg) {
|
|
326
541
|
try {
|
|
327
|
-
return await this.
|
|
542
|
+
return await this.send('getHealth', {}, optionsArg);
|
|
328
543
|
}
|
|
329
544
|
catch (error) {
|
|
330
545
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -333,7 +548,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
333
548
|
}
|
|
334
549
|
async createDatabaseTenant(params) {
|
|
335
550
|
try {
|
|
336
|
-
return await this.
|
|
551
|
+
return await this.send('createDatabaseTenant', params);
|
|
337
552
|
}
|
|
338
553
|
catch (error) {
|
|
339
554
|
throw normalizeNoSqlDbResourceFenceError(error);
|
|
@@ -341,7 +556,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
341
556
|
}
|
|
342
557
|
async ensureDatabaseTenant(params, optionsArg) {
|
|
343
558
|
try {
|
|
344
|
-
return await this.
|
|
559
|
+
return await this.send('ensureDatabaseTenant', params, optionsArg);
|
|
345
560
|
}
|
|
346
561
|
catch (error) {
|
|
347
562
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -350,7 +565,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
350
565
|
}
|
|
351
566
|
async attestDatabaseTenant(params, optionsArg) {
|
|
352
567
|
try {
|
|
353
|
-
return await this.
|
|
568
|
+
return await this.send('attestDatabaseTenant', params, optionsArg);
|
|
354
569
|
}
|
|
355
570
|
catch (error) {
|
|
356
571
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -359,7 +574,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
359
574
|
}
|
|
360
575
|
async allocateDatabaseTenant(params, optionsArg) {
|
|
361
576
|
try {
|
|
362
|
-
return await this.
|
|
577
|
+
return await this.send('allocateDatabaseTenant', params, optionsArg);
|
|
363
578
|
}
|
|
364
579
|
catch (error) {
|
|
365
580
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -368,7 +583,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
368
583
|
}
|
|
369
584
|
async deleteDatabaseTenant(params, optionsArg) {
|
|
370
585
|
try {
|
|
371
|
-
return await this.
|
|
586
|
+
return await this.send('deleteDatabaseTenant', params, optionsArg);
|
|
372
587
|
}
|
|
373
588
|
catch (error) {
|
|
374
589
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -377,7 +592,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
377
592
|
}
|
|
378
593
|
async issueDatabaseAllocationReadAccessGrant(params, optionsArg) {
|
|
379
594
|
try {
|
|
380
|
-
return await this.
|
|
595
|
+
return await this.send('issueDatabaseAllocationReadAccessGrant', params, optionsArg);
|
|
381
596
|
}
|
|
382
597
|
catch (error) {
|
|
383
598
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -388,7 +603,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
388
603
|
}
|
|
389
604
|
async revokeDatabaseAllocationReadAccessGrant(params, optionsArg) {
|
|
390
605
|
try {
|
|
391
|
-
return await this.
|
|
606
|
+
return await this.send('revokeDatabaseAllocationReadAccessGrant', params, optionsArg);
|
|
392
607
|
}
|
|
393
608
|
catch (error) {
|
|
394
609
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -398,18 +613,18 @@ export class RustDbBridge extends EventEmitter {
|
|
|
398
613
|
}
|
|
399
614
|
}
|
|
400
615
|
async rotateDatabaseTenantPassword(params) {
|
|
401
|
-
return this.
|
|
616
|
+
return this.send('rotateDatabaseTenantPassword', params);
|
|
402
617
|
}
|
|
403
618
|
async listDatabaseTenants() {
|
|
404
|
-
const result = await this.
|
|
619
|
+
const result = await this.send('listDatabaseTenants', {});
|
|
405
620
|
return result.tenants;
|
|
406
621
|
}
|
|
407
622
|
async getDatabaseTenantDescriptor(params) {
|
|
408
|
-
return this.
|
|
623
|
+
return this.send('getDatabaseTenantDescriptor', params);
|
|
409
624
|
}
|
|
410
625
|
async getDatabaseResourceFenceState(params, optionsArg) {
|
|
411
626
|
try {
|
|
412
|
-
return await this.
|
|
627
|
+
return await this.send('getDatabaseResourceFenceState', params, optionsArg);
|
|
413
628
|
}
|
|
414
629
|
catch (error) {
|
|
415
630
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -418,7 +633,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
418
633
|
}
|
|
419
634
|
async exportDatabase(params, optionsArg) {
|
|
420
635
|
try {
|
|
421
|
-
return await this.
|
|
636
|
+
return await this.send('exportDatabase', params, optionsArg);
|
|
422
637
|
}
|
|
423
638
|
catch (error) {
|
|
424
639
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -427,7 +642,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
427
642
|
}
|
|
428
643
|
async exportHeldDatabase(params, optionsArg) {
|
|
429
644
|
try {
|
|
430
|
-
return await this.
|
|
645
|
+
return await this.send('exportHeldDatabase', params, optionsArg);
|
|
431
646
|
}
|
|
432
647
|
catch (error) {
|
|
433
648
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -436,7 +651,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
436
651
|
}
|
|
437
652
|
async getDatabaseContentDigest(params, optionsArg) {
|
|
438
653
|
try {
|
|
439
|
-
return await this.
|
|
654
|
+
return await this.send('getDatabaseContentDigest', params, optionsArg);
|
|
440
655
|
}
|
|
441
656
|
catch (error) {
|
|
442
657
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -445,7 +660,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
445
660
|
}
|
|
446
661
|
async importDatabase(params, optionsArg) {
|
|
447
662
|
try {
|
|
448
|
-
return await this.
|
|
663
|
+
return await this.send('importDatabase', { ...params, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
|
|
449
664
|
}
|
|
450
665
|
catch (error) {
|
|
451
666
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -454,7 +669,7 @@ export class RustDbBridge extends EventEmitter {
|
|
|
454
669
|
}
|
|
455
670
|
async commitDatabasePublication(params, optionsArg) {
|
|
456
671
|
try {
|
|
457
|
-
return await this.
|
|
672
|
+
return await this.send('commitDatabasePublication', params, optionsArg);
|
|
458
673
|
}
|
|
459
674
|
catch (error) {
|
|
460
675
|
await this.awaitManagementOperationTermination(error);
|
|
@@ -462,23 +677,23 @@ export class RustDbBridge extends EventEmitter {
|
|
|
462
677
|
}
|
|
463
678
|
}
|
|
464
679
|
async getOpLog(params = {}) {
|
|
465
|
-
return this.
|
|
680
|
+
return this.send('getOpLog', params);
|
|
466
681
|
}
|
|
467
682
|
async getCommittedWrites(params) {
|
|
468
|
-
return this.
|
|
683
|
+
return this.send('getCommittedWrites', params);
|
|
469
684
|
}
|
|
470
685
|
async getOpLogStats() {
|
|
471
|
-
return this.
|
|
686
|
+
return this.send('getOpLogStats', {});
|
|
472
687
|
}
|
|
473
688
|
async revertToSeq(seq, dryRun = false) {
|
|
474
|
-
return this.
|
|
689
|
+
return this.send('revertToSeq', { seq, dryRun });
|
|
475
690
|
}
|
|
476
691
|
async getCollections(db) {
|
|
477
|
-
const result = await this.
|
|
692
|
+
const result = await this.send('getCollections', db ? { db } : {});
|
|
478
693
|
return result.collections;
|
|
479
694
|
}
|
|
480
695
|
async getDocuments(db, collection, limit = 50, skip = 0) {
|
|
481
|
-
return this.
|
|
696
|
+
return this.send('getDocuments', { db, collection, limit, skip });
|
|
482
697
|
}
|
|
483
698
|
}
|
|
484
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1kYi1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19ub3NxbGRiL3J1c3QtZGItYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5Q0FBeUMsRUFBcUssTUFBTSw2QkFBNkIsQ0FBQztBQUMzUCxPQUFPLEVBQUUsMENBQTBDLEVBQUUsc0NBQXNDLEVBQXVHLE1BQU0sc0JBQXNCLENBQUM7QUFDL04sT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0UsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQ0wscUNBQXFDLEdBSXRDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLDhDQUE4QyxFQUM5QyxrQ0FBa0MsR0FDbkMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsNERBQTRELEVBQzVELDJDQUEyQyxFQUMzQyx5Q0FBeUMsR0FDMUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsc0RBQXNELEdBR3ZELE1BQU0sOEJBQThCLENBQUM7QUF5SXRDLE1BQU0sT0FBTywwQ0FBMkMsU0FBUSxjQUFjO0lBQzVFLFlBQVksaUJBQTBCLEVBQUUsbUJBQTRCO1FBQ2xFLEtBQUssQ0FDSCxDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLEVBQ3hDLGdGQUFnRixFQUNoRixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxDQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyw0Q0FBNEMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUE0QkQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDL0UsTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFxSHpGLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FDckQsMENBQTBDLENBQzNDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLENBQUMsb0NBQW9DLENBQUMsQ0FBQztBQWtFekY7OztHQUdHO0FBQ0gsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QjtJQUM5QixNQUFNLE9BQU8sR0FBMkIsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6RSxNQUFNLEtBQUssR0FBMkIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZiw2RUFBNkU7UUFDN0UsT0FBTyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxlQUFlO0lBQ3RCLE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixFQUFFLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBRTNCLHVEQUF1RDtJQUN2RCxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFMUQsd0JBQXdCO0lBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFN0UsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBQ0QsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxXQUFXLEdBQXNCLE9BQU8sQ0FBQyxHQUFHO0lBRTVDLE9BQU87UUFDTCwyQkFBMkIsRUFBRSxXQUFXLENBQUMsMkJBQTJCLElBQUksR0FBRztRQUMzRSw2QkFBNkIsRUFBRSxXQUFXLENBQUMsNkJBQTZCLElBQUksR0FBRztLQUNoRixDQUFDO0FBQ0osQ0FBQztBQU9EOzs7R0FHRztBQUNILE1BQU0sT0FBTyxZQUFhLFNBQVEsWUFBWTtJQUc1Qzs7OztPQUlHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE1BQU0sU0FBUyxHQUFJLElBQUksQ0FBQyxNQUV0QixDQUFDLFNBQVMsQ0FBQztRQUNiLE9BQU8sU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUM7SUFDdEMsQ0FBQztJQUtELFlBQVksT0FBTyxHQUF5QixFQUFFO1FBQzVDLEtBQUssRUFBRSxDQUFDO1FBTEYseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBT2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBbUI7WUFDL0QsVUFBVSxFQUFFLFFBQVE7WUFDcEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFVBQVUsRUFBRSxxQkFBcUI7WUFDakMscUJBQXFCLEVBQUUsdUJBQXVCO1lBQzlDLFVBQVUsRUFBRSxlQUFlLEVBQUU7WUFDN0IsY0FBYyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLDhEQUE4RDtZQUNqRyxHQUFHLEVBQUUscUJBQXFCLEVBQUU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQW1CLEVBQUUsTUFBcUIsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBK0M7UUFDaEUseUNBQXlDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUNoRCwwREFBMEQsRUFDMUQ7Z0JBQ0UsSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNoQyxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekMsSUFBSSxPQUFrRCxDQUFDO1FBQ3ZELElBQUksWUFBc0MsQ0FBQztRQUMzQyxNQUFNLG1CQUFtQixHQUFHLElBQUksT0FBTyxDQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3hFLElBQUksVUFBVSxFQUFFLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ3hCLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQ3BELDhDQUE4QyxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQ3RFO3dCQUNFLElBQUksRUFBRSxpQ0FBaUM7d0JBQ3ZDLE1BQU0sRUFBRSxPQUFPO3FCQUNoQixDQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsWUFBWSxHQUFHLEdBQUcsRUFBRTtvQkFDbEIsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FDcEQsd0NBQXdDLEVBQ3hDO3dCQUNFLElBQUksRUFBRSxpQ0FBaUM7d0JBQ3ZDLE1BQU0sRUFBRSxPQUFPO3dCQUNmLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTyxDQUFDLE1BQU07cUJBQ2pDLENBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztnQkFDRixVQUFVLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUFDLE9BQU8sZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLDBDQUEwQyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hGLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksT0FBTztnQkFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsSUFBSSxZQUFZLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxVQUFVLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMvRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FDZCxVQUEwRDtRQUUxRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ2pDLENBQUM7UUFFRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDL0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLENBQUMsRUFDRCxDQUFDLFFBQWlCLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDO1lBQ25DLE1BQU0sUUFBUSxDQUFDO1FBQ2pCLENBQUMsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLEtBQUssa0JBQWtCLENBQUMsSUFBSSxDQUMxQixHQUFHLEVBQUU7WUFDSCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDLEVBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDRixPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRU8sS0FBSyxDQUFDLG1DQUFtQyxDQUFDLFFBQWlCO1FBQ2pFLE1BQU0sK0JBQStCLEdBQ25DLFFBQVEsWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQjtlQUN6RDtnQkFDRCxpQ0FBaUM7Z0JBQ2pDLGlDQUFpQzthQUNsQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDakQsSUFBSSwrQkFBK0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDM0Qsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxJQUFJLDBDQUEwQyxDQUNsRCxRQUFRLEVBQ1IsSUFBSSxDQUFDLGtCQUFrQixDQUN4QixDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxrQkFBa0IsQ0FBQztRQUMzQixDQUFDO1FBQUMsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSwwQ0FBMEMsQ0FDbEQsUUFBUSxFQUNSLGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCwwREFBMEQ7SUFFbkQsS0FBSyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxRQUF1QyxFQUNqRixVQUFzRTtRQUN0RSxNQUFNLE9BQU8sR0FBRyxxQ0FBcUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsK0JBQStCLEVBQ2xFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsVUFBVSxDQUFvQyxDQUFDO1FBQ2pHLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLENBQzlDLFFBQXdELEVBQ3hELFVBQStDO1FBRS9DLE1BQU0sS0FBSyxHQUFHLHNEQUFzRCxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9FLHlDQUF5QyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsNEJBQTRCLEVBQzVCLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFDOUMsVUFBVSxDQUN5QyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUNwRixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsUUFBdUQsRUFDckcsVUFBK0M7UUFDL0MsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMseUJBQXlCLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBNEQsQ0FBQztJQUNsSixDQUFDO0lBQ00sS0FBSyxDQUFDLENBQUMscUNBQXFDLENBQUMsQ0FBQyxRQUF1RCxFQUMxRyxVQUErQztRQUMvQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQ0FBa0MsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFpRSxDQUFDO0lBQ2hLLENBQUM7SUFDTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBc0UsRUFDMUcsUUFBdUQsRUFBRSxVQUErQztRQUN4RyxNQUFNLEtBQUssR0FBRyx5Q0FBeUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sc0NBQXNDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxRQUF3RCxFQUN4RCxVQUErQztRQUUvQyxNQUFNLEtBQUssR0FBRywwQ0FBMEMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQzlELEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLENBQThDLENBQUM7UUFDN0csQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLHNDQUFzQyxDQUFDLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1FBQ25GLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGdDQUFnQyxDQUMzQyxRQUF5RCxFQUN6RCxVQUErQztRQUUvQyxNQUFNLEtBQUssR0FBRyw0REFBNEQsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRix5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxNQUFNLE1BQU0sR0FBcUQ7WUFDL0QsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLEdBQUcsS0FBSyxDQUFDLE1BQU07WUFDZixTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVM7U0FDakMsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsa0NBQWtDLEVBQ2xDLE1BQU0sRUFDTixVQUFVLENBQzhDLENBQUM7UUFDN0QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzFGLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxRQUFtRCxFQUNuRCxVQUErQztRQUUvQyxNQUFNLEtBQUssR0FBRywyQ0FBMkMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRSx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLDJCQUEyQixFQUMzQixFQUFFLEdBQUcsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQzlDLFVBQVUsQ0FDd0MsQ0FBQztRQUN2RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sc0NBQXNDLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDbkYsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUNsQixNQUEwQixFQUMxQixVQUErQztRQUUvQyxrQ0FBa0MsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLE9BQU8sRUFDUCxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUM1QyxVQUFVLENBQ2tCLENBQUM7UUFDakMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDakIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBMkIsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNwQixPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQTJCLENBQXlCLENBQUM7SUFDekcsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQTJCLENBQTZCLENBQUM7SUFDeEcsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQ3BCLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsV0FBVyxFQUNYLEVBQTJCLEVBQzNCLFVBQVUsQ0FDTyxDQUFDO1FBQ3RCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsTUFBbUM7UUFFbkMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBcUMsQ0FBQztRQUMzRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsb0JBQW9CLENBQy9CLE1BQXlDLEVBQ3pDLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixVQUFVLENBQzJCLENBQUM7UUFDMUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLG9CQUFvQixDQUMvQixNQUF5QyxFQUN6QyxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLHNCQUFzQixFQUN0QixNQUFNLEVBQ04sVUFBVSxDQUMyQixDQUFDO1FBQzFDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsTUFBMkMsRUFDM0MsVUFBK0M7UUFFL0MsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNsQyx3QkFBd0IsRUFDeEIsTUFBTSxFQUNOLFVBQVUsQ0FDNkIsQ0FBQztRQUM1QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsb0JBQW9CLENBQy9CLE1BQXlDLEVBQ3pDLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixVQUFVLENBQzJCLENBQUM7UUFDMUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHNDQUFzQyxDQUNqRCxNQUEyRCxFQUMzRCxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLHdDQUF3QyxFQUN4QyxNQUFNLEVBQ04sVUFBVSxDQUM2QyxDQUFDO1FBQzVELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSw4Q0FBOEMsQ0FDbEQsa0NBQWtDLENBQUMsS0FBSyxDQUFDLEVBQ3pDLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQjtnQkFDdkQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQ2QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVDQUF1QyxDQUNsRCxNQUE0RCxFQUM1RCxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLHlDQUF5QyxFQUN6QyxNQUFNLEVBQ04sVUFBVSxDQUM4QyxDQUFDO1FBQzdELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSw4Q0FBOEMsQ0FDbEQsa0NBQWtDLENBQUMsS0FBSyxDQUFDLEVBQ3pDLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQjtnQkFDdkQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQ2QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLDRCQUE0QixDQUN2QyxNQUFpRDtRQUVqRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDhCQUE4QixFQUFFLE1BQU0sQ0FBOEMsQ0FBQztJQUN0SCxDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQjtRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLEVBQTJCLENBQW9ELENBQUM7UUFDcEosT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxLQUFLLENBQUMsMkJBQTJCLENBQUMsTUFHeEM7UUFDQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDZCQUE2QixFQUFFLE1BQU0sQ0FBOEMsQ0FBQztJQUNySCxDQUFDO0lBRU0sS0FBSyxDQUFDLDZCQUE2QixDQUN4QyxNQUFnQyxFQUNoQyxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLCtCQUErQixFQUMvQixNQUFNLEVBQ04sVUFBVSxDQUNrQyxDQUFDO1FBQ2pELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQ3pCLE1BQW1DLEVBQ25DLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixVQUFVLENBQ2UsQ0FBQztRQUM5QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLE1BQXVDLEVBQ3ZDLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixVQUFVLENBQ2UsQ0FBQztRQUM5QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsd0JBQXdCLENBQ25DLE1BQTZDLEVBQzdDLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsMEJBQTBCLEVBQzFCLE1BQU0sRUFDTixVQUFVLENBQ3NCLENBQUM7UUFDckMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FDekIsTUFBbUMsRUFDbkMsVUFBK0M7UUFFL0MsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNsQyxnQkFBZ0IsRUFDaEIsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUMvQyxVQUFVLENBQ3FCLENBQUM7UUFDcEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxNQUE4QyxFQUM5QyxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLDJCQUEyQixFQUMzQixNQUFNLEVBQ04sVUFBVSxDQUNnQyxDQUFDO1FBQy9DLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUt4QixFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUEwQixDQUFDO0lBQzlFLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBdUM7UUFDckUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWE7UUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsRUFBMkIsQ0FBeUIsQ0FBQztJQUN2RyxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFXLEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQTJCLENBQUM7SUFDM0YsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBVztRQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUF1QyxDQUFDO1FBQ3ZILE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FDdkIsRUFBVSxFQUNWLFVBQWtCLEVBQ2xCLEtBQUssR0FBRyxFQUFFLEVBQ1YsSUFBSSxHQUFHLENBQUM7UUFFUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUE4QixDQUFDO0lBQy9HLENBQUM7Q0FDRiJ9
|
|
699
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1kYi1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19ub3NxbGRiL3J1c3QtZGItYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5Q0FBeUMsRUFBcUssTUFBTSw2QkFBNkIsQ0FBQztBQUMzUCxPQUFPLEVBQUUsMENBQTBDLEVBQUUsc0NBQXNDLEVBQXVHLE1BQU0sc0JBQXNCLENBQUM7QUFDL04sT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0UsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQ0wscUNBQXFDLEdBSXRDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLDhDQUE4QyxFQUM5QyxrQ0FBa0MsR0FDbkMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsNERBQTRELEVBQzVELDJDQUEyQyxFQUMzQyx5Q0FBeUMsR0FDMUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsc0RBQXNELEdBR3ZELE1BQU0sOEJBQThCLENBQUM7QUF5SXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFFaEc7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxRQUFpQixFQUFFLE9BQTBCO0lBQ3pGLElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUM7UUFBRSxPQUFPO0lBQ2xHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQztRQUFFLE9BQU87SUFDbEgsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUU7WUFDbEQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCx5RUFBeUU7SUFDM0UsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLHNCQUF1QixTQUFRLEtBQUs7SUFHL0MsWUFDa0IsUUFBdUIsRUFDdkIsTUFBcUIsRUFDckMsbUJBQXNDO1FBRXRDLEtBQUssQ0FBQyxrREFBa0QsUUFBUSxZQUFZLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBSnZFLFFBQVE7c0JBQ1IsTUFBTTtRQUl0QixJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxLQUFLO0lBSWhELFlBQVksT0FBNkI7UUFDdkMsS0FBSyxDQUFDLHdIQUF3SCxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBSjNILFNBQUksR0FBRyxjQUF1QixDQUFDO1FBQy9CLHNCQUFpQixHQUFHLGNBQXVCLENBQUM7UUFJMUQsSUFBSSxDQUFDLElBQUksR0FBRyx5QkFBeUIsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxnQkFBZ0I7SUFBdEI7UUFDVSxVQUFLLEdBQWEsRUFBRSxDQUFDO0lBaUIvQixDQUFDO0lBZlEsR0FBRyxDQUFDLE9BQWU7UUFDeEIsTUFBTSxLQUFLLEdBQUcsNkJBQTZCLENBQUMsY0FBYyxDQUFDO1FBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSztZQUNwQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssbUJBQW1CO1lBQzFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsNkJBQTZCLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEYsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sMENBQTJDLFNBQVEsY0FBYztJQUM1RSxZQUFZLGlCQUEwQixFQUFFLG1CQUE0QjtRQUNsRSxLQUFLLENBQ0gsQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxFQUN4QyxnRkFBZ0YsRUFDaEYsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FDN0IsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsNENBQTRDLENBQUM7SUFDM0QsQ0FBQztDQUNGO0FBNEJELE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBcUh6RixNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxNQUFNLENBQ3JELDBDQUEwQyxDQUMzQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7QUFtRXpGOzs7R0FHRztBQUNILFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyx1QkFBdUI7SUFDOUIsTUFBTSxPQUFPLEdBQTJCLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDekUsTUFBTSxLQUFLLEdBQTJCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDMUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2YsNkVBQTZFO1FBQzdFLE9BQU8sR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZTtJQUN0QixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQix1REFBdUQ7SUFDdkQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTFELHdCQUF3QjtJQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDL0UsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTdFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLGdHQUFnRyxDQUFDO0FBRXBIOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxVQUE4QixFQUFFLFFBQWdCO0lBQ25GLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE9BQU8seUJBQXlCLFVBQVUsOERBQThELFFBQVEsS0FBSyxDQUFDO0lBQ3hILENBQUM7SUFDRCxPQUFPLGtFQUFrRSxRQUFRLHNEQUFzRDtVQUNuSSxjQUFjLFVBQVUsMkVBQTJFLENBQUM7QUFDMUcsQ0FBQztBQWlCRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUFHNUM7Ozs7T0FJRztJQUNILElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDO0lBQ2hDLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsSUFBWSxZQUFZO1FBQ3RCLE1BQU0sU0FBUyxHQUFJLElBQUksQ0FBQyxNQUV0QixDQUFDLFNBQVMsQ0FBQztRQUNiLE9BQU8sU0FBUyxFQUFFLFlBQVksSUFBSSxTQUFTLENBQUM7SUFDOUMsQ0FBQztJQU1ELDRFQUE0RTtJQUNwRSxlQUFlO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2xELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBbUIsRUFBRSxNQUFxQixFQUFFLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ25DLFVBQVUsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLElBQUk7Z0JBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOztnQkFDOUYsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUM7SUFDMUUsQ0FBQztJQUVELGlHQUFpRztJQUMxRixLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBaUI7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMxQyxJQUFJLEtBQWdELENBQUM7UUFDckQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxPQUFPLENBQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xGLENBQUMsQ0FBQztRQUNILElBQUksS0FBSztZQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFTRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksT0FBTyxHQUF5QixFQUFFO1FBQzVDLEtBQUssRUFBRSxDQUFDO1FBakZWLHNFQUFzRTtRQUM5RCxlQUFVLEdBQTBELElBQUksQ0FBQztRQXNEekUseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBR25CLGVBQVUsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUF3Qm5ELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQW1CO1lBQy9ELFVBQVUsRUFBRSxRQUFRO1lBQ3BCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUM5QixVQUFVLEVBQUUscUJBQXFCO1lBQ2pDLHFCQUFxQixFQUFFLHVCQUF1QjtZQUM5QyxVQUFVLEVBQUUsZUFBZSxFQUFFO1lBQzdCLGNBQWMsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSw4REFBOEQ7U0FDbEcsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsMERBQTBEO1lBQzFELElBQUksU0FBUztnQkFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFFSCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBbUIsRUFBRSxNQUFxQixFQUFFLEVBQUU7WUFDcEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsSUFBSSxDQUNoQixTQUFrQixFQUNsQixTQUE4QyxFQUM5QyxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQUUsNkJBQTZCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMzRixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUErQztRQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM5Qix5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQ2hELDBEQUEwRCxFQUMxRDtnQkFDRSxJQUFJLEVBQUUsaUNBQWlDO2dCQUN2QyxNQUFNLEVBQUUsT0FBTztnQkFDZixLQUFLLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ2hDLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekMsd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE9BQWtELENBQUM7UUFDdkQsSUFBSSxZQUFzQyxDQUFDO1FBQzNDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDeEUsSUFBSSxVQUFVLEVBQUUsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4QyxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDeEIsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FDcEQsOENBQThDLFVBQVUsQ0FBQyxTQUFTLElBQUksRUFDdEU7d0JBQ0UsSUFBSSxFQUFFLGlDQUFpQzt3QkFDdkMsTUFBTSxFQUFFLE9BQU87cUJBQ2hCLENBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN2QixZQUFZLEdBQUcsR0FBRyxFQUFFO29CQUNsQixTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUNwRCx3Q0FBd0MsRUFDeEM7d0JBQ0UsSUFBSSxFQUFFLGlDQUFpQzt3QkFDdkMsTUFBTSxFQUFFLE9BQU87d0JBQ2YsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFPLENBQUMsTUFBTTtxQkFDakMsQ0FDRixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUNGLFVBQVUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxPQUFPO2dCQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQUMsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxQixNQUFNLElBQUksMENBQTBDLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDaEYsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxPQUFPO2dCQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxJQUFJLFlBQVksSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZDLFVBQVUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQy9ELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksSUFBSTtRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUNkLFVBQTBEO1FBRTFELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDakMsQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUMvRCxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7UUFDdEMsQ0FBQyxFQUNELENBQUMsUUFBaUIsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUM7WUFDbkMsTUFBTSxRQUFRLENBQUM7UUFDakIsQ0FBQyxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQzFCLEdBQUcsRUFBRTtZQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztRQUNGLE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFTyxLQUFLLENBQUMsbUNBQW1DLENBQUMsUUFBaUI7UUFDakUsTUFBTSwrQkFBK0IsR0FDbkMsUUFBUSxZQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQXNCO2VBQ3pEO2dCQUNELGlDQUFpQztnQkFDakMsaUNBQWlDO2FBQ2xDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRCxJQUFJLCtCQUErQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMzRCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4RSxNQUFNLElBQUksMENBQTBDLENBQ2xELFFBQVEsRUFDUixJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLGtCQUFrQixDQUFDO1FBQzNCLENBQUM7UUFBQyxPQUFPLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLDBDQUEwQyxDQUNsRCxRQUFRLEVBQ1IsZ0JBQWdCLENBQ2pCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELDBEQUEwRDtJQUVuRCxLQUFLLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLFFBQXVDLEVBQ2pGLFVBQXNFO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLHFDQUFxQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLHlDQUF5QyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUNwRCxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBb0MsQ0FBQztRQUNqRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sc0NBQXNDLENBQUMsS0FBSyxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUM5QyxRQUF3RCxFQUN4RCxVQUErQztRQUUvQyxNQUFNLEtBQUssR0FBRyxzREFBc0QsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRSx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDcEIsNEJBQTRCLEVBQzVCLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFDOUMsVUFBVSxDQUN5QyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUNwRixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsUUFBdUQsRUFDckcsVUFBK0M7UUFDL0MsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMseUJBQXlCLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBNEQsQ0FBQztJQUNsSixDQUFDO0lBQ00sS0FBSyxDQUFDLENBQUMscUNBQXFDLENBQUMsQ0FBQyxRQUF1RCxFQUMxRyxVQUErQztRQUMvQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQ0FBa0MsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFpRSxDQUFDO0lBQ2hLLENBQUM7SUFDTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBc0UsRUFDMUcsUUFBdUQsRUFBRSxVQUErQztRQUN4RyxNQUFNLEtBQUssR0FBRyx5Q0FBeUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdGLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMseUJBQXlCLENBQ3BDLFFBQXdELEVBQ3hELFVBQStDO1FBRS9DLE1BQU0sS0FBSyxHQUFHLDBDQUEwQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLHlDQUF5QyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUNoRCxFQUFFLEdBQUcsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxDQUE4QyxDQUFDO1FBQzdHLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FDM0MsUUFBeUQsRUFDekQsVUFBK0M7UUFFL0MsTUFBTSxLQUFLLEdBQUcsNERBQTRELENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckYseUNBQXlDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQXFEO1lBQy9ELFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixHQUFHLEtBQUssQ0FBQyxNQUFNO1lBQ2YsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTO1NBQ2pDLENBQUM7UUFDRixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDcEIsa0NBQWtDLEVBQ2xDLE1BQU0sRUFDTixVQUFVLENBQzhDLENBQUM7UUFDN0QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzFGLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxRQUFtRCxFQUNuRCxVQUErQztRQUUvQyxNQUFNLEtBQUssR0FBRywyQ0FBMkMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRSx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDcEIsMkJBQTJCLEVBQzNCLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFDOUMsVUFBVSxDQUN3QyxDQUFDO1FBQ3ZELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQ2xCLE1BQTBCLEVBQzFCLFVBQStDO1FBRS9DLGtDQUFrQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLHlDQUF5QyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUNwQixPQUFPLEVBQ1AsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFDNUMsVUFBVSxDQUNrQixDQUFDO1FBQ2pDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsNEVBQTRFO1lBQzVFLElBQUksS0FBSyxZQUFZLEtBQUssSUFBSSxtQkFBbUIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN6RyxNQUFNLElBQUksdUJBQXVCLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBMkIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNwQixPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBMkIsQ0FBeUIsQ0FBQztJQUMzRixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUEyQixDQUE2QixDQUFDO0lBQzFGLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUNwQixVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDcEIsV0FBVyxFQUNYLEVBQTJCLEVBQzNCLFVBQVUsQ0FDTyxDQUFDO1FBQ3RCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsTUFBbUM7UUFFbkMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFxQyxDQUFDO1FBQzdGLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsTUFBeUMsRUFDekMsVUFBK0M7UUFFL0MsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQ3BCLHNCQUFzQixFQUN0QixNQUFNLEVBQ04sVUFBVSxDQUMyQixDQUFDO1FBQzFDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsTUFBeUMsRUFDekMsVUFBK0M7UUFFL0MsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQ3BCLHNCQUFzQixFQUN0QixNQUFNLEVBQ04sVUFBVSxDQUMyQixDQUFDO1FBQzFDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsTUFBMkMsRUFDM0MsVUFBK0M7UUFFL0MsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQ3BCLHdCQUF3QixFQUN4QixNQUFNLEVBQ04sVUFBVSxDQUM2QixDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsTUFBeUMsRUFDekMsVUFBK0M7UUFFL0MsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQ3BCLHNCQUFzQixFQUN0QixNQUFNLEVBQ04sVUFBVSxDQUMyQixDQUFDO1FBQzFDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQ0FBc0MsQ0FDakQsTUFBMkQsRUFDM0QsVUFBK0M7UUFFL0MsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQ3BCLHdDQUF3QyxFQUN4QyxNQUFNLEVBQ04sVUFBVSxDQUM2QyxDQUFDO1FBQzVELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSw4Q0FBOEMsQ0FDbEQsa0NBQWtDLENBQUMsS0FBSyxDQUFDLEVBQ3pDLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQjtnQkFDdkQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQ2QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVDQUF1QyxDQUNsRCxNQUE0RCxFQUM1RCxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDcEIseUNBQXlDLEVBQ3pDLE1BQU0sRUFDTixVQUFVLENBQzhDLENBQUM7UUFDN0QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLDhDQUE4QyxDQUNsRCxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsRUFDekMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQXNCO2dCQUN2RCxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQjtnQkFDekIsQ0FBQyxDQUFDLFNBQVMsQ0FDZCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsNEJBQTRCLENBQ3ZDLE1BQWlEO1FBRWpELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxNQUFNLENBQThDLENBQUM7SUFDeEcsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUI7UUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQTJCLENBQW9ELENBQUM7UUFDdEksT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxLQUFLLENBQUMsMkJBQTJCLENBQUMsTUFHeEM7UUFDQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsTUFBTSxDQUE4QyxDQUFDO0lBQ3ZHLENBQUM7SUFFTSxLQUFLLENBQUMsNkJBQTZCLENBQ3hDLE1BQWdDLEVBQ2hDLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUNwQiwrQkFBK0IsRUFDL0IsTUFBTSxFQUNOLFVBQVUsQ0FDa0MsQ0FBQztRQUNqRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYyxDQUN6QixNQUFtQyxFQUNuQyxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDcEIsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixVQUFVLENBQ2UsQ0FBQztRQUM5QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLE1BQXVDLEVBQ3ZDLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUNwQixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLFVBQVUsQ0FDZSxDQUFDO1FBQzlCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyx3QkFBd0IsQ0FDbkMsTUFBNkMsRUFDN0MsVUFBK0M7UUFFL0MsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQ3BCLDBCQUEwQixFQUMxQixNQUFNLEVBQ04sVUFBVSxDQUNzQixDQUFDO1FBQ3JDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQ3pCLE1BQW1DLEVBQ25DLFVBQStDO1FBRS9DLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUNwQixnQkFBZ0IsRUFDaEIsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUMvQyxVQUFVLENBQ3FCLENBQUM7UUFDcEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxNQUE4QyxFQUM5QyxVQUErQztRQUUvQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDcEIsMkJBQTJCLEVBQzNCLE1BQU0sRUFDTixVQUFVLENBQ2dDLENBQUM7UUFDL0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBS3hCLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBMEIsQ0FBQztJQUNoRSxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQXVDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWE7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUEyQixDQUF5QixDQUFDO0lBQ3pGLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFNLEdBQUcsS0FBSztRQUNsRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUEyQixDQUFDO0lBQzdFLENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQVc7UUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUF1QyxDQUFDO1FBQ3pHLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FDdkIsRUFBVSxFQUNWLFVBQWtCLEVBQ2xCLEtBQUssR0FBRyxFQUFFLEVBQ1YsSUFBSSxHQUFHLENBQUM7UUFFUixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQThCLENBQUM7SUFDakcsQ0FBQztDQUNGIn0=
|