@workflow/core 5.0.0-beta.43 → 5.0.0-beta.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities.d.ts +4 -4
- package/dist/capabilities.js +5 -5
- package/dist/capture-stack.d.ts +1 -1
- package/dist/capture-stack.js +2 -2
- package/dist/class-serialization.d.ts +8 -8
- package/dist/class-serialization.js +9 -9
- package/dist/classify-error.js +5 -5
- package/dist/context-violation-error.d.ts +5 -5
- package/dist/context-violation-error.d.ts.map +1 -1
- package/dist/context-violation-error.js +5 -5
- package/dist/create-hook.d.ts +2 -2
- package/dist/create-hook.js +1 -1
- package/dist/define-hook.js +2 -2
- package/dist/describe-error.d.ts +7 -7
- package/dist/describe-error.js +8 -8
- package/dist/encryption.d.ts +5 -5
- package/dist/encryption.js +7 -7
- package/dist/events-consumer.d.ts +19 -7
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +33 -12
- package/dist/flushable-stream.d.ts +4 -4
- package/dist/flushable-stream.js +12 -12
- package/dist/global.d.ts +1 -1
- package/dist/global.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/log-format.d.ts +2 -2
- package/dist/log-format.js +5 -5
- package/dist/logger.js +4 -4
- package/dist/private.d.ts +21 -65
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +160 -38
- package/dist/replay-payload-cache.d.ts +1 -1
- package/dist/replay-payload-cache.js +4 -4
- package/dist/runtime/compute-instance.d.ts +4 -3
- package/dist/runtime/compute-instance.d.ts.map +1 -1
- package/dist/runtime/compute-instance.js +5 -4
- package/dist/runtime/constants.d.ts +24 -24
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +49 -43
- package/dist/runtime/count-step-started-events.d.ts +7 -7
- package/dist/runtime/count-step-started-events.js +4 -4
- package/dist/runtime/deployment-guard.d.ts +7 -7
- package/dist/runtime/deployment-guard.js +8 -8
- package/dist/runtime/get-port-lazy.d.ts +2 -2
- package/dist/runtime/get-port-lazy.d.ts.map +1 -1
- package/dist/runtime/get-port-lazy.js +37 -30
- package/dist/runtime/get-world-lazy.d.ts +2 -2
- package/dist/runtime/get-world-lazy.js +3 -3
- package/dist/runtime/helpers.d.ts +18 -18
- package/dist/runtime/helpers.js +27 -27
- package/dist/runtime/quickjs-entrypoint.d.ts +21 -10
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
- package/dist/runtime/quickjs-entrypoint.js +199 -81
- package/dist/runtime/quickjs-runtime.d.ts +31 -15
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
- package/dist/runtime/quickjs-runtime.js +126 -77
- package/dist/runtime/quickjs-serde.d.ts +10 -10
- package/dist/runtime/quickjs-serde.js +20 -20
- package/dist/runtime/replay-budget.d.ts +4 -4
- package/dist/runtime/replay-budget.js +5 -5
- package/dist/runtime/replay-recovery-reporter.d.ts +1 -1
- package/dist/runtime/replay-recovery-reporter.js +2 -2
- package/dist/runtime/resume-hook.d.ts +2 -2
- package/dist/runtime/resume-hook.js +27 -27
- package/dist/runtime/resume-latency.d.ts +25 -25
- package/dist/runtime/resume-latency.d.ts.map +1 -1
- package/dist/runtime/resume-latency.js +4 -4
- package/dist/runtime/run-id-time.d.ts +2 -2
- package/dist/runtime/run-id-time.js +5 -5
- package/dist/runtime/run.d.ts +21 -4
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +104 -10
- package/dist/runtime/runs.d.ts +4 -4
- package/dist/runtime/runs.js +2 -2
- package/dist/runtime/start.d.ts +3 -3
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +27 -23
- package/dist/runtime/step-executor.d.ts +14 -14
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +54 -39
- package/dist/runtime/step-latency.d.ts +14 -14
- package/dist/runtime/step-latency.js +11 -11
- package/dist/runtime/step-ownership.d.ts +6 -6
- package/dist/runtime/step-ownership.js +8 -8
- package/dist/runtime/step-single-flight.d.ts +1 -1
- package/dist/runtime/step-single-flight.d.ts.map +1 -1
- package/dist/runtime/step-single-flight.js +17 -11
- package/dist/runtime/suspension-handler.d.ts +29 -17
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +206 -71
- package/dist/runtime/unserializable-step.d.ts +34 -0
- package/dist/runtime/unserializable-step.d.ts.map +1 -0
- package/dist/runtime/unserializable-step.js +52 -0
- package/dist/runtime/vm-mode.d.ts +1 -1
- package/dist/runtime/vm-mode.js +2 -2
- package/dist/runtime/wait-continuation.d.ts +31 -9
- package/dist/runtime/wait-continuation.d.ts.map +1 -1
- package/dist/runtime/wait-continuation.js +44 -13
- package/dist/runtime/wait-until.d.ts +1 -1
- package/dist/runtime/wait-until.js +2 -2
- package/dist/runtime/world-compatibility.d.ts +20 -9
- package/dist/runtime/world-compatibility.d.ts.map +1 -1
- package/dist/runtime/world-compatibility.js +24 -13
- package/dist/runtime/world-init.d.ts +5 -5
- package/dist/runtime/world-init.js +6 -6
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +13 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +300 -206
- package/dist/sealed-box.d.ts +7 -7
- package/dist/sealed-box.js +15 -15
- package/dist/serialization/client.js +2 -2
- package/dist/serialization/codec-devalue-vm.d.ts +1 -1
- package/dist/serialization/codec-devalue-vm.js +4 -4
- package/dist/serialization/codec-devalue.d.ts +1 -1
- package/dist/serialization/codec-devalue.js +2 -2
- package/dist/serialization/codec.d.ts +4 -4
- package/dist/serialization/codec.js +2 -2
- package/dist/serialization/compression.d.ts +12 -11
- package/dist/serialization/compression.d.ts.map +1 -1
- package/dist/serialization/compression.js +16 -15
- package/dist/serialization/encryption.d.ts +7 -7
- package/dist/serialization/encryption.d.ts.map +1 -1
- package/dist/serialization/encryption.js +8 -8
- package/dist/serialization/errors.js +2 -2
- package/dist/serialization/format.d.ts +6 -6
- package/dist/serialization/format.js +7 -7
- package/dist/serialization/hardened.d.ts +18 -18
- package/dist/serialization/hardened.d.ts.map +1 -1
- package/dist/serialization/hardened.js +41 -32
- package/dist/serialization/index.d.ts +1 -1
- package/dist/serialization/index.js +2 -2
- package/dist/serialization/reducers/class-vm.d.ts +1 -1
- package/dist/serialization/reducers/class-vm.js +2 -2
- package/dist/serialization/reducers/class.js +2 -2
- package/dist/serialization/reducers/common-vm.js +12 -12
- package/dist/serialization/reducers/common.js +12 -12
- package/dist/serialization/reducers/step-function-vm.d.ts +1 -1
- package/dist/serialization/reducers/step-function-vm.js +2 -2
- package/dist/serialization/reducers/step-function.js +2 -2
- package/dist/serialization/step.js +2 -2
- package/dist/serialization/types.d.ts +5 -5
- package/dist/serialization/types.js +2 -2
- package/dist/serialization/workflow-vm.d.ts +1 -1
- package/dist/serialization/workflow-vm.d.ts.map +1 -1
- package/dist/serialization/workflow-vm.js +13 -10
- package/dist/serialization-format.d.ts +11 -11
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +29 -23
- package/dist/serialization.d.ts +10 -10
- package/dist/serialization.js +98 -98
- package/dist/set-attributes.js +2 -2
- package/dist/source-map.d.ts +1 -1
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +18 -12
- package/dist/step/context-storage.d.ts +5 -5
- package/dist/step/context-storage.js +1 -1
- package/dist/step/writable-stream.d.ts +3 -3
- package/dist/step/writable-stream.js +7 -7
- package/dist/step.js +12 -12
- package/dist/symbols.d.ts +2 -2
- package/dist/symbols.js +3 -3
- package/dist/telemetry/semantic-conventions.d.ts +21 -13
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +21 -15
- package/dist/telemetry.d.ts +3 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +19 -10
- package/dist/test-support/orchestrator-context.d.ts.map +1 -1
- package/dist/test-support/orchestrator-context.js +12 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.js +4 -4
- package/dist/vm/script-cache.d.ts.map +1 -1
- package/dist/vm/script-cache.js +23 -17
- package/dist/vm/uint8array-base64.js +1 -1
- package/dist/workflow/abort-controller.d.ts +1 -1
- package/dist/workflow/abort-controller.js +12 -12
- package/dist/workflow/create-hook.js +2 -2
- package/dist/workflow/get-workflow-metadata.js +2 -2
- package/dist/workflow/hook.js +16 -16
- package/dist/workflow/set-attributes.d.ts +1 -1
- package/dist/workflow/set-attributes.js +2 -2
- package/dist/workflow/sleep.js +2 -2
- package/dist/workflow/world-init-stub.d.ts +1 -1
- package/dist/workflow/world-init-stub.js +2 -2
- package/dist/workflow.d.ts +2 -2
- package/dist/workflow.js +21 -7
- package/docs/api-reference/create-hook.mdx +15 -15
- package/docs/api-reference/create-webhook.mdx +15 -15
- package/docs/api-reference/define-hook.mdx +10 -10
- package/docs/api-reference/fatal-error.mdx +2 -2
- package/docs/api-reference/fetch.mdx +7 -7
- package/docs/api-reference/get-step-metadata.mdx +2 -2
- package/docs/api-reference/get-workflow-metadata.mdx +3 -3
- package/docs/api-reference/get-writable.mdx +7 -7
- package/docs/api-reference/index.mdx +1 -1
- package/docs/api-reference/retryable-error.mdx +1 -1
- package/docs/api-reference/set-attributes.mdx +2 -2
- package/docs/api-reference/sleep.mdx +3 -3
- package/docs/foundations/cancellation.mdx +31 -31
- package/docs/foundations/errors-and-retries.mdx +42 -11
- package/docs/foundations/hooks.mdx +35 -35
- package/docs/foundations/idempotency.mdx +9 -9
- package/docs/foundations/serialization.mdx +21 -22
- package/docs/foundations/starting-workflows.mdx +36 -37
- package/docs/foundations/streaming.mdx +46 -41
- package/docs/foundations/versioning.mdx +3 -3
- package/docs/foundations/workflows-and-steps.mdx +9 -9
- package/docs/how-it-works/cancellation.mdx +62 -62
- package/docs/how-it-works/code-transform.mdx +66 -54
- package/docs/how-it-works/encryption.mdx +25 -21
- package/docs/how-it-works/event-sourcing.mdx +53 -35
- package/docs/how-it-works/framework-integrations.mdx +12 -12
- package/docs/how-it-works/understanding-directives.mdx +21 -21
- package/package.json +7 -7
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* host code operating on `JSValueHandle`s, using devalue 5.9's pluggable
|
|
7
7
|
* operations (quickjs-wasi's host-side introspection primitives underneath).
|
|
8
8
|
* The serde bundle previously evaluated inside the VM is gone: guest values
|
|
9
|
-
* are read and built through handles, so no serializer code lives in
|
|
10
|
-
* can be tampered with from
|
|
9
|
+
* are read and built through handles, so no serializer code lives in (or
|
|
10
|
+
* can be tampered with from) the guest realm.
|
|
11
11
|
*
|
|
12
12
|
* Side-effect discipline mirrors the node:vm engine's hardened codec
|
|
13
13
|
* (serialization/hardened.ts):
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* `Symbol.toStringTag`;
|
|
18
18
|
* - extraction goes through intrinsics captured at boot (before any user
|
|
19
19
|
* code runs) invoked with explicit receivers, or through own-property
|
|
20
|
-
* descriptor reads
|
|
20
|
+
* descriptor reads, so patched prototypes and inherited accessors never
|
|
21
21
|
* run;
|
|
22
22
|
* - the only guest code serialization can execute is the same code the
|
|
23
23
|
* previous in-VM codec executed by contract: a class's static
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* versa).
|
|
31
31
|
*
|
|
32
32
|
* Hybrid value space: reducers return host shapes (plain objects, strings,
|
|
33
|
-
* numbers) whose leaves may be guest handles
|
|
33
|
+
* numbers) whose leaves may be guest handles, exactly how the node:vm
|
|
34
34
|
* codec mixes host shapes with sandbox-realm leaves. Every stringify
|
|
35
35
|
* operation therefore dispatches on `JSValueHandle` and falls back to
|
|
36
36
|
* devalue's default host operations for host values. Parse operations
|
|
@@ -162,8 +162,8 @@ const BRANDED_SAMPLES = `({
|
|
|
162
162
|
*
|
|
163
163
|
* Globals installed by the extensions/bootstrap (Headers, Request,
|
|
164
164
|
* Response, ReadableStream, WritableStream, URL, URLSearchParams,
|
|
165
|
-
* DOMException, __WorkflowAbortSignal) are captured defensively
|
|
166
|
-
* ones yield `undefined` and their reducers
|
|
165
|
+
* DOMException, __WorkflowAbortSignal) are captured defensively: absent
|
|
166
|
+
* ones yield `undefined` and their reducers never match, exactly
|
|
167
167
|
* like the old in-VM reducers' `globalThis.X` probes.
|
|
168
168
|
*/
|
|
169
169
|
const CAPTURE_INTRINSICS = `(() => {
|
|
@@ -284,7 +284,7 @@ const SYMBOL_NAMES = [
|
|
|
284
284
|
* created BEFORE the workflow bundle evaluates (capture-before-user-code,
|
|
285
285
|
* same as the fresh path), its handle's box lives in the snapshot's
|
|
286
286
|
* linear memory, and every restored VM re-adopts it BY POINTER
|
|
287
|
-
* (`adoptSerdeRoot`)
|
|
287
|
+
* (`adoptSerdeRoot`), so serde initialization executes NO guest code
|
|
288
288
|
* after user code has run. Anything less lets a module-scope wrapper
|
|
289
289
|
* around e.g. `Object.getOwnPropertyDescriptor` observe (and be mutated
|
|
290
290
|
* by) a post-eval capture, diverging fresh and restored replays.
|
|
@@ -301,7 +301,7 @@ ${SYMBOL_NAMES.map((name) => ` ${JSON.stringify(name)}: Symbol.for(${JSON.str
|
|
|
301
301
|
* bootstrap and BEFORE any user code. The returned handle owns the
|
|
302
302
|
* container; on the baseline-snapshot path its raw box pointer
|
|
303
303
|
* (`handle.ptr`) is recorded next to the snapshot and re-adopted per
|
|
304
|
-
* restored VM via {@link adoptSerdeRoot}
|
|
304
|
+
* restored VM via {@link adoptSerdeRoot}. Do NOT dispose the handle
|
|
305
305
|
* before the snapshot is taken (the box must stay live in the memory
|
|
306
306
|
* image).
|
|
307
307
|
*/
|
|
@@ -312,7 +312,7 @@ export function captureSerdeRoot(vm) {
|
|
|
312
312
|
* Re-create the capture-root handle in a VM restored from a snapshot
|
|
313
313
|
* taken while the exported root was alive, via quickjs-wasi's
|
|
314
314
|
* snapshot-portable handle tokens (`importHandle` duplicates the
|
|
315
|
-
* underlying value
|
|
315
|
+
* underlying value: the returned handle is independently owned and the
|
|
316
316
|
* serde disposes it per restored VM). No guest code executes.
|
|
317
317
|
*/
|
|
318
318
|
export function adoptSerdeRoot(vm, token) {
|
|
@@ -321,7 +321,7 @@ export function adoptSerdeRoot(vm, token) {
|
|
|
321
321
|
/**
|
|
322
322
|
* Export the capture root as a snapshot-portable token to record next to
|
|
323
323
|
* the baseline snapshot. The root handle must stay undisposed until the
|
|
324
|
-
* snapshot is taken (its box
|
|
324
|
+
* snapshot is taken (its box, and the reference it holds, must be part
|
|
325
325
|
* of the memory image).
|
|
326
326
|
*/
|
|
327
327
|
export function exportSerdeRoot(vm, root) {
|
|
@@ -337,7 +337,7 @@ export function createQuickJSSerde(vm,
|
|
|
337
337
|
* Pre-captured serde root (baseline-snapshot path): the container
|
|
338
338
|
* `captureSerdeRoot` created BEFORE user code, re-adopted from the
|
|
339
339
|
* restored memory image via `adoptSerdeRoot`. When omitted, the root
|
|
340
|
-
* is captured now
|
|
340
|
+
* is captured now; callers must guarantee no user code has run yet.
|
|
341
341
|
* Either way, initialization below performs only plain-data property
|
|
342
342
|
* reads and C-level classId reads on the container: NO guest code
|
|
343
343
|
* executes here, so nothing user-patchable can observe or perturb it.
|
|
@@ -488,7 +488,7 @@ capturedRoot) {
|
|
|
488
488
|
* Guest own-property check through the handle's introspection method.
|
|
489
489
|
* MUST NOT be replaced with `Object.hasOwn`, which would interrogate the
|
|
490
490
|
* host JSValueHandle wrapper object (always false) instead of the guest
|
|
491
|
-
* value
|
|
491
|
+
* value; biome's noPrototypeBuiltins auto-fix does exactly that, which
|
|
492
492
|
* is why this is centralized here with the suppression.
|
|
493
493
|
*/
|
|
494
494
|
const guestHasOwn = (handle, key) =>
|
|
@@ -496,7 +496,7 @@ capturedRoot) {
|
|
|
496
496
|
handle.hasOwnProperty(key);
|
|
497
497
|
/**
|
|
498
498
|
* Own data-property read. Returns undefined for absent properties AND for
|
|
499
|
-
* accessor properties
|
|
499
|
+
* accessor properties: an inherited or own getter is never invoked
|
|
500
500
|
* (matching the hardened node:vm codec's descriptor-based reads).
|
|
501
501
|
*/
|
|
502
502
|
const own = (target, key) => {
|
|
@@ -556,7 +556,7 @@ capturedRoot) {
|
|
|
556
556
|
return result;
|
|
557
557
|
};
|
|
558
558
|
/**
|
|
559
|
-
* Whether `handle` has `prototypeHandle` anywhere on its prototype chain
|
|
559
|
+
* Whether `handle` has `prototypeHandle` anywhere on its prototype chain:
|
|
560
560
|
* the trap-free analogue of `instanceof` (which would fire
|
|
561
561
|
* `Symbol.hasInstance`).
|
|
562
562
|
*/
|
|
@@ -667,8 +667,8 @@ capturedRoot) {
|
|
|
667
667
|
return handle.toString();
|
|
668
668
|
};
|
|
669
669
|
/**
|
|
670
|
-
* Extract a guest bigint via the captured `BigInt.prototype.toString
|
|
671
|
-
* `handle.toBigInt()` truncates to 64 bits.
|
|
670
|
+
* Extract a guest bigint via the captured `BigInt.prototype.toString`,
|
|
671
|
+
* since `handle.toBigInt()` truncates to 64 bits.
|
|
672
672
|
*/
|
|
673
673
|
const guestBigInt = (handle) => BigInt(call(i.bigIntToString, handle).consume((h) => h.toString()));
|
|
674
674
|
// --- hybrid stringify operations ---
|
|
@@ -2040,7 +2040,7 @@ capturedRoot) {
|
|
|
2040
2040
|
serialize(value) {
|
|
2041
2041
|
// Handle scope: reducers and the hybrid operations mint one handle
|
|
2042
2042
|
// per visited value node (descriptor reads, dup()s, intrinsic call
|
|
2043
|
-
// results) and nothing disposes them individually
|
|
2043
|
+
// results) and nothing disposes them individually. Without the
|
|
2044
2044
|
// scope each serialize leaks ~one handle per node for the VM's
|
|
2045
2045
|
// lifetime, which compounds across an inline-loop session's whole
|
|
2046
2046
|
// batch. Requires quickjs-wasi >= 3.3.1: earlier versions also
|
|
@@ -2053,7 +2053,7 @@ capturedRoot) {
|
|
|
2053
2053
|
//
|
|
2054
2054
|
// `identities` must be cleared per pass ONCE handles are bulk-freed:
|
|
2055
2055
|
// it keys object identity on the raw guest pointer, and freeing
|
|
2056
|
-
// handles lets QuickJS reuse pointers
|
|
2056
|
+
// handles lets QuickJS reuse pointers, so a stale entry from an
|
|
2057
2057
|
// earlier pass could then alias a different object and corrupt the
|
|
2058
2058
|
// dedup/cycle detection. Identity only needs stability within one
|
|
2059
2059
|
// stringify pass.
|
|
@@ -2080,7 +2080,7 @@ capturedRoot) {
|
|
|
2080
2080
|
const payload = decoder.decode(data.subarray(FORMAT_PREFIX_LENGTH));
|
|
2081
2081
|
// Handle scope, mirroring serialize(): revivers mint intermediate
|
|
2082
2082
|
// handles (children already attached to their parents, intrinsic
|
|
2083
|
-
// call results) that are safe to free once the graph is built
|
|
2083
|
+
// call results) that are safe to free once the graph is built:
|
|
2084
2084
|
// guest values are refcounted, so parents keep their children
|
|
2085
2085
|
// alive. Only the root escapes to the caller.
|
|
2086
2086
|
return vm.withScope((scope) => scope.escape(parse(payload, revivers, {
|
|
@@ -2095,4 +2095,4 @@ capturedRoot) {
|
|
|
2095
2095
|
},
|
|
2096
2096
|
};
|
|
2097
2097
|
}
|
|
2098
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tqcy1zZXJkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3F1aWNranMtc2VyZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixrQkFBa0IsRUFFbEIsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFlL0IsTUFBTSxlQUFlLEdBQ25CLE9BQVEsVUFBbUMsQ0FBQyxVQUFVLEtBQUssVUFBVTtJQUNyRSxPQUFRLFVBQVUsQ0FBQyxTQUE4QixDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUM7QUFDNUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxDQUFDO0FBRS9DLFNBQVMsYUFBYSxDQUFDLEtBQWlCO0lBQ3RDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDbkMsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixPQUFRLEtBQTBCLENBQUMsUUFBUSxFQUFFLEVBQVksQ0FBQztJQUM1RCxDQUFDO0lBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDaEIsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENB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LGlFQUFpRTtZQUNqRSxnRUFBZ0U7WUFDaEUsOERBQThEO1lBQzlELDhDQUE4QztZQUM5QyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUM1QixLQUFLLENBQUMsTUFBTSxDQUNWLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFO2dCQUN2QixVQUFVLEVBQUUsZUFBZTthQUM1QixDQUFrQixDQUNwQixDQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTztZQUNMLEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0QsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdkIsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSG9zdC1zaWRlIHNlcmlhbGl6YXRpb24gZm9yIHRoZSBRdWlja0pTIGVuZ2luZS5cbiAqXG4gKiBJbXBsZW1lbnRzIHRoZSB3b3JrZmxvdyB3aXJlIGNvZGVjIChmb3JtYXQtcHJlZml4ZWQgZGV2YWx1ZSwgaWRlbnRpY2FsIHRvXG4gKiBgY29kZWMtZGV2YWx1ZS12bS50c2AgLyB0aGUgbm9kZTp2bSBlbmdpbmUncyB3b3JrZmxvdy1tb2RlIGNvZGVjKSBhc1xuICogaG9zdCBjb2RlIG9wZXJhdGluZyBvbiBgSlNWYWx1ZUhhbmRsZWBzLCB1c2luZyBkZXZhbHVlIDUuOSdzIHBsdWdnYWJsZVxuICogb3BlcmF0aW9ucyAocXVpY2tqcy13YXNpJ3MgaG9zdC1zaWRlIGludHJvc3BlY3Rpb24gcHJpbWl0aXZlcyB1bmRlcm5lYXRoKS5cbiAqIFRoZSBzZXJkZSBidW5kbGUgcHJldmlvdXNseSBldmFsdWF0ZWQgaW5zaWRlIHRoZSBWTSBpcyBnb25lOiBndWVzdCB2YWx1ZXNcbiAqIGFyZSByZWFkIGFuZCBidWlsdCB0aHJvdWdoIGhhbmRsZXMsIHNvIG5vIHNlcmlhbGl6ZXIgY29kZSBsaXZlcyBpbiDigJQgb3JcbiAqIGNhbiBiZSB0YW1wZXJlZCB3aXRoIGZyb20g4oCUIHRoZSBndWVzdCByZWFsbS5cbiAqXG4gKiBTaWRlLWVmZmVjdCBkaXNjaXBsaW5lIG1pcnJvcnMgdGhlIG5vZGU6dm0gZW5naW5lJ3MgaGFyZGVuZWQgY29kZWNcbiAqIChzZXJpYWxpemF0aW9uL2hhcmRlbmVkLnRzKTpcbiAqXG4gKiAtIGNsYXNzaWZpY2F0aW9uIGlzIGJ5IGVuZ2luZSBicmFuZCAoYGNsYXNzSWRgIGFnYWluc3QgYm9vdC1jYXB0dXJlZFxuICogICBzYW1wbGVzLCBgaXNFcnJvcmAsIGBpc1Byb3h5YCksIG5ldmVyIGBpbnN0YW5jZW9mYCBvclxuICogICBgU3ltYm9sLnRvU3RyaW5nVGFnYDtcbiAqIC0gZXh0cmFjdGlvbiBnb2VzIHRocm91Z2ggaW50cmluc2ljcyBjYXB0dXJlZCBhdCBib290IChiZWZvcmUgYW55IHVzZXJcbiAqICAgY29kZSBydW5zKSBpbnZva2VkIHdpdGggZXhwbGljaXQgcmVjZWl2ZXJzLCBvciB0aHJvdWdoIG93bi1wcm9wZXJ0eVxuICogICBkZXNjcmlwdG9yIHJlYWRzIOKAlCBwYXRjaGVkIHByb3RvdHlwZXMgYW5kIGluaGVyaXRlZCBhY2Nlc3NvcnMgbmV2ZXJcbiAqICAgcnVuO1xuICogLSB0aGUgb25seSBndWVzdCBjb2RlIHNlcmlhbGl6YXRpb24gY2FuIGV4ZWN1dGUgaXMgdGhlIHNhbWUgY29kZSB0aGVcbiAqICAgcHJldmlvdXMgaW4tVk0gY29kZWMgZXhlY3V0ZWQgYnkgY29udHJhY3Q6IGEgY2xhc3MncyBzdGF0aWNcbiAqICAgYFdPUktGTE9XX1NFUklBTElaRWAgbWV0aG9kLCBhIHN0ZXAgcHJveHkncyBgX19jbG9zdXJlVmFyc0ZuYCwgYW5kXG4gKiAgIGBXT1JLRkxPV19VU0VfU1RFUGAgLyBgV09SS0ZMT1dfREVTRVJJQUxJWkVgIG9uIHJldml2YWwuXG4gKlxuICogV2lyZS1mb3JtYXQgcGFyaXR5IHdpdGggdGhlIHByZXZpb3VzIGluLVZNIGNvZGVjIGlzIFJFUVVJUkVEIGFuZCBjb3ZlcmVkXG4gKiBieSB0ZXN0czogZXZlbnQgbG9ncyB3cml0dGVuIGJ5IGVpdGhlciBjb2RlYyBtdXN0IGJlIHJlYWRhYmxlIGJ5IHRoZVxuICogb3RoZXIgKHN0ZXBzIHNlcmlhbGl6ZWQgYnkgdGhlIG5vZGUgcnVudGltZSBmZWVkIFZNIHJldml2YWwgYW5kIHZpY2VcbiAqIHZlcnNhKS5cbiAqXG4gKiBIeWJyaWQgdmFsdWUgc3BhY2U6IHJlZHVjZXJzIHJldHVybiBob3N0IHNoYXBlcyAocGxhaW4gb2JqZWN0cywgc3RyaW5ncyxcbiAqIG51bWJlcnMpIHdob3NlIGxlYXZlcyBtYXkgYmUgZ3Vlc3QgaGFuZGxlcyDigJQgZXhhY3RseSBob3cgdGhlIG5vZGU6dm1cbiAqIGNvZGVjIG1peGVzIGhvc3Qgc2hhcGVzIHdpdGggc2FuZGJveC1yZWFsbSBsZWF2ZXMuIEV2ZXJ5IHN0cmluZ2lmeVxuICogb3BlcmF0aW9uIHRoZXJlZm9yZSBkaXNwYXRjaGVzIG9uIGBKU1ZhbHVlSGFuZGxlYCBhbmQgZmFsbHMgYmFjayB0b1xuICogZGV2YWx1ZSdzIGRlZmF1bHQgaG9zdCBvcGVyYXRpb25zIGZvciBob3N0IHZhbHVlcy4gUGFyc2Ugb3BlcmF0aW9uc1xuICogYWx3YXlzIGJ1aWxkIGd1ZXN0IHZhbHVlcywgc28gdGhlIHBhcnNlIHNpZGUgaXMgaGFuZGxlLW9ubHkuXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmYXVsdFN0cmluZ2lmeU9wZXJhdGlvbnMsXG4gIGZpbHRlckFycmF5SW5kaWNlcyxcbiAgdHlwZSBQYXJzZU9wZXJhdGlvbnMsXG4gIHBhcnNlLFxuICB0eXBlIFN0cmluZ2lmeU9wZXJhdGlvbnMsXG4gIHN0cmluZ2lmeSxcbn0gZnJvbSAnZGV2YWx1ZSc7XG5pbXBvcnQgeyBKU1ZhbHVlSGFuZGxlLCB0eXBlIFF1aWNrSlMgfSBmcm9tICdxdWlja2pzLXdhc2knO1xuaW1wb3J0IHsgU2VyaWFsaXphdGlvbkZvcm1hdCB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vdHlwZXMuanMnO1xuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5jb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5jb25zdCBGT1JNQVRfUFJFRklYX0xFTkdUSCA9IDQ7XG5cbi8vIC0tLS0gYmFzZTY0IChob3N0LXNpZGU7IHdpcmUtY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQgaW4tVk0gYnRvYSBwYXRoKSAtLS0tXG4vL1xuLy8gRmVhdHVyZS1kZXRlY3RlZCBzbyB0aGUgY29kZWMgY2FycmllcyBubyB1bmNvbmRpdGlvbmFsIE5vZGUgZGVwZW5kZW5jeVxuLy8gKHRoZSBRdWlja0pTIGVuZ2luZSB0YXJnZXRzIFdBU00tY2FwYWJsZSBub24tTm9kZSBob3N0cyB0b28pOiB0aGVcbi8vIEVTLXByb3Bvc2FsIFVpbnQ4QXJyYXkgYmFzZTY0IG1ldGhvZHMgd2hlbiBwcmVzZW50LCBOb2RlJ3MgQnVmZmVyIHdoZW5cbi8vIHByZXNlbnQsIGFuZCBhIGJ0b2EvYXRvYiBsb29wIG90aGVyd2lzZSAodW5pdmVyc2FsbHkgYXZhaWxhYmxlIG9uIHdlYlxuLy8gcnVudGltZXMpLlxuXG50eXBlIEJhc2U2NFVpbnQ4QXJyYXlDdG9yID0gVWludDhBcnJheUNvbnN0cnVjdG9yICYge1xuICBmcm9tQmFzZTY0PzogKHZhbHVlOiBzdHJpbmcpID0+IFVpbnQ4QXJyYXk7XG59O1xudHlwZSBCYXNlNjRVaW50OEFycmF5ID0gVWludDhBcnJheSAmIHsgdG9CYXNlNjQ/OiAoKSA9PiBzdHJpbmcgfTtcblxuY29uc3QgaGFzTmF0aXZlQmFzZTY0ID1cbiAgdHlwZW9mIChVaW50OEFycmF5IGFzIEJhc2U2NFVpbnQ4QXJyYXlDdG9yKS5mcm9tQmFzZTY0ID09PSAnZnVuY3Rpb24nICYmXG4gIHR5cGVvZiAoVWludDhBcnJheS5wcm90b3R5cGUgYXMgQmFzZTY0VWludDhBcnJheSkudG9CYXNlNjQgPT09ICdmdW5jdGlvbic7XG5jb25zdCBoYXNCdWZmZXIgPSB0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nO1xuXG5mdW5jdGlvbiBieXRlc1RvQmFzZTY0KGJ5dGVzOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgaWYgKGJ5dGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgaWYgKGhhc05hdGl2ZUJhc2U2NCkge1xuICAgIHJldHVybiAoYnl0ZXMgYXMgQmFzZTY0VWludDhBcnJheSkudG9CYXNlNjQ/LigpIGFzIHN0cmluZztcbiAgfVxuICBpZiAoaGFzQnVmZmVyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFxuICAgICAgYnl0ZXMuYnVmZmVyLFxuICAgICAgYnl0ZXMuYnl0ZU9mZnNldCxcbiAgICAgIGJ5dGVzLmJ5dGVMZW5ndGhcbiAgICApLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuICBsZXQgYmluYXJ5ID0gJyc7XG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGJ5dGVzLmxlbmd0aDsgaWR4KyspIHtcbiAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpZHhdKTtcbiAgfVxuICByZXR1cm4gYnRvYShiaW5hcnkpO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzKHZhbHVlOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKHZhbHVlID09PSAnLicpIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgaWYgKGhhc05hdGl2ZUJhc2U2NCkge1xuICAgIHJldHVybiAoVWludDhBcnJheSBhcyBCYXNlNjRVaW50OEFycmF5Q3RvcikuZnJvbUJhc2U2ND8uKFxuICAgICAgdmFsdWVcbiAgICApIGFzIFVpbnQ4QXJyYXk7XG4gIH1cbiAgaWYgKGhhc0J1ZmZlcikge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh2YWx1ZSwgJ2Jhc2U2NCcpKTtcbiAgfVxuICBjb25zdCBiaW5hcnkgPSBhdG9iKHZhbHVlKTtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKTtcbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgYmluYXJ5Lmxlbmd0aDsgaWR4KyspIHtcbiAgICBieXRlc1tpZHhdID0gYmluYXJ5LmNoYXJDb2RlQXQoaWR4KTtcbiAgfVxuICByZXR1cm4gYnl0ZXM7XG59XG5cbi8vIC0tLS0gYm9vdC10aW1lIGNhcHR1cmVzIC0tLS1cblxuLyoqIGRldmFsdWUgdGFncyBkZWNpZGVkIGJ5IGVuZ2luZSBjbGFzcyBpZCwgc2FtcGxlZCBhdCBib290LiAqL1xuY29uc3QgQlJBTkRFRF9TQU1QTEVTID0gYCh7XG4gIE51bWJlcjogbmV3IE51bWJlcigwKSxcbiAgU3RyaW5nOiBuZXcgU3RyaW5nKCcnKSxcbiAgQm9vbGVhbjogbmV3IEJvb2xlYW4oZmFsc2UpLFxuICBCaWdJbnQ6IE9iamVjdCgwbiksXG4gIERhdGU6IG5ldyBEYXRlKDApLFxuICBSZWdFeHA6IC94LyxcbiAgQXJyYXk6IFtdLFxuICBTZXQ6IG5ldyBTZXQoKSxcbiAgTWFwOiBuZXcgTWFwKCksXG4gIEFycmF5QnVmZmVyOiBuZXcgQXJyYXlCdWZmZXIoMCksXG4gIERhdGFWaWV3OiBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDApKSxcbiAgSW50OEFycmF5OiBuZXcgSW50OEFycmF5KDApLFxuICBVaW50OEFycmF5OiBuZXcgVWludDhBcnJheSgwKSxcbiAgVWludDhDbGFtcGVkQXJyYXk6IG5ldyBVaW50OENsYW1wZWRBcnJheSgwKSxcbiAgSW50MTZBcnJheTogbmV3IEludDE2QXJyYXkoMCksXG4gIFVpbnQxNkFycmF5OiBuZXcgVWludDE2QXJyYXkoMCksXG4gIEludDMyQXJyYXk6IG5ldyBJbnQzMkFycmF5KDApLFxuICBVaW50MzJBcnJheTogbmV3IFVpbnQzMkFycmF5KDApLFxuICBGbG9hdDMyQXJyYXk6IG5ldyBGbG9hdDMyQXJyYXkoMCksXG4gIEZsb2F0NjRBcnJheTogbmV3IEZsb2F0NjRBcnJheSgwKSxcbiAgQmlnSW50NjRBcnJheTogbmV3IEJpZ0ludDY0QXJyYXkoMCksXG4gIEJpZ1VpbnQ2NEFycmF5OiBuZXcgQmlnVWludDY0QXJyYXkoMCksXG59KWA7XG5cbi8qKlxuICogSW50cmluc2ljcyBuZWVkZWQgZm9yIHJlYWRpbmcgYW5kIGJ1aWxkaW5nLCBjYXB0dXJlZCBmcm9tIHRoZSBndWVzdCByZWFsbVxuICogYXQgc2VyZGUgY3JlYXRpb24gKHdoaWNoIHRoZSBydW50aW1lIGRvZXMgcmlnaHQgYWZ0ZXIgZXZhbHVhdGluZyB0aGVcbiAqIGJvb3RzdHJhcCwgYmVmb3JlIHRoZSB3b3JrZmxvdyBidW5kbGUpLiBIZWxkIG9ubHkgb24gdGhlIGhvc3Q6IGxhdGVyXG4gKiBwYXRjaGluZyBpbnNpZGUgdGhlIFZNIGNhbm5vdCBpbmZsdWVuY2Ugc2VyaWFsaXphdGlvbi5cbiAqXG4gKiBHbG9iYWxzIGluc3RhbGxlZCBieSB0aGUgZXh0ZW5zaW9ucy9ib290c3RyYXAgKEhlYWRlcnMsIFJlcXVlc3QsXG4gKiBSZXNwb25zZSwgUmVhZGFibGVTdHJlYW0sIFdyaXRhYmxlU3RyZWFtLCBVUkwsIFVSTFNlYXJjaFBhcmFtcyxcbiAqIERPTUV4Y2VwdGlvbiwgX19Xb3JrZmxvd0Fib3J0U2lnbmFsKSBhcmUgY2FwdHVyZWQgZGVmZW5zaXZlbHkg4oCUIGFic2VudFxuICogb25lcyB5aWVsZCBgdW5kZWZpbmVkYCBhbmQgdGhlaXIgcmVkdWNlcnMgc2ltcGx5IG5ldmVyIG1hdGNoLCBleGFjdGx5XG4gKiBsaWtlIHRoZSBvbGQgaW4tVk0gcmVkdWNlcnMnIGBnbG9iYWxUaGlzLlhgIHByb2Jlcy5cbiAqL1xuY29uc3QgQ0FQVFVSRV9JTlRSSU5TSUNTID0gYCgoKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSAob2JqZWN0LCBrZXkpID0+XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSk7XG4gIGNvbnN0IGdldHRlciA9IChvYmplY3QsIGtleSkgPT4ge1xuICAgIGNvbnN0IGQgPSBkZXNjcmlwdG9yKG9iamVjdCwga2V5KTtcbiAgICByZXR1cm4gZCAmJiBkLmdldDtcbiAgfTtcbiAgY29uc3QgVHlwZWRBcnJheSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkucHJvdG90eXBlKTtcbiAgY29uc3QgbWF5YmVQcm90byA9IChDbHMpID0+IChDbHMgPyBDbHMucHJvdG90eXBlIDogdW5kZWZpbmVkKTtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXM7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyAtLS0gcmVhZGluZyAoc3RyaW5naWZ5KSAtLS1cbiAgICBkYXRlR2V0VGltZTogRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSxcbiAgICBkYXRlVG9JU09TdHJpbmc6IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nLFxuICAgIHJlZ0V4cFNvdXJjZTogZ2V0dGVyKFJlZ0V4cC5wcm90b3R5cGUsICdzb3VyY2UnKSxcbiAgICByZWdFeHBGbGFnczogZ2V0dGVyKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycpLFxuICAgIG51bWJlclZhbHVlT2Y6IE51bWJlci5wcm90b3R5cGUudmFsdWVPZixcbiAgICBzdHJpbmdWYWx1ZU9mOiBTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YsXG4gICAgYm9vbGVhblZhbHVlT2Y6IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YsXG4gICAgYmlnSW50VmFsdWVPZjogQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLFxuICAgIGJpZ0ludFRvU3RyaW5nOiBCaWdJbnQucHJvdG90eXBlLnRvU3RyaW5nLFxuICAgIHNldEZvckVhY2g6IFNldC5wcm90b3R5cGUuZm9yRWFjaCxcbiAgICBtYXBGb3JFYWNoOiBNYXAucHJvdG90eXBlLmZvckVhY2gsXG4gICAgaGVhZGVyc0ZvckVhY2g6IGcuSGVhZGVycyA/IGcuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA6IHVuZGVmaW5lZCxcbiAgICB1cmxIcmVmOiBnLlVSTCA/IGdldHRlcihnLlVSTC5wcm90b3R5cGUsICdocmVmJykgOiB1bmRlZmluZWQsXG4gICAgdXJsU2VhcmNoUGFyYW1zVG9TdHJpbmc6IGcuVVJMU2VhcmNoUGFyYW1zXG4gICAgICA/IGcuVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgOiB1bmRlZmluZWQsXG4gICAgdXJsU2VhcmNoUGFyYW1zU2l6ZTogZy5VUkxTZWFyY2hQYXJhbXNcbiAgICAgID8gZ2V0dGVyKGcuVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZSwgJ3NpemUnKVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgdmlld0J1ZmZlcjogZ2V0dGVyKFR5cGVkQXJyYXksICdidWZmZXInKSxcbiAgICB2aWV3Qnl0ZU9mZnNldDogZ2V0dGVyKFR5cGVkQXJyYXksICdieXRlT2Zmc2V0JyksXG4gICAgdmlld0J5dGVMZW5ndGg6IGdldHRlcihUeXBlZEFycmF5LCAnYnl0ZUxlbmd0aCcpLFxuICAgIHZpZXdMZW5ndGg6IGdldHRlcihUeXBlZEFycmF5LCAnbGVuZ3RoJyksXG4gICAgZGF0YVZpZXdCdWZmZXI6IGdldHRlcihEYXRhVmlldy5wcm90b3R5cGUsICdidWZmZXInKSxcbiAgICBkYXRhVmlld0J5dGVPZmZzZXQ6IGdldHRlcihEYXRhVmlldy5wcm90b3R5cGUsICdieXRlT2Zmc2V0JyksXG4gICAgZGF0YVZpZXdCeXRlTGVuZ3RoOiBnZXR0ZXIoRGF0YVZpZXcucHJvdG90eXBlLCAnYnl0ZUxlbmd0aCcpLFxuICAgIGFycmF5QnVmZmVyQnl0ZUxlbmd0aDogZ2V0dGVyKEFycmF5QnVmZmVyLnByb3RvdHlwZSwgJ2J5dGVMZW5ndGgnKSxcbiAgICBvYmplY3RQcm90b3R5cGU6IE9iamVjdC5wcm90b3R5cGUsXG4gICAgZXJyb3JQcm90b3R5cGU6IEVycm9yLnByb3RvdHlwZSxcbiAgICBkb21FeGNlcHRpb25Qcm90b3R5cGU6IG1heWJlUHJvdG8oZy5ET01FeGNlcHRpb24pLFxuICAgIGhlYWRlcnNQcm90b3R5cGU6IG1heWJlUHJvdG8oZy5IZWFkZXJzKSxcbiAgICByZXF1ZXN0UHJvdG90eXBlOiBtYXliZVByb3RvKGcuUmVxdWVzdCksXG4gICAgcmVzcG9uc2VQcm90b3R5cGU6IG1heWJlUHJvdG8oZy5SZXNwb25zZSksXG4gICAgcmVhZGFibGVTdHJlYW1Qcm90b3R5cGU6IG1heWJlUHJvdG8oZy5SZWFkYWJsZVN0cmVhbSksXG4gICAgd3JpdGFibGVTdHJlYW1Qcm90b3R5cGU6IG1heWJlUHJvdG8oZy5Xcml0YWJsZVN0cmVhbSksXG4gICAgdXJsUHJvdG90eXBlOiBtYXliZVByb3RvKGcuVVJMKSxcbiAgICB1cmxTZWFyY2hQYXJhbXNQcm90b3R5cGU6IG1heWJlUHJvdG8oZy5VUkxTZWFyY2hQYXJhbXMpLFxuXG4gICAgLy8gLS0tIGJ1aWxkaW5nIChwYXJzZSkgLS0tXG4gICAgRGF0ZSwgUmVnRXhwLCBTZXQsIE1hcCwgQXJyYXksIE9iamVjdCwgRGF0YVZpZXcsXG4gICAgSW50OEFycmF5LCBVaW50OEFycmF5LCBVaW50OENsYW1wZWRBcnJheSwgSW50MTZBcnJheSwgVWludDE2QXJyYXksXG4gICAgSW50MzJBcnJheSwgVWludDMyQXJyYXksIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5LFxuICAgIEJpZ0ludDY0QXJyYXksIEJpZ1VpbnQ2NEFycmF5LFxuICAgIEVycm9yLFxuICAgIEFnZ3JlZ2F0ZUVycm9yOiBnLkFnZ3JlZ2F0ZUVycm9yLFxuICAgIEV2YWxFcnJvciwgUmFuZ2VFcnJvciwgUmVmZXJlbmNlRXJyb3IsIFN5bnRheEVycm9yLCBUeXBlRXJyb3IsIFVSSUVycm9yLFxuICAgIERPTUV4Y2VwdGlvbjogZy5ET01FeGNlcHRpb24sXG4gICAgSGVhZGVyczogZy5IZWFkZXJzLFxuICAgIFJlcXVlc3Q6IGcuUmVxdWVzdCxcbiAgICBSZXNwb25zZTogZy5SZXNwb25zZSxcbiAgICBSZWFkYWJsZVN0cmVhbTogZy5SZWFkYWJsZVN0cmVhbSxcbiAgICBXcml0YWJsZVN0cmVhbTogZy5Xcml0YWJsZVN0cmVhbSxcbiAgICBVUkw6IGcuVVJMLFxuICAgIFVSTFNlYXJjaFBhcmFtczogZy5VUkxTZWFyY2hQYXJhbXMsXG4gICAgc2V0QWRkOiBTZXQucHJvdG90eXBlLmFkZCxcbiAgICBtYXBTZXQ6IE1hcC5wcm90b3R5cGUuc2V0LFxuICAgIG9iamVjdENyZWF0ZTogT2JqZWN0LmNyZWF0ZSxcbiAgICBkZWZpbmVQcm9wZXJ0eTogT2JqZWN0LmRlZmluZVByb3BlcnR5LFxuICAgIGRhdGVOb3c6IERhdGUubm93LFxuICAgIG9iamVjdEZyZWV6ZTogT2JqZWN0LmZyZWV6ZSxcbiAgICBmdW5jdGlvbkJpbmQ6IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLFxuICAgIG1ha2VTcGFyc2VBcnJheTogKGxlbmd0aCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICAgIGFycmF5WzQyOTQ5NjcyOTRdID0gdW5kZWZpbmVkO1xuICAgICAgZGVsZXRlIGFycmF5WzQyOTQ5NjcyOTRdO1xuICAgICAgYXJyYXkubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH0sXG4gICAgLy8gQnVpbGRzIHRoZSBjbG9zdXJlLXZhcnMgdGh1bmsgYSByZXZpdmVkIHN0ZXAgcHJveHkgY2Fycmllcy4gTXVzdCBiZSBhXG4gICAgLy8gZ3Vlc3QgY2xvc3VyZSAodGhlIHByb3h5IHN0b3JlcyBhbmQgbGF0ZXIgY2FsbHMgaXQgZnJvbSBndWVzdCBjb2RlKS5cbiAgICBtYWtlVGh1bms6ICh2YXJzKSA9PiAoKSA9PiB2YXJzLFxuICB9O1xufSkoKWA7XG5cbi8qKlxuICogV2VsbC1rbm93biBzeW1ib2xzIHRoZSByZWR1Y2Vycy9yZXZpdmVycyByZWFkIG9yIHN0YW1wLCBjYXB0dXJlZCBhcyBndWVzdFxuICogc3ltYm9sIGhhbmRsZXMgc28gZGVzY3JpcHRvciByZWFkcy93cml0ZXMgY2FuIGJlIGtleWVkIG9uIHRoZW0uXG4gKi9cbmNvbnN0IFNZTUJPTF9OQU1FUyA9IFtcbiAgJ1dPUktGTE9XX0FCT1JUX1NUUkVBTV9OQU1FJyxcbiAgJ1dPUktGTE9XX0FCT1JUX0hPT0tfVE9LRU4nLFxuICAnQk9EWV9JTklUJyxcbiAgJ1dPUktGTE9XX1NUUkVBTV9OQU1FJyxcbiAgJ1dPUktGTE9XX1NUUkVBTV9UWVBFJyxcbiAgJ1dPUktGTE9XX1NUUkVBTV9GUkFNSU5HJyxcbiAgJ1dPUktGTE9XX1NUUkVBTV9TRVJWRVJfUlVOX0lEJyxcbiAgJ1dPUktGTE9XX1NUUkVBTV9TRVJWRVJfREVQTE9ZTUVOVF9JRCcsXG4gICdXRUJIT09LX1JFU1BPTlNFX1dSSVRBQkxFJyxcbiAgJ1dPUktGTE9XX1VTRV9TVEVQJyxcbiAgJ3dvcmtmbG93LXNlcmlhbGl6ZScsIC8vIEB3b3JrZmxvdy9zZXJkZSBXT1JLRkxPV19TRVJJQUxJWkVcbiAgJ3dvcmtmbG93LWRlc2VyaWFsaXplJywgLy8gQHdvcmtmbG93L3NlcmRlIFdPUktGTE9XX0RFU0VSSUFMSVpFXG4gICd3b3JrZmxvdy1jbGFzcy1yZWdpc3RyeScsXG4gICdAd29ya2Zsb3cvZXJyb3JzLy9GYXRhbEVycm9yJyxcbiAgJ0B3b3JrZmxvdy9lcnJvcnMvL0hvb2tDb25mbGljdEVycm9yJyxcbiAgJ0B3b3JrZmxvdy9lcnJvcnMvL1JldHJ5YWJsZUVycm9yJyxcbiAgJ0B3b3JrZmxvdy9lcnJvcnMvL1J1bnRpbWVEZWNyeXB0aW9uRXJyb3InLFxuXSBhcyBjb25zdDtcbnR5cGUgU3ltYm9sTmFtZSA9ICh0eXBlb2YgU1lNQk9MX05BTUVTKVtudW1iZXJdO1xuXG4vKipcbiAqIFRoZSBzaW5nbGUgZ3Vlc3QgZXhwcmVzc2lvbiB0aGF0IHBlcmZvcm1zIEVWRVJZIGd1ZXN0LXRvdWNoaW5nIHBhcnQgb2ZcbiAqIHNlcmRlIGluaXRpYWxpemF0aW9uOiB0aGUgaW50cmluc2ljcyBjYXB0dXJlLCB0aGUgYnJhbmRlZCBzYW1wbGVzLCBhbmRcbiAqIHRoZSB3ZWxsLWtub3duIHN5bWJvbCBsb29rdXBzLCBidW5kbGVkIGludG8gb25lIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQnVuZGxpbmcgbWF0dGVycyBmb3IgdGhlIGJhc2VsaW5lLXNuYXBzaG90IHBhdGg6IHRoZSBjb250YWluZXIgaXNcbiAqIGNyZWF0ZWQgQkVGT1JFIHRoZSB3b3JrZmxvdyBidW5kbGUgZXZhbHVhdGVzIChjYXB0dXJlLWJlZm9yZS11c2VyLWNvZGUsXG4gKiBzYW1lIGFzIHRoZSBmcmVzaCBwYXRoKSwgaXRzIGhhbmRsZSdzIGJveCBsaXZlcyBpbiB0aGUgc25hcHNob3Qnc1xuICogbGluZWFyIG1lbW9yeSwgYW5kIGV2ZXJ5IHJlc3RvcmVkIFZNIHJlLWFkb3B0cyBpdCBCWSBQT0lOVEVSXG4gKiAoYGFkb3B0U2VyZGVSb290YCkg4oCUIHNvIHNlcmRlIGluaXRpYWxpemF0aW9uIGV4ZWN1dGVzIE5PIGd1ZXN0IGNvZGVcbiAqIGFmdGVyIHVzZXIgY29kZSBoYXMgcnVuLiBBbnl0aGluZyBsZXNzIGxldHMgYSBtb2R1bGUtc2NvcGUgd3JhcHBlclxuICogYXJvdW5kIGUuZy4gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG9ic2VydmUgKGFuZCBiZSBtdXRhdGVkXG4gKiBieSkgYSBwb3N0LWV2YWwgY2FwdHVyZSwgZGl2ZXJnaW5nIGZyZXNoIGFuZCByZXN0b3JlZCByZXBsYXlzLlxuICovXG5jb25zdCBDQVBUVVJFX1JPT1QgPSBgKCgpID0+ICh7XG4gIGludHJpbnNpY3M6ICR7Q0FQVFVSRV9JTlRSSU5TSUNTfSxcbiAgc2FtcGxlczogJHtCUkFOREVEX1NBTVBMRVN9LFxuICBzeW1ib2xzOiB7XG4ke1NZTUJPTF9OQU1FUy5tYXAoXG4gIChuYW1lKSA9PiBgICAgICR7SlNPTi5zdHJpbmdpZnkobmFtZSl9OiBTeW1ib2wuZm9yKCR7SlNPTi5zdHJpbmdpZnkobmFtZSl9KWBcbikuam9pbignLFxcbicpfVxuICB9LFxufSkpKClgO1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBzZXJkZSBjYXB0dXJlIHJvb3QgaW4gYSBWTS4gTXVzdCBydW4gYWZ0ZXIgdGhlIHJ1bnRpbWVcbiAqIGJvb3RzdHJhcCBhbmQgQkVGT1JFIGFueSB1c2VyIGNvZGUuIFRoZSByZXR1cm5lZCBoYW5kbGUgb3ducyB0aGVcbiAqIGNvbnRhaW5lcjsgb24gdGhlIGJhc2VsaW5lLXNuYXBzaG90IHBhdGggaXRzIHJhdyBib3ggcG9pbnRlclxuICogKGBoYW5kbGUucHRyYCkgaXMgcmVjb3JkZWQgbmV4dCB0byB0aGUgc25hcHNob3QgYW5kIHJlLWFkb3B0ZWQgcGVyXG4gKiByZXN0b3JlZCBWTSB2aWEge0BsaW5rIGFkb3B0U2VyZGVSb290fSDigJQgZG8gTk9UIGRpc3Bvc2UgdGhlIGhhbmRsZVxuICogYmVmb3JlIHRoZSBzbmFwc2hvdCBpcyB0YWtlbiAodGhlIGJveCBtdXN0IHN0YXkgbGl2ZSBpbiB0aGUgbWVtb3J5XG4gKiBpbWFnZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlU2VyZGVSb290KHZtOiBRdWlja0pTKTogSlNWYWx1ZUhhbmRsZSB7XG4gIHJldHVybiB2bS5ldmFsQ29kZShDQVBUVVJFX1JPT1QpO1xufVxuXG4vKipcbiAqIFJlLWNyZWF0ZSB0aGUgY2FwdHVyZS1yb290IGhhbmRsZSBpbiBhIFZNIHJlc3RvcmVkIGZyb20gYSBzbmFwc2hvdFxuICogdGFrZW4gd2hpbGUgdGhlIGV4cG9ydGVkIHJvb3Qgd2FzIGFsaXZlLCB2aWEgcXVpY2tqcy13YXNpJ3NcbiAqIHNuYXBzaG90LXBvcnRhYmxlIGhhbmRsZSB0b2tlbnMgKGBpbXBvcnRIYW5kbGVgIGR1cGxpY2F0ZXMgdGhlXG4gKiB1bmRlcmx5aW5nIHZhbHVlIOKAlCB0aGUgcmV0dXJuZWQgaGFuZGxlIGlzIGluZGVwZW5kZW50bHkgb3duZWQgYW5kIHRoZVxuICogc2VyZGUgZGlzcG9zZXMgaXQgcGVyIHJlc3RvcmVkIFZNKS4gTm8gZ3Vlc3QgY29kZSBleGVjdXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkb3B0U2VyZGVSb290KHZtOiBRdWlja0pTLCB0b2tlbjogbnVtYmVyKTogSlNWYWx1ZUhhbmRsZSB7XG4gIHJldHVybiB2bS5pbXBvcnRIYW5kbGUodG9rZW4pO1xufVxuXG4vKipcbiAqIEV4cG9ydCB0aGUgY2FwdHVyZSByb290IGFzIGEgc25hcHNob3QtcG9ydGFibGUgdG9rZW4gdG8gcmVjb3JkIG5leHQgdG9cbiAqIHRoZSBiYXNlbGluZSBzbmFwc2hvdC4gVGhlIHJvb3QgaGFuZGxlIG11c3Qgc3RheSB1bmRpc3Bvc2VkIHVudGlsIHRoZVxuICogc25hcHNob3QgaXMgdGFrZW4gKGl0cyBib3gg4oCUIGFuZCB0aGUgcmVmZXJlbmNlIGl0IGhvbGRzIOKAlCBtdXN0IGJlIHBhcnRcbiAqIG9mIHRoZSBtZW1vcnkgaW1hZ2UpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0U2VyZGVSb290KHZtOiBRdWlja0pTLCByb290OiBKU1ZhbHVlSGFuZGxlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZtLmV4cG9ydEhhbmRsZShyb290KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWlja0pTU2VyZGUge1xuICAvKiogU2VyaWFsaXplIGEgZ3Vlc3QgdmFsdWUgaGFuZGxlIHRvIGZvcm1hdC1wcmVmaXhlZCB3aXJlIGJ5dGVzLiAqL1xuICBzZXJpYWxpemUodmFsdWU6IEpTVmFsdWVIYW5kbGUpOiBVaW50OEFycmF5O1xuICAvKiogQnVpbGQgYSBndWVzdCB2YWx1ZSBpbiB0aGUgVk0gZnJvbSBmb3JtYXQtcHJlZml4ZWQgd2lyZSBieXRlcy4gKi9cbiAgZGVzZXJpYWxpemUoZGF0YTogVWludDhBcnJheSk6IEpTVmFsdWVIYW5kbGU7XG4gIC8qKlxuICAgKiBUaGUgcmVkdWNlciBuYW1lcyB0aGlzIGNvZGVjIGFwcGxpZXMsIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gRXhwb3NlZFxuICAgKiBzbyB0ZXN0cyBjYW4gYXNzZXJ0IGV4aGF1c3RpdmVuZXNzIGFnYWluc3QgdGhlIHNoYXJlZCB2YWx1ZS1zcGFjZVxuICAgKiBjb2RlYyAoY29kZWMtZGV2YWx1ZS12bSkg4oCUIGEgcmVkdWNlciBhZGRlZCB0aGVyZSBidXQgbm90IGhlcmUgd291bGRcbiAgICogb3RoZXJ3aXNlIHNpbGVudGx5IHJvdW5kLXRyaXAgdmFsdWVzIGFzIHBsYWluIG9iamVjdHMuXG4gICAqL1xuICByZWR1Y2VyS2V5czogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBSZXZpdmVyIG5hbWVzLCBmb3IgdGhlIHNhbWUgZXhoYXVzdGl2ZW5lc3MgY2hlY2suICovXG4gIHJldml2ZXJLZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEluc3RhbGwgYGdsb2JhbFRoaXMucHJvY2VzcyA9IHsgZW52OiBPYmplY3QuZnJlZXplKHsuLi59KSB9YCBpbiB0aGVcbiAgICogVk0gdGhyb3VnaCBoYW5kbGVzIGFuZCBib290LWNhcHR1cmVkIGludHJpbnNpY3Mgb25seSDigJQgbm8gZ3Vlc3RcbiAgICogc291cmNlIGlzIGV2YWx1YXRlZCwgc28gYSBtb2R1bGUtc2NvcGUgd3JhcHBlciBhcm91bmQgSlNPTi5wYXJzZSAvXG4gICAqIE9iamVjdC5mcmVlemUgY2Fubm90IG9ic2VydmUgdGhlIGluamVjdGlvbi4gVGhpcyBtYXR0ZXJzIG9uIHRoZVxuICAgKiBiYXNlbGluZS1zbmFwc2hvdCBwYXRoLCB3aGVyZSBlbnYgaW5qZWN0aW9uIGhhcHBlbnMgYWZ0ZXIgdXNlciBjb2RlXG4gICAqIHJhbjsgZXZhbHVhdGluZyBndWVzdCBzb3VyY2UgdGhlcmUgd291bGQgbGV0IHBhdGNoZWQgZ2xvYmFscyBzZWVcbiAgICogKGFuZCBwZXJ0dXJiKSBpdCwgZGl2ZXJnaW5nIGZyb20gdGhlIGZyZXNoIHBhdGguXG4gICAqL1xuICBpbnN0YWxsUHJvY2Vzc0VudihlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4pOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBob3N0LXNpZGUgc2VyZGUgZm9yIGEgVk0uIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBydW50aW1lXG4gKiBib290c3RyYXAgaGFzIGJlZW4gZXZhbHVhdGVkIChzbyBib290c3RyYXAtaW5zdGFsbGVkIGdsb2JhbHMgYXJlXG4gKiBjYXB0dXJhYmxlKSBhbmQgYmVmb3JlIHRoZSB3b3JrZmxvdyBidW5kbGUgcnVucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVF1aWNrSlNTZXJkZShcbiAgdm06IFF1aWNrSlMsXG4gIC8qKlxuICAgKiBQcmUtY2FwdHVyZWQgc2VyZGUgcm9vdCAoYmFzZWxpbmUtc25hcHNob3QgcGF0aCk6IHRoZSBjb250YWluZXJcbiAgICogYGNhcHR1cmVTZXJkZVJvb3RgIGNyZWF0ZWQgQkVGT1JFIHVzZXIgY29kZSwgcmUtYWRvcHRlZCBmcm9tIHRoZVxuICAgKiByZXN0b3JlZCBtZW1vcnkgaW1hZ2UgdmlhIGBhZG9wdFNlcmRlUm9vdGAuIFdoZW4gb21pdHRlZCwgdGhlIHJvb3RcbiAgICogaXMgY2FwdHVyZWQgbm93IOKAlCBjYWxsZXJzIG11c3QgZ3VhcmFudGVlIG5vIHVzZXIgY29kZSBoYXMgcnVuIHlldC5cbiAgICogRWl0aGVyIHdheSwgaW5pdGlhbGl6YXRpb24gYmVsb3cgcGVyZm9ybXMgb25seSBwbGFpbi1kYXRhIHByb3BlcnR5XG4gICAqIHJlYWRzIGFuZCBDLWxldmVsIGNsYXNzSWQgcmVhZHMgb24gdGhlIGNvbnRhaW5lcjogTk8gZ3Vlc3QgY29kZVxuICAgKiBleGVjdXRlcyBoZXJlLCBzbyBub3RoaW5nIHVzZXItcGF0Y2hhYmxlIGNhbiBvYnNlcnZlIG9yIHBlcnR1cmIgaXQuXG4gICAqL1xuICBjYXB0dXJlZFJvb3Q/OiBKU1ZhbHVlSGFuZGxlXG4pOiBRdWlja0pTU2VyZGUge1xuICBjb25zdCBkaXNwb3NhYmxlczogSlNWYWx1ZUhhbmRsZVtdID0gW107XG4gIGNvbnN0IGtlZXAgPSAoaGFuZGxlOiBKU1ZhbHVlSGFuZGxlKTogSlNWYWx1ZUhhbmRsZSA9PiB7XG4gICAgZGlzcG9zYWJsZXMucHVzaChoYW5kbGUpO1xuICAgIHJldHVybiBoYW5kbGU7XG4gIH07XG4gIGNvbnN0IGlzSGFuZGxlID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSlNWYWx1ZUhhbmRsZSA9PlxuICAgIHZhbHVlIGluc3RhbmNlb2YgSlNWYWx1ZUhhbmRsZTtcblxuICAvLyAtLS0gYm9vdCBjYXB0dXJlIC0tLVxuXG4gIGNvbnN0IHJvb3QgPSBrZWVwKGNhcHR1cmVkUm9vdCA/PyBjYXB0dXJlU2VyZGVSb290KHZtKSk7XG5cbiAgY29uc3QgdGFnQnlDbGFzc0lkID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAge1xuICAgIGNvbnN0IHNhbXBsZXMgPSByb290LmdldFByb3AoJ3NhbXBsZXMnKTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCB0YWcgb2Ygc2FtcGxlcy5nZXRPd25Qcm9wZXJ0eU5hbWVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2FtcGxlID0gc2FtcGxlcy5nZXRQcm9wKHRhZyk7XG4gICAgICAgIHRhZ0J5Q2xhc3NJZC5zZXQoc2FtcGxlLmNsYXNzSWQsIHRhZyk7XG4gICAgICAgIHNhbXBsZS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNhbXBsZXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGludHJpbnNpY3MgPSBrZWVwKHJvb3QuZ2V0UHJvcCgnaW50cmluc2ljcycpKTtcbiAgY29uc3QgYXQgPSAobmFtZTogc3RyaW5nKTogSlNWYWx1ZUhhbmRsZSA9PiBrZWVwKGludHJpbnNpY3MuZ2V0UHJvcChuYW1lKSk7XG4gIC8qKiBBYnNlbnQgY2FwdHVyZXMgKGV4dGVuc2lvbi9ib290c3RyYXAgZ2xvYmFsIG5vdCBpbnN0YWxsZWQpLiAqL1xuICBjb25zdCBvcHRpb25hbCA9IChuYW1lOiBzdHJpbmcpOiBKU1ZhbHVlSGFuZGxlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBoYW5kbGUgPSBhdChuYW1lKTtcbiAgICByZXR1cm4gaGFuZGxlLmlzVW5kZWZpbmVkID8gdW5kZWZpbmVkIDogaGFuZGxlO1xuICB9O1xuXG4gIGNvbnN0IGkgPSB7XG4gICAgZGF0ZUdldFRpbWU6IGF0KCdkYXRlR2V0VGltZScpLFxuICAgIGRhdGVUb0lTT1N0cmluZzogYXQoJ2RhdGVUb0lTT1N0cmluZycpLFxuICAgIHJlZ0V4cFNvdXJjZTogYXQoJ3JlZ0V4cFNvdXJjZScpLFxuICAgIHJlZ0V4cEZsYWdzOiBhdCgncmVnRXhwRmxhZ3MnKSxcbiAgICBudW1iZXJWYWx1ZU9mOiBhdCgnbnVtYmVyVmFsdWVPZicpLFxuICAgIHN0cmluZ1ZhbHVlT2Y6IGF0KCdzdHJpbmdWYWx1ZU9mJyksXG4gICAgYm9vbGVhblZhbHVlT2Y6IGF0KCdib29sZWFuVmFsdWVPZicpLFxuICAgIGJpZ0ludFZhbHVlT2Y6IGF0KCdiaWdJbnRWYWx1ZU9mJyksXG4gICAgYmlnSW50VG9TdHJpbmc6IGF0KCdiaWdJbnRUb1N0cmluZycpLFxuICAgIHNldEZvckVhY2g6IGF0KCdzZXRGb3JFYWNoJyksXG4gICAgbWFwRm9yRWFjaDogYXQoJ21hcEZvckVhY2gnKSxcbiAgICBoZWFkZXJzRm9yRWFjaDogb3B0aW9uYWwoJ2hlYWRlcnNGb3JFYWNoJyksXG4gICAgdXJsSHJlZjogb3B0aW9uYWwoJ3VybEhyZWYnKSxcbiAgICB1cmxTZWFyY2hQYXJhbXNUb1N0cmluZzogb3B0aW9uYWwoJ3VybFNlYXJjaFBhcmFtc1RvU3RyaW5nJyksXG4gICAgdXJsU2VhcmNoUGFyYW1zU2l6ZTogb3B0aW9uYWwoJ3VybFNlYXJjaFBhcmFtc1NpemUnKSxcbiAgICB2aWV3QnVmZmVyOiBhdCgndmlld0J1ZmZlcicpLFxuICAgIHZpZXdCeXRlT2Zmc2V0OiBhdCgndmlld0J5dGVPZmZzZXQnKSxcbiAgICB2aWV3Qnl0ZUxlbmd0aDogYXQoJ3ZpZXdCeXRlTGVuZ3RoJyksXG4gICAgdmlld0xlbmd0aDogYXQoJ3ZpZXdMZW5ndGgnKSxcbiAgICBkYXRhVmlld0J1ZmZlcjogYXQoJ2RhdGFWaWV3QnVmZmVyJyksXG4gICAgZGF0YVZpZXdCeXRlT2Zmc2V0OiBhdCgnZGF0YVZpZXdCeXRlT2Zmc2V0JyksXG4gICAgZGF0YVZpZXdCeXRlTGVuZ3RoOiBhdCgnZGF0YVZpZXdCeXRlTGVuZ3RoJyksXG4gICAgYXJyYXlCdWZmZXJCeXRlTGVuZ3RoOiBhdCgnYXJyYXlCdWZmZXJCeXRlTGVuZ3RoJyksXG4gICAgb2JqZWN0UHJvdG90eXBlOiBhdCgnb2JqZWN0UHJvdG90eXBlJyksXG4gICAgZXJyb3JQcm90b3R5cGU6IGF0KCdlcnJvclByb3RvdHlwZScpLFxuICAgIGRvbUV4Y2VwdGlvblByb3RvdHlwZTogb3B0aW9uYWwoJ2RvbUV4Y2VwdGlvblByb3RvdHlwZScpLFxuICAgIGhlYWRlcnNQcm90b3R5cGU6IG9wdGlvbmFsKCdoZWFkZXJzUHJvdG90eXBlJyksXG4gICAgcmVxdWVzdFByb3RvdHlwZTogb3B0aW9uYWwoJ3JlcXVlc3RQcm90b3R5cGUnKSxcbiAgICByZXNwb25zZVByb3RvdHlwZTogb3B0aW9uYWwoJ3Jlc3BvbnNlUHJvdG90eXBlJyksXG4gICAgcmVhZGFibGVTdHJlYW1Qcm90b3R5cGU6IG9wdGlvbmFsKCdyZWFkYWJsZVN0cmVhbVByb3RvdHlwZScpLFxuICAgIHdyaXRhYmxlU3RyZWFtUHJvdG90eXBlOiBvcHRpb25hbCgnd3JpdGFibGVTdHJlYW1Qcm90b3R5cGUnKSxcbiAgICB1cmxQcm90b3R5cGU6IG9wdGlvbmFsKCd1cmxQcm90b3R5cGUnKSxcbiAgICB1cmxTZWFyY2hQYXJhbXNQcm90b3R5cGU6IG9wdGlvbmFsKCd1cmxTZWFyY2hQYXJhbXNQcm90b3R5cGUnKSxcbiAgICBEYXRlOiBhdCgnRGF0ZScpLFxuICAgIFJlZ0V4cDogYXQoJ1JlZ0V4cCcpLFxuICAgIFNldDogYXQoJ1NldCcpLFxuICAgIE1hcDogYXQoJ01hcCcpLFxuICAgIEFycmF5OiBhdCgnQXJyYXknKSxcbiAgICBPYmplY3Q6IGF0KCdPYmplY3QnKSxcbiAgICBFcnJvcjogYXQoJ0Vycm9yJyksXG4gICAgQWdncmVnYXRlRXJyb3I6IG9wdGlvbmFsKCdBZ2dyZWdhdGVFcnJvcicpLFxuICAgIERPTUV4Y2VwdGlvbjogb3B0aW9uYWwoJ0RPTUV4Y2VwdGlvbicpLFxuICAgIEhlYWRlcnM6IG9wdGlvbmFsKCdIZWFkZXJzJyksXG4gICAgUmVhZGFibGVTdHJlYW06IG9wdGlvbmFsKCdSZWFkYWJsZVN0cmVhbScpLFxuICAgIFdyaXRhYmxlU3RyZWFtOiBvcHRpb25hbCgnV3JpdGFibGVTdHJlYW0nKSxcbiAgICBVUkw6IG9wdGlvbmFsKCdVUkwnKSxcbiAgICBVUkxTZWFyY2hQYXJhbXM6IG9wdGlvbmFsKCdVUkxTZWFyY2hQYXJhbXMnKSxcbiAgICBzZXRBZGQ6IGF0KCdzZXRBZGQnKSxcbiAgICBtYXBTZXQ6IGF0KCdtYXBTZXQnKSxcbiAgICBvYmplY3RDcmVhdGU6IGF0KCdvYmplY3RDcmVhdGUnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eTogYXQoJ2RlZmluZVByb3BlcnR5JyksXG4gICAgZGF0ZU5vdzogYXQoJ2RhdGVOb3cnKSxcbiAgICBvYmplY3RGcmVlemU6IGF0KCdvYmplY3RGcmVlemUnKSxcbiAgICBmdW5jdGlvbkJpbmQ6IGF0KCdmdW5jdGlvbkJpbmQnKSxcbiAgICBtYWtlU3BhcnNlQXJyYXk6IGF0KCdtYWtlU3BhcnNlQXJyYXknKSxcbiAgICBtYWtlVGh1bms6IGF0KCdtYWtlVGh1bmsnKSxcbiAgfTtcblxuICBjb25zdCBlcnJvckNvbnN0cnVjdG9ycyA9IG5ldyBNYXA8c3RyaW5nLCBKU1ZhbHVlSGFuZGxlPigpO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgW1xuICAgICdFdmFsRXJyb3InLFxuICAgICdSYW5nZUVycm9yJyxcbiAgICAnUmVmZXJlbmNlRXJyb3InLFxuICAgICdTeW50YXhFcnJvcicsXG4gICAgJ1R5cGVFcnJvcicsXG4gICAgJ1VSSUVycm9yJyxcbiAgXSkge1xuICAgIGVycm9yQ29uc3RydWN0b3JzLnNldChuYW1lLCBhdChuYW1lKSk7XG4gIH1cblxuICBjb25zdCB0eXBlZEFycmF5Q29uc3RydWN0b3JzID0gbmV3IE1hcDxzdHJpbmcsIEpTVmFsdWVIYW5kbGU+KCk7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBbXG4gICAgJ0ludDhBcnJheScsXG4gICAgJ1VpbnQ4QXJyYXknLFxuICAgICdVaW50OENsYW1wZWRBcnJheScsXG4gICAgJ0ludDE2QXJyYXknLFxuICAgICdVaW50MTZBcnJheScsXG4gICAgJ0ludDMyQXJyYXknLFxuICAgICdVaW50MzJBcnJheScsXG4gICAgJ0Zsb2F0MzJBcnJheScsXG4gICAgJ0Zsb2F0NjRBcnJheScsXG4gICAgJ0JpZ0ludDY0QXJyYXknLFxuICAgICdCaWdVaW50NjRBcnJheScsXG4gICAgJ0RhdGFWaWV3JyxcbiAgXSkge1xuICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuc2V0KG5hbWUsIGF0KG5hbWUpKTtcbiAgfVxuXG4gIGNvbnN0IHN5bWJvbHMgPSBuZXcgTWFwPFN5bWJvbE5hbWUsIEpTVmFsdWVIYW5kbGU+KCk7XG4gIHtcbiAgICB1c2luZyBzeW1ib2xzQ29udGFpbmVyID0gcm9vdC5nZXRQcm9wKCdzeW1ib2xzJyk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIFNZTUJPTF9OQU1FUykge1xuICAgICAgc3ltYm9scy5zZXQobmFtZSwga2VlcChzeW1ib2xzQ29udGFpbmVyLmdldFByb3AobmFtZSkpKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc3ltID0gKG5hbWU6IFN5bWJvbE5hbWUpOiBKU1ZhbHVlSGFuZGxlID0+IHtcbiAgICBjb25zdCBoYW5kbGUgPSBzeW1ib2xzLmdldChuYW1lKTtcbiAgICBpZiAoIWhhbmRsZSkgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGNhcHR1cmVkIHN5bWJvbDogJHtuYW1lfWApO1xuICAgIHJldHVybiBoYW5kbGU7XG4gIH07XG5cbiAgLy8gLS0tIGhhbmRsZSBoZWxwZXJzIC0tLVxuXG4gIGNvbnN0IGNhbGwgPSAoXG4gICAgZm46IEpTVmFsdWVIYW5kbGUsXG4gICAgdGhpc1ZhbHVlOiBKU1ZhbHVlSGFuZGxlLFxuICAgIC4uLmFyZ3M6IEpTVmFsdWVIYW5kbGVbXVxuICApOiBKU1ZhbHVlSGFuZGxlID0+IHZtLmNhbGxGdW5jdGlvbihmbiwgdGhpc1ZhbHVlLCAuLi5hcmdzKTtcblxuICBjb25zdCBpbnZva2UgPSAoZm46IEpTVmFsdWVIYW5kbGUsIC4uLmFyZ3M6IEpTVmFsdWVIYW5kbGVbXSk6IEpTVmFsdWVIYW5kbGUgPT5cbiAgICB2bS5jYWxsRnVuY3Rpb24oZm4sIHZtLnVuZGVmaW5lZCwgLi4uYXJncyk7XG5cbiAgLyoqXG4gICAqIEd1ZXN0IG93bi1wcm9wZXJ0eSBjaGVjayB0aHJvdWdoIHRoZSBoYW5kbGUncyBpbnRyb3NwZWN0aW9uIG1ldGhvZC5cbiAgICogTVVTVCBOT1QgYmUgcmVwbGFjZWQgd2l0aCBgT2JqZWN0Lmhhc093bmAsIHdoaWNoIHdvdWxkIGludGVycm9nYXRlIHRoZVxuICAgKiBob3N0IEpTVmFsdWVIYW5kbGUgd3JhcHBlciBvYmplY3QgKGFsd2F5cyBmYWxzZSkgaW5zdGVhZCBvZiB0aGUgZ3Vlc3RcbiAgICogdmFsdWUg4oCUIGJpb21lJ3Mgbm9Qcm90b3R5cGVCdWlsdGlucyBhdXRvLWZpeCBkb2VzIGV4YWN0bHkgdGhhdCwgd2hpY2hcbiAgICogaXMgd2h5IHRoaXMgaXMgY2VudHJhbGl6ZWQgaGVyZSB3aXRoIHRoZSBzdXBwcmVzc2lvbi5cbiAgICovXG4gIGNvbnN0IGd1ZXN0SGFzT3duID0gKGhhbmRsZTogSlNWYWx1ZUhhbmRsZSwga2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1Byb3RvdHlwZUJ1aWx0aW5zOiBKU1ZhbHVlSGFuZGxlLmhhc093blByb3BlcnR5IGlzIHF1aWNranMtd2FzaSdzIGd1ZXN0LXNpZGUgaW50cm9zcGVjdGlvbiBBUEksIG5vdCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICAgaGFuZGxlLmhhc093blByb3BlcnR5KGtleSk7XG5cbiAgLyoqXG4gICAqIE93biBkYXRhLXByb3BlcnR5IHJlYWQuIFJldHVybnMgdW5kZWZpbmVkIGZvciBhYnNlbnQgcHJvcGVydGllcyBBTkQgZm9yXG4gICAqIGFjY2Vzc29yIHByb3BlcnRpZXMg4oCUIGFuIGluaGVyaXRlZCBvciBvd24gZ2V0dGVyIGlzIG5ldmVyIGludm9rZWRcbiAgICogKG1hdGNoaW5nIHRoZSBoYXJkZW5lZCBub2RlOnZtIGNvZGVjJ3MgZGVzY3JpcHRvci1iYXNlZCByZWFkcykuXG4gICAqL1xuICBjb25zdCBvd24gPSAoXG4gICAgdGFyZ2V0OiBKU1ZhbHVlSGFuZGxlLFxuICAgIGtleTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZVxuICApOiBKU1ZhbHVlSGFuZGxlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gdGFyZ2V0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrZXkgYXMgc3RyaW5nKTtcbiAgICBpZiAoIWRlc2NyaXB0b3IpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgZGVzY3JpcHRvci5nZXQ/LmRpc3Bvc2UoKTtcbiAgICBkZXNjcmlwdG9yLnNldD8uZGlzcG9zZSgpO1xuICAgIHJldHVybiBkZXNjcmlwdG9yLnZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEYXRhLXByb3BlcnR5IHJlYWQgZm9sbG93aW5nIHRoZSBwcm90b3R5cGUgY2hhaW4gKHRoZSBzYWZlIGFuYWxvZ3VlIG9mXG4gICAqIGB2YWx1ZS5uYW1lYCBvbiBhbiBFcnJvciBpbnN0YW5jZSwgd2hlcmUgYG5hbWVgL2BtZXNzYWdlYCBsaXZlIG9uIHRoZVxuICAgKiBwcm90b3R5cGUpLiBBY2Nlc3NvcnMgYW55d2hlcmUgb24gdGhlIGNoYWluIGFyZSBza2lwcGVkLCBub3QgaW52b2tlZC5cbiAgICovXG4gIGNvbnN0IGNoYWluZWQgPSAoXG4gICAgdGFyZ2V0OiBKU1ZhbHVlSGFuZGxlLFxuICAgIGtleTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZVxuICApOiBKU1ZhbHVlSGFuZGxlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgY3VycmVudDogSlNWYWx1ZUhhbmRsZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgb3duZWQgPSBmYWxzZTsgLy8gd2hldGhlciBgY3VycmVudGAgaXMgb3VycyB0byBkaXNwb3NlXG4gICAgbGV0IGN1cnNvciA9IHRhcmdldDtcbiAgICBmb3IgKGxldCBkZXB0aCA9IDA7IGRlcHRoIDwgMzI7IGRlcHRoKyspIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gb3duKGN1cnNvciwga2V5KTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBpZiAob3duZWQpIChjdXJzb3IgYXMgSlNWYWx1ZUhhbmRsZSkuZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm90byA9IGN1cnNvci5nZXRQcm90b3R5cGVPZigpO1xuICAgICAgaWYgKG93bmVkKSAoY3Vyc29yIGFzIEpTVmFsdWVIYW5kbGUpLmRpc3Bvc2UoKTtcbiAgICAgIGlmIChwcm90by5pc051bGwgfHwgcHJvdG8uaXNVbmRlZmluZWQpIHtcbiAgICAgICAgcHJvdG8uZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY3Vyc29yID0gcHJvdG87XG4gICAgICBvd25lZCA9IHRydWU7XG4gICAgICBjdXJyZW50ID0gcHJvdG87XG4gICAgfVxuICAgIGlmIChvd25lZCAmJiBjdXJyZW50KSBjdXJyZW50LmRpc3Bvc2UoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKiBIb3N0IHN0cmluZyBmcm9tIGEgZGF0YSBwcm9wZXJ0eSAob3duLW9yLWNoYWluKSwgb3IgdW5kZWZpbmVkLiAqL1xuICBjb25zdCBjaGFpbmVkU3RyaW5nID0gKFxuICAgIHRhcmdldDogSlNWYWx1ZUhhbmRsZSxcbiAgICBrZXk6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGVcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBoYW5kbGUgPSBjaGFpbmVkKHRhcmdldCwga2V5KTtcbiAgICBpZiAoIWhhbmRsZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN1bHQgPSBoYW5kbGUuaXNTdHJpbmcgPyBoYW5kbGUudG9TdHJpbmcoKSA6IHVuZGVmaW5lZDtcbiAgICBoYW5kbGUuZGlzcG9zZSgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29uc3Qgb3duU3RyaW5nID0gKFxuICAgIHRhcmdldDogSlNWYWx1ZUhhbmRsZSxcbiAgICBrZXk6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGVcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBoYW5kbGUgPSBvd24odGFyZ2V0LCBrZXkpO1xuICAgIGlmICghaGFuZGxlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZS5pc1N0cmluZyA/IGhhbmRsZS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuICAgIGhhbmRsZS5kaXNwb3NlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogV2hldGhlciBgaGFuZGxlYCBoYXMgYHByb3RvdHlwZUhhbmRsZWAgYW55d2hlcmUgb24gaXRzIHByb3RvdHlwZSBjaGFpbiDigJRcbiAgICogdGhlIHRyYXAtZnJlZSBhbmFsb2d1ZSBvZiBgaW5zdGFuY2VvZmAgKHdoaWNoIHdvdWxkIGZpcmVcbiAgICogYFN5bWJvbC5oYXNJbnN0YW5jZWApLlxuICAgKi9cbiAgY29uc3QgaGFzUHJvdG90eXBlID0gKFxuICAgIGhhbmRsZTogSlNWYWx1ZUhhbmRsZSxcbiAgICBwcm90b3R5cGVIYW5kbGU6IEpTVmFsdWVIYW5kbGUgfCB1bmRlZmluZWRcbiAgKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFwcm90b3R5cGVIYW5kbGUpIHJldHVybiBmYWxzZTtcbiAgICBsZXQgY3Vyc29yID0gaGFuZGxlLmdldFByb3RvdHlwZU9mKCk7XG4gICAgZm9yIChsZXQgZGVwdGggPSAwOyBkZXB0aCA8IDMyOyBkZXB0aCsrKSB7XG4gICAgICBpZiAoY3Vyc29yLmlzTnVsbCB8fCBjdXJzb3IuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgY3Vyc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnNvci5pZGVudGl0eSA9PT0gcHJvdG90eXBlSGFuZGxlLmlkZW50aXR5KSB7XG4gICAgICAgIGN1cnNvci5kaXNwb3NlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dCA9IGN1cnNvci5nZXRQcm90b3R5cGVPZigpO1xuICAgICAgY3Vyc29yLmRpc3Bvc2UoKTtcbiAgICAgIGN1cnNvciA9IG5leHQ7XG4gICAgfVxuICAgIGN1cnNvci5kaXNwb3NlKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKiBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCB3cml0ZSwgaW1tdW5lIHRvIGluaGVyaXRlZCBzZXR0ZXJzLiAqL1xuICBjb25zdCBkZWZpbmUgPSAoXG4gICAgdGFyZ2V0OiBKU1ZhbHVlSGFuZGxlLFxuICAgIGtleTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSxcbiAgICB2YWx1ZTogSlNWYWx1ZUhhbmRsZVxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gdm0ubmV3T2JqZWN0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0UHJvcCgndmFsdWUnLCB2YWx1ZSk7XG4gICAgICBkZXNjcmlwdG9yLnNldFByb3AoJ3dyaXRhYmxlJywgdm0udHJ1ZSk7XG4gICAgICBkZXNjcmlwdG9yLnNldFByb3AoJ2VudW1lcmFibGUnLCB2bS50cnVlKTtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0UHJvcCgnY29uZmlndXJhYmxlJywgdm0udHJ1ZSk7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qga2V5SGFuZGxlID0gdm0ubmV3U3RyaW5nKGtleSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbChcbiAgICAgICAgICAgIGkuZGVmaW5lUHJvcGVydHksXG4gICAgICAgICAgICB2bS51bmRlZmluZWQsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBrZXlIYW5kbGUsXG4gICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgKS5kaXNwb3NlKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAga2V5SGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbChpLmRlZmluZVByb3BlcnR5LCB2bS51bmRlZmluZWQsIHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlc2NyaXB0b3IuZGlzcG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBuZXdHdWVzdFN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogSlNWYWx1ZUhhbmRsZSA9PiB2bS5uZXdTdHJpbmcodmFsdWUpO1xuXG4gIC8qKiBDb2xsZWN0IFNldCB2YWx1ZXMgLyBNYXAgZW50cmllcyB2aWEgY2FwdHVyZWQgZm9yRWFjaC4gKi9cbiAgY29uc3QgY29sbGVjdCA9IChcbiAgICBmb3JFYWNoOiBKU1ZhbHVlSGFuZGxlLFxuICAgIGNvbGxlY3Rpb246IEpTVmFsdWVIYW5kbGUsXG4gICAgYXJpdHk6IDEgfCAyXG4gICk6IHVua25vd25bXSA9PiB7XG4gICAgY29uc3QgY29sbGVjdGVkOiB1bmtub3duW10gPSBbXTtcbiAgICBjb25zdCB2aXNpdG9yID0gdm0ubmV3RXBoZW1lcmFsRnVuY3Rpb24oXG4gICAgICAodmFsdWU6IEpTVmFsdWVIYW5kbGUsIGtleTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgICAvLyBkdXAoKTogdGhlIHZpc2l0b3IncyBvd24gYXJnIGhhbmRsZXMgYXJlIGJvcnJvd2VkIChDLW93bmVkLFxuICAgICAgICAvLyBzY29wZS1leGVtcHQgYXMgb2YgcXVpY2tqcy13YXNpIDMuMy4xKTsgdGhlIGR1cHMgYXJlIG93bmVkXG4gICAgICAgIC8vIHJlZmVyZW5jZXMsIHNjb3BlLXRyYWNrZWQgYW5kIHN3ZXB0IGF0IHRoZSBwYXNzIGJvdW5kYXJ5LlxuICAgICAgICBjb2xsZWN0ZWQucHVzaChhcml0eSA9PT0gMSA/IHZhbHVlLmR1cCgpIDogW2tleS5kdXAoKSwgdmFsdWUuZHVwKCldKTtcbiAgICAgICAgcmV0dXJuIHZtLnVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjYWxsKGZvckVhY2gsIGNvbGxlY3Rpb24sIHZpc2l0b3IpLmRpc3Bvc2UoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdmlzaXRvci5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0ZWQ7XG4gIH07XG5cbiAgLyoqIENvcHkgYSB0eXBlZCBhcnJheSAvIERhdGFWaWV3J3Mgdmlld2VkIGJ5dGVzIHRvIHRoZSBob3N0LiAqL1xuICBjb25zdCB2aWV3Qnl0ZXMgPSAoaGFuZGxlOiBKU1ZhbHVlSGFuZGxlKTogVWludDhBcnJheSA9PiB7XG4gICAgY29uc3QgaXNEYXRhVmlldyA9IGhhbmRsZS5pc0RhdGFWaWV3O1xuICAgIGNvbnN0IGJ1ZmZlciA9IGNhbGwoaXNEYXRhVmlldyA/IGkuZGF0YVZpZXdCdWZmZXIgOiBpLnZpZXdCdWZmZXIsIGhhbmRsZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ5dGVPZmZzZXQgPSBjYWxsKFxuICAgICAgICBpc0RhdGFWaWV3ID8gaS5kYXRhVmlld0J5dGVPZmZzZXQgOiBpLnZpZXdCeXRlT2Zmc2V0LFxuICAgICAgICBoYW5kbGVcbiAgICAgICkuY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKTtcbiAgICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBjYWxsKFxuICAgICAgICBpc0RhdGFWaWV3ID8gaS5kYXRhVmlld0J5dGVMZW5ndGggOiBpLnZpZXdCeXRlTGVuZ3RoLFxuICAgICAgICBoYW5kbGVcbiAgICAgICkuY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKTtcbiAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLnRvQXJyYXlCdWZmZXIoKSk7XG4gICAgICByZXR1cm4gYnl0ZXMuc3ViYXJyYXkoYnl0ZU9mZnNldCwgYnl0ZU9mZnNldCArIGJ5dGVMZW5ndGgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBidWZmZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB0YWdPZkhhbmRsZSA9IChoYW5kbGU6IEpTVmFsdWVIYW5kbGUpOiBzdHJpbmcgPT4ge1xuICAgIGlmIChoYW5kbGUuaXNQcm94eSkgcmV0dXJuICdPYmplY3QnO1xuICAgIHJldHVybiB0YWdCeUNsYXNzSWQuZ2V0KGhhbmRsZS5jbGFzc0lkKSA/PyAnT2JqZWN0JztcbiAgfTtcblxuICAvLyAtLS0gaWRlbnRpdHkgLS0tXG5cbiAgY29uc3QgaWRlbnRpdGllcyA9IG5ldyBNYXA8bnVtYmVyLCBvYmplY3Q+KCk7XG4gIGNvbnN0IGlkZW50aXR5T2YgPSAocG9pbnRlcjogbnVtYmVyKTogb2JqZWN0ID0+IHtcbiAgICBsZXQgaWRlbnRpdHkgPSBpZGVudGl0aWVzLmdldChwb2ludGVyKTtcbiAgICBpZiAoIWlkZW50aXR5KSB7XG4gICAgICBpZGVudGl0eSA9IHsgcG9pbnRlciB9O1xuICAgICAgaWRlbnRpdGllcy5zZXQocG9pbnRlciwgaWRlbnRpdHkpO1xuICAgIH1cbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH07XG5cbiAgY29uc3QgcHJpbWl0aXZlT2YgPSAoaGFuZGxlOiBKU1ZhbHVlSGFuZGxlKTogdW5rbm93biA9PiB7XG4gICAgaWYgKGhhbmRsZS5pc1VuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoaGFuZGxlLmlzTnVsbCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGhhbmRsZS5pc0Jvb2wpIHJldHVybiBoYW5kbGUudG9Cb29sZWFuKCk7XG4gICAgaWYgKGhhbmRsZS5pc051bWJlcikgcmV0dXJuIGhhbmRsZS50b051bWJlcigpO1xuICAgIGlmIChoYW5kbGUuaXNCaWdJbnQpIHJldHVybiBndWVzdEJpZ0ludChoYW5kbGUpO1xuICAgIHJldHVybiBoYW5kbGUudG9TdHJpbmcoKTtcbiAgfTtcblxuICAvKipcbiAgICogRXh0cmFjdCBhIGd1ZXN0IGJpZ2ludCB2aWEgdGhlIGNhcHR1cmVkIGBCaWdJbnQucHJvdG90eXBlLnRvU3RyaW5nYCDigJRcbiAgICogYGhhbmRsZS50b0JpZ0ludCgpYCB0cnVuY2F0ZXMgdG8gNjQgYml0cy5cbiAgICovXG4gIGNvbnN0IGd1ZXN0QmlnSW50ID0gKGhhbmRsZTogSlNWYWx1ZUhhbmRsZSk6IGJpZ2ludCA9PlxuICAgIEJpZ0ludChjYWxsKGkuYmlnSW50VG9TdHJpbmcsIGhhbmRsZSkuY29uc3VtZSgoaCkgPT4gaC50b1N0cmluZygpKSk7XG5cbiAgLy8gLS0tIGh5YnJpZCBzdHJpbmdpZnkgb3BlcmF0aW9ucyAtLS1cbiAgLy8gSGFuZGxlcyB0YWtlIHRoZSBpbnRyb3NwZWN0aW9uIHBhdGg7IGhvc3QgdmFsdWVzIChyZWR1Y2VyIG91dHB1dHMpXG4gIC8vIGZhbGwgYmFjayB0byBkZXZhbHVlJ3MgZGVmYXVsdHMuXG5cbiAgY29uc3QgZCA9IGRlZmF1bHRTdHJpbmdpZnlPcGVyYXRpb25zO1xuXG4gIGNvbnN0IHN0cmluZ2lmeU9wZXJhdGlvbnM6IFN0cmluZ2lmeU9wZXJhdGlvbnMgPSB7XG4gICAgaWRlbnRpZnk6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkpIHJldHVybiBkLmlkZW50aWZ5KHZhbHVlKTtcbiAgICAgIGNvbnN0IHBvaW50ZXIgPSB2YWx1ZS5pZGVudGl0eTtcbiAgICAgIGlmIChwb2ludGVyID09PSAwIHx8IHZhbHVlLmlzU3RyaW5nKSByZXR1cm4gcHJpbWl0aXZlT2YodmFsdWUpO1xuICAgICAgcmV0dXJuIGlkZW50aXR5T2YocG9pbnRlcik7XG4gICAgfSxcbiAgICB0eXBlT2Y6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkpIHJldHVybiBkLnR5cGVPZih2YWx1ZSk7XG4gICAgICBpZiAodmFsdWUuaXNOdWxsKSByZXR1cm4gJ251bGwnO1xuICAgICAgcmV0dXJuIHZhbHVlLnR5cGVvZiBhcyBSZXR1cm5UeXBlPFN0cmluZ2lmeU9wZXJhdGlvbnNbJ3R5cGVPZiddPjtcbiAgICB9LFxuICAgIHRvUHJpbWl0aXZlOiAodmFsdWUpID0+IChpc0hhbmRsZSh2YWx1ZSkgPyBwcmltaXRpdmVPZih2YWx1ZSkgOiB2YWx1ZSksXG4gICAgdGFnT2Y6ICh2YWx1ZSkgPT4gKGlzSGFuZGxlKHZhbHVlKSA/IHRhZ09mSGFuZGxlKHZhbHVlKSA6IGQudGFnT2YodmFsdWUpKSxcbiAgICBpc1RoZW5hYmxlOiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgPyB2YWx1ZS5pc1Byb21pc2UgOiBkLmlzVGhlbmFibGUodmFsdWUpLFxuICAgIHRvUHJvbWlzZTogYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQudG9Qcm9taXNlKHZhbHVlKTtcbiAgICAgIGNvbnN0IHNldHRsZWQgPSBhd2FpdCB2bS5yZXNvbHZlUHJvbWlzZSh2YWx1ZSk7XG4gICAgICBpZiAoJ2Vycm9yJyBpbiBzZXR0bGVkKSB0aHJvdyBzZXR0bGVkLmVycm9yO1xuICAgICAgcmV0dXJuIHNldHRsZWQudmFsdWU7XG4gICAgfSxcbiAgICB1bmJveDogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQudW5ib3godmFsdWUpO1xuICAgICAgc3dpdGNoICh0YWdPZkhhbmRsZSh2YWx1ZSkpIHtcbiAgICAgICAgY2FzZSAnTnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gY2FsbChpLm51bWJlclZhbHVlT2YsIHZhbHVlKTtcbiAgICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgICByZXR1cm4gY2FsbChpLnN0cmluZ1ZhbHVlT2YsIHZhbHVlKTtcbiAgICAgICAgY2FzZSAnQm9vbGVhbic6XG4gICAgICAgICAgcmV0dXJuIGNhbGwoaS5ib29sZWFuVmFsdWVPZiwgdmFsdWUpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBjYWxsKGkuYmlnSW50VmFsdWVPZiwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9JU09TdHJpbmc6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkpIHJldHVybiBkLnRvSVNPU3RyaW5nKHZhbHVlKTtcbiAgICAgIGlmIChcbiAgICAgICAgTnVtYmVyLmlzTmFOKGNhbGwoaS5kYXRlR2V0VGltZSwgdmFsdWUpLmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhbGwoaS5kYXRlVG9JU09TdHJpbmcsIHZhbHVlKS5jb25zdW1lKChoKSA9PiBoLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgdG9TdHJpbmdWYWx1ZTogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQudG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgICAvLyBVUkwgLyBVUkxTZWFyY2hQYXJhbXMgYXJlIG1hdGNoZWQgYnkgd29ya2Zsb3cgcmVkdWNlcnMgYmVmb3JlXG4gICAgICAvLyBkZXZhbHVlJ3MgbmF0aXZlIGhhbmRsaW5nLCBhbmQgVGVtcG9yYWwgZG9lc24ndCBleGlzdCBpbiB0aGUgVk0sIHNvXG4gICAgICAvLyB0aGlzIGlzIHVucmVhY2hhYmxlIGluIHByYWN0aWNlLiBSZWZ1c2UgcmF0aGVyIHRoYW4gaW52b2tlIGd1ZXN0XG4gICAgICAvLyBgdG9TdHJpbmdgLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbm8gY2FwdHVyZWQgc3RyaW5nIGNvbnZlcnNpb24gZm9yICR7dGFnT2ZIYW5kbGUodmFsdWUpfSBpbiB0aGUgVk1gXG4gICAgICApO1xuICAgIH0sXG4gICAgcmVnRXhwSW5mbzogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQucmVnRXhwSW5mbyh2YWx1ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IGNhbGwoaS5yZWdFeHBTb3VyY2UsIHZhbHVlKS5jb25zdW1lKChoKSA9PiBoLnRvU3RyaW5nKCkpLFxuICAgICAgICBmbGFnczogY2FsbChpLnJlZ0V4cEZsYWdzLCB2YWx1ZSkuY29uc3VtZSgoaCkgPT4gaC50b1N0cmluZygpKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICB2YWx1ZXNPZjogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpID8gY29sbGVjdChpLnNldEZvckVhY2gsIHZhbHVlLCAxKSA6IGQudmFsdWVzT2YodmFsdWUpLFxuICAgIGVudHJpZXNPZjogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpXG4gICAgICAgID8gKGNvbGxlY3QoaS5tYXBGb3JFYWNoLCB2YWx1ZSwgMikgYXMgSXRlcmFibGU8W3Vua25vd24sIHVua25vd25dPilcbiAgICAgICAgOiBkLmVudHJpZXNPZih2YWx1ZSksXG4gICAgdmlld0luZm86ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkpIHJldHVybiBkLnZpZXdJbmZvKHZhbHVlKTtcbiAgICAgIGNvbnN0IGlzRGF0YVZpZXcgPSB2YWx1ZS5pc0RhdGFWaWV3O1xuICAgICAgY29uc3QgYnVmZmVyID0gY2FsbChpc0RhdGFWaWV3ID8gaS5kYXRhVmlld0J1ZmZlciA6IGkudmlld0J1ZmZlciwgdmFsdWUpO1xuICAgICAgY29uc3QgaW5mbyA9IHtcbiAgICAgICAgYnVmZmVyLFxuICAgICAgICBieXRlT2Zmc2V0OiBjYWxsKFxuICAgICAgICAgIGlzRGF0YVZpZXcgPyBpLmRhdGFWaWV3Qnl0ZU9mZnNldCA6IGkudmlld0J5dGVPZmZzZXQsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKS5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpLFxuICAgICAgICBieXRlTGVuZ3RoOiBjYWxsKFxuICAgICAgICAgIGlzRGF0YVZpZXcgPyBpLmRhdGFWaWV3Qnl0ZUxlbmd0aCA6IGkudmlld0J5dGVMZW5ndGgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKS5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpLFxuICAgICAgICBidWZmZXJCeXRlTGVuZ3RoOiBjYWxsKGkuYXJyYXlCdWZmZXJCeXRlTGVuZ3RoLCBidWZmZXIpLmNvbnN1bWUoKGgpID0+XG4gICAgICAgICAgaC50b051bWJlcigpXG4gICAgICAgICksXG4gICAgICAgIGxlbmd0aDogMCxcbiAgICAgIH07XG4gICAgICBpZiAoIWlzRGF0YVZpZXcpIHtcbiAgICAgICAgaW5mby5sZW5ndGggPSBjYWxsKGkudmlld0xlbmd0aCwgdmFsdWUpLmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9LFxuICAgIHRvQXJyYXlCdWZmZXI6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSA/IHZhbHVlLnRvQXJyYXlCdWZmZXIoKSA6IGQudG9BcnJheUJ1ZmZlcih2YWx1ZSksXG4gICAgbGVuZ3RoT2Y6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkpIHJldHVybiBkLmxlbmd0aE9mKHZhbHVlKTtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IG93bih2YWx1ZSwgJ2xlbmd0aCcpO1xuICAgICAgcmV0dXJuIGxlbmd0aD8uY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKSA/PyAwO1xuICAgIH0sXG4gICAgaGFzT3duOiAodmFsdWUsIGtleSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSA/IGd1ZXN0SGFzT3duKHZhbHVlLCBTdHJpbmcoa2V5KSkgOiBkLmhhc093bih2YWx1ZSwga2V5KSxcbiAgICBpbmRpY2VzT2Y6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSA/IGZpbHRlckFycmF5SW5kaWNlcyh2YWx1ZS5rZXlzKCkpIDogZC5pbmRpY2VzT2YodmFsdWUpLFxuICAgIHNoYXBlT2Y6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkpIHJldHVybiBkLnNoYXBlT2YodmFsdWUpO1xuICAgICAgaWYgKHZhbHVlLmlzUHJveHkpIHJldHVybiB7IGtpbmQ6ICdub3QtcGxhaW4nIGFzIGNvbnN0IH07XG4gICAgICBjb25zdCBwcm90b3R5cGUgPSB2YWx1ZS5nZXRQcm90b3R5cGVPZigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXNQbGFpbiA9XG4gICAgICAgICAgcHJvdG90eXBlLmlzTnVsbCB8fCBwcm90b3R5cGUuaWRlbnRpdHkgPT09IGkub2JqZWN0UHJvdG90eXBlLmlkZW50aXR5O1xuICAgICAgICBpZiAoIWlzUGxhaW4pIHJldHVybiB7IGtpbmQ6ICdub3QtcGxhaW4nIGFzIGNvbnN0IH07XG4gICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHZhbHVlLmdldE93blByb3BlcnR5S2V5cygpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBlbnVtZXJhYmxlID1cbiAgICAgICAgICAgICAgdmFsdWUuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGtleSk/LmVudW1lcmFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgICBrZXkuZGlzcG9zZSgpO1xuICAgICAgICAgICAgaWYgKGVudW1lcmFibGUpIHJldHVybiB7IGtpbmQ6ICdzeW1ib2wta2V5cycgYXMgY29uc3QgfTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUucHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBraW5kOiBwcm90b3R5cGUuaXNOdWxsID8gKCdudWxsLXByb3RvJyBhcyBjb25zdCkgOiAoJ3BsYWluJyBhcyBjb25zdCksXG4gICAgICAgICAga2V5cyxcbiAgICAgICAgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHByb3RvdHlwZS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXQ6ICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQuZ2V0KHZhbHVlLCBrZXkpO1xuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHZhbHVlLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcoa2V5KSk7XG4gICAgICBpZiAoIWRlc2NyaXB0b3IpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZGVzY3JpcHRvci5nZXQpIHtcbiAgICAgICAgLy8gUGFyaXR5IHdpdGggdGhlIGhhcmRlbmVkIG5vZGU6dm0gY29kZWM6IGdldHRlcnMgYXJlIGludm9rZWQgKGZ1bGxcbiAgICAgICAgLy8gY29tcGF0aWJpbGl0eSB3aXRoIHZhbHVlcyB3aG9zZSBzaGFwZSBkZXBlbmRzIG9uIGFjY2Vzc29ycyksIHRoZVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGZyb20gYFtbR2V0XV1gIGJlaW5nIHRoYXQgdGhpcyBpcyBhbiBleHBsaWNpdCwgc2luZ2xlXG4gICAgICAgIC8vIGludm9jYXRpb24gb2YgdGhlIGFjY2Vzc29yIHRoZSBkZXNjcmlwdG9yIG5hbWVzLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBjYWxsKGRlc2NyaXB0b3IuZ2V0LCB2YWx1ZSk7XG4gICAgICAgIGRlc2NyaXB0b3IuZ2V0LmRpc3Bvc2UoKTtcbiAgICAgICAgZGVzY3JpcHRvci5zZXQ/LmRpc3Bvc2UoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGRlc2NyaXB0b3Iuc2V0Py5kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9LFxuICB9O1xuXG4gIC8vIC0tLSB3b3JrZmxvdyByZWR1Y2VycyAoaGFuZGxlIHNwYWNlKSAtLS1cblxuICAvKiogSG9zdCBzaGFwZSBmb3IgZXJyb3ItZmFtaWx5IHJlZHVjdGlvbjsgbGVhdmVzIG1heSBiZSBoYW5kbGVzLiAqL1xuICBjb25zdCByZWR1Y2VFcnJvclNoYXBlID0gKFxuICAgIHZhbHVlOiBKU1ZhbHVlSGFuZGxlXG4gICk6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH0gPT4ge1xuICAgIGNvbnN0IHNoYXBlOiB7IG1lc3NhZ2U6IHN0cmluZzsgc3RhY2s/OiBzdHJpbmc7IGNhdXNlPzogdW5rbm93biB9ID0ge1xuICAgICAgbWVzc2FnZTogY2hhaW5lZFN0cmluZyh2YWx1ZSwgJ21lc3NhZ2UnKSA/PyAnJyxcbiAgICB9O1xuICAgIGNvbnN0IHN0YWNrID0gY2hhaW5lZFN0cmluZyh2YWx1ZSwgJ3N0YWNrJyk7XG4gICAgaWYgKHN0YWNrICE9PSB1bmRlZmluZWQpIHNoYXBlLnN0YWNrID0gc3RhY2s7XG4gICAgaWYgKGd1ZXN0SGFzT3duKHZhbHVlLCAnY2F1c2UnKSkge1xuICAgICAgc2hhcGUuY2F1c2UgPSBvd24odmFsdWUsICdjYXVzZScpID8/IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXBlO1xuICB9O1xuXG4gIGNvbnN0IG5hbWVkRXJyb3JTdWJjbGFzc1JlZHVjZXIgPVxuICAgIChzdWJjbGFzc05hbWU6IHN0cmluZykgPT4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCAhdmFsdWUuaXNFcnJvcikgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGNoYWluZWRTdHJpbmcodmFsdWUsICduYW1lJykgIT09IHN1YmNsYXNzTmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHJlZHVjZUVycm9yU2hhcGUodmFsdWUpO1xuICAgIH07XG5cbiAgLyoqIE93biBzeW1ib2wta2V5ZWQgZGF0YSByZWFkIHJldHVybmluZyBhIGhvc3Qgc3RyaW5nLCBvciB1bmRlZmluZWQuICovXG4gIGNvbnN0IG93blN5bWJvbFN0cmluZyA9IChcbiAgICB2YWx1ZTogSlNWYWx1ZUhhbmRsZSxcbiAgICBuYW1lOiBTeW1ib2xOYW1lXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgaGFuZGxlID0gb3duKHZhbHVlLCBzeW0obmFtZSkpO1xuICAgIGlmICghaGFuZGxlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZS5pc1N0cmluZyA/IGhhbmRsZS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuICAgIGhhbmRsZS5kaXNwb3NlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb25zdCByZWR1Y2VBYm9ydCA9ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSk6IHVua25vd24gPT4ge1xuICAgIC8vIHN0cmVhbU5hbWUvaG9va1Rva2VuIGxpdmUgb24gdGhlIHNpZ25hbCAob3IgdGhlIGNvbnRyb2xsZXIncyBzaWduYWwpLlxuICAgIGNvbnN0IHNpZ25hbCA9IG93bih2YWx1ZSwgJ3NpZ25hbCcpO1xuICAgIGNvbnN0IGhvbGRlciA9IHNpZ25hbCA/PyB2YWx1ZTtcbiAgICBjb25zdCBzdHJlYW1OYW1lID1cbiAgICAgIG93blN5bWJvbFN0cmluZyh2YWx1ZSwgJ1dPUktGTE9XX0FCT1JUX1NUUkVBTV9OQU1FJykgPz9cbiAgICAgIG93blN5bWJvbFN0cmluZyhob2xkZXIsICdXT1JLRkxPV19BQk9SVF9TVFJFQU1fTkFNRScpO1xuICAgIGNvbnN0IGhvb2tUb2tlbiA9XG4gICAgICBvd25TeW1ib2xTdHJpbmcodmFsdWUsICdXT1JLRkxPV19BQk9SVF9IT09LX1RPS0VOJykgPz9cbiAgICAgIG93blN5bWJvbFN0cmluZyhob2xkZXIsICdXT1JLRkxPV19BQk9SVF9IT09LX1RPS0VOJyk7XG4gICAgaWYgKCFzdHJlYW1OYW1lKSB7XG4gICAgICBzaWduYWw/LmRpc3Bvc2UoKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWJvcnRDb250cm9sbGVyL0Fib3J0U2lnbmFsIHN0cmVhbSBuYW1lIGlzIG5vdCBzZXQnKTtcbiAgICB9XG4gICAgY29uc3QgYWJvcnRlZCA9XG4gICAgICBvd24oaG9sZGVyLCAnYWJvcnRlZCcpPy5jb25zdW1lKChoKSA9PiBoLnRvQm9vbGVhbigpKSA/PyBmYWxzZTtcbiAgICBjb25zdCByZWFzb24gPSBhYm9ydGVkID8gb3duKGhvbGRlciwgJ3JlYXNvbicpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaWduYWwgJiYgaG9sZGVyICE9PSB2YWx1ZSkgc2lnbmFsLmRpc3Bvc2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RyZWFtTmFtZSxcbiAgICAgIGhvb2tUb2tlbixcbiAgICAgIGFib3J0ZWQsXG4gICAgICByZWFzb246IGFib3J0ZWQgPyByZWFzb24gOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCByZWR1Y2VyczogUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT4gPSB7XG4gICAgLy8gT3JkZXIgaXMgd2lyZS1zaWduaWZpY2FudCAoZmlyc3QgbWF0Y2ggd2lucykgYW5kIG1pcnJvcnNcbiAgICAvLyBjb2RlYy1kZXZhbHVlLXZtLnRzIGdldFJlZHVjZXJzRm9yTW9kZSgnd29ya2Zsb3cnKSBleGFjdGx5LlxuICAgIEFib3J0Q29udHJvbGxlcjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCB2YWx1ZS50eXBlb2YgIT09ICdvYmplY3QnIHx8IHZhbHVlLmlzTnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWd1ZXN0SGFzT3duKHZhbHVlLCAnc2lnbmFsJykpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGhhc1N0YW1wID1cbiAgICAgICAgb3duU3ltYm9sU3RyaW5nKHZhbHVlLCAnV09SS0ZMT1dfQUJPUlRfU1RSRUFNX05BTUUnKSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIG93bih2YWx1ZSwgJ3NpZ25hbCcpPy5jb25zdW1lKFxuICAgICAgICAgIChzaWduYWwpID0+XG4gICAgICAgICAgICBvd25TeW1ib2xTdHJpbmcoc2lnbmFsLCAnV09SS0ZMT1dfQUJPUlRfU1RSRUFNX05BTUUnKSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICBpZiAoIWhhc1N0YW1wKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gcmVkdWNlQWJvcnQodmFsdWUpO1xuICAgIH0sXG4gICAgQWJvcnRTaWduYWw6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdmFsdWUudHlwZW9mICE9PSAnb2JqZWN0JyB8fCB2YWx1ZS5pc051bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG93blN5bWJvbFN0cmluZyh2YWx1ZSwgJ1dPUktGTE9XX0FCT1JUX1NUUkVBTV9OQU1FJykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVkdWNlQWJvcnQodmFsdWUpO1xuICAgIH0sXG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdmFsdWUudHlwZW9mICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBjbGFzc0lkID0gb3duU3RyaW5nKHZhbHVlLCAnY2xhc3NJZCcpO1xuICAgICAgaWYgKGNsYXNzSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHsgY2xhc3NJZCB9O1xuICAgIH0sXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdmFsdWUudHlwZW9mICE9PSAnb2JqZWN0JyB8fCB2YWx1ZS5pc051bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xzID0gY2hhaW5lZCh2YWx1ZSwgJ2NvbnN0cnVjdG9yJyk7XG4gICAgICBpZiAoIWNscyB8fCBjbHMudHlwZW9mICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNscz8uZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVNZXRob2QgPSBjaGFpbmVkKGNscywgc3ltKCd3b3JrZmxvdy1zZXJpYWxpemUnKSk7XG4gICAgICAgIGlmICghc2VyaWFsaXplTWV0aG9kIHx8IHNlcmlhbGl6ZU1ldGhvZC50eXBlb2YgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzZXJpYWxpemVNZXRob2Q/LmRpc3Bvc2UoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjbGFzc0lkID0gY2hhaW5lZFN0cmluZyhjbHMsICdjbGFzc0lkJyk7XG4gICAgICAgICAgaWYgKGNsYXNzSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGNoYWluZWRTdHJpbmcoY2xzLCAnbmFtZScpID8/ICc8YW5vbnltb3VzPic7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBDbGFzcyBcIiR7bmFtZX1cIiB3aXRoIFN5bWJvbCh3b3JrZmxvdy1zZXJpYWxpemUpIG11c3QgaGF2ZSBhIHN0YXRpYyBcImNsYXNzSWRcIiBwcm9wZXJ0eS5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBHdWVzdCBjb2RlIGJ5IGNvbnRyYWN0OiB0aGUgY2xhc3MncyBvd24gc2VyaWFsaXplciBydW5zLCBleGFjdGx5XG4gICAgICAgICAgLy8gYXMgaXQgZGlkIHVuZGVyIHRoZSBpbi1WTSBjb2RlYy5cbiAgICAgICAgICBjb25zdCBkYXRhID0gY2FsbChzZXJpYWxpemVNZXRob2QsIGNscywgdmFsdWUpO1xuICAgICAgICAgIHJldHVybiB7IGNsYXNzSWQsIGRhdGEgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXJpYWxpemVNZXRob2QuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbHMuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgU3RlcEZ1bmN0aW9uOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8IHZhbHVlLnR5cGVvZiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3Qgc3RlcElkID0gb3duU3RyaW5nKHZhbHVlLCAnc3RlcElkJyk7XG4gICAgICBpZiAoc3RlcElkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHBheWxvYWQ6IHtcbiAgICAgICAgc3RlcElkOiBzdHJpbmc7XG4gICAgICAgIGNsb3N1cmVWYXJzPzogdW5rbm93bjtcbiAgICAgICAgYm91bmRUaGlzPzogdW5rbm93bjtcbiAgICAgICAgYm91bmRBcmdzPzogdW5rbm93bjtcbiAgICAgIH0gPSB7IHN0ZXBJZCB9O1xuICAgICAgY29uc3QgY2xvc3VyZVZhcnNGbiA9IG93bih2YWx1ZSwgJ19fY2xvc3VyZVZhcnNGbicpO1xuICAgICAgaWYgKGNsb3N1cmVWYXJzRm4pIHtcbiAgICAgICAgaWYgKGNsb3N1cmVWYXJzRm4udHlwZW9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gR3Vlc3QgY29kZSBieSBjb250cmFjdCAoc2FtZSBhcyB0aGUgaW4tVk0gY29kZWMpLlxuICAgICAgICAgIGNvbnN0IGNsb3N1cmVWYXJzID0gY2FsbChjbG9zdXJlVmFyc0ZuLCB2bS51bmRlZmluZWQpO1xuICAgICAgICAgIGlmICghY2xvc3VyZVZhcnMuaXNVbmRlZmluZWQpIHBheWxvYWQuY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFycztcbiAgICAgICAgICBlbHNlIGNsb3N1cmVWYXJzLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjbG9zdXJlVmFyc0ZuLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChndWVzdEhhc093bih2YWx1ZSwgJ19fYm91bmRUaGlzJykpIHtcbiAgICAgICAgcGF5bG9hZC5ib3VuZFRoaXMgPSBvd24odmFsdWUsICdfX2JvdW5kVGhpcycpO1xuICAgICAgfVxuICAgICAgY29uc3QgYm91bmRBcmdzID0gb3duKHZhbHVlLCAnX19ib3VuZEFyZ3MnKTtcbiAgICAgIGlmIChib3VuZEFyZ3MpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID1cbiAgICAgICAgICBvd24oYm91bmRBcmdzLCAnbGVuZ3RoJyk/LmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSkgPz8gMDtcbiAgICAgICAgaWYgKGJvdW5kQXJncy5pc0FycmF5ICYmIGxlbmd0aCA+IDApIHBheWxvYWQuYm91bmRBcmdzID0gYm91bmRBcmdzO1xuICAgICAgICBlbHNlIGJvdW5kQXJncy5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9LFxuICAgIEFycmF5QnVmZmVyOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8IHRhZ09mSGFuZGxlKHZhbHVlKSAhPT0gJ0FycmF5QnVmZmVyJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnl0ZXNUb0Jhc2U2NChuZXcgVWludDhBcnJheSh2YWx1ZS50b0FycmF5QnVmZmVyKCkpKTtcbiAgICB9LFxuICAgIEJpZ0ludDogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCAhdmFsdWUuaXNCaWdJbnQpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBndWVzdEJpZ0ludCh2YWx1ZSkudG9TdHJpbmcoKTtcbiAgICB9LFxuICAgIEJpZ0ludDY0QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSAmJiB0YWdPZkhhbmRsZSh2YWx1ZSkgPT09ICdCaWdJbnQ2NEFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBCaWdVaW50NjRBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ0JpZ1VpbnQ2NEFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBEYXRlOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8IHRhZ09mSGFuZGxlKHZhbHVlKSAhPT0gJ0RhdGUnKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCB0aW1lID0gY2FsbChpLmRhdGVHZXRUaW1lLCB2YWx1ZSkuY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odGltZSkpIHJldHVybiAnLic7XG4gICAgICByZXR1cm4gY2FsbChpLmRhdGVUb0lTT1N0cmluZywgdmFsdWUpLmNvbnN1bWUoKGgpID0+IGgudG9TdHJpbmcoKSk7XG4gICAgfSxcbiAgICBET01FeGNlcHRpb246ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKFxuICAgICAgICAhaS5kb21FeGNlcHRpb25Qcm90b3R5cGUgfHxcbiAgICAgICAgIWhhc1Byb3RvdHlwZSh2YWx1ZSwgaS5kb21FeGNlcHRpb25Qcm90b3R5cGUpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hhcGUgPSByZWR1Y2VFcnJvclNoYXBlKHZhbHVlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IHNoYXBlLm1lc3NhZ2UsXG4gICAgICAgIG5hbWU6IGNoYWluZWRTdHJpbmcodmFsdWUsICduYW1lJyksXG4gICAgICAgIHN0YWNrOiBzaGFwZS5zdGFjayxcbiAgICAgICAgLi4uKE9iamVjdC5oYXNPd24oc2hhcGUsICdjYXVzZScpID8geyBjYXVzZTogc2hhcGUuY2F1c2UgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBBZ2dyZWdhdGVFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCAhdmFsdWUuaXNFcnJvcikgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGNoYWluZWRTdHJpbmcodmFsdWUsICduYW1lJykgIT09ICdBZ2dyZWdhdGVFcnJvcicpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHNoYXBlID0gcmVkdWNlRXJyb3JTaGFwZSh2YWx1ZSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXNzYWdlOiBzaGFwZS5tZXNzYWdlLFxuICAgICAgICBzdGFjazogc2hhcGUuc3RhY2ssXG4gICAgICAgIGVycm9yczogb3duKHZhbHVlLCAnZXJyb3JzJyksXG4gICAgICAgIC4uLihPYmplY3QuaGFzT3duKHNoYXBlLCAnY2F1c2UnKSA/IHsgY2F1c2U6IHNoYXBlLmNhdXNlIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0sXG4gICAgRXZhbEVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZWR1Y2VyKCdFdmFsRXJyb3InKSxcbiAgICBGYXRhbEVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZWR1Y2VyKCdGYXRhbEVycm9yJyksXG4gICAgSG9va0NvbmZsaWN0RXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgIXZhbHVlLmlzRXJyb3IpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChjaGFpbmVkU3RyaW5nKHZhbHVlLCAnbmFtZScpICE9PSAnSG9va0NvbmZsaWN0RXJyb3InKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBzaGFwZSA9IHJlZHVjZUVycm9yU2hhcGUodmFsdWUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgcmVkdWNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIG1lc3NhZ2U6IHNoYXBlLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBzaGFwZS5zdGFjayxcbiAgICAgICAgdG9rZW46IG93bih2YWx1ZSwgJ3Rva2VuJyksXG4gICAgICB9O1xuICAgICAgY29uc3QgY29uZmxpY3RpbmdSdW5JZCA9IG93bih2YWx1ZSwgJ2NvbmZsaWN0aW5nUnVuSWQnKTtcbiAgICAgIGlmIChjb25mbGljdGluZ1J1bklkICYmICFjb25mbGljdGluZ1J1bklkLmlzVW5kZWZpbmVkKSB7XG4gICAgICAgIHJlZHVjZWQuY29uZmxpY3RpbmdSdW5JZCA9IGNvbmZsaWN0aW5nUnVuSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25mbGljdGluZ1J1bklkPy5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihzaGFwZSwgJ2NhdXNlJykpIHJlZHVjZWQuY2F1c2UgPSBzaGFwZS5jYXVzZTtcbiAgICAgIHJldHVybiByZWR1Y2VkO1xuICAgIH0sXG4gICAgUmFuZ2VFcnJvcjogbmFtZWRFcnJvclN1YmNsYXNzUmVkdWNlcignUmFuZ2VFcnJvcicpLFxuICAgIFJlZmVyZW5jZUVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZWR1Y2VyKCdSZWZlcmVuY2VFcnJvcicpLFxuICAgIFJldHJ5YWJsZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8ICF2YWx1ZS5pc0Vycm9yKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoY2hhaW5lZFN0cmluZyh2YWx1ZSwgJ25hbWUnKSAhPT0gJ1JldHJ5YWJsZUVycm9yJykgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3Qgc2hhcGUgPSByZWR1Y2VFcnJvclNoYXBlKHZhbHVlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIC8vIHJldHJ5QWZ0ZXIgaXMgYSBndWVzdCBEYXRlIChvciBzdHJpbmcvbnVtYmVyKTsgbm9ybWFsaXplIHRvIGFuIGVwb2NoXG4gICAgICAvLyB0aW1lc3RhbXAgZXhhY3RseSBsaWtlIHRoZSBpbi1WTSByZWR1Y2VyLiBUaGUgYWJzZW50L2ludmFsaWRcbiAgICAgIC8vIGZhbGxiYWNrIHJlYWRzIHRoZSBHVUVTVCBjbG9jayAodGhlIGRldGVybWluaXN0aWMgcmVwbGF5IGNsb2NrIGF0XG4gICAgICAvLyB0aGUgV0FTSSBsYXllciksIG5vdCB0aGUgaG9zdCB3YWxsIGNsb2NrOiB0aGUgaW4tVk0gcmVkdWNlcidzXG4gICAgICAvLyBgRGF0ZS5ub3coKWAgd2FzIHJlcGxheS1zdGFibGUgYnkgY29uc3RydWN0aW9uLCBhbmQgYSBob3N0LXNpZGVcbiAgICAgIC8vIGBEYXRlLm5vdygpYCBoZXJlIHdvdWxkIHdyaXRlIGRpZmZlcmVudCBieXRlcyBvbiBldmVyeSByZXBsYXkgb2ZcbiAgICAgIC8vIHRoZSBzYW1lIHZhbHVlLlxuICAgICAgbGV0IHJldHJ5QWZ0ZXIgPSBpbnZva2UoaS5kYXRlTm93KS5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpICsgMTAwMDtcbiAgICAgIGNvbnN0IHJhdyA9IG93bih2YWx1ZSwgJ3JldHJ5QWZ0ZXInKTtcbiAgICAgIGlmIChyYXcpIHtcbiAgICAgICAgaWYgKHRhZ09mSGFuZGxlKHJhdykgPT09ICdEYXRlJykge1xuICAgICAgICAgIGNvbnN0IHQgPSBjYWxsKGkuZGF0ZUdldFRpbWUsIHJhdykuY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKTtcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih0KSkgcmV0cnlBZnRlciA9IHQ7XG4gICAgICAgIH0gZWxzZSBpZiAocmF3LmlzU3RyaW5nIHx8IHJhdy5pc051bWJlcikge1xuICAgICAgICAgIGNvbnN0IHQgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHJhdy5pc1N0cmluZyA/IHJhdy50b1N0cmluZygpIDogcmF3LnRvTnVtYmVyKClcbiAgICAgICAgICApLmdldFRpbWUoKTtcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih0KSkgcmV0cnlBZnRlciA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmF3LmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZHVjZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBtZXNzYWdlOiBzaGFwZS5tZXNzYWdlLFxuICAgICAgICBzdGFjazogc2hhcGUuc3RhY2ssXG4gICAgICAgIHJldHJ5QWZ0ZXIsXG4gICAgICB9O1xuICAgICAgaWYgKE9iamVjdC5oYXNPd24oc2hhcGUsICdjYXVzZScpKSByZWR1Y2VkLmNhdXNlID0gc2hhcGUuY2F1c2U7XG4gICAgICByZXR1cm4gcmVkdWNlZDtcbiAgICB9LFxuICAgIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgIXZhbHVlLmlzRXJyb3IpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChjaGFpbmVkU3RyaW5nKHZhbHVlLCAnbmFtZScpICE9PSAnUnVudGltZURlY3J5cHRpb25FcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hhcGUgPSByZWR1Y2VFcnJvclNoYXBlKHZhbHVlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IHJlZHVjZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBtZXNzYWdlOiBzaGFwZS5tZXNzYWdlLFxuICAgICAgICBzdGFjazogc2hhcGUuc3RhY2ssXG4gICAgICB9O1xuICAgICAgY29uc3QgY29udGV4dCA9IG93bih2YWx1ZSwgJ2NvbnRleHQnKTtcbiAgICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LmlzVW5kZWZpbmVkKSByZWR1Y2VkLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgZWxzZSBjb250ZXh0Py5kaXNwb3NlKCk7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihzaGFwZSwgJ2NhdXNlJykpIHJlZHVjZWQuY2F1c2UgPSBzaGFwZS5jYXVzZTtcbiAgICAgIHJldHVybiByZWR1Y2VkO1xuICAgIH0sXG4gICAgU3ludGF4RXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1JlZHVjZXIoJ1N5bnRheEVycm9yJyksXG4gICAgVHlwZUVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZWR1Y2VyKCdUeXBlRXJyb3InKSxcbiAgICBVUklFcnJvcjogbmFtZWRFcnJvclN1YmNsYXNzUmVkdWNlcignVVJJRXJyb3InKSxcbiAgICBFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCAhdmFsdWUuaXNFcnJvcikgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3Qgc2hhcGUgPSByZWR1Y2VFcnJvclNoYXBlKHZhbHVlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGNoYWluZWRTdHJpbmcodmFsdWUsICduYW1lJykgPz8gJ0Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogc2hhcGUubWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IHNoYXBlLnN0YWNrLFxuICAgICAgICAuLi4oT2JqZWN0Lmhhc093bihzaGFwZSwgJ2NhdXNlJykgPyB7IGNhdXNlOiBzaGFwZS5jYXVzZSB9IDoge30pLFxuICAgICAgfTtcbiAgICB9LFxuICAgIEZsb2F0MzJBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ0Zsb2F0MzJBcnJheSdcbiAgICAgICAgPyBieXRlc1RvQmFzZTY0KHZpZXdCeXRlcyh2YWx1ZSkpXG4gICAgICAgIDogZmFsc2UsXG4gICAgRmxvYXQ2NEFycmF5OiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnRmxvYXQ2NEFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBJbnQ4QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSAmJiB0YWdPZkhhbmRsZSh2YWx1ZSkgPT09ICdJbnQ4QXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICAgIEludDE2QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSAmJiB0YWdPZkhhbmRsZSh2YWx1ZSkgPT09ICdJbnQxNkFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBJbnQzMkFycmF5OiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnSW50MzJBcnJheSdcbiAgICAgICAgPyBieXRlc1RvQmFzZTY0KHZpZXdCeXRlcyh2YWx1ZSkpXG4gICAgICAgIDogZmFsc2UsXG4gICAgTWFwOiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnTWFwJ1xuICAgICAgICA/IGNvbGxlY3QoaS5tYXBGb3JFYWNoLCB2YWx1ZSwgMilcbiAgICAgICAgOiBmYWxzZSxcbiAgICBSZWdFeHA6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdGFnT2ZIYW5kbGUodmFsdWUpICE9PSAnUmVnRXhwJykgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBjYWxsKGkucmVnRXhwU291cmNlLCB2YWx1ZSkuY29uc3VtZSgoaCkgPT4gaC50b1N0cmluZygpKSxcbiAgICAgICAgZmxhZ3M6IGNhbGwoaS5yZWdFeHBGbGFncywgdmFsdWUpLmNvbnN1bWUoKGgpID0+IGgudG9TdHJpbmcoKSksXG4gICAgICB9O1xuICAgIH0sXG4gICAgSGVhZGVyczogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFpc0hhbmRsZSh2YWx1ZSkgfHxcbiAgICAgICAgIWkuaGVhZGVyc1Byb3RvdHlwZSB8fFxuICAgICAgICAhaGFzUHJvdG90eXBlKHZhbHVlLCBpLmhlYWRlcnNQcm90b3R5cGUpIHx8XG4gICAgICAgICFpLmhlYWRlcnNGb3JFYWNoXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gSGVhZGVycy5mb3JFYWNoIHlpZWxkcyAodmFsdWUsIGtleSk7IG5vcm1hbGl6ZSB0byBba2V5LCB2YWx1ZV1cbiAgICAgIC8vIHBhaXJzIG9mIGhvc3Qgc3RyaW5ncywgbWF0Y2hpbmcgQXJyYXkuZnJvbShoZWFkZXJzKS5cbiAgICAgIGNvbnN0IGVudHJpZXM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtdO1xuICAgICAgY29uc3QgdmlzaXRvciA9IHZtLm5ld0VwaGVtZXJhbEZ1bmN0aW9uKFxuICAgICAgICAoaGVhZGVyVmFsdWU6IEpTVmFsdWVIYW5kbGUsIGhlYWRlcktleTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbaGVhZGVyS2V5LnRvU3RyaW5nKCksIGhlYWRlclZhbHVlLnRvU3RyaW5nKCldKTtcbiAgICAgICAgICByZXR1cm4gdm0udW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbChpLmhlYWRlcnNGb3JFYWNoLCB2YWx1ZSwgdmlzaXRvcikuZGlzcG9zZSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdmlzaXRvci5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllcztcbiAgICB9LFxuICAgIFJlcXVlc3Q6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdmFsdWUudHlwZW9mICE9PSAnb2JqZWN0JyB8fCB2YWx1ZS5pc051bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNSZXF1ZXN0ID1cbiAgICAgICAgKGkucmVxdWVzdFByb3RvdHlwZSAmJiBoYXNQcm90b3R5cGUodmFsdWUsIGkucmVxdWVzdFByb3RvdHlwZSkpIHx8XG4gICAgICAgIG93bih2YWx1ZSwgJ2pzb24nKT8uY29uc3VtZSgoaCkgPT4gaC50eXBlb2YgPT09ICdmdW5jdGlvbicpO1xuICAgICAgaWYgKCFpc1JlcXVlc3QpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IG93bih2YWx1ZSwgJ21ldGhvZCcpO1xuICAgICAgaWYgKCFtZXRob2QgfHwgIW1ldGhvZC5pc1N0cmluZykge1xuICAgICAgICBtZXRob2Q/LmRpc3Bvc2UoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsOiBvd24odmFsdWUsICd1cmwnKSxcbiAgICAgICAgaGVhZGVyczogb3duKHZhbHVlLCAnaGVhZGVycycpLFxuICAgICAgICBib2R5OiBvd24odmFsdWUsICdib2R5JyksXG4gICAgICAgIGR1cGxleDogb3duKHZhbHVlLCAnZHVwbGV4JyksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2VXcml0YWJsZSA9IG93bih2YWx1ZSwgc3ltKCdXRUJIT09LX1JFU1BPTlNFX1dSSVRBQkxFJykpO1xuICAgICAgaWYgKHJlc3BvbnNlV3JpdGFibGUgJiYgIXJlc3BvbnNlV3JpdGFibGUuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgZGF0YS5yZXNwb25zZVdyaXRhYmxlID0gcmVzcG9uc2VXcml0YWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlV3JpdGFibGU/LmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG4gICAgUmVzcG9uc2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdmFsdWUudHlwZW9mICE9PSAnb2JqZWN0JyB8fCB2YWx1ZS5pc051bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNSZXNwb25zZSA9XG4gICAgICAgIChpLnJlc3BvbnNlUHJvdG90eXBlICYmIGhhc1Byb3RvdHlwZSh2YWx1ZSwgaS5yZXNwb25zZVByb3RvdHlwZSkpIHx8XG4gICAgICAgIGNoYWluZWQodmFsdWUsICdjbG9uZScpPy5jb25zdW1lKChoKSA9PiBoLnR5cGVvZiA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgICBpZiAoIWlzUmVzcG9uc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IG93bih2YWx1ZSwgJ3N0YXR1cycpO1xuICAgICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5pc051bWJlcikge1xuICAgICAgICBzdGF0dXM/LmRpc3Bvc2UoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogb3duKHZhbHVlLCAndHlwZScpLFxuICAgICAgICB1cmw6IG93bih2YWx1ZSwgJ3VybCcpLFxuICAgICAgICBzdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IG93bih2YWx1ZSwgJ3N0YXR1c1RleHQnKSxcbiAgICAgICAgaGVhZGVyczogb3duKHZhbHVlLCAnaGVhZGVycycpLFxuICAgICAgICBib2R5OiBvd24odmFsdWUsICdib2R5JyksXG4gICAgICAgIHJlZGlyZWN0ZWQ6IG93bih2YWx1ZSwgJ3JlZGlyZWN0ZWQnKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBSZWFkYWJsZVN0cmVhbTogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFpc0hhbmRsZSh2YWx1ZSkgfHxcbiAgICAgICAgdmFsdWUudHlwZW9mICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICB2YWx1ZS5pc051bGwgfHxcbiAgICAgICAgIWkucmVhZGFibGVTdHJlYW1Qcm90b3R5cGUgfHxcbiAgICAgICAgIWhhc1Byb3RvdHlwZSh2YWx1ZSwgaS5yZWFkYWJsZVN0cmVhbVByb3RvdHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5SW5pdCA9IG93bih2YWx1ZSwgc3ltKCdCT0RZX0lOSVQnKSk7XG4gICAgICBpZiAoYm9keUluaXQgJiYgIWJvZHlJbml0LmlzVW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7IGJvZHlJbml0IH07XG4gICAgICB9XG4gICAgICBib2R5SW5pdD8uZGlzcG9zZSgpO1xuICAgICAgY29uc3QgbmFtZSA9IG93blN5bWJvbFN0cmluZyh2YWx1ZSwgJ1dPUktGTE9XX1NUUkVBTV9OQU1FJyk7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBjb25zdCBzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgbmFtZSB9O1xuICAgICAgICBjb25zdCB0eXBlID0gb3duU3ltYm9sU3RyaW5nKHZhbHVlLCAnV09SS0ZMT1dfU1RSRUFNX1RZUEUnKTtcbiAgICAgICAgaWYgKHR5cGUpIHMudHlwZSA9IHR5cGU7XG4gICAgICAgIGNvbnN0IGZyYW1pbmcgPSBvd25TeW1ib2xTdHJpbmcodmFsdWUsICdXT1JLRkxPV19TVFJFQU1fRlJBTUlORycpO1xuICAgICAgICBpZiAoZnJhbWluZykgcy5mcmFtaW5nID0gZnJhbWluZztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBuYW1lOiAnX19lbXB0eScgfTtcbiAgICB9LFxuICAgIFdyaXRhYmxlU3RyZWFtOiAodmFsdWUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzSGFuZGxlKHZhbHVlKSB8fFxuICAgICAgICB2YWx1ZS50eXBlb2YgIT09ICdvYmplY3QnIHx8XG4gICAgICAgIHZhbHVlLmlzTnVsbCB8fFxuICAgICAgICAhaS53cml0YWJsZVN0cmVhbVByb3RvdHlwZSB8fFxuICAgICAgICAhaGFzUHJvdG90eXBlKHZhbHVlLCBpLndyaXRhYmxlU3RyZWFtUHJvdG90eXBlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBuYW1lOiBvd25TeW1ib2xTdHJpbmcodmFsdWUsICdXT1JLRkxPV19TVFJFQU1fTkFNRScpIHx8ICdfX2VtcHR5JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBydW5JZCA9IG93blN5bWJvbFN0cmluZyh2YWx1ZSwgJ1dPUktGTE9XX1NUUkVBTV9TRVJWRVJfUlVOX0lEJyk7XG4gICAgICBpZiAocnVuSWQpIHMucnVuSWQgPSBydW5JZDtcbiAgICAgIGNvbnN0IGRlcGxveW1lbnRJZCA9IG93blN5bWJvbFN0cmluZyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgICdXT1JLRkxPV19TVFJFQU1fU0VSVkVSX0RFUExPWU1FTlRfSUQnXG4gICAgICApO1xuICAgICAgaWYgKGRlcGxveW1lbnRJZCkgcy5kZXBsb3ltZW50SWQgPSBkZXBsb3ltZW50SWQ7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIFNldDogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ1NldCdcbiAgICAgICAgPyBjb2xsZWN0KGkuc2V0Rm9yRWFjaCwgdmFsdWUsIDEpXG4gICAgICAgIDogZmFsc2UsXG4gICAgVVJMOiAodmFsdWUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzSGFuZGxlKHZhbHVlKSB8fFxuICAgICAgICAhaS51cmxQcm90b3R5cGUgfHxcbiAgICAgICAgIWhhc1Byb3RvdHlwZSh2YWx1ZSwgaS51cmxQcm90b3R5cGUpIHx8XG4gICAgICAgICFpLnVybEhyZWZcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FsbChpLnVybEhyZWYsIHZhbHVlKS5jb25zdW1lKChoKSA9PiBoLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgV29ya2Zsb3dGdW5jdGlvbjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCB2YWx1ZS50eXBlb2YgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHdvcmtmbG93SWQgPSBvd25TdHJpbmcodmFsdWUsICd3b3JrZmxvd0lkJyk7XG4gICAgICBpZiAod29ya2Zsb3dJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4geyB3b3JrZmxvd0lkIH07XG4gICAgfSxcbiAgICBVUkxTZWFyY2hQYXJhbXM6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhaXNIYW5kbGUodmFsdWUpIHx8XG4gICAgICAgICFpLnVybFNlYXJjaFBhcmFtc1Byb3RvdHlwZSB8fFxuICAgICAgICAhaGFzUHJvdG90eXBlKHZhbHVlLCBpLnVybFNlYXJjaFBhcmFtc1Byb3RvdHlwZSkgfHxcbiAgICAgICAgIWkudXJsU2VhcmNoUGFyYW1zVG9TdHJpbmdcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzaXplID0gaS51cmxTZWFyY2hQYXJhbXNTaXplXG4gICAgICAgID8gY2FsbChpLnVybFNlYXJjaFBhcmFtc1NpemUsIHZhbHVlKS5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpXG4gICAgICAgIDogTnVtYmVyLk5hTjtcbiAgICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gJy4nO1xuICAgICAgcmV0dXJuIGNhbGwoaS51cmxTZWFyY2hQYXJhbXNUb1N0cmluZywgdmFsdWUpLmNvbnN1bWUoKGgpID0+XG4gICAgICAgIGgudG9TdHJpbmcoKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFVpbnQ4QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSAmJiB0YWdPZkhhbmRsZSh2YWx1ZSkgPT09ICdVaW50OEFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBVaW50OENsYW1wZWRBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ1VpbnQ4Q2xhbXBlZEFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBVaW50MTZBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ1VpbnQxNkFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBVaW50MzJBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ1VpbnQzMkFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgfTtcblxuICAvLyAtLS0gcGFyc2Ugb3BlcmF0aW9ucyAoaGFuZGxlLW9ubHk6IGV2ZXJ5dGhpbmcgaXMgYnVpbHQgaW4gdGhlIFZNKSAtLS1cblxuICBjb25zdCBwYXJzZU9wZXJhdGlvbnM6IFBhcnNlT3BlcmF0aW9ucyA9IHtcbiAgICBmcm9tUHJpbWl0aXZlOiAodmFsdWUpID0+XG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gdm0ubmV3QmlnSW50KHZhbHVlKSA6IHZtLmhvc3RUb0hhbmRsZSh2YWx1ZSksXG4gICAgZnJvbUlTT1N0cmluZzogKGlzbykgPT4ge1xuICAgICAgY29uc3QgYXJndW1lbnQgPVxuICAgICAgICBpc28gPT09ICcnID8gdm0ubmV3TnVtYmVyKE51bWJlci5OYU4pIDogdm0ubmV3U3RyaW5nKGlzbyk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdm0uY29uc3RydWN0KGkuRGF0ZSwgYXJndW1lbnQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXJndW1lbnQuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnJvbVN0cmluZ1ZhbHVlOiAodGFnLCBfc3RyaW5nKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGFnfSBjYW5ub3QgYmUgcmV2aXZlZCBpbiB0aGUgVk1gKTtcbiAgICB9LFxuICAgIGZyb21BcnJheUJ1ZmZlcjogKGJ1ZmZlcikgPT4gdm0ubmV3QXJyYXlCdWZmZXIoYnVmZmVyKSxcbiAgICBmcm9tUmVnRXhwSW5mbzogKHNvdXJjZSwgZmxhZ3MpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZUhhbmRsZSA9IHZtLm5ld1N0cmluZyhzb3VyY2UpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmbGFncykgcmV0dXJuIHZtLmNvbnN0cnVjdChpLlJlZ0V4cCwgc291cmNlSGFuZGxlKTtcbiAgICAgICAgY29uc3QgZmxhZ3NIYW5kbGUgPSB2bS5uZXdTdHJpbmcoZmxhZ3MpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB2bS5jb25zdHJ1Y3QoaS5SZWdFeHAsIHNvdXJjZUhhbmRsZSwgZmxhZ3NIYW5kbGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGZsYWdzSGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc291cmNlSGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZyb21WaWV3SW5mbzogKHRhZywgYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpID0+IHtcbiAgICAgIGNvbnN0IENvbnN0cnVjdG9yID0gdHlwZWRBcnJheUNvbnN0cnVjdG9ycy5nZXQodGFnKTtcbiAgICAgIGlmICghQ29uc3RydWN0b3IpIHRocm93IG5ldyBFcnJvcihgJHt0YWd9IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIFZNYCk7XG4gICAgICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB2bS5jb25zdHJ1Y3QoQ29uc3RydWN0b3IsIGJ1ZmZlciBhcyBKU1ZhbHVlSGFuZGxlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9mZnNldEhhbmRsZSA9IHZtLm5ld051bWJlcihieXRlT2Zmc2V0KTtcbiAgICAgIGNvbnN0IGxlbmd0aEhhbmRsZSA9IHZtLm5ld051bWJlcihsZW5ndGggPz8gMCk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdm0uY29uc3RydWN0KFxuICAgICAgICAgIENvbnN0cnVjdG9yLFxuICAgICAgICAgIGJ1ZmZlciBhcyBKU1ZhbHVlSGFuZGxlLFxuICAgICAgICAgIG9mZnNldEhhbmRsZSxcbiAgICAgICAgICBsZW5ndGhIYW5kbGVcbiAgICAgICAgKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIG9mZnNldEhhbmRsZS5kaXNwb3NlKCk7XG4gICAgICAgIGxlbmd0aEhhbmRsZS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBib3g6ICh2YWx1ZSkgPT4gdm0uY29uc3RydWN0KGkuT2JqZWN0LCB2YWx1ZSBhcyBKU1ZhbHVlSGFuZGxlKSxcbiAgICBjcmVhdGVBcnJheTogKGxlbmd0aCkgPT4ge1xuICAgICAgY29uc3QgbGVuZ3RoSGFuZGxlID0gdm0ubmV3TnVtYmVyKGxlbmd0aCk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdm0uY29uc3RydWN0KGkuQXJyYXksIGxlbmd0aEhhbmRsZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBsZW5ndGhIYW5kbGUuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlU3BhcnNlQXJyYXk6IChsZW5ndGgpID0+IHtcbiAgICAgIGNvbnN0IGxlbmd0aEhhbmRsZSA9IHZtLm5ld051bWJlcihsZW5ndGgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGludm9rZShpLm1ha2VTcGFyc2VBcnJheSwgbGVuZ3RoSGFuZGxlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxlbmd0aEhhbmRsZS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVPYmplY3Q6ICgpID0+IHZtLm5ld09iamVjdCgpLFxuICAgIGNyZWF0ZU51bGxQcm90b3R5cGVPYmplY3Q6ICgpID0+XG4gICAgICBjYWxsKGkub2JqZWN0Q3JlYXRlLCB2bS51bmRlZmluZWQsIHZtLm51bGwpLFxuICAgIGNyZWF0ZVNldDogKCkgPT4gdm0uY29uc3RydWN0KGkuU2V0KSxcbiAgICBjcmVhdGVNYXA6ICgpID0+IHZtLmNvbnN0cnVjdChpLk1hcCksXG4gICAgc2V0OiAodGFyZ2V0LCBrZXksIHZhbHVlKSA9PlxuICAgICAgZGVmaW5lKHRhcmdldCBhcyBKU1ZhbHVlSGFuZGxlLCBTdHJpbmcoa2V5KSwgdmFsdWUgYXMgSlNWYWx1ZUhhbmRsZSksXG4gICAgYWRkVmFsdWU6IChzZXQsIHZhbHVlKSA9PiB7XG4gICAgICBjYWxsKGkuc2V0QWRkLCBzZXQgYXMgSlNWYWx1ZUhhbmRsZSwgdmFsdWUgYXMgSlNWYWx1ZUhhbmRsZSkuZGlzcG9zZSgpO1xuICAgIH0sXG4gICAgYWRkRW50cnk6IChtYXAsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGNhbGwoXG4gICAgICAgIGkubWFwU2V0LFxuICAgICAgICBtYXAgYXMgSlNWYWx1ZUhhbmRsZSxcbiAgICAgICAga2V5IGFzIEpTVmFsdWVIYW5kbGUsXG4gICAgICAgIHZhbHVlIGFzIEpTVmFsdWVIYW5kbGVcbiAgICAgICkuZGlzcG9zZSgpO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gLS0tIHdvcmtmbG93IHJldml2ZXJzIChoYW5kbGUgc3BhY2UpIC0tLVxuXG4gIC8qKiBHdWVzdCBsb29rdXAgb2YgYSByZWdpc3RlcmVkIGVycm9yIGNsYXNzIG9uIGdsb2JhbFRoaXMsIGJ5IHN5bWJvbC4gKi9cbiAgY29uc3QgcmVnaXN0ZXJlZEVycm9yQ2xhc3MgPSAoXG4gICAgbmFtZTogU3ltYm9sTmFtZVxuICApOiBKU1ZhbHVlSGFuZGxlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBjbHMgPSBvd24odm0uZ2xvYmFsLCBzeW0obmFtZSkpO1xuICAgIGlmICghY2xzIHx8IGNscy50eXBlb2YgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNscz8uZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNscztcbiAgfTtcblxuICAvKiogQ29uc3RydWN0IGEgZ3Vlc3QgRXJyb3IgdmlhIGBjdG9yKG1lc3NhZ2UpYCArIGRlZmluZSBzdGFjay9jYXVzZS4gKi9cbiAgY29uc3QgYnVpbGRFcnJvciA9IChcbiAgICBjdG9yOiBKU1ZhbHVlSGFuZGxlLFxuICAgIHZhbHVlOiBKU1ZhbHVlSGFuZGxlLFxuICAgIG9wdHM6IHsgbmFtZT86IHN0cmluZzsgZXh0cmFDdG9yQXJncz86IEpTVmFsdWVIYW5kbGVbXSB9ID0ge31cbiAgKTogSlNWYWx1ZUhhbmRsZSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG93bih2YWx1ZSwgJ21lc3NhZ2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgY29uc3QgZXJyb3IgPSB2bS5jb25zdHJ1Y3QoY3RvciwgbWVzc2FnZSwgLi4uKG9wdHMuZXh0cmFDdG9yQXJncyA/PyBbXSkpO1xuICAgIGlmIChtZXNzYWdlICE9PSB2bS51bmRlZmluZWQpIG1lc3NhZ2UuZGlzcG9zZSgpO1xuICAgIGlmIChvcHRzLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbmFtZUhhbmRsZSA9IG5ld0d1ZXN0U3RyaW5nKG9wdHMubmFtZSk7XG4gICAgICBkZWZpbmUoZXJyb3IsICduYW1lJywgbmFtZUhhbmRsZSk7XG4gICAgICBuYW1lSGFuZGxlLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSBvd24odmFsdWUsICdzdGFjaycpO1xuICAgIGlmIChzdGFjayAmJiAhc3RhY2suaXNVbmRlZmluZWQpIGRlZmluZShlcnJvciwgJ3N0YWNrJywgc3RhY2spO1xuICAgIHN0YWNrPy5kaXNwb3NlKCk7XG4gICAgaWYgKGd1ZXN0SGFzT3duKHZhbHVlLCAnY2F1c2UnKSkge1xuICAgICAgY29uc3QgY2F1c2UgPSBvd24odmFsdWUsICdjYXVzZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgIGRlZmluZShlcnJvciwgJ2NhdXNlJywgY2F1c2UpO1xuICAgICAgaWYgKGNhdXNlICE9PSB2bS51bmRlZmluZWQpIGNhdXNlLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xuICB9O1xuXG4gIGNvbnN0IG5hbWVkRXJyb3JTdWJjbGFzc1Jldml2ZXIgPVxuICAgIChzdWJjbGFzc05hbWU6IHN0cmluZykgPT4gKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBjb25zdCBjdG9yID0gZXJyb3JDb25zdHJ1Y3RvcnMuZ2V0KHN1YmNsYXNzTmFtZSk7XG4gICAgICBpZiAoY3RvcikgcmV0dXJuIGJ1aWxkRXJyb3IoY3RvciwgdmFsdWUpO1xuICAgICAgcmV0dXJuIGJ1aWxkRXJyb3IoaS5FcnJvciwgdmFsdWUsIHsgbmFtZTogc3ViY2xhc3NOYW1lIH0pO1xuICAgIH07XG5cbiAgY29uc3QgcmV2aXZlQWJvcnRTaWduYWwgPSAodmFsdWU6IEpTVmFsdWVIYW5kbGUpOiBKU1ZhbHVlSGFuZGxlID0+IHtcbiAgICBjb25zdCBjbHMgPSBvd24odm0uZ2xvYmFsLCAnX19Xb3JrZmxvd0Fib3J0U2lnbmFsJyk7XG4gICAgaWYgKCFjbHMgfHwgY2xzLnR5cGVvZiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2xzPy5kaXNwb3NlKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdXb3JrZmxvd0Fib3J0U2lnbmFsIGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBWTSAoYm9vdHN0cmFwIG5vdCBldmFsdWF0ZWQpJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbU5hbWUgPSBvd24odmFsdWUsICdzdHJlYW1OYW1lJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgY29uc3QgaG9va1Rva2VuID0gb3duKHZhbHVlLCAnaG9va1Rva2VuJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgY29uc3Qgc2lnbmFsID0gdm0uY29uc3RydWN0KGNscywgc3RyZWFtTmFtZSwgaG9va1Rva2VuKTtcbiAgICAgIGlmIChzdHJlYW1OYW1lICE9PSB2bS51bmRlZmluZWQpIHN0cmVhbU5hbWUuZGlzcG9zZSgpO1xuICAgICAgaWYgKGhvb2tUb2tlbiAhPT0gdm0udW5kZWZpbmVkKSBob29rVG9rZW4uZGlzcG9zZSgpO1xuICAgICAgY29uc3QgYWJvcnRlZCA9IG93bih2YWx1ZSwgJ2Fib3J0ZWQnKTtcbiAgICAgIGlmIChhYm9ydGVkPy50b0Jvb2xlYW4oKSkge1xuICAgICAgICBjb25zdCBzZXRBYm9ydGVkID0gY2hhaW5lZChzaWduYWwsICdfc2V0QWJvcnRlZCcpO1xuICAgICAgICBpZiAoc2V0QWJvcnRlZCkge1xuICAgICAgICAgIGNvbnN0IHJlYXNvbiA9IG93bih2YWx1ZSwgJ3JlYXNvbicpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgICBjYWxsKHNldEFib3J0ZWQsIHNpZ25hbCwgcmVhc29uKS5kaXNwb3NlKCk7XG4gICAgICAgICAgaWYgKHJlYXNvbiAhPT0gdm0udW5kZWZpbmVkKSByZWFzb24uZGlzcG9zZSgpO1xuICAgICAgICAgIHNldEFib3J0ZWQuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhYm9ydGVkPy5kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gc2lnbmFsO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbHMuZGlzcG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZXZpdmVyczogUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT4gPSB7XG4gICAgQWJvcnRDb250cm9sbGVyOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB2bS5uZXdPYmplY3QoKTtcbiAgICAgIGNvbnN0IHN0cmVhbU5hbWUgPSBvd24odmFsdWUsICdzdHJlYW1OYW1lJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgZGVmaW5lKGNvbnRyb2xsZXIsIHN5bSgnV09SS0ZMT1dfQUJPUlRfU1RSRUFNX05BTUUnKSwgc3RyZWFtTmFtZSk7XG4gICAgICBpZiAoc3RyZWFtTmFtZSAhPT0gdm0udW5kZWZpbmVkKSBzdHJlYW1OYW1lLmRpc3Bvc2UoKTtcbiAgICAgIGNvbnN0IGhvb2tUb2tlbiA9IG93bih2YWx1ZSwgJ2hvb2tUb2tlbicpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgIGRlZmluZShjb250cm9sbGVyLCBzeW0oJ1dPUktGTE9XX0FCT1JUX0hPT0tfVE9LRU4nKSwgaG9va1Rva2VuKTtcbiAgICAgIGlmIChob29rVG9rZW4gIT09IHZtLnVuZGVmaW5lZCkgaG9va1Rva2VuLmRpc3Bvc2UoKTtcbiAgICAgIGNvbnN0IHNpZ25hbCA9IHJldml2ZUFib3J0U2lnbmFsKHZhbHVlKTtcbiAgICAgIGRlZmluZShjb250cm9sbGVyLCAnc2lnbmFsJywgc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5kaXNwb3NlKCk7XG4gICAgICBjb25zdCBub29wID0gdm0uZXZhbENvZGUoJyhmdW5jdGlvbigpe30pJyk7XG4gICAgICBkZWZpbmUoY29udHJvbGxlciwgJ2Fib3J0Jywgbm9vcCk7XG4gICAgICBub29wLmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH0sXG4gICAgQWJvcnRTaWduYWw6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4gcmV2aXZlQWJvcnRTaWduYWwodmFsdWUpLFxuICAgIENsYXNzOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzSWQgPSBvd25TdHJpbmcodmFsdWUsICdjbGFzc0lkJyk7XG4gICAgICBjb25zdCBjbHMgPSBsb29rdXBSZWdpc3RlcmVkQ2xhc3MoY2xhc3NJZCk7XG4gICAgICBpZiAoIWNscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJTZXJpYWxpemF0aW9uQ2xhc3MuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNscztcbiAgICB9LFxuICAgIEluc3RhbmNlOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzSWQgPSBvd25TdHJpbmcodmFsdWUsICdjbGFzc0lkJyk7XG4gICAgICBjb25zdCBjbHMgPSBsb29rdXBSZWdpc3RlcmVkQ2xhc3MoY2xhc3NJZCk7XG4gICAgICBpZiAoIWNscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJTZXJpYWxpemF0aW9uQ2xhc3MuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVNZXRob2QgPSBjaGFpbmVkKGNscywgc3ltKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpKTtcbiAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZU1ldGhvZCB8fCBkZXNlcmlhbGl6ZU1ldGhvZC50eXBlb2YgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBkZXNlcmlhbGl6ZU1ldGhvZD8uZGlzcG9zZSgpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDbGFzcyBcIiR7Y2xhc3NJZH1cIiBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIFN5bWJvbCh3b3JrZmxvdy1kZXNlcmlhbGl6ZSkgbWV0aG9kLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IG93bih2YWx1ZSwgJ2RhdGEnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FsbChkZXNlcmlhbGl6ZU1ldGhvZCwgY2xzLCBkYXRhKTtcbiAgICAgICAgICBpZiAoZGF0YSAhPT0gdm0udW5kZWZpbmVkKSBkYXRhLmRpc3Bvc2UoKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGRlc2VyaWFsaXplTWV0aG9kLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY2xzLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFN0ZXBGdW5jdGlvbjogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBjb25zdCB1c2VTdGVwID0gb3duKHZtLmdsb2JhbCwgc3ltKCdXT1JLRkxPV19VU0VfU1RFUCcpKTtcbiAgICAgIGlmICghdXNlU3RlcCB8fCB1c2VTdGVwLnR5cGVvZiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB1c2VTdGVwPy5kaXNwb3NlKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnV09SS0ZMT1dfVVNFX1NURVAgbm90IGZvdW5kIG9uIGdsb2JhbCBvYmplY3QuIFN0ZXAgZnVuY3Rpb25zIGNhbm5vdCBiZSBkZXNlcmlhbGl6ZWQgb3V0c2lkZSB3b3JrZmxvdyBjb250ZXh0LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0ZXBJZCA9IG93bih2YWx1ZSwgJ3N0ZXBJZCcpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgY2xvc3VyZVZhcnMgPSBvd24odmFsdWUsICdjbG9zdXJlVmFycycpO1xuICAgICAgICBsZXQgcHJveHk6IEpTVmFsdWVIYW5kbGU7XG4gICAgICAgIGlmIChjbG9zdXJlVmFycyAmJiAhY2xvc3VyZVZhcnMuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCB0aHVuayA9IGludm9rZShpLm1ha2VUaHVuaywgY2xvc3VyZVZhcnMpO1xuICAgICAgICAgIHByb3h5ID0gaW52b2tlKHVzZVN0ZXAsIHN0ZXBJZCwgdGh1bmspO1xuICAgICAgICAgIHRodW5rLmRpc3Bvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm94eSA9IGludm9rZSh1c2VTdGVwLCBzdGVwSWQpO1xuICAgICAgICB9XG4gICAgICAgIGNsb3N1cmVWYXJzPy5kaXNwb3NlKCk7XG4gICAgICAgIGlmIChzdGVwSWQgIT09IHZtLnVuZGVmaW5lZCkgc3RlcElkLmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGd1ZXN0SGFzT3duKHZhbHVlLCAnYm91bmRUaGlzJykpIHtcbiAgICAgICAgICAvLyBSZS1iaW5kIHRocm91Z2ggdGhlIHByb3h5J3Mgb3duIChvdmVycmlkZGVuKSBgLmJpbmRgLCB3aGljaCBpc1xuICAgICAgICAgIC8vIGFuIG93biBkYXRhIHByb3BlcnR5IHN0YW1wZWQgYnkgV09SS0ZMT1dfVVNFX1NURVAuXG4gICAgICAgICAgY29uc3QgYmluZCA9IG93bihwcm94eSwgJ2JpbmQnKSA/PyBjaGFpbmVkKHByb3h5LCAnYmluZCcpO1xuICAgICAgICAgIGNvbnN0IGJvdW5kVGhpcyA9IG93bih2YWx1ZSwgJ2JvdW5kVGhpcycpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBib3VuZEFyZ3MgPSBvd24odmFsdWUsICdib3VuZEFyZ3MnKTtcbiAgICAgICAgICBjb25zdCBhcmdzOiBKU1ZhbHVlSGFuZGxlW10gPSBbYm91bmRUaGlzXTtcbiAgICAgICAgICBjb25zdCBhcmdIYW5kbGVzOiBKU1ZhbHVlSGFuZGxlW10gPSBbXTtcbiAgICAgICAgICBpZiAoYm91bmRBcmdzICYmIGJvdW5kQXJncy5pc0FycmF5KSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPVxuICAgICAgICAgICAgICBvd24oYm91bmRBcmdzLCAnbGVuZ3RoJyk/LmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSkgPz8gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IG93bihib3VuZEFyZ3MsIFN0cmluZyhpbmRleCkpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgYXJncy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gdm0udW5kZWZpbmVkKSBhcmdIYW5kbGVzLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJvdW5kQXJncz8uZGlzcG9zZSgpO1xuICAgICAgICAgIGlmIChiaW5kKSB7XG4gICAgICAgICAgICBjb25zdCBib3VuZCA9IGNhbGwoYmluZCwgcHJveHksIC4uLmFyZ3MpO1xuICAgICAgICAgICAgYmluZC5kaXNwb3NlKCk7XG4gICAgICAgICAgICBwcm94eS5kaXNwb3NlKCk7XG4gICAgICAgICAgICBwcm94eSA9IGJvdW5kO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYm91bmRUaGlzICE9PSB2bS51bmRlZmluZWQpIGJvdW5kVGhpcy5kaXNwb3NlKCk7XG4gICAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgYXJnSGFuZGxlcykgaGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB1c2VTdGVwLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIEFycmF5QnVmZmVyOiAodmFsdWU6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGUpID0+XG4gICAgICB2bS5uZXdBcnJheUJ1ZmZlcihcbiAgICAgICAgYmFzZTY0VG9CeXRlcyhpc0hhbmRsZSh2YWx1ZSkgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWUpXG4gICAgICAgICAgLmJ1ZmZlciBhcyBBcnJheUJ1ZmZlclxuICAgICAgKSxcbiAgICBCaWdJbnQ6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIHZtLm5ld0JpZ0ludChCaWdJbnQoaXNIYW5kbGUodmFsdWUpID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlKSksXG4gICAgQmlnSW50NjRBcnJheTogKHZhbHVlOiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgYnVpbGRUeXBlZEFycmF5KCdCaWdJbnQ2NEFycmF5JywgdmFsdWUpLFxuICAgIEJpZ1VpbnQ2NEFycmF5OiAodmFsdWU6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGUpID0+XG4gICAgICBidWlsZFR5cGVkQXJyYXkoJ0JpZ1VpbnQ2NEFycmF5JywgdmFsdWUpLFxuICAgIERhdGU6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSB8IHN0cmluZykgPT4ge1xuICAgICAgLy8gVGhlIHJlZHVjZXIgZW1pdHMgJy4nIGZvciBpbnZhbGlkIGRhdGVzIGFuZCBhbiBJU08gc3RyaW5nIG90aGVyd2lzZS5cbiAgICAgIGNvbnN0IGlzbyA9IGlzSGFuZGxlKHZhbHVlKSA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID1cbiAgICAgICAgaXNvID09PSAnLicgPyB2bS5uZXdOdW1iZXIoTnVtYmVyLk5hTikgOiB2bS5uZXdTdHJpbmcoaXNvKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB2bS5jb25zdHJ1Y3QoaS5EYXRlLCBhcmd1bWVudCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhcmd1bWVudC5kaXNwb3NlKCk7XG4gICAgICAgIGlmIChpc0hhbmRsZSh2YWx1ZSkpIHZhbHVlLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIERPTUV4Y2VwdGlvbjogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBpZiAoaS5ET01FeGNlcHRpb24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG93bih2YWx1ZSwgJ21lc3NhZ2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBvd24odmFsdWUsICduYW1lJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBlcnJvciA9IHZtLmNvbnN0cnVjdChpLkRPTUV4Y2VwdGlvbiwgbWVzc2FnZSwgbmFtZSk7XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSB2bS51bmRlZmluZWQpIG1lc3NhZ2UuZGlzcG9zZSgpO1xuICAgICAgICBpZiAobmFtZSAhPT0gdm0udW5kZWZpbmVkKSBuYW1lLmRpc3Bvc2UoKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBvd24odmFsdWUsICdzdGFjaycpO1xuICAgICAgICBpZiAoc3RhY2sgJiYgIXN0YWNrLmlzVW5kZWZpbmVkKSBkZWZpbmUoZXJyb3IsICdzdGFjaycsIHN0YWNrKTtcbiAgICAgICAgc3RhY2s/LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGd1ZXN0SGFzT3duKHZhbHVlLCAnY2F1c2UnKSkge1xuICAgICAgICAgIGNvbnN0IGNhdXNlID0gb3duKHZhbHVlLCAnY2F1c2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgICAgZGVmaW5lKGVycm9yLCAnY2F1c2UnLCBjYXVzZSk7XG4gICAgICAgICAgaWYgKGNhdXNlICE9PSB2bS51bmRlZmluZWQpIGNhdXNlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnVpbGRFcnJvcihpLkVycm9yLCB2YWx1ZSwge1xuICAgICAgICBuYW1lOiBvd25TdHJpbmcodmFsdWUsICduYW1lJykgPz8gJ0RPTUV4Y2VwdGlvbicsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIEFnZ3JlZ2F0ZUVycm9yOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IG93bih2YWx1ZSwgJ2Vycm9ycycpO1xuICAgICAgY29uc3QgZXJyb3JzQXJnID1cbiAgICAgICAgZXJyb3JzICYmICFlcnJvcnMuaXNVbmRlZmluZWQgPyBlcnJvcnMgOiB2bS5ldmFsQ29kZSgnKFtdKScpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IG93bih2YWx1ZSwgJ21lc3NhZ2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICBjb25zdCBjdG9yID0gaS5BZ2dyZWdhdGVFcnJvciA/PyBpLkVycm9yO1xuICAgICAgY29uc3QgZXJyb3IgPVxuICAgICAgICBjdG9yID09PSBpLkFnZ3JlZ2F0ZUVycm9yXG4gICAgICAgICAgPyB2bS5jb25zdHJ1Y3QoY3RvciwgZXJyb3JzQXJnLCBtZXNzYWdlKVxuICAgICAgICAgIDogYnVpbGRFcnJvcihpLkVycm9yLCB2YWx1ZSwgeyBuYW1lOiAnQWdncmVnYXRlRXJyb3InIH0pO1xuICAgICAgaWYgKGN0b3IgPT09IGkuQWdncmVnYXRlRXJyb3IpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBvd24odmFsdWUsICdzdGFjaycpO1xuICAgICAgICBpZiAoc3RhY2sgJiYgIXN0YWNrLmlzVW5kZWZpbmVkKSBkZWZpbmUoZXJyb3IsICdzdGFjaycsIHN0YWNrKTtcbiAgICAgICAgc3RhY2s/LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGd1ZXN0SGFzT3duKHZhbHVlLCAnY2F1c2UnKSkge1xuICAgICAgICAgIGNvbnN0IGNhdXNlID0gb3duKHZhbHVlLCAnY2F1c2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgICAgZGVmaW5lKGVycm9yLCAnY2F1c2UnLCBjYXVzZSk7XG4gICAgICAgICAgaWYgKGNhdXNlICE9PSB2bS51bmRlZmluZWQpIGNhdXNlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lc3NhZ2UgIT09IHZtLnVuZGVmaW5lZCkgbWVzc2FnZS5kaXNwb3NlKCk7XG4gICAgICBlcnJvcnNBcmcuZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgRXZhbEVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZXZpdmVyKCdFdmFsRXJyb3InKSxcbiAgICBGYXRhbEVycm9yOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IGNscyA9IHJlZ2lzdGVyZWRFcnJvckNsYXNzKCdAd29ya2Zsb3cvZXJyb3JzLy9GYXRhbEVycm9yJyk7XG4gICAgICBjb25zdCBlcnJvciA9IGNsc1xuICAgICAgICA/IGJ1aWxkRXJyb3IoY2xzLCB2YWx1ZSlcbiAgICAgICAgOiBidWlsZEVycm9yKGkuRXJyb3IsIHZhbHVlLCB7IG5hbWU6ICdGYXRhbEVycm9yJyB9KTtcbiAgICAgIGNscz8uZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgSG9va0NvbmZsaWN0RXJyb3I6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgY2xzID0gcmVnaXN0ZXJlZEVycm9yQ2xhc3MoJ0B3b3JrZmxvdy9lcnJvcnMvL0hvb2tDb25mbGljdEVycm9yJyk7XG4gICAgICBsZXQgZXJyb3I6IEpTVmFsdWVIYW5kbGU7XG4gICAgICBpZiAoY2xzKSB7XG4gICAgICAgIC8vIENvbnN0cnVjdG9yIHRha2VzICh0b2tlbiwgY29uZmxpY3RpbmdSdW5JZCkuXG4gICAgICAgIGNvbnN0IHRva2VuID0gb3duKHZhbHVlLCAndG9rZW4nKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGNvbmZsaWN0aW5nUnVuSWQgPSBvd24odmFsdWUsICdjb25mbGljdGluZ1J1bklkJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICBlcnJvciA9IHZtLmNvbnN0cnVjdChjbHMsIHRva2VuLCBjb25mbGljdGluZ1J1bklkKTtcbiAgICAgICAgaWYgKHRva2VuICE9PSB2bS51bmRlZmluZWQpIHRva2VuLmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGNvbmZsaWN0aW5nUnVuSWQgIT09IHZtLnVuZGVmaW5lZCkgY29uZmxpY3RpbmdSdW5JZC5kaXNwb3NlKCk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gb3duKHZhbHVlLCAnc3RhY2snKTtcbiAgICAgICAgaWYgKHN0YWNrICYmICFzdGFjay5pc1VuZGVmaW5lZCkgZGVmaW5lKGVycm9yLCAnc3RhY2snLCBzdGFjayk7XG4gICAgICAgIHN0YWNrPy5kaXNwb3NlKCk7XG4gICAgICAgIGlmIChndWVzdEhhc093bih2YWx1ZSwgJ2NhdXNlJykpIHtcbiAgICAgICAgICBjb25zdCBjYXVzZSA9IG93bih2YWx1ZSwgJ2NhdXNlJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICAgIGRlZmluZShlcnJvciwgJ2NhdXNlJywgY2F1c2UpO1xuICAgICAgICAgIGlmIChjYXVzZSAhPT0gdm0udW5kZWZpbmVkKSBjYXVzZS5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xzLmRpc3Bvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yID0gYnVpbGRFcnJvcihpLkVycm9yLCB2YWx1ZSwgeyBuYW1lOiAnSG9va0NvbmZsaWN0RXJyb3InIH0pO1xuICAgICAgICBjb25zdCB0b2tlbiA9IG93bih2YWx1ZSwgJ3Rva2VuJyk7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIGRlZmluZShlcnJvciwgJ3Rva2VuJywgdG9rZW4pO1xuICAgICAgICAgIHRva2VuLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25mbGljdGluZ1J1bklkID0gb3duKHZhbHVlLCAnY29uZmxpY3RpbmdSdW5JZCcpO1xuICAgICAgICBpZiAoY29uZmxpY3RpbmdSdW5JZCAmJiAhY29uZmxpY3RpbmdSdW5JZC5pc1VuZGVmaW5lZCkge1xuICAgICAgICAgIGRlZmluZShlcnJvciwgJ2NvbmZsaWN0aW5nUnVuSWQnLCBjb25mbGljdGluZ1J1bklkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25mbGljdGluZ1J1bklkPy5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBSYW5nZUVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZXZpdmVyKCdSYW5nZUVycm9yJyksXG4gICAgUmVmZXJlbmNlRXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ1JlZmVyZW5jZUVycm9yJyksXG4gICAgUmV0cnlhYmxlRXJyb3I6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgcmV0cnlBZnRlck1zID1cbiAgICAgICAgb3duKHZhbHVlLCAncmV0cnlBZnRlcicpPy5jb25zdW1lKChoKSA9PlxuICAgICAgICAgIGguaXNOdW1iZXIgPyBoLnRvTnVtYmVyKCkgOiBOdW1iZXIuTmFOXG4gICAgICAgICkgPz8gTnVtYmVyLk5hTjtcbiAgICAgIGNvbnN0IHRpbWVIYW5kbGUgPSB2bS5uZXdOdW1iZXIocmV0cnlBZnRlck1zKTtcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJEYXRlID0gdm0uY29uc3RydWN0KGkuRGF0ZSwgdGltZUhhbmRsZSk7XG4gICAgICB0aW1lSGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgIGNvbnN0IGNscyA9IHJlZ2lzdGVyZWRFcnJvckNsYXNzKCdAd29ya2Zsb3cvZXJyb3JzLy9SZXRyeWFibGVFcnJvcicpO1xuICAgICAgbGV0IGVycm9yOiBKU1ZhbHVlSGFuZGxlO1xuICAgICAgaWYgKGNscykge1xuICAgICAgICAvLyBDb25zdHJ1Y3RvciB0YWtlcyAobWVzc2FnZSwgeyByZXRyeUFmdGVyIH0pLlxuICAgICAgICBjb25zdCBvcHRpb25zID0gdm0ubmV3T2JqZWN0KCk7XG4gICAgICAgIG9wdGlvbnMuc2V0UHJvcCgncmV0cnlBZnRlcicsIHJldHJ5QWZ0ZXJEYXRlKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG93bih2YWx1ZSwgJ21lc3NhZ2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgIGVycm9yID0gdm0uY29uc3RydWN0KGNscywgbWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSB2bS51bmRlZmluZWQpIG1lc3NhZ2UuZGlzcG9zZSgpO1xuICAgICAgICBvcHRpb25zLmRpc3Bvc2UoKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBvd24odmFsdWUsICdzdGFjaycpO1xuICAgICAgICBpZiAoc3RhY2sgJiYgIXN0YWNrLmlzVW5kZWZpbmVkKSBkZWZpbmUoZXJyb3IsICdzdGFjaycsIHN0YWNrKTtcbiAgICAgICAgc3RhY2s/LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGd1ZXN0SGFzT3duKHZhbHVlLCAnY2F1c2UnKSkge1xuICAgICAgICAgIGNvbnN0IGNhdXNlID0gb3duKHZhbHVlLCAnY2F1c2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgICAgZGVmaW5lKGVycm9yLCAnY2F1c2UnLCBjYXVzZSk7XG4gICAgICAgICAgaWYgKGNhdXNlICE9PSB2bS51bmRlZmluZWQpIGNhdXNlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjbHMuZGlzcG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSBidWlsZEVycm9yKGkuRXJyb3IsIHZhbHVlLCB7IG5hbWU6ICdSZXRyeWFibGVFcnJvcicgfSk7XG4gICAgICAgIGRlZmluZShlcnJvciwgJ3JldHJ5QWZ0ZXInLCByZXRyeUFmdGVyRGF0ZSk7XG4gICAgICB9XG4gICAgICByZXRyeUFmdGVyRGF0ZS5kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBSdW50aW1lRGVjcnlwdGlvbkVycm9yOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IGNscyA9IHJlZ2lzdGVyZWRFcnJvckNsYXNzKFxuICAgICAgICAnQHdvcmtmbG93L2Vycm9ycy8vUnVudGltZURlY3J5cHRpb25FcnJvcidcbiAgICAgICk7XG4gICAgICBsZXQgZXJyb3I6IEpTVmFsdWVIYW5kbGU7XG4gICAgICBpZiAoY2xzKSB7XG4gICAgICAgIC8vIENvbnN0cnVjdG9yIHRha2VzIChtZXNzYWdlLCB7IGNhdXNlLCBjb250ZXh0IH0pLlxuICAgICAgICBjb25zdCBvcHRpb25zID0gdm0ubmV3T2JqZWN0KCk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBvd24odmFsdWUsICdjb250ZXh0Jyk7XG4gICAgICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LmlzVW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3B0aW9ucy5zZXRQcm9wKCdjb250ZXh0JywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dD8uZGlzcG9zZSgpO1xuICAgICAgICBpZiAoZ3Vlc3RIYXNPd24odmFsdWUsICdjYXVzZScpKSB7XG4gICAgICAgICAgY29uc3QgY2F1c2UgPSBvd24odmFsdWUsICdjYXVzZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgICBvcHRpb25zLnNldFByb3AoJ2NhdXNlJywgY2F1c2UpO1xuICAgICAgICAgIGlmIChjYXVzZSAhPT0gdm0udW5kZWZpbmVkKSBjYXVzZS5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG93bih2YWx1ZSwgJ21lc3NhZ2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgIGVycm9yID0gdm0uY29uc3RydWN0KGNscywgbWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSB2bS51bmRlZmluZWQpIG1lc3NhZ2UuZGlzcG9zZSgpO1xuICAgICAgICBvcHRpb25zLmRpc3Bvc2UoKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBvd24odmFsdWUsICdzdGFjaycpO1xuICAgICAgICBpZiAoc3RhY2sgJiYgIXN0YWNrLmlzVW5kZWZpbmVkKSBkZWZpbmUoZXJyb3IsICdzdGFjaycsIHN0YWNrKTtcbiAgICAgICAgc3RhY2s/LmRpc3Bvc2UoKTtcbiAgICAgICAgY2xzLmRpc3Bvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yID0gYnVpbGRFcnJvcihpLkVycm9yLCB2YWx1ZSwgeyBuYW1lOiAnUnVudGltZURlY3J5cHRpb25FcnJvcicgfSk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBvd24odmFsdWUsICdjb250ZXh0Jyk7XG4gICAgICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LmlzVW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVmaW5lKGVycm9yLCAnY29udGV4dCcsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQ/LmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFN5bnRheEVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZXZpdmVyKCdTeW50YXhFcnJvcicpLFxuICAgIFR5cGVFcnJvcjogbmFtZWRFcnJvclN1YmNsYXNzUmV2aXZlcignVHlwZUVycm9yJyksXG4gICAgVVJJRXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ1VSSUVycm9yJyksXG4gICAgRXJyb3I6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkRXJyb3IoaS5FcnJvciwgdmFsdWUsIHtcbiAgICAgICAgbmFtZTogb3duU3RyaW5nKHZhbHVlLCAnbmFtZScpID8/ICdFcnJvcicsXG4gICAgICB9KSxcbiAgICBGbG9hdDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkVHlwZWRBcnJheSgnRmxvYXQzMkFycmF5JywgdmFsdWUpLFxuICAgIEZsb2F0NjRBcnJheTogKHZhbHVlOiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgYnVpbGRUeXBlZEFycmF5KCdGbG9hdDY0QXJyYXknLCB2YWx1ZSksXG4gICAgSW50OEFycmF5OiAodmFsdWU6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGUpID0+XG4gICAgICBidWlsZFR5cGVkQXJyYXkoJ0ludDhBcnJheScsIHZhbHVlKSxcbiAgICBJbnQxNkFycmF5OiAodmFsdWU6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGUpID0+XG4gICAgICBidWlsZFR5cGVkQXJyYXkoJ0ludDE2QXJyYXknLCB2YWx1ZSksXG4gICAgSW50MzJBcnJheTogKHZhbHVlOiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgYnVpbGRUeXBlZEFycmF5KCdJbnQzMkFycmF5JywgdmFsdWUpLFxuICAgIE1hcDogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICAvLyB2YWx1ZSBpcyBhIGd1ZXN0IGFycmF5IG9mIFtrLCB2XSBhcnJheXMuXG4gICAgICBjb25zdCBtYXAgPSB2bS5jb25zdHJ1Y3QoaS5NYXApO1xuICAgICAgY29uc3QgbGVuZ3RoID0gb3duKHZhbHVlLCAnbGVuZ3RoJyk/LmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSkgPz8gMDtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBvd24odmFsdWUsIFN0cmluZyhpbmRleCkpO1xuICAgICAgICBpZiAoIWVudHJ5KSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qga2V5ID0gb3duKGVudHJ5LCAnMCcpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZW50cnlWYWx1ZSA9IG93bihlbnRyeSwgJzEnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgIGNhbGwoaS5tYXBTZXQsIG1hcCwga2V5LCBlbnRyeVZhbHVlKS5kaXNwb3NlKCk7XG4gICAgICAgIGlmIChrZXkgIT09IHZtLnVuZGVmaW5lZCkga2V5LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGVudHJ5VmFsdWUgIT09IHZtLnVuZGVmaW5lZCkgZW50cnlWYWx1ZS5kaXNwb3NlKCk7XG4gICAgICAgIGVudHJ5LmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfSxcbiAgICBSZWdFeHA6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gb3duKHZhbHVlLCAnc291cmNlJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgY29uc3QgZmxhZ3MgPSBvd24odmFsdWUsICdmbGFncycpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlZ2V4cCA9IHZtLmNvbnN0cnVjdChpLlJlZ0V4cCwgc291cmNlLCBmbGFncyk7XG4gICAgICBpZiAoc291cmNlICE9PSB2bS51bmRlZmluZWQpIHNvdXJjZS5kaXNwb3NlKCk7XG4gICAgICBpZiAoZmxhZ3MgIT09IHZtLnVuZGVmaW5lZCkgZmxhZ3MuZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHJlZ2V4cDtcbiAgICB9LFxuICAgIFNldDogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBjb25zdCBzZXQgPSB2bS5jb25zdHJ1Y3QoaS5TZXQpO1xuICAgICAgY29uc3QgbGVuZ3RoID0gb3duKHZhbHVlLCAnbGVuZ3RoJyk/LmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSkgPz8gMDtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG93bih2YWx1ZSwgU3RyaW5nKGluZGV4KSkgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICBjYWxsKGkuc2V0QWRkLCBzZXQsIGVsZW1lbnQpLmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGVsZW1lbnQgIT09IHZtLnVuZGVmaW5lZCkgZWxlbWVudC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0O1xuICAgIH0sXG4gICAgVVJMOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUgfCBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghaS5VUkwpIHRocm93IG5ldyBFcnJvcignVVJMIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIFZNJyk7XG4gICAgICBjb25zdCBocmVmID0gaXNIYW5kbGUodmFsdWUpID8gdmFsdWUgOiB2bS5uZXdTdHJpbmcodmFsdWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHZtLmNvbnN0cnVjdChpLlVSTCwgaHJlZik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgaHJlZi5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBXb3JrZmxvd0Z1bmN0aW9uOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93SWQgPSBvd24odmFsdWUsICd3b3JrZmxvd0lkJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgY29uc3QgdGhyb3dlckZhY3RvcnkgPSB2bS5ldmFsQ29kZShcbiAgICAgICAgYChmdW5jdGlvbih3b3JrZmxvd0lkKSB7XG4gICAgICAgICAgdmFyIGYgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV29ya2Zsb3cgZnVuY3Rpb25zIGNhbm5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIFVzZSBzdGFydCgpIHRvIGludm9rZSB0aGVtLicpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZi53b3JrZmxvd0lkID0gd29ya2Zsb3dJZDtcbiAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSlgXG4gICAgICApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGludm9rZSh0aHJvd2VyRmFjdG9yeSwgd29ya2Zsb3dJZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvd2VyRmFjdG9yeS5kaXNwb3NlKCk7XG4gICAgICAgIGlmICh3b3JrZmxvd0lkICE9PSB2bS51bmRlZmluZWQpIHdvcmtmbG93SWQuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgVVJMU2VhcmNoUGFyYW1zOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUgfCBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghaS5VUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVUkxTZWFyY2hQYXJhbXMgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgVk0nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhdyA9IGlzSGFuZGxlKHZhbHVlKSA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcbiAgICAgIGNvbnN0IGluaXQgPSB2bS5uZXdTdHJpbmcocmF3ID09PSAnLicgPyAnJyA6IHJhdyk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdm0uY29uc3RydWN0KGkuVVJMU2VhcmNoUGFyYW1zLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGluaXQuZGlzcG9zZSgpO1xuICAgICAgICBpZiAoaXNIYW5kbGUodmFsdWUpKSB2YWx1ZS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBVaW50OEFycmF5OiAodmFsdWU6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGUpID0+XG4gICAgICBidWlsZFR5cGVkQXJyYXkoJ1VpbnQ4QXJyYXknLCB2YWx1ZSksXG4gICAgVWludDhDbGFtcGVkQXJyYXk6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkVHlwZWRBcnJheSgnVWludDhDbGFtcGVkQXJyYXknLCB2YWx1ZSksXG4gICAgVWludDE2QXJyYXk6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkVHlwZWRBcnJheSgnVWludDE2QXJyYXknLCB2YWx1ZSksXG4gICAgVWludDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkVHlwZWRBcnJheSgnVWludDMyQXJyYXknLCB2YWx1ZSksXG4gICAgSGVhZGVyczogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBpZiAoIWkuSGVhZGVycykgdGhyb3cgbmV3IEVycm9yKCdIZWFkZXJzIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIFZNJyk7XG4gICAgICByZXR1cm4gdm0uY29uc3RydWN0KGkuSGVhZGVycywgdmFsdWUpO1xuICAgIH0sXG4gICAgUmVxdWVzdDogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICAvLyBNaXJyb3IgdGhlIGluLVZNIHJldml2ZXI6IG11dGF0ZSB0aGUgcGFyc2VkIG9iamVjdCBpbnRvIGFcbiAgICAgIC8vIFJlcXVlc3QtYWxpa2UgYnkgYXR0YWNoaW5nIHRoZSBwcm90b3R5cGUgbWV0aG9kcyBkaXJlY3RseS5cbiAgICAgIGlmIChpLnJlcXVlc3RQcm90b3R5cGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBtZXRob2Qgb2YgWydqc29uJywgJ3RleHQnLCAnYXJyYXlCdWZmZXInXSkge1xuICAgICAgICAgIGNvbnN0IGZuID0gb3duKGkucmVxdWVzdFByb3RvdHlwZSwgbWV0aG9kKTtcbiAgICAgICAgICBpZiAoZm4gJiYgZm4udHlwZW9mID09PSAnZnVuY3Rpb24nKSBkZWZpbmUodmFsdWUsIG1ldGhvZCwgZm4pO1xuICAgICAgICAgIGZuPy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlV3JpdGFibGUgPSBvd24odmFsdWUsICdyZXNwb25zZVdyaXRhYmxlJyk7XG4gICAgICBpZiAocmVzcG9uc2VXcml0YWJsZSAmJiAhcmVzcG9uc2VXcml0YWJsZS5pc1VuZGVmaW5lZCkge1xuICAgICAgICBkZWZpbmUodmFsdWUsIHN5bSgnV0VCSE9PS19SRVNQT05TRV9XUklUQUJMRScpLCByZXNwb25zZVdyaXRhYmxlKTtcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlV3JpdGFibGU/LmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiB2YWx1ZS5kdXAoKTtcbiAgICB9LFxuICAgIFJlc3BvbnNlOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGlmIChpLnJlc3BvbnNlUHJvdG90eXBlKSB7XG4gICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIFtcbiAgICAgICAgICAnanNvbicsXG4gICAgICAgICAgJ3RleHQnLFxuICAgICAgICAgICdhcnJheUJ1ZmZlcicsXG4gICAgICAgICAgJ2J5dGVzJyxcbiAgICAgICAgICAnY2xvbmUnLFxuICAgICAgICBdKSB7XG4gICAgICAgICAgY29uc3QgZm4gPSBvd24oaS5yZXNwb25zZVByb3RvdHlwZSwgbWV0aG9kKTtcbiAgICAgICAgICBpZiAoZm4gJiYgZm4udHlwZW9mID09PSAnZnVuY3Rpb24nKSBkZWZpbmUodmFsdWUsIG1ldGhvZCwgZm4pO1xuICAgICAgICAgIGZuPy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHkgPSBvd24odmFsdWUsICdib2R5JykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgZGVmaW5lKHZhbHVlLCAnX2JvZHknLCBib2R5KTtcbiAgICAgIGlmIChib2R5ICE9PSB2bS51bmRlZmluZWQpIGJvZHkuZGlzcG9zZSgpO1xuICAgICAgY29uc3Qgc3RhdHVzID0gb3duKHZhbHVlLCAnc3RhdHVzJyk/LmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSkgPz8gMDtcbiAgICAgIGNvbnN0IG9rID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgPyB2bS50cnVlIDogdm0uZmFsc2U7XG4gICAgICBkZWZpbmUodmFsdWUsICdvaycsIG9rKTtcbiAgICAgIGRlZmluZSh2YWx1ZSwgJ2JvZHlVc2VkJywgdm0uZmFsc2UpO1xuICAgICAgcmV0dXJuIHZhbHVlLmR1cCgpO1xuICAgIH0sXG4gICAgUmVhZGFibGVTdHJlYW06ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgcHJvdG90eXBlID0gaS5yZWFkYWJsZVN0cmVhbVByb3RvdHlwZSA/PyB2bS5udWxsO1xuICAgICAgY29uc3Qgc3RyZWFtID0gY2FsbChpLm9iamVjdENyZWF0ZSwgdm0udW5kZWZpbmVkLCBwcm90b3R5cGUpO1xuICAgICAgY29uc3QgYm9keUluaXQgPSBvd24odmFsdWUsICdib2R5SW5pdCcpO1xuICAgICAgaWYgKGJvZHlJbml0ICYmICFib2R5SW5pdC5pc1VuZGVmaW5lZCkge1xuICAgICAgICBkZWZpbmUoc3RyZWFtLCBzeW0oJ0JPRFlfSU5JVCcpLCBib2R5SW5pdCk7XG4gICAgICAgIGJvZHlJbml0LmRpc3Bvc2UoKTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICAgIH1cbiAgICAgIGJvZHlJbml0Py5kaXNwb3NlKCk7XG4gICAgICBjb25zdCBuYW1lID0gb3duKHZhbHVlLCAnbmFtZScpO1xuICAgICAgaWYgKG5hbWUgJiYgIW5hbWUuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgZGVmaW5lKHN0cmVhbSwgc3ltKCdXT1JLRkxPV19TVFJFQU1fTkFNRScpLCBuYW1lKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IG93bih2YWx1ZSwgJ3R5cGUnKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgIXR5cGUuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgICBkZWZpbmUoc3RyZWFtLCBzeW0oJ1dPUktGTE9XX1NUUkVBTV9UWVBFJyksIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHR5cGU/LmRpc3Bvc2UoKTtcbiAgICAgICAgY29uc3QgZnJhbWluZyA9IG93bih2YWx1ZSwgJ2ZyYW1pbmcnKTtcbiAgICAgICAgaWYgKGZyYW1pbmcgJiYgIWZyYW1pbmcuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgICBkZWZpbmUoc3RyZWFtLCBzeW0oJ1dPUktGTE9XX1NUUkVBTV9GUkFNSU5HJyksIGZyYW1pbmcpO1xuICAgICAgICB9XG4gICAgICAgIGZyYW1pbmc/LmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIG5hbWU/LmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiBzdHJlYW07XG4gICAgfSxcbiAgICBXcml0YWJsZVN0cmVhbTogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBjb25zdCBwcm90b3R5cGUgPSBpLndyaXRhYmxlU3RyZWFtUHJvdG90eXBlID8/IHZtLm51bGw7XG4gICAgICBjb25zdCBzdHJlYW0gPSBjYWxsKGkub2JqZWN0Q3JlYXRlLCB2bS51bmRlZmluZWQsIHByb3RvdHlwZSk7XG4gICAgICBjb25zdCBuYW1lID0gb3duKHZhbHVlLCAnbmFtZScpO1xuICAgICAgaWYgKG5hbWUgJiYgIW5hbWUuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgZGVmaW5lKHN0cmVhbSwgc3ltKCdXT1JLRkxPV19TVFJFQU1fTkFNRScpLCBuYW1lKTtcbiAgICAgIH1cbiAgICAgIG5hbWU/LmRpc3Bvc2UoKTtcbiAgICAgIGNvbnN0IHJ1bklkID0gb3duKHZhbHVlLCAncnVuSWQnKTtcbiAgICAgIGlmIChydW5JZD8uaXNTdHJpbmcpIHtcbiAgICAgICAgZGVmaW5lKHN0cmVhbSwgc3ltKCdXT1JLRkxPV19TVFJFQU1fU0VSVkVSX1JVTl9JRCcpLCBydW5JZCk7XG4gICAgICB9XG4gICAgICBydW5JZD8uZGlzcG9zZSgpO1xuICAgICAgY29uc3QgZGVwbG95bWVudElkID0gb3duKHZhbHVlLCAnZGVwbG95bWVudElkJyk7XG4gICAgICBpZiAoZGVwbG95bWVudElkPy5pc1N0cmluZykge1xuICAgICAgICBkZWZpbmUoXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIHN5bSgnV09SS0ZMT1dfU1RSRUFNX1NFUlZFUl9ERVBMT1lNRU5UX0lEJyksXG4gICAgICAgICAgZGVwbG95bWVudElkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZXBsb3ltZW50SWQ/LmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiBzdHJlYW07XG4gICAgfSxcbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFR5cGVkQXJyYXkoXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgYmFzZTY0OiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlXG4gICk6IEpTVmFsdWVIYW5kbGUge1xuICAgIGNvbnN0IENvbnN0cnVjdG9yID0gdHlwZWRBcnJheUNvbnN0cnVjdG9ycy5nZXQodGFnKTtcbiAgICBpZiAoIUNvbnN0cnVjdG9yKSB0aHJvdyBuZXcgRXJyb3IoYCR7dGFnfSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBWTWApO1xuICAgIC8vIFBhcnNlIG9wZXJhdGlvbnMgYnVpbGQgZ3Vlc3QgdmFsdWVzLCBzbyBhIHJlZHVjZWQgYmFzZTY0IHBheWxvYWRcbiAgICAvLyBhcnJpdmVzIGFzIGEgZ3Vlc3Qgc3RyaW5nIGhhbmRsZS5cbiAgICBjb25zdCByYXcgPSBpc0hhbmRsZShiYXNlNjQpID8gYmFzZTY0LnRvU3RyaW5nKCkgOiBiYXNlNjQ7XG4gICAgY29uc3QgYnl0ZXMgPSBiYXNlNjRUb0J5dGVzKHJhdyk7XG4gICAgY29uc3QgYnVmZmVyID0gdm0ubmV3QXJyYXlCdWZmZXIoXG4gICAgICBieXRlcy5idWZmZXIuc2xpY2UoXG4gICAgICAgIGJ5dGVzLmJ5dGVPZmZzZXQsXG4gICAgICAgIGJ5dGVzLmJ5dGVPZmZzZXQgKyBieXRlcy5ieXRlTGVuZ3RoXG4gICAgICApIGFzIEFycmF5QnVmZmVyXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZtLmNvbnN0cnVjdChDb25zdHJ1Y3RvciwgYnVmZmVyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYnVmZmVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb29rdXBSZWdpc3RlcmVkQ2xhc3MoXG4gICAgY2xhc3NJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IEpTVmFsdWVIYW5kbGUgfCB1bmRlZmluZWQge1xuICAgIGlmIChjbGFzc0lkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBvd24odm0uZ2xvYmFsLCBzeW0oJ3dvcmtmbG93LWNsYXNzLXJlZ2lzdHJ5JykpO1xuICAgIGlmICghcmVnaXN0cnkgfHwgcmVnaXN0cnkuaXNVbmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdHJ5Py5kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2V0TWV0aG9kID0gY2hhaW5lZChyZWdpc3RyeSwgJ2dldCcpO1xuICAgICAgaWYgKCFnZXRNZXRob2QpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBrZXkgPSB2bS5uZXdTdHJpbmcoY2xhc3NJZCk7XG4gICAgICAgIGNvbnN0IGNscyA9IGNhbGwoZ2V0TWV0aG9kLCByZWdpc3RyeSwga2V5KTtcbiAgICAgICAga2V5LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGNscy5pc1VuZGVmaW5lZCB8fCBjbHMudHlwZW9mICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY2xzLmRpc3Bvc2UoKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbHM7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBnZXRNZXRob2QuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZWdpc3RyeS5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIHB1YmxpYyBBUEkgLS0tXG5cbiAgcmV0dXJuIHtcbiAgICByZWR1Y2VyS2V5czogT2JqZWN0LmtleXMocmVkdWNlcnMpLFxuICAgIHJldml2ZXJLZXlzOiBPYmplY3Qua2V5cyhyZXZpdmVycyksXG4gICAgaW5zdGFsbFByb2Nlc3NFbnYoZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KTogdm9pZCB7XG4gICAgICBjb25zdCBwbGFpbjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52KSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcGxhaW5ba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgdXNpbmcgZW52SGFuZGxlID0gdm0uaG9zdFRvSGFuZGxlKHBsYWluKTtcbiAgICAgIGNhbGwoaS5vYmplY3RGcmVlemUsIHZtLnVuZGVmaW5lZCwgZW52SGFuZGxlKS5kaXNwb3NlKCk7XG4gICAgICB1c2luZyBwcm9jZXNzSGFuZGxlID0gdm0ubmV3T2JqZWN0KCk7XG4gICAgICBkZWZpbmUocHJvY2Vzc0hhbmRsZSwgJ2VudicsIGVudkhhbmRsZSk7XG4gICAgICB2bS5zZXRQcm9wKHZtLmdsb2JhbCwgJ3Byb2Nlc3MnLCBwcm9jZXNzSGFuZGxlKTtcbiAgICB9LFxuICAgIHNlcmlhbGl6ZSh2YWx1ZTogSlNWYWx1ZUhhbmRsZSk6IFVpbnQ4QXJyYXkge1xuICAgICAgLy8gSGFuZGxlIHNjb3BlOiByZWR1Y2VycyBhbmQgdGhlIGh5YnJpZCBvcGVyYXRpb25zIG1pbnQgb25lIGhhbmRsZVxuICAgICAgLy8gcGVyIHZpc2l0ZWQgdmFsdWUgbm9kZSAoZGVzY3JpcHRvciByZWFkcywgZHVwKClzLCBpbnRyaW5zaWMgY2FsbFxuICAgICAgLy8gcmVzdWx0cykgYW5kIG5vdGhpbmcgZGlzcG9zZXMgdGhlbSBpbmRpdmlkdWFsbHkg4oCUIHdpdGhvdXQgdGhlXG4gICAgICAvLyBzY29wZSBlYWNoIHNlcmlhbGl6ZSBsZWFrcyB+b25lIGhhbmRsZSBwZXIgbm9kZSBmb3IgdGhlIFZNJ3NcbiAgICAgIC8vIGxpZmV0aW1lLCB3aGljaCBjb21wb3VuZHMgYWNyb3NzIGFuIGlubGluZS1sb29wIHNlc3Npb24ncyB3aG9sZVxuICAgICAgLy8gYmF0Y2guIFJlcXVpcmVzIHF1aWNranMtd2FzaSA+PSAzLjMuMTogZWFybGllciB2ZXJzaW9ucyBhbHNvXG4gICAgICAvLyBzY29wZS10cmFja2VkIHRoZSBoYW5kbGVzIHRoZSBob3N0LWNhbGxiYWNrIHRyYW1wb2xpbmUgd3JhcHNcbiAgICAgIC8vIGFyb3VuZCBDLW93bmVkIGFyZ3YgcG9pbnRlcnMsIGFuZCBkaXNwb3NpbmcgdGhvc2UgKE1hcC9TZXQvXG4gICAgICAvLyBIZWFkZXJzIGZvckVhY2ggdmlzaXRvcnMgcnVuIG1pZC1wYXNzKSBjb3JydXB0ZWQgdGhlIGd1ZXN0IGhlYXA7XG4gICAgICAvLyAzLjMuMSBtYXJrcyB0aGVtIGJvcnJvd2VkIGFuZCBzY29wZS1leGVtcHQuIFRoZSBpbnB1dCBoYW5kbGUgaXNcbiAgICAgIC8vIGNhbGxlci1vd25lZCAoY3JlYXRlZCBiZWZvcmUgdGhlIHNjb3BlKSBhbmQgdGhlIG91dHB1dCBpcyBob3N0XG4gICAgICAvLyBieXRlcywgc28gbm90aGluZyBlc2NhcGVzLlxuICAgICAgLy9cbiAgICAgIC8vIGBpZGVudGl0aWVzYCBtdXN0IGJlIGNsZWFyZWQgcGVyIHBhc3MgT05DRSBoYW5kbGVzIGFyZSBidWxrLWZyZWVkOlxuICAgICAgLy8gaXQga2V5cyBvYmplY3QgaWRlbnRpdHkgb24gdGhlIHJhdyBndWVzdCBwb2ludGVyLCBhbmQgZnJlZWluZ1xuICAgICAgLy8gaGFuZGxlcyBsZXRzIFF1aWNrSlMgcmV1c2UgcG9pbnRlcnMg4oCUIGEgc3RhbGUgZW50cnkgZnJvbSBhblxuICAgICAgLy8gZWFybGllciBwYXNzIGNvdWxkIHRoZW4gYWxpYXMgYSBkaWZmZXJlbnQgb2JqZWN0IGFuZCBjb3JydXB0IHRoZVxuICAgICAgLy8gZGVkdXAvY3ljbGUgZGV0ZWN0aW9uLiBJZGVudGl0eSBvbmx5IG5lZWRzIHN0YWJpbGl0eSB3aXRoaW4gb25lXG4gICAgICAvLyBzdHJpbmdpZnkgcGFzcy5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB2bS53aXRoU2NvcGUoKCkgPT5cbiAgICAgICAgICBlbmNvZGVyLmVuY29kZShcbiAgICAgICAgICAgIHN0cmluZ2lmeSh2YWx1ZSwgcmVkdWNlcnMsIHsgb3BlcmF0aW9uczogc3RyaW5naWZ5T3BlcmF0aW9ucyB9KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gZW5jb2Rlci5lbmNvZGUoU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkocHJlZml4Lmxlbmd0aCArIHBheWxvYWQubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnNldChwcmVmaXgsIDApO1xuICAgICAgICByZXN1bHQuc2V0KHBheWxvYWQsIHByZWZpeC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWRlbnRpdGllcy5jbGVhcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUoZGF0YTogVWludDhBcnJheSk6IEpTVmFsdWVIYW5kbGUge1xuICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgRk9STUFUX1BSRUZJWF9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIHRvbyBzaG9ydCB0byBjb250YWluIGZvcm1hdCBwcmVmaXgnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByZWZpeCA9IGRlY29kZXIuZGVjb2RlKGRhdGEuc3ViYXJyYXkoMCwgRk9STUFUX1BSRUZJWF9MRU5HVEgpKTtcbiAgICAgIGlmIChwcmVmaXggIT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuREVWQUxVRV9WMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHNlcmlhbGl6YXRpb24gZm9ybWF0OiAke3ByZWZpeH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBkZWNvZGVyLmRlY29kZShkYXRhLnN1YmFycmF5KEZPUk1BVF9QUkVGSVhfTEVOR1RIKSk7XG4gICAgICAvLyBIYW5kbGUgc2NvcGUsIG1pcnJvcmluZyBzZXJpYWxpemUoKTogcmV2aXZlcnMgbWludCBpbnRlcm1lZGlhdGVcbiAgICAgIC8vIGhhbmRsZXMgKGNoaWxkcmVuIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlaXIgcGFyZW50cywgaW50cmluc2ljXG4gICAgICAvLyBjYWxsIHJlc3VsdHMpIHRoYXQgYXJlIHNhZmUgdG8gZnJlZSBvbmNlIHRoZSBncmFwaCBpcyBidWlsdCDigJRcbiAgICAgIC8vIGd1ZXN0IHZhbHVlcyBhcmUgcmVmY291bnRlZCwgc28gcGFyZW50cyBrZWVwIHRoZWlyIGNoaWxkcmVuXG4gICAgICAvLyBhbGl2ZS4gT25seSB0aGUgcm9vdCBlc2NhcGVzIHRvIHRoZSBjYWxsZXIuXG4gICAgICByZXR1cm4gdm0ud2l0aFNjb3BlKChzY29wZSkgPT5cbiAgICAgICAgc2NvcGUuZXNjYXBlKFxuICAgICAgICAgIHBhcnNlKHBheWxvYWQsIHJldml2ZXJzLCB7XG4gICAgICAgICAgICBvcGVyYXRpb25zOiBwYXJzZU9wZXJhdGlvbnMsXG4gICAgICAgICAgfSkgYXMgSlNWYWx1ZUhhbmRsZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sXG4gICAgZGlzcG9zZSgpIHtcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlIG9mIGRpc3Bvc2FibGVzLnJldmVyc2UoKSkgaGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgIGRpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG4gICAgICBpZGVudGl0aWVzLmNsZWFyKCk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
2098
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tqcy1zZXJkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3F1aWNranMtc2VyZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixrQkFBa0IsRUFFbEIsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFlL0IsTUFBTSxlQUFlLEdBQ25CLE9BQVEsVUFBbUMsQ0FBQyxVQUFVLEtBQUssVUFBVTtJQUNyRSxPQUFRLFVBQVUsQ0FBQyxTQUE4QixDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUM7QUFDNUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxDQUFDO0FBRS9DLFNBQVMsYUFBYSxDQUFDLEtBQWlCO0lBQ3RDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDbkMsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixPQUFRLEtBQTBCLENBQUMsUUFBUSxFQUFFLEVBQVksQ0FBQztJQUM1RCxDQUFDO0lBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDaEIsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsVUFBVSxFQUNoQixLQUFLLENBQUMsVUFBVSxDQUNqQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDNUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2xDLElBQUksS0FBSyxLQUFLLEdBQUc7UUFBRSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsT0FBUSxVQUFtQyxDQUFDLFVBQVUsRUFBRSxDQUN0RCxLQUFLLENBQ1EsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCwrQkFBK0I7QUFFL0IsZ0VBQWdFO0FBQ2hFLE1BQU0sZUFBZSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCckIsQ0FBQztBQUVKOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXFGdEIsQ0FBQztBQUVOOzs7R0FHRztBQUNILE1BQU0sWUFBWSxHQUFHO0lBQ25CLDRCQUE0QjtJQUM1QiwyQkFBMkI7SUFDM0IsV0FBVztJQUNYLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIseUJBQXlCO0lBQ3pCLCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMsMkJBQTJCO0lBQzNCLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRSxxQ0FBcUM7SUFDM0Qsc0JBQXNCLEVBQUUsdUNBQXVDO0lBQy9ELHlCQUF5QjtJQUN6Qiw4QkFBOEI7SUFDOUIscUNBQXFDO0lBQ3JDLGtDQUFrQztJQUNsQywwQ0FBMEM7Q0FDbEMsQ0FBQztBQUdYOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFlBQVksR0FBRztnQkFDTCxrQkFBa0I7YUFDckIsZUFBZTs7RUFFMUIsWUFBWSxDQUFDLEdBQUcsQ0FDaEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDN0UsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOztNQUVQLENBQUM7QUFFUDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUFXO0lBQzFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxFQUFXLEVBQUUsS0FBYTtJQUN2RCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUFXLEVBQUUsSUFBbUI7SUFDOUQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUE2QkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsRUFBVztBQUNYOzs7Ozs7OztHQVFHO0FBQ0gsWUFBNEI7SUFFNUIsTUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQztJQUN4QyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQXFCLEVBQWlCLEVBQUU7UUFDcEQsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBMEIsRUFBRSxDQUMxRCxLQUFLLFlBQVksYUFBYSxDQUFDO0lBRWpDLHVCQUF1QjtJQUV2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDL0MsQ0FBQztRQUNDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDO1lBQ0gsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQVksRUFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0Usa0VBQWtFO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBWSxFQUE2QixFQUFFO1FBQzNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pELENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxHQUFHO1FBQ1IsV0FBVyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDOUIsZUFBZSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUN0QyxZQUFZLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUNoQyxXQUFXLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUM5QixhQUFhLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxjQUFjLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBQ3BDLGFBQWEsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQ2xDLGNBQWMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7UUFDcEMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDNUIsVUFBVSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDNUIsY0FBYyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMxQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUM1Qix1QkFBdUIsRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUM7UUFDNUQsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1FBQ3BELFVBQVUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQzVCLGNBQWMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7UUFDcEMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNwQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQztRQUM1QixjQUFjLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBQ3BDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztRQUM1QyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUM7UUFDNUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDO1FBQ2xELGVBQWUsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUM7UUFDdEMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNwQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsdUJBQXVCLENBQUM7UUFDeEQsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1FBQzlDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztRQUM5QyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsbUJBQW1CLENBQUM7UUFDaEQsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDO1FBQzVELHVCQUF1QixFQUFFLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztRQUM1RCxZQUFZLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUN0Qyx3QkFBd0IsRUFBRSxRQUFRLENBQUMsMEJBQTBCLENBQUM7UUFDOUQsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDaEIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDcEIsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDZCxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNkLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO1FBQ3BCLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ2xCLGNBQWMsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDMUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDdEMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDNUIsY0FBYyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMxQyxjQUFjLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQzFDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3BCLGVBQWUsRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUM7UUFDNUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDcEIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDcEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUM7UUFDaEMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNwQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUNoQyxZQUFZLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUNoQyxlQUFlLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1FBQ3RDLFNBQVMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDO0tBQzNCLENBQUM7SUFFRixNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBQzNELEtBQUssTUFBTSxJQUFJLElBQUk7UUFDakIsV0FBVztRQUNYLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsYUFBYTtRQUNiLFdBQVc7UUFDWCxVQUFVO0tBQ1gsRUFBRSxDQUFDO1FBQ0YsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUNoRSxLQUFLLE1BQU0sSUFBSSxJQUFJO1FBQ2pCLFdBQVc7UUFDWCxZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLFlBQVk7UUFDWixhQUFhO1FBQ2IsWUFBWTtRQUNaLGFBQWE7UUFDYixjQUFjO1FBQ2QsY0FBYztRQUNkLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsVUFBVTtLQUNYLEVBQUUsQ0FBQztRQUNGLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO0lBQ3JELENBQUM7OztZQUNDLE1BQU0sZ0JBQWdCLGtDQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQUEsQ0FBQztZQUNqRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDOzs7Ozs7Ozs7S0FDRjtJQUNELE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBZ0IsRUFBaUIsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7SUFFRix5QkFBeUI7SUFFekIsTUFBTSxJQUFJLEdBQUcsQ0FDWCxFQUFpQixFQUNqQixTQUF3QixFQUN4QixHQUFHLElBQXFCLEVBQ1QsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRTVELE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBaUIsRUFBRSxHQUFHLElBQXFCLEVBQWlCLEVBQUUsQ0FDNUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRTdDOzs7Ozs7T0FNRztJQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBcUIsRUFBRSxHQUFXLEVBQVcsRUFBRTtJQUNsRSxxS0FBcUs7SUFDckssTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU3Qjs7OztPQUlHO0lBQ0gsTUFBTSxHQUFHLEdBQUcsQ0FDVixNQUFxQixFQUNyQixHQUEyQixFQUNBLEVBQUU7UUFDN0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEdBQWEsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzFCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FDZCxNQUFxQixFQUNyQixHQUEyQixFQUNBLEVBQUU7UUFDN0IsSUFBSSxPQUFrQyxDQUFDO1FBQ3ZDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLHVDQUF1QztRQUMxRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDcEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLEtBQUs7b0JBQUcsTUFBd0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDL0MsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLElBQUksS0FBSztnQkFBRyxNQUF3QixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9DLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUNELE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDZixLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2IsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxLQUFLLElBQUksT0FBTztZQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixxRUFBcUU7SUFDckUsTUFBTSxhQUFhLEdBQUcsQ0FDcEIsTUFBcUIsRUFDckIsR0FBMkIsRUFDUCxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsQ0FDaEIsTUFBcUIsRUFDckIsR0FBMkIsRUFDUCxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILE1BQU0sWUFBWSxHQUFHLENBQ25CLE1BQXFCLEVBQ3JCLGVBQTBDLEVBQ2pDLEVBQUU7UUFDWCxJQUFJLENBQUMsZUFBZTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25DLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDeEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUYsa0VBQWtFO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLENBQ2IsTUFBcUIsRUFDckIsR0FBMkIsRUFDM0IsS0FBb0IsRUFDZCxFQUFFO1FBQ1IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQztZQUNILFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25DLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQ0YsQ0FBQyxDQUFDLGNBQWMsRUFDaEIsRUFBRSxDQUFDLFNBQVMsRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULFVBQVUsQ0FDWCxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNkLENBQUM7d0JBQVMsQ0FBQztvQkFDVCxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFFLENBQUM7UUFDSCxDQUFDO2dCQUFTLENBQUM7WUFDVCxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYSxFQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU3RSw2REFBNkQ7SUFDN0QsTUFBTSxPQUFPLEdBQUcsQ0FDZCxPQUFzQixFQUN0QixVQUF5QixFQUN6QixLQUFZLEVBQ0QsRUFBRTtRQUNiLE1BQU0sU0FBUyxHQUFjLEVBQUUsQ0FBQztRQUNoQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQ3JDLENBQUMsS0FBb0IsRUFBRSxHQUFrQixFQUFFLEVBQUU7WUFDM0MsOERBQThEO1lBQzlELDZEQUE2RDtZQUM3RCw0REFBNEQ7WUFDNUQsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3RCLENBQUMsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0MsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixnRUFBZ0U7SUFDaEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFxQixFQUFjLEVBQUU7UUFDdEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FDckIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQ3BELE1BQU0sQ0FDUCxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUNyQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFDcEQsTUFBTSxDQUNQLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNyRCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUM3RCxDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBcUIsRUFBVSxFQUFFO1FBQ3BELElBQUksTUFBTSxDQUFDLE9BQU87WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUNwQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBQztJQUN0RCxDQUFDLENBQUM7SUFFRixtQkFBbUI7SUFFbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFlLEVBQVUsRUFBRTtRQUM3QyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQXFCLEVBQVcsRUFBRTtRQUNyRCxJQUFJLE1BQU0sQ0FBQyxXQUFXO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDekMsSUFBSSxNQUFNLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9CLElBQUksTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxJQUFJLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUMsSUFBSSxNQUFNLENBQUMsUUFBUTtZQUFFLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBcUIsRUFBVSxFQUFFLENBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdEUsc0NBQXNDO0lBQ3RDLHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFFbkMsTUFBTSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7SUFFckMsTUFBTSxtQkFBbUIsR0FBd0I7UUFDL0MsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRO2dCQUFFLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9ELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsSUFBSSxLQUFLLENBQUMsTUFBTTtnQkFBRSxPQUFPLE1BQU0sQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQyxNQUFtRCxDQUFDO1FBQ25FLENBQUM7UUFDRCxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN0RSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDcEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN6RCxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxPQUFPLElBQUksT0FBTztnQkFBRSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDNUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxRQUFRLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzQixLQUFLLFFBQVE7b0JBQ1gsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEMsS0FBSyxRQUFRO29CQUNYLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLEtBQUssU0FBUztvQkFDWixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QztvQkFDRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO1FBQ0QsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELElBQ0UsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQ3JFLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsZ0VBQWdFO1lBQ2hFLHNFQUFzRTtZQUN0RSxtRUFBbUU7WUFDbkUsY0FBYztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2IscUNBQXFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUNwRSxDQUFDO1FBQ0osQ0FBQztRQUNELFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQy9ELENBQUM7UUFDSixDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3ZFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ25CLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDYixDQUFDLENBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBa0M7WUFDbkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3hCLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekUsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsTUFBTTtnQkFDTixVQUFVLEVBQUUsSUFBSSxDQUNkLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUNwRCxLQUFLLENBQ04sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsVUFBVSxFQUFFLElBQUksQ0FDZCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFDcEQsS0FBSyxDQUNOLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzlCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDcEUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUNiO2dCQUNELE1BQU0sRUFBRSxDQUFDO2FBQ1YsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUN2QixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDbEUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEMsT0FBTyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUNyQixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztRQUMxRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUN6RSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTztnQkFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQW9CLEVBQUUsQ0FBQztZQUN6RCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUNYLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFvQixFQUFFLENBQUM7Z0JBQ3BELE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO29CQUM3QyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUM1QixNQUFNLFVBQVUsR0FDZCxLQUFLLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxJQUFJLEtBQUssQ0FBQzt3QkFDM0QsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNkLElBQUksVUFBVTs0QkFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQXNCLEVBQUUsQ0FBQzt3QkFDeEQsU0FBUztvQkFDWCxDQUFDO29CQUNELElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQzt3QkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO2dCQUNELE9BQU87b0JBQ0wsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLFlBQXNCLENBQUMsQ0FBQyxDQUFFLE9BQWlCO29CQUNyRSxJQUFJO2lCQUNMLENBQUM7WUFDSixDQUFDO29CQUFTLENBQUM7Z0JBQ1QsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBQ0QsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0MsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxVQUFVO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBQ2xDLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixvRUFBb0U7Z0JBQ3BFLG1FQUFtRTtnQkFDbkUsbUVBQW1FO2dCQUNuRSxtREFBbUQ7Z0JBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMxQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQztLQUNGLENBQUM7SUFFRiwyQ0FBMkM7SUFFM0Msb0VBQW9FO0lBQ3BFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsS0FBb0IsRUFDa0MsRUFBRTtRQUN4RCxNQUFNLEtBQUssR0FBeUQ7WUFDbEUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRTtTQUMvQyxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixNQUFNLHlCQUF5QixHQUM3QixDQUFDLFlBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDckQsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLFlBQVk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoRSxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQztJQUVKLHdFQUF3RTtJQUN4RSxNQUFNLGVBQWUsR0FBRyxDQUN0QixLQUFvQixFQUNwQixJQUFnQixFQUNJLEVBQUU7UUFDdEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQW9CLEVBQVcsRUFBRTtRQUNwRCx3RUFBd0U7UUFDeEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUNkLGVBQWUsQ0FBQyxLQUFLLEVBQUUsNEJBQTRCLENBQUM7WUFDcEQsZUFBZSxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUNiLGVBQWUsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLENBQUM7WUFDbkQsZUFBZSxDQUFDLE1BQU0sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FDWCxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzNELElBQUksTUFBTSxJQUFJLE1BQU0sS0FBSyxLQUFLO1lBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pELE9BQU87WUFDTCxVQUFVO1lBQ1YsU0FBUztZQUNULE9BQU87WUFDUCxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDckMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUF3QztRQUNwRCwyREFBMkQ7UUFDM0QsOERBQThEO1FBQzlELGVBQWUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDaEQsTUFBTSxRQUFRLEdBQ1osZUFBZSxDQUFDLEtBQUssRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLFNBQVM7Z0JBQ2xFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUMzQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLFNBQVMsQ0FDdEUsQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzVCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEUsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxlQUFlLENBQUMsS0FBSyxFQUFFLDRCQUE0QixDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ2xFLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUMsSUFBSSxPQUFPLEtBQUssU0FBUztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdEMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNmLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxlQUFlLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDOUQsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUMzQixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELElBQUksQ0FBQztvQkFDSCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUM5QyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDMUIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxhQUFhLENBQUM7d0JBQ3pELE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxJQUFJLDBFQUEwRSxDQUN6RixDQUFDO29CQUNKLENBQUM7b0JBQ0QsbUVBQW1FO29CQUNuRSxtQ0FBbUM7b0JBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMzQixDQUFDO3dCQUFTLENBQUM7b0JBQ1QsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixDQUFDO1lBQ0gsQ0FBQztvQkFBUyxDQUFDO2dCQUNULEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQztRQUNELFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ2xFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUMsSUFBSSxNQUFNLEtBQUssU0FBUztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN2QyxNQUFNLE9BQU8sR0FLVCxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2YsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3BELElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDeEMsb0RBQW9EO29CQUNwRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO3dCQUFFLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDOzt3QkFDM0QsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixDQUFDO2dCQUNELGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM1QyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLE1BQU0sTUFBTSxHQUNWLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlELElBQUksU0FBUyxDQUFDLE9BQU8sSUFBSSxNQUFNLEdBQUcsQ0FBQztvQkFBRSxPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7b0JBQzlELFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUM3RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDdEQsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUNELGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3ZCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssZUFBZTtZQUN2RCxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsS0FBSztRQUNYLGNBQWMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3hCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssZ0JBQWdCO1lBQ3hELENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxLQUFLO1FBQ1gsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3BFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3ZELElBQ0UsQ0FBQyxDQUFDLENBQUMscUJBQXFCO2dCQUN4QixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQzdDLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUE0QixDQUFDO1lBQ2pFLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNqRSxDQUFDO1FBQ0osQ0FBQztRQUNELGNBQWMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUNyRCxJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssZ0JBQWdCO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3BFLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBNEIsQ0FBQztZQUNqRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7Z0JBQzVCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDakUsQ0FBQztRQUNKLENBQUM7UUFDRCxTQUFTLEVBQUUseUJBQXlCLENBQUMsV0FBVyxDQUFDO1FBQ2pELFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxZQUFZLENBQUM7UUFDbkQsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDckQsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLG1CQUFtQjtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN2RSxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQTRCLENBQUM7WUFDakUsTUFBTSxPQUFPLEdBQTRCO2dCQUN2QyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO2FBQzNCLENBQUM7WUFDRixNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN4RCxJQUFJLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztZQUM5QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDOUIsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMvRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsVUFBVSxFQUFFLHlCQUF5QixDQUFDLFlBQVksQ0FBQztRQUNuRCxjQUFjLEVBQUUseUJBQXlCLENBQUMsZ0JBQWdCLENBQUM7UUFDM0QsY0FBYyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3JELElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxnQkFBZ0I7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDcEUsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUE0QixDQUFDO1lBQ2pFLHVFQUF1RTtZQUN2RSwrREFBK0Q7WUFDL0Qsb0VBQW9FO1lBQ3BFLGdFQUFnRTtZQUNoRSxrRUFBa0U7WUFDbEUsbUVBQW1FO1lBQ25FLGtCQUFrQjtZQUNsQixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3ZFLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDckMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUFFLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7cUJBQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQ2hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUMvQyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQTRCO2dCQUN2QyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsVUFBVTthQUNYLENBQUM7WUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztnQkFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDL0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELHNCQUFzQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3JELElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyx3QkFBd0IsRUFBRSxDQUFDO2dCQUM5RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQTRCLENBQUM7WUFDakUsTUFBTSxPQUFPLEdBQTRCO2dCQUN2QyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzthQUNuQixDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO2dCQUFFLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOztnQkFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMvRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsV0FBVyxFQUFFLHlCQUF5QixDQUFDLGFBQWEsQ0FBQztRQUNyRCxTQUFTLEVBQUUseUJBQXlCLENBQUMsV0FBVyxDQUFDO1FBQ2pELFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDckQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUE0QixDQUFDO1lBQ2pFLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTztnQkFDN0MsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDakUsQ0FBQztRQUNKLENBQUM7UUFDRCxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLGNBQWM7WUFDdEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLEtBQUs7UUFDWCxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLGNBQWM7WUFDdEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLEtBQUs7UUFDWCxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVc7WUFDbkQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLEtBQUs7UUFDWCxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNwQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVk7WUFDcEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLEtBQUs7UUFDWCxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNwQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVk7WUFDcEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLEtBQUs7UUFDWCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSztZQUM3QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsS0FBSztRQUNYLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDdEUsT0FBTztnQkFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUMvRCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLElBQ0UsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7Z0JBQ25CLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFDakIsQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxpRUFBaUU7WUFDakUsdURBQXVEO1lBQ3ZELE1BQU0sT0FBTyxHQUF1QixFQUFFLENBQUM7WUFDdkMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUNyQyxDQUFDLFdBQTBCLEVBQUUsU0FBd0IsRUFBRSxFQUFFO2dCQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN0QixDQUFDLENBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkQsQ0FBQztvQkFBUyxDQUFDO2dCQUNULE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FDYixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMvRCxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM3QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQTRCO2dCQUNwQyxNQUFNO2dCQUNOLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztnQkFDdEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO2dCQUM5QixJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7Z0JBQ3hCLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQzthQUM3QixDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7WUFDM0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzlCLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEUsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQ2QsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDakUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDOUIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO2dCQUN4QixHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7Z0JBQ3RCLE1BQU07Z0JBQ04sVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO2dCQUNwQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7Z0JBQzlCLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztnQkFDeEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO2FBQ3JDLENBQUM7UUFDSixDQUFDO1FBQ0QsY0FBYyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEIsSUFDRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hCLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFDekIsS0FBSyxDQUFDLE1BQU07Z0JBQ1osQ0FBQyxDQUFDLENBQUMsdUJBQXVCO2dCQUMxQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQy9DLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzVELElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLEdBQTRCLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxJQUFJO29CQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLHlCQUF5QixDQUFDLENBQUM7Z0JBQ2xFLElBQUksT0FBTztvQkFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDakMsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsY0FBYyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEIsSUFDRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hCLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFDekIsS0FBSyxDQUFDLE1BQU07Z0JBQ1osQ0FBQyxDQUFDLENBQUMsdUJBQXVCO2dCQUMxQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEVBQy9DLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxDQUFDLEdBQTRCO2dCQUNqQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLFNBQVM7YUFDbEUsQ0FBQztZQUNGLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUMsQ0FBQztZQUN0RSxJQUFJLEtBQUs7Z0JBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDM0IsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUNsQyxLQUFLLEVBQ0wsc0NBQXNDLENBQ3ZDLENBQUM7WUFDRixJQUFJLFlBQVk7Z0JBQUUsQ0FBQyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDaEQsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDYixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUs7WUFDN0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLEtBQUs7UUFDWCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNiLElBQ0UsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQyxZQUFZO2dCQUNmLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQ1YsQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELGdCQUFnQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDbEUsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNsRCxJQUFJLFVBQVUsS0FBSyxTQUFTO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBQ0QsZUFBZSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekIsSUFDRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtnQkFDM0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQzFCLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQjtnQkFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ2YsSUFBSSxJQUFJLEtBQUssQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDMUQsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUNiLENBQUM7UUFDSixDQUFDO1FBQ0QsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDcEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxZQUFZO1lBQ3BELENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxLQUFLO1FBQ1gsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUMzQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQjtZQUMzRCxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsS0FBSztRQUNYLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3JCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssYUFBYTtZQUNyRCxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsS0FBSztRQUNYLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3JCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssYUFBYTtZQUNyRCxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsS0FBSztLQUNaLENBQUM7SUFFRix3RUFBd0U7SUFFeEUsTUFBTSxlQUFlLEdBQW9CO1FBQ3ZDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3ZCLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDMUUsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQ1osR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDO2dCQUNILE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7UUFDRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsOEJBQThCLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUN0RCxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQztvQkFDSCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQzNELENBQUM7d0JBQVMsQ0FBQztvQkFDVCxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBQ0QsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDaEQsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxXQUFXO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLDZCQUE2QixDQUFDLENBQUM7WUFDdkUsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsTUFBdUIsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQztnQkFDSCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQ2pCLFdBQVcsRUFDWCxNQUF1QixFQUN2QixZQUFZLEVBQ1osWUFBWSxDQUNiLENBQUM7WUFDSixDQUFDO29CQUFTLENBQUM7Z0JBQ1QsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFzQixDQUFDO1FBQzlELFdBQVcsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDO2dCQUNILE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzdDLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFDRCxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzVCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDakQsQ0FBQztvQkFBUyxDQUFDO2dCQUNULFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUNELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFO1FBQ2xDLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxDQUM5QixJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDN0MsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNwQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3BDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDMUIsTUFBTSxDQUFDLE1BQXVCLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQXNCLENBQUM7UUFDdEUsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQW9CLEVBQUUsS0FBc0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pFLENBQUM7UUFDRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FDRixDQUFDLENBQUMsTUFBTSxFQUNSLEdBQW9CLEVBQ3BCLEdBQW9CLEVBQ3BCLEtBQXNCLENBQ3ZCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO0tBQ0YsQ0FBQztJQUVGLDJDQUEyQztJQUUzQyx5RUFBeUU7SUFDekUsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixJQUFnQixFQUNXLEVBQUU7UUFDN0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3RDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGLHdFQUF3RTtJQUN4RSxNQUFNLFVBQVUsR0FBRyxDQUNqQixJQUFtQixFQUNuQixLQUFvQixFQUNwQixPQUEyRCxFQUFFLEVBQzlDLEVBQUU7UUFDakIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQyxTQUFTO1lBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO1lBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0QsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNsRCxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsU0FBUztnQkFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUYsTUFBTSx5QkFBeUIsR0FDN0IsQ0FBQyxZQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtRQUNqRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsSUFBSSxJQUFJO1lBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQyxDQUFDO0lBRUosTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQW9CLEVBQWlCLEVBQUU7UUFDaEUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FDYiwyRUFBMkUsQ0FDNUUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDNUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzFELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN4RCxJQUFJLFVBQVUsS0FBSyxFQUFFLENBQUMsU0FBUztnQkFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEQsSUFBSSxTQUFTLEtBQUssRUFBRSxDQUFDLFNBQVM7Z0JBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ3BELElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMzQyxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUMsU0FBUzt3QkFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBd0M7UUFDcEQsZUFBZSxFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDNUQsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNsRSxJQUFJLFVBQVUsS0FBSyxFQUFFLENBQUMsU0FBUztnQkFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDaEUsSUFBSSxTQUFTLEtBQUssRUFBRSxDQUFDLFNBQVM7Z0JBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUNELFdBQVcsRUFBRSxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUMvRCxLQUFLLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDOUIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM1QyxNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYixVQUFVLE9BQU8saUZBQWlGLENBQ25HLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUMsTUFBTSxHQUFHLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDbEUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLENBQUM7b0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLCtEQUErRCxDQUNqRixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLFNBQVM7d0JBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMxQyxPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQzt3QkFBUyxDQUFDO29CQUNULGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixDQUFDO1lBQ0gsQ0FBQztvQkFBUyxDQUFDO2dCQUNULEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQztRQUNELFlBQVksRUFBRSxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUNiLCtHQUErRyxDQUNoSCxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQzlDLElBQUksS0FBb0IsQ0FBQztnQkFDekIsSUFBSSxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUMvQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3ZDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2dCQUNELFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLFNBQVM7b0JBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsaUVBQWlFO29CQUNqRSxxREFBcUQ7b0JBQ3JELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO29CQUMxRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUMxQyxNQUFNLElBQUksR0FBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxVQUFVLEdBQW9CLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNuQyxNQUFNLE1BQU0sR0FDVixHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM5RCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7NEJBQzVDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQzs0QkFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDbkIsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDLFNBQVM7Z0NBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDekQsQ0FBQztvQkFDSCxDQUFDO29CQUNELFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDVCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO3dCQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2YsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNoQixLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUNoQixDQUFDO29CQUNELElBQUksU0FBUyxLQUFLLEVBQUUsQ0FBQyxTQUFTO3dCQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDcEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVO3dCQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7UUFDRCxXQUFXLEVBQUUsQ0FBQyxLQUE2QixFQUFFLEVBQUUsQ0FDN0MsRUFBRSxDQUFDLGNBQWMsQ0FDZixhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUN0RCxNQUFxQixDQUN6QjtRQUNILE1BQU0sRUFBRSxDQUFDLEtBQTZCLEVBQUUsRUFBRSxDQUN4QyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsYUFBYSxFQUFFLENBQUMsS0FBNkIsRUFBRSxFQUFFLENBQy9DLGVBQWUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO1FBQ3pDLGNBQWMsRUFBRSxDQUFDLEtBQTZCLEVBQUUsRUFBRSxDQUNoRCxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO1FBQzFDLElBQUksRUFBRSxDQUFDLEtBQTZCLEVBQUUsRUFBRTtZQUN0Qyx1RUFBdUU7WUFDdkUsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUN2RCxNQUFNLFFBQVEsR0FDWixHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEMsQ0FBQztvQkFBUyxDQUFDO2dCQUNULFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQztRQUNELFlBQVksRUFBRSxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUN0RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzFELElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQyxTQUFTO29CQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLFNBQVM7b0JBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMxQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO29CQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvRCxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ2xELE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM5QixJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsU0FBUzt3QkFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQ2hDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLGNBQWM7YUFDakQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGNBQWMsRUFBRSxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sU0FBUyxHQUNiLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUNULElBQUksS0FBSyxDQUFDLENBQUMsY0FBYztnQkFDdkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQzdELElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztvQkFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0QsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO29CQUNsRCxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLFNBQVM7d0JBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQyxTQUFTO2dCQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoRCxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsU0FBUyxFQUFFLHlCQUF5QixDQUFDLFdBQVcsQ0FBQztRQUNqRCxVQUFVLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsb0JBQW9CLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUNqRSxNQUFNLEtBQUssR0FBRyxHQUFHO2dCQUNmLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELGlCQUFpQixFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQzFDLE1BQU0sR0FBRyxHQUFHLG9CQUFvQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxLQUFvQixDQUFDO1lBQ3pCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsK0NBQStDO2dCQUMvQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3hFLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLFNBQVM7b0JBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM1QyxJQUFJLGdCQUFnQixLQUFLLEVBQUUsQ0FBQyxTQUFTO29CQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsRSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO29CQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvRCxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ2xELE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM5QixJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsU0FBUzt3QkFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDbEUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDVixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDOUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixDQUFDO2dCQUNELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLGdCQUFnQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3RELE1BQU0sQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztnQkFDRCxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsVUFBVSxFQUFFLHlCQUF5QixDQUFDLFlBQVksQ0FBQztRQUNuRCxjQUFjLEVBQUUseUJBQXlCLENBQUMsZ0JBQWdCLENBQUM7UUFDM0QsY0FBYyxFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sWUFBWSxHQUNoQixHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3RDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDdkMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ2xCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ3JFLElBQUksS0FBb0IsQ0FBQztZQUN6QixJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLCtDQUErQztnQkFDL0MsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUN0RCxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUMsU0FBUztvQkFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztvQkFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0QsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO29CQUNsRCxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLFNBQVM7d0JBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0Qsc0JBQXNCLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDL0MsTUFBTSxHQUFHLEdBQUcsb0JBQW9CLENBQzlCLDBDQUEwQyxDQUMzQyxDQUFDO1lBQ0YsSUFBSSxLQUFvQixDQUFDO1lBQ3pCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsbURBQW1EO2dCQUNuRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNwQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztnQkFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ25CLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ2xELE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNoQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsU0FBUzt3QkFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUN0RCxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUMsU0FBUztvQkFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztvQkFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0QsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxXQUFXLEVBQUUseUJBQXlCLENBQUMsYUFBYSxDQUFDO1FBQ3JELFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxXQUFXLENBQUM7UUFDakQsUUFBUSxFQUFFLHlCQUF5QixDQUFDLFVBQVUsQ0FBQztRQUMvQyxLQUFLLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUUsQ0FDOUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ3pCLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU87U0FDMUMsQ0FBQztRQUNKLFlBQVksRUFBRSxDQUFDLEtBQTZCLEVBQUUsRUFBRSxDQUM5QyxlQUFlLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQztRQUN4QyxZQUFZLEVBQUUsQ0FBQyxLQUE2QixFQUFFLEVBQUUsQ0FDOUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUM7UUFDeEMsU0FBUyxFQUFFLENBQUMsS0FBNkIsRUFBRSxFQUFFLENBQzNDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO1FBQ3JDLFVBQVUsRUFBRSxDQUFDLEtBQTZCLEVBQUUsRUFBRSxDQUM1QyxlQUFlLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztRQUN0QyxVQUFVLEVBQUUsQ0FBQyxLQUE2QixFQUFFLEVBQUUsQ0FDNUMsZUFBZSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7UUFDdEMsR0FBRyxFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQzVCLDJDQUEyQztZQUMzQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLEtBQUs7b0JBQUUsU0FBUztnQkFDckIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9DLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxTQUFTO29CQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxVQUFVLEtBQUssRUFBRSxDQUFDLFNBQVM7b0JBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0RCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELE1BQU0sRUFBRSxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUMvQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDcEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ2xELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLFNBQVM7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxTQUFTO2dCQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsR0FBRyxFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQzVCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQzFELElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDLFNBQVM7b0JBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xELENBQUM7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxLQUE2QixFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUM5RCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkMsQ0FBQztvQkFBUyxDQUFDO2dCQUNULElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQztRQUNELGdCQUFnQixFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUM1RCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUNoQzs7Ozs7O1dBTUcsQ0FDSixDQUFDO1lBQ0YsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM1QyxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixJQUFJLFVBQVUsS0FBSyxFQUFFLENBQUMsU0FBUztvQkFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUM7UUFDRCxlQUFlLEVBQUUsQ0FBQyxLQUE2QixFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3ZELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0MsQ0FBQztvQkFBUyxDQUFDO2dCQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUM7b0JBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBQ0QsVUFBVSxFQUFFLENBQUMsS0FBNkIsRUFBRSxFQUFFLENBQzVDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1FBQ3RDLGlCQUFpQixFQUFFLENBQUMsS0FBNkIsRUFBRSxFQUFFLENBQ25ELGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUM7UUFDN0MsV0FBVyxFQUFFLENBQUMsS0FBNkIsRUFBRSxFQUFFLENBQzdDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLFdBQVcsRUFBRSxDQUFDLEtBQTZCLEVBQUUsRUFBRSxDQUM3QyxlQUFlLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUN0RSxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ2hDLDREQUE0RDtZQUM1RCw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDckQsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDM0MsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxVQUFVO3dCQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM5RCxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDeEQsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0RCxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUNELGdCQUFnQixFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxRQUFRLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxNQUFNLE1BQU0sSUFBSTtvQkFDbkIsTUFBTTtvQkFDTixNQUFNO29CQUNOLGFBQWE7b0JBQ2IsT0FBTztvQkFDUCxPQUFPO2lCQUNSLEVBQUUsQ0FBQztvQkFDRixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUM1QyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzlELEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQztZQUNILENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDaEQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLFNBQVM7Z0JBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzlELE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsY0FBYyxFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDN0QsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4QyxJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUNELFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM5QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsc0JBQXNCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNwQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO2dCQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBQ0QsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxjQUFjLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDdkMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM5QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDaEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsQyxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsK0JBQStCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDaEQsSUFBSSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sQ0FDSixNQUFNLEVBQ04sR0FBRyxDQUFDLHNDQUFzQyxDQUFDLEVBQzNDLFlBQVksQ0FDYixDQUFDO1lBQ0osQ0FBQztZQUNELFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN4QixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0tBQ0YsQ0FBQztJQUVGLFNBQVMsZUFBZSxDQUN0QixHQUFXLEVBQ1gsTUFBOEI7UUFFOUIsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsNkJBQTZCLENBQUMsQ0FBQztRQUN2RSxtRUFBbUU7UUFDbkUsb0NBQW9DO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDMUQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQzlCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNoQixLQUFLLENBQUMsVUFBVSxFQUNoQixLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQ3JCLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUM7WUFDSCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMscUJBQXFCLENBQzVCLE9BQTJCO1FBRTNCLElBQUksT0FBTyxLQUFLLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM1QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNwQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUNqQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZCxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDakQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNkLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztvQkFBUyxDQUFDO2dCQUNULFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCO0lBRXJCLE9BQU87UUFDTCxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xDLGlCQUFpQixDQUFDLEdBQXVDOzs7Z0JBQ3ZELE1BQU0sS0FBSyxHQUEyQixFQUFFLENBQUM7Z0JBQ3pDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9DLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTt3QkFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNwRCxDQUFDO2dCQUNELE1BQU0sU0FBUyxrQ0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFBLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hELE1BQU0sYUFBYSxrQ0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQUEsQ0FBQztnQkFDckMsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7Ozs7Ozs7OztTQUNqRDtRQUNELFNBQVMsQ0FBQyxLQUFvQjtZQUM1QixtRUFBbUU7WUFDbkUsbUVBQW1FO1lBQ25FLCtEQUErRDtZQUMvRCwrREFBK0Q7WUFDL0Qsa0VBQWtFO1lBQ2xFLCtEQUErRDtZQUMvRCwrREFBK0Q7WUFDL0QsOERBQThEO1lBQzlELG1FQUFtRTtZQUNuRSxrRUFBa0U7WUFDbEUsaUVBQWlFO1lBQ2pFLDZCQUE2QjtZQUM3QixFQUFFO1lBQ0YscUVBQXFFO1lBQ3JFLGdFQUFnRTtZQUNoRSxnRUFBZ0U7WUFDaEUsbUVBQW1FO1lBQ25FLGtFQUFrRTtZQUNsRSxrQkFBa0I7WUFDbEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQ2hDLE9BQU8sQ0FBQyxNQUFNLENBQ1osU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUNoRSxDQUNGLENBQUM7Z0JBQ0YsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7UUFDRCxXQUFXLENBQUMsSUFBZ0I7WUFDMUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7WUFDcEUsa0VBQWtFO1lBQ2xFLGlFQUFpRTtZQUNqRSwrREFBK0Q7WUFDL0QsOERBQThEO1lBQzlELDhDQUE4QztZQUM5QyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUM1QixLQUFLLENBQUMsTUFBTSxDQUNWLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFO2dCQUN2QixVQUFVLEVBQUUsZUFBZTthQUM1QixDQUFrQixDQUNwQixDQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTztZQUNMLEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0QsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdkIsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSG9zdC1zaWRlIHNlcmlhbGl6YXRpb24gZm9yIHRoZSBRdWlja0pTIGVuZ2luZS5cbiAqXG4gKiBJbXBsZW1lbnRzIHRoZSB3b3JrZmxvdyB3aXJlIGNvZGVjIChmb3JtYXQtcHJlZml4ZWQgZGV2YWx1ZSwgaWRlbnRpY2FsIHRvXG4gKiBgY29kZWMtZGV2YWx1ZS12bS50c2AgLyB0aGUgbm9kZTp2bSBlbmdpbmUncyB3b3JrZmxvdy1tb2RlIGNvZGVjKSBhc1xuICogaG9zdCBjb2RlIG9wZXJhdGluZyBvbiBgSlNWYWx1ZUhhbmRsZWBzLCB1c2luZyBkZXZhbHVlIDUuOSdzIHBsdWdnYWJsZVxuICogb3BlcmF0aW9ucyAocXVpY2tqcy13YXNpJ3MgaG9zdC1zaWRlIGludHJvc3BlY3Rpb24gcHJpbWl0aXZlcyB1bmRlcm5lYXRoKS5cbiAqIFRoZSBzZXJkZSBidW5kbGUgcHJldmlvdXNseSBldmFsdWF0ZWQgaW5zaWRlIHRoZSBWTSBpcyBnb25lOiBndWVzdCB2YWx1ZXNcbiAqIGFyZSByZWFkIGFuZCBidWlsdCB0aHJvdWdoIGhhbmRsZXMsIHNvIG5vIHNlcmlhbGl6ZXIgY29kZSBsaXZlcyBpbiAob3JcbiAqIGNhbiBiZSB0YW1wZXJlZCB3aXRoIGZyb20pIHRoZSBndWVzdCByZWFsbS5cbiAqXG4gKiBTaWRlLWVmZmVjdCBkaXNjaXBsaW5lIG1pcnJvcnMgdGhlIG5vZGU6dm0gZW5naW5lJ3MgaGFyZGVuZWQgY29kZWNcbiAqIChzZXJpYWxpemF0aW9uL2hhcmRlbmVkLnRzKTpcbiAqXG4gKiAtIGNsYXNzaWZpY2F0aW9uIGlzIGJ5IGVuZ2luZSBicmFuZCAoYGNsYXNzSWRgIGFnYWluc3QgYm9vdC1jYXB0dXJlZFxuICogICBzYW1wbGVzLCBgaXNFcnJvcmAsIGBpc1Byb3h5YCksIG5ldmVyIGBpbnN0YW5jZW9mYCBvclxuICogICBgU3ltYm9sLnRvU3RyaW5nVGFnYDtcbiAqIC0gZXh0cmFjdGlvbiBnb2VzIHRocm91Z2ggaW50cmluc2ljcyBjYXB0dXJlZCBhdCBib290IChiZWZvcmUgYW55IHVzZXJcbiAqICAgY29kZSBydW5zKSBpbnZva2VkIHdpdGggZXhwbGljaXQgcmVjZWl2ZXJzLCBvciB0aHJvdWdoIG93bi1wcm9wZXJ0eVxuICogICBkZXNjcmlwdG9yIHJlYWRzLCBzbyBwYXRjaGVkIHByb3RvdHlwZXMgYW5kIGluaGVyaXRlZCBhY2Nlc3NvcnMgbmV2ZXJcbiAqICAgcnVuO1xuICogLSB0aGUgb25seSBndWVzdCBjb2RlIHNlcmlhbGl6YXRpb24gY2FuIGV4ZWN1dGUgaXMgdGhlIHNhbWUgY29kZSB0aGVcbiAqICAgcHJldmlvdXMgaW4tVk0gY29kZWMgZXhlY3V0ZWQgYnkgY29udHJhY3Q6IGEgY2xhc3MncyBzdGF0aWNcbiAqICAgYFdPUktGTE9XX1NFUklBTElaRWAgbWV0aG9kLCBhIHN0ZXAgcHJveHkncyBgX19jbG9zdXJlVmFyc0ZuYCwgYW5kXG4gKiAgIGBXT1JLRkxPV19VU0VfU1RFUGAgLyBgV09SS0ZMT1dfREVTRVJJQUxJWkVgIG9uIHJldml2YWwuXG4gKlxuICogV2lyZS1mb3JtYXQgcGFyaXR5IHdpdGggdGhlIHByZXZpb3VzIGluLVZNIGNvZGVjIGlzIFJFUVVJUkVEIGFuZCBjb3ZlcmVkXG4gKiBieSB0ZXN0czogZXZlbnQgbG9ncyB3cml0dGVuIGJ5IGVpdGhlciBjb2RlYyBtdXN0IGJlIHJlYWRhYmxlIGJ5IHRoZVxuICogb3RoZXIgKHN0ZXBzIHNlcmlhbGl6ZWQgYnkgdGhlIG5vZGUgcnVudGltZSBmZWVkIFZNIHJldml2YWwgYW5kIHZpY2VcbiAqIHZlcnNhKS5cbiAqXG4gKiBIeWJyaWQgdmFsdWUgc3BhY2U6IHJlZHVjZXJzIHJldHVybiBob3N0IHNoYXBlcyAocGxhaW4gb2JqZWN0cywgc3RyaW5ncyxcbiAqIG51bWJlcnMpIHdob3NlIGxlYXZlcyBtYXkgYmUgZ3Vlc3QgaGFuZGxlcywgZXhhY3RseSBob3cgdGhlIG5vZGU6dm1cbiAqIGNvZGVjIG1peGVzIGhvc3Qgc2hhcGVzIHdpdGggc2FuZGJveC1yZWFsbSBsZWF2ZXMuIEV2ZXJ5IHN0cmluZ2lmeVxuICogb3BlcmF0aW9uIHRoZXJlZm9yZSBkaXNwYXRjaGVzIG9uIGBKU1ZhbHVlSGFuZGxlYCBhbmQgZmFsbHMgYmFjayB0b1xuICogZGV2YWx1ZSdzIGRlZmF1bHQgaG9zdCBvcGVyYXRpb25zIGZvciBob3N0IHZhbHVlcy4gUGFyc2Ugb3BlcmF0aW9uc1xuICogYWx3YXlzIGJ1aWxkIGd1ZXN0IHZhbHVlcywgc28gdGhlIHBhcnNlIHNpZGUgaXMgaGFuZGxlLW9ubHkuXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmYXVsdFN0cmluZ2lmeU9wZXJhdGlvbnMsXG4gIGZpbHRlckFycmF5SW5kaWNlcyxcbiAgdHlwZSBQYXJzZU9wZXJhdGlvbnMsXG4gIHBhcnNlLFxuICB0eXBlIFN0cmluZ2lmeU9wZXJhdGlvbnMsXG4gIHN0cmluZ2lmeSxcbn0gZnJvbSAnZGV2YWx1ZSc7XG5pbXBvcnQgeyBKU1ZhbHVlSGFuZGxlLCB0eXBlIFF1aWNrSlMgfSBmcm9tICdxdWlja2pzLXdhc2knO1xuaW1wb3J0IHsgU2VyaWFsaXphdGlvbkZvcm1hdCB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vdHlwZXMuanMnO1xuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5jb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5jb25zdCBGT1JNQVRfUFJFRklYX0xFTkdUSCA9IDQ7XG5cbi8vIC0tLS0gYmFzZTY0IChob3N0LXNpZGU7IHdpcmUtY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQgaW4tVk0gYnRvYSBwYXRoKSAtLS0tXG4vL1xuLy8gRmVhdHVyZS1kZXRlY3RlZCBzbyB0aGUgY29kZWMgY2FycmllcyBubyB1bmNvbmRpdGlvbmFsIE5vZGUgZGVwZW5kZW5jeVxuLy8gKHRoZSBRdWlja0pTIGVuZ2luZSB0YXJnZXRzIFdBU00tY2FwYWJsZSBub24tTm9kZSBob3N0cyB0b28pOiB0aGVcbi8vIEVTLXByb3Bvc2FsIFVpbnQ4QXJyYXkgYmFzZTY0IG1ldGhvZHMgd2hlbiBwcmVzZW50LCBOb2RlJ3MgQnVmZmVyIHdoZW5cbi8vIHByZXNlbnQsIGFuZCBhIGJ0b2EvYXRvYiBsb29wIG90aGVyd2lzZSAodW5pdmVyc2FsbHkgYXZhaWxhYmxlIG9uIHdlYlxuLy8gcnVudGltZXMpLlxuXG50eXBlIEJhc2U2NFVpbnQ4QXJyYXlDdG9yID0gVWludDhBcnJheUNvbnN0cnVjdG9yICYge1xuICBmcm9tQmFzZTY0PzogKHZhbHVlOiBzdHJpbmcpID0+IFVpbnQ4QXJyYXk7XG59O1xudHlwZSBCYXNlNjRVaW50OEFycmF5ID0gVWludDhBcnJheSAmIHsgdG9CYXNlNjQ/OiAoKSA9PiBzdHJpbmcgfTtcblxuY29uc3QgaGFzTmF0aXZlQmFzZTY0ID1cbiAgdHlwZW9mIChVaW50OEFycmF5IGFzIEJhc2U2NFVpbnQ4QXJyYXlDdG9yKS5mcm9tQmFzZTY0ID09PSAnZnVuY3Rpb24nICYmXG4gIHR5cGVvZiAoVWludDhBcnJheS5wcm90b3R5cGUgYXMgQmFzZTY0VWludDhBcnJheSkudG9CYXNlNjQgPT09ICdmdW5jdGlvbic7XG5jb25zdCBoYXNCdWZmZXIgPSB0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nO1xuXG5mdW5jdGlvbiBieXRlc1RvQmFzZTY0KGJ5dGVzOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgaWYgKGJ5dGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgaWYgKGhhc05hdGl2ZUJhc2U2NCkge1xuICAgIHJldHVybiAoYnl0ZXMgYXMgQmFzZTY0VWludDhBcnJheSkudG9CYXNlNjQ/LigpIGFzIHN0cmluZztcbiAgfVxuICBpZiAoaGFzQnVmZmVyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFxuICAgICAgYnl0ZXMuYnVmZmVyLFxuICAgICAgYnl0ZXMuYnl0ZU9mZnNldCxcbiAgICAgIGJ5dGVzLmJ5dGVMZW5ndGhcbiAgICApLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuICBsZXQgYmluYXJ5ID0gJyc7XG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGJ5dGVzLmxlbmd0aDsgaWR4KyspIHtcbiAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpZHhdKTtcbiAgfVxuICByZXR1cm4gYnRvYShiaW5hcnkpO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzKHZhbHVlOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKHZhbHVlID09PSAnLicpIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgaWYgKGhhc05hdGl2ZUJhc2U2NCkge1xuICAgIHJldHVybiAoVWludDhBcnJheSBhcyBCYXNlNjRVaW50OEFycmF5Q3RvcikuZnJvbUJhc2U2ND8uKFxuICAgICAgdmFsdWVcbiAgICApIGFzIFVpbnQ4QXJyYXk7XG4gIH1cbiAgaWYgKGhhc0J1ZmZlcikge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh2YWx1ZSwgJ2Jhc2U2NCcpKTtcbiAgfVxuICBjb25zdCBiaW5hcnkgPSBhdG9iKHZhbHVlKTtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKTtcbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgYmluYXJ5Lmxlbmd0aDsgaWR4KyspIHtcbiAgICBieXRlc1tpZHhdID0gYmluYXJ5LmNoYXJDb2RlQXQoaWR4KTtcbiAgfVxuICByZXR1cm4gYnl0ZXM7XG59XG5cbi8vIC0tLS0gYm9vdC10aW1lIGNhcHR1cmVzIC0tLS1cblxuLyoqIGRldmFsdWUgdGFncyBkZWNpZGVkIGJ5IGVuZ2luZSBjbGFzcyBpZCwgc2FtcGxlZCBhdCBib290LiAqL1xuY29uc3QgQlJBTkRFRF9TQU1QTEVTID0gYCh7XG4gIE51bWJlcjogbmV3IE51bWJlcigwKSxcbiAgU3RyaW5nOiBuZXcgU3RyaW5nKCcnKSxcbiAgQm9vbGVhbjogbmV3IEJvb2xlYW4oZmFsc2UpLFxuICBCaWdJbnQ6IE9iamVjdCgwbiksXG4gIERhdGU6IG5ldyBEYXRlKDApLFxuICBSZWdFeHA6IC94LyxcbiAgQXJyYXk6IFtdLFxuICBTZXQ6IG5ldyBTZXQoKSxcbiAgTWFwOiBuZXcgTWFwKCksXG4gIEFycmF5QnVmZmVyOiBuZXcgQXJyYXlCdWZmZXIoMCksXG4gIERhdGFWaWV3OiBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDApKSxcbiAgSW50OEFycmF5OiBuZXcgSW50OEFycmF5KDApLFxuICBVaW50OEFycmF5OiBuZXcgVWludDhBcnJheSgwKSxcbiAgVWludDhDbGFtcGVkQXJyYXk6IG5ldyBVaW50OENsYW1wZWRBcnJheSgwKSxcbiAgSW50MTZBcnJheTogbmV3IEludDE2QXJyYXkoMCksXG4gIFVpbnQxNkFycmF5OiBuZXcgVWludDE2QXJyYXkoMCksXG4gIEludDMyQXJyYXk6IG5ldyBJbnQzMkFycmF5KDApLFxuICBVaW50MzJBcnJheTogbmV3IFVpbnQzMkFycmF5KDApLFxuICBGbG9hdDMyQXJyYXk6IG5ldyBGbG9hdDMyQXJyYXkoMCksXG4gIEZsb2F0NjRBcnJheTogbmV3IEZsb2F0NjRBcnJheSgwKSxcbiAgQmlnSW50NjRBcnJheTogbmV3IEJpZ0ludDY0QXJyYXkoMCksXG4gIEJpZ1VpbnQ2NEFycmF5OiBuZXcgQmlnVWludDY0QXJyYXkoMCksXG59KWA7XG5cbi8qKlxuICogSW50cmluc2ljcyBuZWVkZWQgZm9yIHJlYWRpbmcgYW5kIGJ1aWxkaW5nLCBjYXB0dXJlZCBmcm9tIHRoZSBndWVzdCByZWFsbVxuICogYXQgc2VyZGUgY3JlYXRpb24gKHdoaWNoIHRoZSBydW50aW1lIGRvZXMgcmlnaHQgYWZ0ZXIgZXZhbHVhdGluZyB0aGVcbiAqIGJvb3RzdHJhcCwgYmVmb3JlIHRoZSB3b3JrZmxvdyBidW5kbGUpLiBIZWxkIG9ubHkgb24gdGhlIGhvc3Q6IGxhdGVyXG4gKiBwYXRjaGluZyBpbnNpZGUgdGhlIFZNIGNhbm5vdCBpbmZsdWVuY2Ugc2VyaWFsaXphdGlvbi5cbiAqXG4gKiBHbG9iYWxzIGluc3RhbGxlZCBieSB0aGUgZXh0ZW5zaW9ucy9ib290c3RyYXAgKEhlYWRlcnMsIFJlcXVlc3QsXG4gKiBSZXNwb25zZSwgUmVhZGFibGVTdHJlYW0sIFdyaXRhYmxlU3RyZWFtLCBVUkwsIFVSTFNlYXJjaFBhcmFtcyxcbiAqIERPTUV4Y2VwdGlvbiwgX19Xb3JrZmxvd0Fib3J0U2lnbmFsKSBhcmUgY2FwdHVyZWQgZGVmZW5zaXZlbHk6IGFic2VudFxuICogb25lcyB5aWVsZCBgdW5kZWZpbmVkYCBhbmQgdGhlaXIgcmVkdWNlcnMgbmV2ZXIgbWF0Y2gsIGV4YWN0bHlcbiAqIGxpa2UgdGhlIG9sZCBpbi1WTSByZWR1Y2VycycgYGdsb2JhbFRoaXMuWGAgcHJvYmVzLlxuICovXG5jb25zdCBDQVBUVVJFX0lOVFJJTlNJQ1MgPSBgKCgpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvciA9IChvYmplY3QsIGtleSkgPT5cbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KTtcbiAgY29uc3QgZ2V0dGVyID0gKG9iamVjdCwga2V5KSA9PiB7XG4gICAgY29uc3QgZCA9IGRlc2NyaXB0b3Iob2JqZWN0LCBrZXkpO1xuICAgIHJldHVybiBkICYmIGQuZ2V0O1xuICB9O1xuICBjb25zdCBUeXBlZEFycmF5ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKEludDhBcnJheS5wcm90b3R5cGUpO1xuICBjb25zdCBtYXliZVByb3RvID0gKENscykgPT4gKENscyA/IENscy5wcm90b3R5cGUgOiB1bmRlZmluZWQpO1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcztcblxuICByZXR1cm4ge1xuICAgIC8vIC0tLSByZWFkaW5nIChzdHJpbmdpZnkpIC0tLVxuICAgIGRhdGVHZXRUaW1lOiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lLFxuICAgIGRhdGVUb0lTT1N0cmluZzogRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcsXG4gICAgcmVnRXhwU291cmNlOiBnZXR0ZXIoUmVnRXhwLnByb3RvdHlwZSwgJ3NvdXJjZScpLFxuICAgIHJlZ0V4cEZsYWdzOiBnZXR0ZXIoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyksXG4gICAgbnVtYmVyVmFsdWVPZjogTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLFxuICAgIHN0cmluZ1ZhbHVlT2Y6IFN0cmluZy5wcm90b3R5cGUudmFsdWVPZixcbiAgICBib29sZWFuVmFsdWVPZjogQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZixcbiAgICBiaWdJbnRWYWx1ZU9mOiBCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YsXG4gICAgYmlnSW50VG9TdHJpbmc6IEJpZ0ludC5wcm90b3R5cGUudG9TdHJpbmcsXG4gICAgc2V0Rm9yRWFjaDogU2V0LnByb3RvdHlwZS5mb3JFYWNoLFxuICAgIG1hcEZvckVhY2g6IE1hcC5wcm90b3R5cGUuZm9yRWFjaCxcbiAgICBoZWFkZXJzRm9yRWFjaDogZy5IZWFkZXJzID8gZy5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoIDogdW5kZWZpbmVkLFxuICAgIHVybEhyZWY6IGcuVVJMID8gZ2V0dGVyKGcuVVJMLnByb3RvdHlwZSwgJ2hyZWYnKSA6IHVuZGVmaW5lZCxcbiAgICB1cmxTZWFyY2hQYXJhbXNUb1N0cmluZzogZy5VUkxTZWFyY2hQYXJhbXNcbiAgICAgID8gZy5VUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnRvU3RyaW5nXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICB1cmxTZWFyY2hQYXJhbXNTaXplOiBnLlVSTFNlYXJjaFBhcmFtc1xuICAgICAgPyBnZXR0ZXIoZy5VUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLCAnc2l6ZScpXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICB2aWV3QnVmZmVyOiBnZXR0ZXIoVHlwZWRBcnJheSwgJ2J1ZmZlcicpLFxuICAgIHZpZXdCeXRlT2Zmc2V0OiBnZXR0ZXIoVHlwZWRBcnJheSwgJ2J5dGVPZmZzZXQnKSxcbiAgICB2aWV3Qnl0ZUxlbmd0aDogZ2V0dGVyKFR5cGVkQXJyYXksICdieXRlTGVuZ3RoJyksXG4gICAgdmlld0xlbmd0aDogZ2V0dGVyKFR5cGVkQXJyYXksICdsZW5ndGgnKSxcbiAgICBkYXRhVmlld0J1ZmZlcjogZ2V0dGVyKERhdGFWaWV3LnByb3RvdHlwZSwgJ2J1ZmZlcicpLFxuICAgIGRhdGFWaWV3Qnl0ZU9mZnNldDogZ2V0dGVyKERhdGFWaWV3LnByb3RvdHlwZSwgJ2J5dGVPZmZzZXQnKSxcbiAgICBkYXRhVmlld0J5dGVMZW5ndGg6IGdldHRlcihEYXRhVmlldy5wcm90b3R5cGUsICdieXRlTGVuZ3RoJyksXG4gICAgYXJyYXlCdWZmZXJCeXRlTGVuZ3RoOiBnZXR0ZXIoQXJyYXlCdWZmZXIucHJvdG90eXBlLCAnYnl0ZUxlbmd0aCcpLFxuICAgIG9iamVjdFByb3RvdHlwZTogT2JqZWN0LnByb3RvdHlwZSxcbiAgICBlcnJvclByb3RvdHlwZTogRXJyb3IucHJvdG90eXBlLFxuICAgIGRvbUV4Y2VwdGlvblByb3RvdHlwZTogbWF5YmVQcm90byhnLkRPTUV4Y2VwdGlvbiksXG4gICAgaGVhZGVyc1Byb3RvdHlwZTogbWF5YmVQcm90byhnLkhlYWRlcnMpLFxuICAgIHJlcXVlc3RQcm90b3R5cGU6IG1heWJlUHJvdG8oZy5SZXF1ZXN0KSxcbiAgICByZXNwb25zZVByb3RvdHlwZTogbWF5YmVQcm90byhnLlJlc3BvbnNlKSxcbiAgICByZWFkYWJsZVN0cmVhbVByb3RvdHlwZTogbWF5YmVQcm90byhnLlJlYWRhYmxlU3RyZWFtKSxcbiAgICB3cml0YWJsZVN0cmVhbVByb3RvdHlwZTogbWF5YmVQcm90byhnLldyaXRhYmxlU3RyZWFtKSxcbiAgICB1cmxQcm90b3R5cGU6IG1heWJlUHJvdG8oZy5VUkwpLFxuICAgIHVybFNlYXJjaFBhcmFtc1Byb3RvdHlwZTogbWF5YmVQcm90byhnLlVSTFNlYXJjaFBhcmFtcyksXG5cbiAgICAvLyAtLS0gYnVpbGRpbmcgKHBhcnNlKSAtLS1cbiAgICBEYXRlLCBSZWdFeHAsIFNldCwgTWFwLCBBcnJheSwgT2JqZWN0LCBEYXRhVmlldyxcbiAgICBJbnQ4QXJyYXksIFVpbnQ4QXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSxcbiAgICBJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXksXG4gICAgQmlnSW50NjRBcnJheSwgQmlnVWludDY0QXJyYXksXG4gICAgRXJyb3IsXG4gICAgQWdncmVnYXRlRXJyb3I6IGcuQWdncmVnYXRlRXJyb3IsXG4gICAgRXZhbEVycm9yLCBSYW5nZUVycm9yLCBSZWZlcmVuY2VFcnJvciwgU3ludGF4RXJyb3IsIFR5cGVFcnJvciwgVVJJRXJyb3IsXG4gICAgRE9NRXhjZXB0aW9uOiBnLkRPTUV4Y2VwdGlvbixcbiAgICBIZWFkZXJzOiBnLkhlYWRlcnMsXG4gICAgUmVxdWVzdDogZy5SZXF1ZXN0LFxuICAgIFJlc3BvbnNlOiBnLlJlc3BvbnNlLFxuICAgIFJlYWRhYmxlU3RyZWFtOiBnLlJlYWRhYmxlU3RyZWFtLFxuICAgIFdyaXRhYmxlU3RyZWFtOiBnLldyaXRhYmxlU3RyZWFtLFxuICAgIFVSTDogZy5VUkwsXG4gICAgVVJMU2VhcmNoUGFyYW1zOiBnLlVSTFNlYXJjaFBhcmFtcyxcbiAgICBzZXRBZGQ6IFNldC5wcm90b3R5cGUuYWRkLFxuICAgIG1hcFNldDogTWFwLnByb3RvdHlwZS5zZXQsXG4gICAgb2JqZWN0Q3JlYXRlOiBPYmplY3QuY3JlYXRlLFxuICAgIGRlZmluZVByb3BlcnR5OiBPYmplY3QuZGVmaW5lUHJvcGVydHksXG4gICAgZGF0ZU5vdzogRGF0ZS5ub3csXG4gICAgb2JqZWN0RnJlZXplOiBPYmplY3QuZnJlZXplLFxuICAgIGZ1bmN0aW9uQmluZDogRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsXG4gICAgbWFrZVNwYXJzZUFycmF5OiAobGVuZ3RoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheSA9IFtdO1xuICAgICAgYXJyYXlbNDI5NDk2NzI5NF0gPSB1bmRlZmluZWQ7XG4gICAgICBkZWxldGUgYXJyYXlbNDI5NDk2NzI5NF07XG4gICAgICBhcnJheS5sZW5ndGggPSBsZW5ndGg7XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfSxcbiAgICAvLyBCdWlsZHMgdGhlIGNsb3N1cmUtdmFycyB0aHVuayBhIHJldml2ZWQgc3RlcCBwcm94eSBjYXJyaWVzLiBNdXN0IGJlIGFcbiAgICAvLyBndWVzdCBjbG9zdXJlICh0aGUgcHJveHkgc3RvcmVzIGFuZCBsYXRlciBjYWxscyBpdCBmcm9tIGd1ZXN0IGNvZGUpLlxuICAgIG1ha2VUaHVuazogKHZhcnMpID0+ICgpID0+IHZhcnMsXG4gIH07XG59KSgpYDtcblxuLyoqXG4gKiBXZWxsLWtub3duIHN5bWJvbHMgdGhlIHJlZHVjZXJzL3Jldml2ZXJzIHJlYWQgb3Igc3RhbXAsIGNhcHR1cmVkIGFzIGd1ZXN0XG4gKiBzeW1ib2wgaGFuZGxlcyBzbyBkZXNjcmlwdG9yIHJlYWRzL3dyaXRlcyBjYW4gYmUga2V5ZWQgb24gdGhlbS5cbiAqL1xuY29uc3QgU1lNQk9MX05BTUVTID0gW1xuICAnV09SS0ZMT1dfQUJPUlRfU1RSRUFNX05BTUUnLFxuICAnV09SS0ZMT1dfQUJPUlRfSE9PS19UT0tFTicsXG4gICdCT0RZX0lOSVQnLFxuICAnV09SS0ZMT1dfU1RSRUFNX05BTUUnLFxuICAnV09SS0ZMT1dfU1RSRUFNX1RZUEUnLFxuICAnV09SS0ZMT1dfU1RSRUFNX0ZSQU1JTkcnLFxuICAnV09SS0ZMT1dfU1RSRUFNX1NFUlZFUl9SVU5fSUQnLFxuICAnV09SS0ZMT1dfU1RSRUFNX1NFUlZFUl9ERVBMT1lNRU5UX0lEJyxcbiAgJ1dFQkhPT0tfUkVTUE9OU0VfV1JJVEFCTEUnLFxuICAnV09SS0ZMT1dfVVNFX1NURVAnLFxuICAnd29ya2Zsb3ctc2VyaWFsaXplJywgLy8gQHdvcmtmbG93L3NlcmRlIFdPUktGTE9XX1NFUklBTElaRVxuICAnd29ya2Zsb3ctZGVzZXJpYWxpemUnLCAvLyBAd29ya2Zsb3cvc2VyZGUgV09SS0ZMT1dfREVTRVJJQUxJWkVcbiAgJ3dvcmtmbG93LWNsYXNzLXJlZ2lzdHJ5JyxcbiAgJ0B3b3JrZmxvdy9lcnJvcnMvL0ZhdGFsRXJyb3InLFxuICAnQHdvcmtmbG93L2Vycm9ycy8vSG9va0NvbmZsaWN0RXJyb3InLFxuICAnQHdvcmtmbG93L2Vycm9ycy8vUmV0cnlhYmxlRXJyb3InLFxuICAnQHdvcmtmbG93L2Vycm9ycy8vUnVudGltZURlY3J5cHRpb25FcnJvcicsXG5dIGFzIGNvbnN0O1xudHlwZSBTeW1ib2xOYW1lID0gKHR5cGVvZiBTWU1CT0xfTkFNRVMpW251bWJlcl07XG5cbi8qKlxuICogVGhlIHNpbmdsZSBndWVzdCBleHByZXNzaW9uIHRoYXQgcGVyZm9ybXMgRVZFUlkgZ3Vlc3QtdG91Y2hpbmcgcGFydCBvZlxuICogc2VyZGUgaW5pdGlhbGl6YXRpb246IHRoZSBpbnRyaW5zaWNzIGNhcHR1cmUsIHRoZSBicmFuZGVkIHNhbXBsZXMsIGFuZFxuICogdGhlIHdlbGwta25vd24gc3ltYm9sIGxvb2t1cHMsIGJ1bmRsZWQgaW50byBvbmUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBCdW5kbGluZyBtYXR0ZXJzIGZvciB0aGUgYmFzZWxpbmUtc25hcHNob3QgcGF0aDogdGhlIGNvbnRhaW5lciBpc1xuICogY3JlYXRlZCBCRUZPUkUgdGhlIHdvcmtmbG93IGJ1bmRsZSBldmFsdWF0ZXMgKGNhcHR1cmUtYmVmb3JlLXVzZXItY29kZSxcbiAqIHNhbWUgYXMgdGhlIGZyZXNoIHBhdGgpLCBpdHMgaGFuZGxlJ3MgYm94IGxpdmVzIGluIHRoZSBzbmFwc2hvdCdzXG4gKiBsaW5lYXIgbWVtb3J5LCBhbmQgZXZlcnkgcmVzdG9yZWQgVk0gcmUtYWRvcHRzIGl0IEJZIFBPSU5URVJcbiAqIChgYWRvcHRTZXJkZVJvb3RgKSwgc28gc2VyZGUgaW5pdGlhbGl6YXRpb24gZXhlY3V0ZXMgTk8gZ3Vlc3QgY29kZVxuICogYWZ0ZXIgdXNlciBjb2RlIGhhcyBydW4uIEFueXRoaW5nIGxlc3MgbGV0cyBhIG1vZHVsZS1zY29wZSB3cmFwcGVyXG4gKiBhcm91bmQgZS5nLiBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgb2JzZXJ2ZSAoYW5kIGJlIG11dGF0ZWRcbiAqIGJ5KSBhIHBvc3QtZXZhbCBjYXB0dXJlLCBkaXZlcmdpbmcgZnJlc2ggYW5kIHJlc3RvcmVkIHJlcGxheXMuXG4gKi9cbmNvbnN0IENBUFRVUkVfUk9PVCA9IGAoKCkgPT4gKHtcbiAgaW50cmluc2ljczogJHtDQVBUVVJFX0lOVFJJTlNJQ1N9LFxuICBzYW1wbGVzOiAke0JSQU5ERURfU0FNUExFU30sXG4gIHN5bWJvbHM6IHtcbiR7U1lNQk9MX05BTUVTLm1hcChcbiAgKG5hbWUpID0+IGAgICAgJHtKU09OLnN0cmluZ2lmeShuYW1lKX06IFN5bWJvbC5mb3IoJHtKU09OLnN0cmluZ2lmeShuYW1lKX0pYFxuKS5qb2luKCcsXFxuJyl9XG4gIH0sXG59KSkoKWA7XG5cbi8qKlxuICogRXZhbHVhdGUgdGhlIHNlcmRlIGNhcHR1cmUgcm9vdCBpbiBhIFZNLiBNdXN0IHJ1biBhZnRlciB0aGUgcnVudGltZVxuICogYm9vdHN0cmFwIGFuZCBCRUZPUkUgYW55IHVzZXIgY29kZS4gVGhlIHJldHVybmVkIGhhbmRsZSBvd25zIHRoZVxuICogY29udGFpbmVyOyBvbiB0aGUgYmFzZWxpbmUtc25hcHNob3QgcGF0aCBpdHMgcmF3IGJveCBwb2ludGVyXG4gKiAoYGhhbmRsZS5wdHJgKSBpcyByZWNvcmRlZCBuZXh0IHRvIHRoZSBzbmFwc2hvdCBhbmQgcmUtYWRvcHRlZCBwZXJcbiAqIHJlc3RvcmVkIFZNIHZpYSB7QGxpbmsgYWRvcHRTZXJkZVJvb3R9LiBEbyBOT1QgZGlzcG9zZSB0aGUgaGFuZGxlXG4gKiBiZWZvcmUgdGhlIHNuYXBzaG90IGlzIHRha2VuICh0aGUgYm94IG11c3Qgc3RheSBsaXZlIGluIHRoZSBtZW1vcnlcbiAqIGltYWdlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVTZXJkZVJvb3Qodm06IFF1aWNrSlMpOiBKU1ZhbHVlSGFuZGxlIHtcbiAgcmV0dXJuIHZtLmV2YWxDb2RlKENBUFRVUkVfUk9PVCk7XG59XG5cbi8qKlxuICogUmUtY3JlYXRlIHRoZSBjYXB0dXJlLXJvb3QgaGFuZGxlIGluIGEgVk0gcmVzdG9yZWQgZnJvbSBhIHNuYXBzaG90XG4gKiB0YWtlbiB3aGlsZSB0aGUgZXhwb3J0ZWQgcm9vdCB3YXMgYWxpdmUsIHZpYSBxdWlja2pzLXdhc2knc1xuICogc25hcHNob3QtcG9ydGFibGUgaGFuZGxlIHRva2VucyAoYGltcG9ydEhhbmRsZWAgZHVwbGljYXRlcyB0aGVcbiAqIHVuZGVybHlpbmcgdmFsdWU6IHRoZSByZXR1cm5lZCBoYW5kbGUgaXMgaW5kZXBlbmRlbnRseSBvd25lZCBhbmQgdGhlXG4gKiBzZXJkZSBkaXNwb3NlcyBpdCBwZXIgcmVzdG9yZWQgVk0pLiBObyBndWVzdCBjb2RlIGV4ZWN1dGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRvcHRTZXJkZVJvb3Qodm06IFF1aWNrSlMsIHRva2VuOiBudW1iZXIpOiBKU1ZhbHVlSGFuZGxlIHtcbiAgcmV0dXJuIHZtLmltcG9ydEhhbmRsZSh0b2tlbik7XG59XG5cbi8qKlxuICogRXhwb3J0IHRoZSBjYXB0dXJlIHJvb3QgYXMgYSBzbmFwc2hvdC1wb3J0YWJsZSB0b2tlbiB0byByZWNvcmQgbmV4dCB0b1xuICogdGhlIGJhc2VsaW5lIHNuYXBzaG90LiBUaGUgcm9vdCBoYW5kbGUgbXVzdCBzdGF5IHVuZGlzcG9zZWQgdW50aWwgdGhlXG4gKiBzbmFwc2hvdCBpcyB0YWtlbiAoaXRzIGJveCwgYW5kIHRoZSByZWZlcmVuY2UgaXQgaG9sZHMsIG11c3QgYmUgcGFydFxuICogb2YgdGhlIG1lbW9yeSBpbWFnZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRTZXJkZVJvb3Qodm06IFF1aWNrSlMsIHJvb3Q6IEpTVmFsdWVIYW5kbGUpOiBudW1iZXIge1xuICByZXR1cm4gdm0uZXhwb3J0SGFuZGxlKHJvb3QpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1aWNrSlNTZXJkZSB7XG4gIC8qKiBTZXJpYWxpemUgYSBndWVzdCB2YWx1ZSBoYW5kbGUgdG8gZm9ybWF0LXByZWZpeGVkIHdpcmUgYnl0ZXMuICovXG4gIHNlcmlhbGl6ZSh2YWx1ZTogSlNWYWx1ZUhhbmRsZSk6IFVpbnQ4QXJyYXk7XG4gIC8qKiBCdWlsZCBhIGd1ZXN0IHZhbHVlIGluIHRoZSBWTSBmcm9tIGZvcm1hdC1wcmVmaXhlZCB3aXJlIGJ5dGVzLiAqL1xuICBkZXNlcmlhbGl6ZShkYXRhOiBVaW50OEFycmF5KTogSlNWYWx1ZUhhbmRsZTtcbiAgLyoqXG4gICAqIFRoZSByZWR1Y2VyIG5hbWVzIHRoaXMgY29kZWMgYXBwbGllcywgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiBFeHBvc2VkXG4gICAqIHNvIHRlc3RzIGNhbiBhc3NlcnQgZXhoYXVzdGl2ZW5lc3MgYWdhaW5zdCB0aGUgc2hhcmVkIHZhbHVlLXNwYWNlXG4gICAqIGNvZGVjIChjb2RlYy1kZXZhbHVlLXZtKTogYSByZWR1Y2VyIGFkZGVkIHRoZXJlIGJ1dCBub3QgaGVyZSB3b3VsZFxuICAgKiBvdGhlcndpc2Ugc2lsZW50bHkgcm91bmQtdHJpcCB2YWx1ZXMgYXMgcGxhaW4gb2JqZWN0cy5cbiAgICovXG4gIHJlZHVjZXJLZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFJldml2ZXIgbmFtZXMsIGZvciB0aGUgc2FtZSBleGhhdXN0aXZlbmVzcyBjaGVjay4gKi9cbiAgcmV2aXZlcktleXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogSW5zdGFsbCBgZ2xvYmFsVGhpcy5wcm9jZXNzID0geyBlbnY6IE9iamVjdC5mcmVlemUoey4uLn0pIH1gIGluIHRoZVxuICAgKiBWTSB0aHJvdWdoIGhhbmRsZXMgYW5kIGJvb3QtY2FwdHVyZWQgaW50cmluc2ljcyBvbmx5OiBubyBndWVzdFxuICAgKiBzb3VyY2UgaXMgZXZhbHVhdGVkLCBzbyBhIG1vZHVsZS1zY29wZSB3cmFwcGVyIGFyb3VuZCBKU09OLnBhcnNlIC9cbiAgICogT2JqZWN0LmZyZWV6ZSBjYW5ub3Qgb2JzZXJ2ZSB0aGUgaW5qZWN0aW9uLiBUaGlzIG1hdHRlcnMgb24gdGhlXG4gICAqIGJhc2VsaW5lLXNuYXBzaG90IHBhdGgsIHdoZXJlIGVudiBpbmplY3Rpb24gaGFwcGVucyBhZnRlciB1c2VyIGNvZGVcbiAgICogcmFuOyBldmFsdWF0aW5nIGd1ZXN0IHNvdXJjZSB0aGVyZSB3b3VsZCBsZXQgcGF0Y2hlZCBnbG9iYWxzIHNlZVxuICAgKiAoYW5kIHBlcnR1cmIpIGl0LCBkaXZlcmdpbmcgZnJvbSB0aGUgZnJlc2ggcGF0aC5cbiAgICovXG4gIGluc3RhbGxQcm9jZXNzRW52KGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIGhvc3Qtc2lkZSBzZXJkZSBmb3IgYSBWTS4gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHJ1bnRpbWVcbiAqIGJvb3RzdHJhcCBoYXMgYmVlbiBldmFsdWF0ZWQgKHNvIGJvb3RzdHJhcC1pbnN0YWxsZWQgZ2xvYmFscyBhcmVcbiAqIGNhcHR1cmFibGUpIGFuZCBiZWZvcmUgdGhlIHdvcmtmbG93IGJ1bmRsZSBydW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUXVpY2tKU1NlcmRlKFxuICB2bTogUXVpY2tKUyxcbiAgLyoqXG4gICAqIFByZS1jYXB0dXJlZCBzZXJkZSByb290IChiYXNlbGluZS1zbmFwc2hvdCBwYXRoKTogdGhlIGNvbnRhaW5lclxuICAgKiBgY2FwdHVyZVNlcmRlUm9vdGAgY3JlYXRlZCBCRUZPUkUgdXNlciBjb2RlLCByZS1hZG9wdGVkIGZyb20gdGhlXG4gICAqIHJlc3RvcmVkIG1lbW9yeSBpbWFnZSB2aWEgYGFkb3B0U2VyZGVSb290YC4gV2hlbiBvbWl0dGVkLCB0aGUgcm9vdFxuICAgKiBpcyBjYXB0dXJlZCBub3c7IGNhbGxlcnMgbXVzdCBndWFyYW50ZWUgbm8gdXNlciBjb2RlIGhhcyBydW4geWV0LlxuICAgKiBFaXRoZXIgd2F5LCBpbml0aWFsaXphdGlvbiBiZWxvdyBwZXJmb3JtcyBvbmx5IHBsYWluLWRhdGEgcHJvcGVydHlcbiAgICogcmVhZHMgYW5kIEMtbGV2ZWwgY2xhc3NJZCByZWFkcyBvbiB0aGUgY29udGFpbmVyOiBOTyBndWVzdCBjb2RlXG4gICAqIGV4ZWN1dGVzIGhlcmUsIHNvIG5vdGhpbmcgdXNlci1wYXRjaGFibGUgY2FuIG9ic2VydmUgb3IgcGVydHVyYiBpdC5cbiAgICovXG4gIGNhcHR1cmVkUm9vdD86IEpTVmFsdWVIYW5kbGVcbik6IFF1aWNrSlNTZXJkZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGVzOiBKU1ZhbHVlSGFuZGxlW10gPSBbXTtcbiAgY29uc3Qga2VlcCA9IChoYW5kbGU6IEpTVmFsdWVIYW5kbGUpOiBKU1ZhbHVlSGFuZGxlID0+IHtcbiAgICBkaXNwb3NhYmxlcy5wdXNoKGhhbmRsZSk7XG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfTtcbiAgY29uc3QgaXNIYW5kbGUgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBKU1ZhbHVlSGFuZGxlID0+XG4gICAgdmFsdWUgaW5zdGFuY2VvZiBKU1ZhbHVlSGFuZGxlO1xuXG4gIC8vIC0tLSBib290IGNhcHR1cmUgLS0tXG5cbiAgY29uc3Qgcm9vdCA9IGtlZXAoY2FwdHVyZWRSb290ID8/IGNhcHR1cmVTZXJkZVJvb3Qodm0pKTtcblxuICBjb25zdCB0YWdCeUNsYXNzSWQgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuICB7XG4gICAgY29uc3Qgc2FtcGxlcyA9IHJvb3QuZ2V0UHJvcCgnc2FtcGxlcycpO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiBzYW1wbGVzLmdldE93blByb3BlcnR5TmFtZXMoKSkge1xuICAgICAgICBjb25zdCBzYW1wbGUgPSBzYW1wbGVzLmdldFByb3AodGFnKTtcbiAgICAgICAgdGFnQnlDbGFzc0lkLnNldChzYW1wbGUuY2xhc3NJZCwgdGFnKTtcbiAgICAgICAgc2FtcGxlLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2FtcGxlcy5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW50cmluc2ljcyA9IGtlZXAocm9vdC5nZXRQcm9wKCdpbnRyaW5zaWNzJykpO1xuICBjb25zdCBhdCA9IChuYW1lOiBzdHJpbmcpOiBKU1ZhbHVlSGFuZGxlID0+IGtlZXAoaW50cmluc2ljcy5nZXRQcm9wKG5hbWUpKTtcbiAgLyoqIEFic2VudCBjYXB0dXJlcyAoZXh0ZW5zaW9uL2Jvb3RzdHJhcCBnbG9iYWwgbm90IGluc3RhbGxlZCkuICovXG4gIGNvbnN0IG9wdGlvbmFsID0gKG5hbWU6IHN0cmluZyk6IEpTVmFsdWVIYW5kbGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGhhbmRsZSA9IGF0KG5hbWUpO1xuICAgIHJldHVybiBoYW5kbGUuaXNVbmRlZmluZWQgPyB1bmRlZmluZWQgOiBoYW5kbGU7XG4gIH07XG5cbiAgY29uc3QgaSA9IHtcbiAgICBkYXRlR2V0VGltZTogYXQoJ2RhdGVHZXRUaW1lJyksXG4gICAgZGF0ZVRvSVNPU3RyaW5nOiBhdCgnZGF0ZVRvSVNPU3RyaW5nJyksXG4gICAgcmVnRXhwU291cmNlOiBhdCgncmVnRXhwU291cmNlJyksXG4gICAgcmVnRXhwRmxhZ3M6IGF0KCdyZWdFeHBGbGFncycpLFxuICAgIG51bWJlclZhbHVlT2Y6IGF0KCdudW1iZXJWYWx1ZU9mJyksXG4gICAgc3RyaW5nVmFsdWVPZjogYXQoJ3N0cmluZ1ZhbHVlT2YnKSxcbiAgICBib29sZWFuVmFsdWVPZjogYXQoJ2Jvb2xlYW5WYWx1ZU9mJyksXG4gICAgYmlnSW50VmFsdWVPZjogYXQoJ2JpZ0ludFZhbHVlT2YnKSxcbiAgICBiaWdJbnRUb1N0cmluZzogYXQoJ2JpZ0ludFRvU3RyaW5nJyksXG4gICAgc2V0Rm9yRWFjaDogYXQoJ3NldEZvckVhY2gnKSxcbiAgICBtYXBGb3JFYWNoOiBhdCgnbWFwRm9yRWFjaCcpLFxuICAgIGhlYWRlcnNGb3JFYWNoOiBvcHRpb25hbCgnaGVhZGVyc0ZvckVhY2gnKSxcbiAgICB1cmxIcmVmOiBvcHRpb25hbCgndXJsSHJlZicpLFxuICAgIHVybFNlYXJjaFBhcmFtc1RvU3RyaW5nOiBvcHRpb25hbCgndXJsU2VhcmNoUGFyYW1zVG9TdHJpbmcnKSxcbiAgICB1cmxTZWFyY2hQYXJhbXNTaXplOiBvcHRpb25hbCgndXJsU2VhcmNoUGFyYW1zU2l6ZScpLFxuICAgIHZpZXdCdWZmZXI6IGF0KCd2aWV3QnVmZmVyJyksXG4gICAgdmlld0J5dGVPZmZzZXQ6IGF0KCd2aWV3Qnl0ZU9mZnNldCcpLFxuICAgIHZpZXdCeXRlTGVuZ3RoOiBhdCgndmlld0J5dGVMZW5ndGgnKSxcbiAgICB2aWV3TGVuZ3RoOiBhdCgndmlld0xlbmd0aCcpLFxuICAgIGRhdGFWaWV3QnVmZmVyOiBhdCgnZGF0YVZpZXdCdWZmZXInKSxcbiAgICBkYXRhVmlld0J5dGVPZmZzZXQ6IGF0KCdkYXRhVmlld0J5dGVPZmZzZXQnKSxcbiAgICBkYXRhVmlld0J5dGVMZW5ndGg6IGF0KCdkYXRhVmlld0J5dGVMZW5ndGgnKSxcbiAgICBhcnJheUJ1ZmZlckJ5dGVMZW5ndGg6IGF0KCdhcnJheUJ1ZmZlckJ5dGVMZW5ndGgnKSxcbiAgICBvYmplY3RQcm90b3R5cGU6IGF0KCdvYmplY3RQcm90b3R5cGUnKSxcbiAgICBlcnJvclByb3RvdHlwZTogYXQoJ2Vycm9yUHJvdG90eXBlJyksXG4gICAgZG9tRXhjZXB0aW9uUHJvdG90eXBlOiBvcHRpb25hbCgnZG9tRXhjZXB0aW9uUHJvdG90eXBlJyksXG4gICAgaGVhZGVyc1Byb3RvdHlwZTogb3B0aW9uYWwoJ2hlYWRlcnNQcm90b3R5cGUnKSxcbiAgICByZXF1ZXN0UHJvdG90eXBlOiBvcHRpb25hbCgncmVxdWVzdFByb3RvdHlwZScpLFxuICAgIHJlc3BvbnNlUHJvdG90eXBlOiBvcHRpb25hbCgncmVzcG9uc2VQcm90b3R5cGUnKSxcbiAgICByZWFkYWJsZVN0cmVhbVByb3RvdHlwZTogb3B0aW9uYWwoJ3JlYWRhYmxlU3RyZWFtUHJvdG90eXBlJyksXG4gICAgd3JpdGFibGVTdHJlYW1Qcm90b3R5cGU6IG9wdGlvbmFsKCd3cml0YWJsZVN0cmVhbVByb3RvdHlwZScpLFxuICAgIHVybFByb3RvdHlwZTogb3B0aW9uYWwoJ3VybFByb3RvdHlwZScpLFxuICAgIHVybFNlYXJjaFBhcmFtc1Byb3RvdHlwZTogb3B0aW9uYWwoJ3VybFNlYXJjaFBhcmFtc1Byb3RvdHlwZScpLFxuICAgIERhdGU6IGF0KCdEYXRlJyksXG4gICAgUmVnRXhwOiBhdCgnUmVnRXhwJyksXG4gICAgU2V0OiBhdCgnU2V0JyksXG4gICAgTWFwOiBhdCgnTWFwJyksXG4gICAgQXJyYXk6IGF0KCdBcnJheScpLFxuICAgIE9iamVjdDogYXQoJ09iamVjdCcpLFxuICAgIEVycm9yOiBhdCgnRXJyb3InKSxcbiAgICBBZ2dyZWdhdGVFcnJvcjogb3B0aW9uYWwoJ0FnZ3JlZ2F0ZUVycm9yJyksXG4gICAgRE9NRXhjZXB0aW9uOiBvcHRpb25hbCgnRE9NRXhjZXB0aW9uJyksXG4gICAgSGVhZGVyczogb3B0aW9uYWwoJ0hlYWRlcnMnKSxcbiAgICBSZWFkYWJsZVN0cmVhbTogb3B0aW9uYWwoJ1JlYWRhYmxlU3RyZWFtJyksXG4gICAgV3JpdGFibGVTdHJlYW06IG9wdGlvbmFsKCdXcml0YWJsZVN0cmVhbScpLFxuICAgIFVSTDogb3B0aW9uYWwoJ1VSTCcpLFxuICAgIFVSTFNlYXJjaFBhcmFtczogb3B0aW9uYWwoJ1VSTFNlYXJjaFBhcmFtcycpLFxuICAgIHNldEFkZDogYXQoJ3NldEFkZCcpLFxuICAgIG1hcFNldDogYXQoJ21hcFNldCcpLFxuICAgIG9iamVjdENyZWF0ZTogYXQoJ29iamVjdENyZWF0ZScpLFxuICAgIGRlZmluZVByb3BlcnR5OiBhdCgnZGVmaW5lUHJvcGVydHknKSxcbiAgICBkYXRlTm93OiBhdCgnZGF0ZU5vdycpLFxuICAgIG9iamVjdEZyZWV6ZTogYXQoJ29iamVjdEZyZWV6ZScpLFxuICAgIGZ1bmN0aW9uQmluZDogYXQoJ2Z1bmN0aW9uQmluZCcpLFxuICAgIG1ha2VTcGFyc2VBcnJheTogYXQoJ21ha2VTcGFyc2VBcnJheScpLFxuICAgIG1ha2VUaHVuazogYXQoJ21ha2VUaHVuaycpLFxuICB9O1xuXG4gIGNvbnN0IGVycm9yQ29uc3RydWN0b3JzID0gbmV3IE1hcDxzdHJpbmcsIEpTVmFsdWVIYW5kbGU+KCk7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBbXG4gICAgJ0V2YWxFcnJvcicsXG4gICAgJ1JhbmdlRXJyb3InLFxuICAgICdSZWZlcmVuY2VFcnJvcicsXG4gICAgJ1N5bnRheEVycm9yJyxcbiAgICAnVHlwZUVycm9yJyxcbiAgICAnVVJJRXJyb3InLFxuICBdKSB7XG4gICAgZXJyb3JDb25zdHJ1Y3RvcnMuc2V0KG5hbWUsIGF0KG5hbWUpKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSBuZXcgTWFwPHN0cmluZywgSlNWYWx1ZUhhbmRsZT4oKTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIFtcbiAgICAnSW50OEFycmF5JyxcbiAgICAnVWludDhBcnJheScsXG4gICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JyxcbiAgICAnSW50MTZBcnJheScsXG4gICAgJ1VpbnQxNkFycmF5JyxcbiAgICAnSW50MzJBcnJheScsXG4gICAgJ1VpbnQzMkFycmF5JyxcbiAgICAnRmxvYXQzMkFycmF5JyxcbiAgICAnRmxvYXQ2NEFycmF5JyxcbiAgICAnQmlnSW50NjRBcnJheScsXG4gICAgJ0JpZ1VpbnQ2NEFycmF5JyxcbiAgICAnRGF0YVZpZXcnLFxuICBdKSB7XG4gICAgdHlwZWRBcnJheUNvbnN0cnVjdG9ycy5zZXQobmFtZSwgYXQobmFtZSkpO1xuICB9XG5cbiAgY29uc3Qgc3ltYm9scyA9IG5ldyBNYXA8U3ltYm9sTmFtZSwgSlNWYWx1ZUhhbmRsZT4oKTtcbiAge1xuICAgIHVzaW5nIHN5bWJvbHNDb250YWluZXIgPSByb290LmdldFByb3AoJ3N5bWJvbHMnKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgU1lNQk9MX05BTUVTKSB7XG4gICAgICBzeW1ib2xzLnNldChuYW1lLCBrZWVwKHN5bWJvbHNDb250YWluZXIuZ2V0UHJvcChuYW1lKSkpO1xuICAgIH1cbiAgfVxuICBjb25zdCBzeW0gPSAobmFtZTogU3ltYm9sTmFtZSk6IEpTVmFsdWVIYW5kbGUgPT4ge1xuICAgIGNvbnN0IGhhbmRsZSA9IHN5bWJvbHMuZ2V0KG5hbWUpO1xuICAgIGlmICghaGFuZGxlKSB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY2FwdHVyZWQgc3ltYm9sOiAke25hbWV9YCk7XG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfTtcblxuICAvLyAtLS0gaGFuZGxlIGhlbHBlcnMgLS0tXG5cbiAgY29uc3QgY2FsbCA9IChcbiAgICBmbjogSlNWYWx1ZUhhbmRsZSxcbiAgICB0aGlzVmFsdWU6IEpTVmFsdWVIYW5kbGUsXG4gICAgLi4uYXJnczogSlNWYWx1ZUhhbmRsZVtdXG4gICk6IEpTVmFsdWVIYW5kbGUgPT4gdm0uY2FsbEZ1bmN0aW9uKGZuLCB0aGlzVmFsdWUsIC4uLmFyZ3MpO1xuXG4gIGNvbnN0IGludm9rZSA9IChmbjogSlNWYWx1ZUhhbmRsZSwgLi4uYXJnczogSlNWYWx1ZUhhbmRsZVtdKTogSlNWYWx1ZUhhbmRsZSA9PlxuICAgIHZtLmNhbGxGdW5jdGlvbihmbiwgdm0udW5kZWZpbmVkLCAuLi5hcmdzKTtcblxuICAvKipcbiAgICogR3Vlc3Qgb3duLXByb3BlcnR5IGNoZWNrIHRocm91Z2ggdGhlIGhhbmRsZSdzIGludHJvc3BlY3Rpb24gbWV0aG9kLlxuICAgKiBNVVNUIE5PVCBiZSByZXBsYWNlZCB3aXRoIGBPYmplY3QuaGFzT3duYCwgd2hpY2ggd291bGQgaW50ZXJyb2dhdGUgdGhlXG4gICAqIGhvc3QgSlNWYWx1ZUhhbmRsZSB3cmFwcGVyIG9iamVjdCAoYWx3YXlzIGZhbHNlKSBpbnN0ZWFkIG9mIHRoZSBndWVzdFxuICAgKiB2YWx1ZTsgYmlvbWUncyBub1Byb3RvdHlwZUJ1aWx0aW5zIGF1dG8tZml4IGRvZXMgZXhhY3RseSB0aGF0LCB3aGljaFxuICAgKiBpcyB3aHkgdGhpcyBpcyBjZW50cmFsaXplZCBoZXJlIHdpdGggdGhlIHN1cHByZXNzaW9uLlxuICAgKi9cbiAgY29uc3QgZ3Vlc3RIYXNPd24gPSAoaGFuZGxlOiBKU1ZhbHVlSGFuZGxlLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vUHJvdG90eXBlQnVpbHRpbnM6IEpTVmFsdWVIYW5kbGUuaGFzT3duUHJvcGVydHkgaXMgcXVpY2tqcy13YXNpJ3MgZ3Vlc3Qtc2lkZSBpbnRyb3NwZWN0aW9uIEFQSSwgbm90IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgICBoYW5kbGUuaGFzT3duUHJvcGVydHkoa2V5KTtcblxuICAvKipcbiAgICogT3duIGRhdGEtcHJvcGVydHkgcmVhZC4gUmV0dXJucyB1bmRlZmluZWQgZm9yIGFic2VudCBwcm9wZXJ0aWVzIEFORCBmb3JcbiAgICogYWNjZXNzb3IgcHJvcGVydGllczogYW4gaW5oZXJpdGVkIG9yIG93biBnZXR0ZXIgaXMgbmV2ZXIgaW52b2tlZFxuICAgKiAobWF0Y2hpbmcgdGhlIGhhcmRlbmVkIG5vZGU6dm0gY29kZWMncyBkZXNjcmlwdG9yLWJhc2VkIHJlYWRzKS5cbiAgICovXG4gIGNvbnN0IG93biA9IChcbiAgICB0YXJnZXQ6IEpTVmFsdWVIYW5kbGUsXG4gICAga2V5OiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlXG4gICk6IEpTVmFsdWVIYW5kbGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0YXJnZXQuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGtleSBhcyBzdHJpbmcpO1xuICAgIGlmICghZGVzY3JpcHRvcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBkZXNjcmlwdG9yLmdldD8uZGlzcG9zZSgpO1xuICAgIGRlc2NyaXB0b3Iuc2V0Py5kaXNwb3NlKCk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IudmFsdWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIERhdGEtcHJvcGVydHkgcmVhZCBmb2xsb3dpbmcgdGhlIHByb3RvdHlwZSBjaGFpbiAodGhlIHNhZmUgYW5hbG9ndWUgb2ZcbiAgICogYHZhbHVlLm5hbWVgIG9uIGFuIEVycm9yIGluc3RhbmNlLCB3aGVyZSBgbmFtZWAvYG1lc3NhZ2VgIGxpdmUgb24gdGhlXG4gICAqIHByb3RvdHlwZSkuIEFjY2Vzc29ycyBhbnl3aGVyZSBvbiB0aGUgY2hhaW4gYXJlIHNraXBwZWQsIG5vdCBpbnZva2VkLlxuICAgKi9cbiAgY29uc3QgY2hhaW5lZCA9IChcbiAgICB0YXJnZXQ6IEpTVmFsdWVIYW5kbGUsXG4gICAga2V5OiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlXG4gICk6IEpTVmFsdWVIYW5kbGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCBjdXJyZW50OiBKU1ZhbHVlSGFuZGxlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBvd25lZCA9IGZhbHNlOyAvLyB3aGV0aGVyIGBjdXJyZW50YCBpcyBvdXJzIHRvIGRpc3Bvc2VcbiAgICBsZXQgY3Vyc29yID0gdGFyZ2V0O1xuICAgIGZvciAobGV0IGRlcHRoID0gMDsgZGVwdGggPCAzMjsgZGVwdGgrKykge1xuICAgICAgY29uc3QgZm91bmQgPSBvd24oY3Vyc29yLCBrZXkpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGlmIChvd25lZCkgKGN1cnNvciBhcyBKU1ZhbHVlSGFuZGxlKS5kaXNwb3NlKCk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByb3RvID0gY3Vyc29yLmdldFByb3RvdHlwZU9mKCk7XG4gICAgICBpZiAob3duZWQpIChjdXJzb3IgYXMgSlNWYWx1ZUhhbmRsZSkuZGlzcG9zZSgpO1xuICAgICAgaWYgKHByb3RvLmlzTnVsbCB8fCBwcm90by5pc1VuZGVmaW5lZCkge1xuICAgICAgICBwcm90by5kaXNwb3NlKCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjdXJzb3IgPSBwcm90bztcbiAgICAgIG93bmVkID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnQgPSBwcm90bztcbiAgICB9XG4gICAgaWYgKG93bmVkICYmIGN1cnJlbnQpIGN1cnJlbnQuZGlzcG9zZSgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqIEhvc3Qgc3RyaW5nIGZyb20gYSBkYXRhIHByb3BlcnR5IChvd24tb3ItY2hhaW4pLCBvciB1bmRlZmluZWQuICovXG4gIGNvbnN0IGNoYWluZWRTdHJpbmcgPSAoXG4gICAgdGFyZ2V0OiBKU1ZhbHVlSGFuZGxlLFxuICAgIGtleTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZVxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGhhbmRsZSA9IGNoYWluZWQodGFyZ2V0LCBrZXkpO1xuICAgIGlmICghaGFuZGxlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZS5pc1N0cmluZyA/IGhhbmRsZS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuICAgIGhhbmRsZS5kaXNwb3NlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb25zdCBvd25TdHJpbmcgPSAoXG4gICAgdGFyZ2V0OiBKU1ZhbHVlSGFuZGxlLFxuICAgIGtleTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZVxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGhhbmRsZSA9IG93bih0YXJnZXQsIGtleSk7XG4gICAgaWYgKCFoYW5kbGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlLmlzU3RyaW5nID8gaGFuZGxlLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG4gICAgaGFuZGxlLmRpc3Bvc2UoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBoYW5kbGVgIGhhcyBgcHJvdG90eXBlSGFuZGxlYCBhbnl3aGVyZSBvbiBpdHMgcHJvdG90eXBlIGNoYWluOlxuICAgKiB0aGUgdHJhcC1mcmVlIGFuYWxvZ3VlIG9mIGBpbnN0YW5jZW9mYCAod2hpY2ggd291bGQgZmlyZVxuICAgKiBgU3ltYm9sLmhhc0luc3RhbmNlYCkuXG4gICAqL1xuICBjb25zdCBoYXNQcm90b3R5cGUgPSAoXG4gICAgaGFuZGxlOiBKU1ZhbHVlSGFuZGxlLFxuICAgIHByb3RvdHlwZUhhbmRsZTogSlNWYWx1ZUhhbmRsZSB8IHVuZGVmaW5lZFxuICApOiBib29sZWFuID0+IHtcbiAgICBpZiAoIXByb3RvdHlwZUhhbmRsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBjdXJzb3IgPSBoYW5kbGUuZ2V0UHJvdG90eXBlT2YoKTtcbiAgICBmb3IgKGxldCBkZXB0aCA9IDA7IGRlcHRoIDwgMzI7IGRlcHRoKyspIHtcbiAgICAgIGlmIChjdXJzb3IuaXNOdWxsIHx8IGN1cnNvci5pc1VuZGVmaW5lZCkge1xuICAgICAgICBjdXJzb3IuZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY3Vyc29yLmlkZW50aXR5ID09PSBwcm90b3R5cGVIYW5kbGUuaWRlbnRpdHkpIHtcbiAgICAgICAgY3Vyc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0ID0gY3Vyc29yLmdldFByb3RvdHlwZU9mKCk7XG4gICAgICBjdXJzb3IuZGlzcG9zZSgpO1xuICAgICAgY3Vyc29yID0gbmV4dDtcbiAgICB9XG4gICAgY3Vyc29yLmRpc3Bvc2UoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLyoqIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIHdyaXRlLCBpbW11bmUgdG8gaW5oZXJpdGVkIHNldHRlcnMuICovXG4gIGNvbnN0IGRlZmluZSA9IChcbiAgICB0YXJnZXQ6IEpTVmFsdWVIYW5kbGUsXG4gICAga2V5OiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlLFxuICAgIHZhbHVlOiBKU1ZhbHVlSGFuZGxlXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB2bS5uZXdPYmplY3QoKTtcbiAgICB0cnkge1xuICAgICAgZGVzY3JpcHRvci5zZXRQcm9wKCd2YWx1ZScsIHZhbHVlKTtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0UHJvcCgnd3JpdGFibGUnLCB2bS50cnVlKTtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0UHJvcCgnZW51bWVyYWJsZScsIHZtLnRydWUpO1xuICAgICAgZGVzY3JpcHRvci5zZXRQcm9wKCdjb25maWd1cmFibGUnLCB2bS50cnVlKTtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBrZXlIYW5kbGUgPSB2bS5uZXdTdHJpbmcoa2V5KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKFxuICAgICAgICAgICAgaS5kZWZpbmVQcm9wZXJ0eSxcbiAgICAgICAgICAgIHZtLnVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIGtleUhhbmRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICApLmRpc3Bvc2UoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBrZXlIYW5kbGUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsKGkuZGVmaW5lUHJvcGVydHksIHZtLnVuZGVmaW5lZCwgdGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVzY3JpcHRvci5kaXNwb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG5ld0d1ZXN0U3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBKU1ZhbHVlSGFuZGxlID0+IHZtLm5ld1N0cmluZyh2YWx1ZSk7XG5cbiAgLyoqIENvbGxlY3QgU2V0IHZhbHVlcyAvIE1hcCBlbnRyaWVzIHZpYSBjYXB0dXJlZCBmb3JFYWNoLiAqL1xuICBjb25zdCBjb2xsZWN0ID0gKFxuICAgIGZvckVhY2g6IEpTVmFsdWVIYW5kbGUsXG4gICAgY29sbGVjdGlvbjogSlNWYWx1ZUhhbmRsZSxcbiAgICBhcml0eTogMSB8IDJcbiAgKTogdW5rbm93bltdID0+IHtcbiAgICBjb25zdCBjb2xsZWN0ZWQ6IHVua25vd25bXSA9IFtdO1xuICAgIGNvbnN0IHZpc2l0b3IgPSB2bS5uZXdFcGhlbWVyYWxGdW5jdGlvbihcbiAgICAgICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSwga2V5OiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICAgIC8vIGR1cCgpOiB0aGUgdmlzaXRvcidzIG93biBhcmcgaGFuZGxlcyBhcmUgYm9ycm93ZWQgKEMtb3duZWQsXG4gICAgICAgIC8vIHNjb3BlLWV4ZW1wdCBhcyBvZiBxdWlja2pzLXdhc2kgMy4zLjEpOyB0aGUgZHVwcyBhcmUgb3duZWRcbiAgICAgICAgLy8gcmVmZXJlbmNlcywgc2NvcGUtdHJhY2tlZCBhbmQgc3dlcHQgYXQgdGhlIHBhc3MgYm91bmRhcnkuXG4gICAgICAgIGNvbGxlY3RlZC5wdXNoKGFyaXR5ID09PSAxID8gdmFsdWUuZHVwKCkgOiBba2V5LmR1cCgpLCB2YWx1ZS5kdXAoKV0pO1xuICAgICAgICByZXR1cm4gdm0udW5kZWZpbmVkO1xuICAgICAgfVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGNhbGwoZm9yRWFjaCwgY29sbGVjdGlvbiwgdmlzaXRvcikuZGlzcG9zZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB2aXNpdG9yLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3RlZDtcbiAgfTtcblxuICAvKiogQ29weSBhIHR5cGVkIGFycmF5IC8gRGF0YVZpZXcncyB2aWV3ZWQgYnl0ZXMgdG8gdGhlIGhvc3QuICovXG4gIGNvbnN0IHZpZXdCeXRlcyA9IChoYW5kbGU6IEpTVmFsdWVIYW5kbGUpOiBVaW50OEFycmF5ID0+IHtcbiAgICBjb25zdCBpc0RhdGFWaWV3ID0gaGFuZGxlLmlzRGF0YVZpZXc7XG4gICAgY29uc3QgYnVmZmVyID0gY2FsbChpc0RhdGFWaWV3ID8gaS5kYXRhVmlld0J1ZmZlciA6IGkudmlld0J1ZmZlciwgaGFuZGxlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnl0ZU9mZnNldCA9IGNhbGwoXG4gICAgICAgIGlzRGF0YVZpZXcgPyBpLmRhdGFWaWV3Qnl0ZU9mZnNldCA6IGkudmlld0J5dGVPZmZzZXQsXG4gICAgICAgIGhhbmRsZVxuICAgICAgKS5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpO1xuICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IGNhbGwoXG4gICAgICAgIGlzRGF0YVZpZXcgPyBpLmRhdGFWaWV3Qnl0ZUxlbmd0aCA6IGkudmlld0J5dGVMZW5ndGgsXG4gICAgICAgIGhhbmRsZVxuICAgICAgKS5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpO1xuICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIudG9BcnJheUJ1ZmZlcigpKTtcbiAgICAgIHJldHVybiBieXRlcy5zdWJhcnJheShieXRlT2Zmc2V0LCBieXRlT2Zmc2V0ICsgYnl0ZUxlbmd0aCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGJ1ZmZlci5kaXNwb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHRhZ09mSGFuZGxlID0gKGhhbmRsZTogSlNWYWx1ZUhhbmRsZSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKGhhbmRsZS5pc1Byb3h5KSByZXR1cm4gJ09iamVjdCc7XG4gICAgcmV0dXJuIHRhZ0J5Q2xhc3NJZC5nZXQoaGFuZGxlLmNsYXNzSWQpID8/ICdPYmplY3QnO1xuICB9O1xuXG4gIC8vIC0tLSBpZGVudGl0eSAtLS1cblxuICBjb25zdCBpZGVudGl0aWVzID0gbmV3IE1hcDxudW1iZXIsIG9iamVjdD4oKTtcbiAgY29uc3QgaWRlbnRpdHlPZiA9IChwb2ludGVyOiBudW1iZXIpOiBvYmplY3QgPT4ge1xuICAgIGxldCBpZGVudGl0eSA9IGlkZW50aXRpZXMuZ2V0KHBvaW50ZXIpO1xuICAgIGlmICghaWRlbnRpdHkpIHtcbiAgICAgIGlkZW50aXR5ID0geyBwb2ludGVyIH07XG4gICAgICBpZGVudGl0aWVzLnNldChwb2ludGVyLCBpZGVudGl0eSk7XG4gICAgfVxuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfTtcblxuICBjb25zdCBwcmltaXRpdmVPZiA9IChoYW5kbGU6IEpTVmFsdWVIYW5kbGUpOiB1bmtub3duID0+IHtcbiAgICBpZiAoaGFuZGxlLmlzVW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChoYW5kbGUuaXNOdWxsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoaGFuZGxlLmlzQm9vbCkgcmV0dXJuIGhhbmRsZS50b0Jvb2xlYW4oKTtcbiAgICBpZiAoaGFuZGxlLmlzTnVtYmVyKSByZXR1cm4gaGFuZGxlLnRvTnVtYmVyKCk7XG4gICAgaWYgKGhhbmRsZS5pc0JpZ0ludCkgcmV0dXJuIGd1ZXN0QmlnSW50KGhhbmRsZSk7XG4gICAgcmV0dXJuIGhhbmRsZS50b1N0cmluZygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGEgZ3Vlc3QgYmlnaW50IHZpYSB0aGUgY2FwdHVyZWQgYEJpZ0ludC5wcm90b3R5cGUudG9TdHJpbmdgLFxuICAgKiBzaW5jZSBgaGFuZGxlLnRvQmlnSW50KClgIHRydW5jYXRlcyB0byA2NCBiaXRzLlxuICAgKi9cbiAgY29uc3QgZ3Vlc3RCaWdJbnQgPSAoaGFuZGxlOiBKU1ZhbHVlSGFuZGxlKTogYmlnaW50ID0+XG4gICAgQmlnSW50KGNhbGwoaS5iaWdJbnRUb1N0cmluZywgaGFuZGxlKS5jb25zdW1lKChoKSA9PiBoLnRvU3RyaW5nKCkpKTtcblxuICAvLyAtLS0gaHlicmlkIHN0cmluZ2lmeSBvcGVyYXRpb25zIC0tLVxuICAvLyBIYW5kbGVzIHRha2UgdGhlIGludHJvc3BlY3Rpb24gcGF0aDsgaG9zdCB2YWx1ZXMgKHJlZHVjZXIgb3V0cHV0cylcbiAgLy8gZmFsbCBiYWNrIHRvIGRldmFsdWUncyBkZWZhdWx0cy5cblxuICBjb25zdCBkID0gZGVmYXVsdFN0cmluZ2lmeU9wZXJhdGlvbnM7XG5cbiAgY29uc3Qgc3RyaW5naWZ5T3BlcmF0aW9uczogU3RyaW5naWZ5T3BlcmF0aW9ucyA9IHtcbiAgICBpZGVudGlmeTogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQuaWRlbnRpZnkodmFsdWUpO1xuICAgICAgY29uc3QgcG9pbnRlciA9IHZhbHVlLmlkZW50aXR5O1xuICAgICAgaWYgKHBvaW50ZXIgPT09IDAgfHwgdmFsdWUuaXNTdHJpbmcpIHJldHVybiBwcmltaXRpdmVPZih2YWx1ZSk7XG4gICAgICByZXR1cm4gaWRlbnRpdHlPZihwb2ludGVyKTtcbiAgICB9LFxuICAgIHR5cGVPZjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQudHlwZU9mKHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZS5pc051bGwpIHJldHVybiAnbnVsbCc7XG4gICAgICByZXR1cm4gdmFsdWUudHlwZW9mIGFzIFJldHVyblR5cGU8U3RyaW5naWZ5T3BlcmF0aW9uc1sndHlwZU9mJ10+O1xuICAgIH0sXG4gICAgdG9QcmltaXRpdmU6ICh2YWx1ZSkgPT4gKGlzSGFuZGxlKHZhbHVlKSA/IHByaW1pdGl2ZU9mKHZhbHVlKSA6IHZhbHVlKSxcbiAgICB0YWdPZjogKHZhbHVlKSA9PiAoaXNIYW5kbGUodmFsdWUpID8gdGFnT2ZIYW5kbGUodmFsdWUpIDogZC50YWdPZih2YWx1ZSkpLFxuICAgIGlzVGhlbmFibGU6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSA/IHZhbHVlLmlzUHJvbWlzZSA6IGQuaXNUaGVuYWJsZSh2YWx1ZSksXG4gICAgdG9Qcm9taXNlOiBhc3luYyAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpKSByZXR1cm4gZC50b1Byb21pc2UodmFsdWUpO1xuICAgICAgY29uc3Qgc2V0dGxlZCA9IGF3YWl0IHZtLnJlc29sdmVQcm9taXNlKHZhbHVlKTtcbiAgICAgIGlmICgnZXJyb3InIGluIHNldHRsZWQpIHRocm93IHNldHRsZWQuZXJyb3I7XG4gICAgICByZXR1cm4gc2V0dGxlZC52YWx1ZTtcbiAgICB9LFxuICAgIHVuYm94OiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpKSByZXR1cm4gZC51bmJveCh2YWx1ZSk7XG4gICAgICBzd2l0Y2ggKHRhZ09mSGFuZGxlKHZhbHVlKSkge1xuICAgICAgICBjYXNlICdOdW1iZXInOlxuICAgICAgICAgIHJldHVybiBjYWxsKGkubnVtYmVyVmFsdWVPZiwgdmFsdWUpO1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgIHJldHVybiBjYWxsKGkuc3RyaW5nVmFsdWVPZiwgdmFsdWUpO1xuICAgICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgICByZXR1cm4gY2FsbChpLmJvb2xlYW5WYWx1ZU9mLCB2YWx1ZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGNhbGwoaS5iaWdJbnRWYWx1ZU9mLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB0b0lTT1N0cmluZzogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQudG9JU09TdHJpbmcodmFsdWUpO1xuICAgICAgaWYgKFxuICAgICAgICBOdW1iZXIuaXNOYU4oY2FsbChpLmRhdGVHZXRUaW1lLCB2YWx1ZSkuY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FsbChpLmRhdGVUb0lTT1N0cmluZywgdmFsdWUpLmNvbnN1bWUoKGgpID0+IGgudG9TdHJpbmcoKSk7XG4gICAgfSxcbiAgICB0b1N0cmluZ1ZhbHVlOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpKSByZXR1cm4gZC50b1N0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICAgIC8vIFVSTCAvIFVSTFNlYXJjaFBhcmFtcyBhcmUgbWF0Y2hlZCBieSB3b3JrZmxvdyByZWR1Y2VycyBiZWZvcmVcbiAgICAgIC8vIGRldmFsdWUncyBuYXRpdmUgaGFuZGxpbmcsIGFuZCBUZW1wb3JhbCBkb2Vzbid0IGV4aXN0IGluIHRoZSBWTSwgc29cbiAgICAgIC8vIHRoaXMgaXMgdW5yZWFjaGFibGUgaW4gcHJhY3RpY2UuIFJlZnVzZSByYXRoZXIgdGhhbiBpbnZva2UgZ3Vlc3RcbiAgICAgIC8vIGB0b1N0cmluZ2AuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBubyBjYXB0dXJlZCBzdHJpbmcgY29udmVyc2lvbiBmb3IgJHt0YWdPZkhhbmRsZSh2YWx1ZSl9IGluIHRoZSBWTWBcbiAgICAgICk7XG4gICAgfSxcbiAgICByZWdFeHBJbmZvOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpKSByZXR1cm4gZC5yZWdFeHBJbmZvKHZhbHVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogY2FsbChpLnJlZ0V4cFNvdXJjZSwgdmFsdWUpLmNvbnN1bWUoKGgpID0+IGgudG9TdHJpbmcoKSksXG4gICAgICAgIGZsYWdzOiBjYWxsKGkucmVnRXhwRmxhZ3MsIHZhbHVlKS5jb25zdW1lKChoKSA9PiBoLnRvU3RyaW5nKCkpLFxuICAgICAgfTtcbiAgICB9LFxuICAgIHZhbHVlc09mOiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgPyBjb2xsZWN0KGkuc2V0Rm9yRWFjaCwgdmFsdWUsIDEpIDogZC52YWx1ZXNPZih2YWx1ZSksXG4gICAgZW50cmllc09mOiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSlcbiAgICAgICAgPyAoY29sbGVjdChpLm1hcEZvckVhY2gsIHZhbHVlLCAyKSBhcyBJdGVyYWJsZTxbdW5rbm93biwgdW5rbm93bl0+KVxuICAgICAgICA6IGQuZW50cmllc09mKHZhbHVlKSxcbiAgICB2aWV3SW5mbzogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQudmlld0luZm8odmFsdWUpO1xuICAgICAgY29uc3QgaXNEYXRhVmlldyA9IHZhbHVlLmlzRGF0YVZpZXc7XG4gICAgICBjb25zdCBidWZmZXIgPSBjYWxsKGlzRGF0YVZpZXcgPyBpLmRhdGFWaWV3QnVmZmVyIDogaS52aWV3QnVmZmVyLCB2YWx1ZSk7XG4gICAgICBjb25zdCBpbmZvID0ge1xuICAgICAgICBidWZmZXIsXG4gICAgICAgIGJ5dGVPZmZzZXQ6IGNhbGwoXG4gICAgICAgICAgaXNEYXRhVmlldyA/IGkuZGF0YVZpZXdCeXRlT2Zmc2V0IDogaS52aWV3Qnl0ZU9mZnNldCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApLmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSksXG4gICAgICAgIGJ5dGVMZW5ndGg6IGNhbGwoXG4gICAgICAgICAgaXNEYXRhVmlldyA/IGkuZGF0YVZpZXdCeXRlTGVuZ3RoIDogaS52aWV3Qnl0ZUxlbmd0aCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApLmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSksXG4gICAgICAgIGJ1ZmZlckJ5dGVMZW5ndGg6IGNhbGwoaS5hcnJheUJ1ZmZlckJ5dGVMZW5ndGgsIGJ1ZmZlcikuY29uc3VtZSgoaCkgPT5cbiAgICAgICAgICBoLnRvTnVtYmVyKClcbiAgICAgICAgKSxcbiAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgfTtcbiAgICAgIGlmICghaXNEYXRhVmlldykge1xuICAgICAgICBpbmZvLmxlbmd0aCA9IGNhbGwoaS52aWV3TGVuZ3RoLCB2YWx1ZSkuY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH0sXG4gICAgdG9BcnJheUJ1ZmZlcjogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpID8gdmFsdWUudG9BcnJheUJ1ZmZlcigpIDogZC50b0FycmF5QnVmZmVyKHZhbHVlKSxcbiAgICBsZW5ndGhPZjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQubGVuZ3RoT2YodmFsdWUpO1xuICAgICAgY29uc3QgbGVuZ3RoID0gb3duKHZhbHVlLCAnbGVuZ3RoJyk7XG4gICAgICByZXR1cm4gbGVuZ3RoPy5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpID8/IDA7XG4gICAgfSxcbiAgICBoYXNPd246ICh2YWx1ZSwga2V5KSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpID8gZ3Vlc3RIYXNPd24odmFsdWUsIFN0cmluZyhrZXkpKSA6IGQuaGFzT3duKHZhbHVlLCBrZXkpLFxuICAgIGluZGljZXNPZjogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpID8gZmlsdGVyQXJyYXlJbmRpY2VzKHZhbHVlLmtleXMoKSkgOiBkLmluZGljZXNPZih2YWx1ZSksXG4gICAgc2hhcGVPZjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSkgcmV0dXJuIGQuc2hhcGVPZih2YWx1ZSk7XG4gICAgICBpZiAodmFsdWUuaXNQcm94eSkgcmV0dXJuIHsga2luZDogJ25vdC1wbGFpbicgYXMgY29uc3QgfTtcbiAgICAgIGNvbnN0IHByb3RvdHlwZSA9IHZhbHVlLmdldFByb3RvdHlwZU9mKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc1BsYWluID1cbiAgICAgICAgICBwcm90b3R5cGUuaXNOdWxsIHx8IHByb3RvdHlwZS5pZGVudGl0eSA9PT0gaS5vYmplY3RQcm90b3R5cGUuaWRlbnRpdHk7XG4gICAgICAgIGlmICghaXNQbGFpbikgcmV0dXJuIHsga2luZDogJ25vdC1wbGFpbicgYXMgY29uc3QgfTtcbiAgICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdmFsdWUuZ2V0T3duUHJvcGVydHlLZXlzKCkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1lcmFibGUgPVxuICAgICAgICAgICAgICB2YWx1ZS5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioa2V5KT8uZW51bWVyYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICAgIGtleS5kaXNwb3NlKCk7XG4gICAgICAgICAgICBpZiAoZW51bWVyYWJsZSkgcmV0dXJuIHsga2luZDogJ3N5bWJvbC1rZXlzJyBhcyBjb25zdCB9O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtpbmQ6IHByb3RvdHlwZS5pc051bGwgPyAoJ251bGwtcHJvdG8nIGFzIGNvbnN0KSA6ICgncGxhaW4nIGFzIGNvbnN0KSxcbiAgICAgICAgICBrZXlzLFxuICAgICAgICB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcHJvdG90eXBlLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldDogKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpKSByZXR1cm4gZC5nZXQodmFsdWUsIGtleSk7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID0gdmFsdWUuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFN0cmluZyhrZXkpKTtcbiAgICAgIGlmICghZGVzY3JpcHRvcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmIChkZXNjcmlwdG9yLmdldCkge1xuICAgICAgICAvLyBQYXJpdHkgd2l0aCB0aGUgaGFyZGVuZWQgbm9kZTp2bSBjb2RlYzogZ2V0dGVycyBhcmUgaW52b2tlZCAoZnVsbFxuICAgICAgICAvLyBjb21wYXRpYmlsaXR5IHdpdGggdmFsdWVzIHdob3NlIHNoYXBlIGRlcGVuZHMgb24gYWNjZXNzb3JzKSwgdGhlXG4gICAgICAgIC8vIGRpZmZlcmVuY2UgZnJvbSBgW1tHZXRdXWAgYmVpbmcgdGhhdCB0aGlzIGlzIGFuIGV4cGxpY2l0LCBzaW5nbGVcbiAgICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGUgYWNjZXNzb3IgdGhlIGRlc2NyaXB0b3IgbmFtZXMuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGwoZGVzY3JpcHRvci5nZXQsIHZhbHVlKTtcbiAgICAgICAgZGVzY3JpcHRvci5nZXQuZGlzcG9zZSgpO1xuICAgICAgICBkZXNjcmlwdG9yLnNldD8uZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgZGVzY3JpcHRvci5zZXQ/LmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gLS0tIHdvcmtmbG93IHJlZHVjZXJzIChoYW5kbGUgc3BhY2UpIC0tLVxuXG4gIC8qKiBIb3N0IHNoYXBlIGZvciBlcnJvci1mYW1pbHkgcmVkdWN0aW9uOyBsZWF2ZXMgbWF5IGJlIGhhbmRsZXMuICovXG4gIGNvbnN0IHJlZHVjZUVycm9yU2hhcGUgPSAoXG4gICAgdmFsdWU6IEpTVmFsdWVIYW5kbGVcbiAgKTogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfSA9PiB7XG4gICAgY29uc3Qgc2hhcGU6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH0gPSB7XG4gICAgICBtZXNzYWdlOiBjaGFpbmVkU3RyaW5nKHZhbHVlLCAnbWVzc2FnZScpID8/ICcnLFxuICAgIH07XG4gICAgY29uc3Qgc3RhY2sgPSBjaGFpbmVkU3RyaW5nKHZhbHVlLCAnc3RhY2snKTtcbiAgICBpZiAoc3RhY2sgIT09IHVuZGVmaW5lZCkgc2hhcGUuc3RhY2sgPSBzdGFjaztcbiAgICBpZiAoZ3Vlc3RIYXNPd24odmFsdWUsICdjYXVzZScpKSB7XG4gICAgICBzaGFwZS5jYXVzZSA9IG93bih2YWx1ZSwgJ2NhdXNlJykgPz8gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gc2hhcGU7XG4gIH07XG5cbiAgY29uc3QgbmFtZWRFcnJvclN1YmNsYXNzUmVkdWNlciA9XG4gICAgKHN1YmNsYXNzTmFtZTogc3RyaW5nKSA9PiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8ICF2YWx1ZS5pc0Vycm9yKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoY2hhaW5lZFN0cmluZyh2YWx1ZSwgJ25hbWUnKSAhPT0gc3ViY2xhc3NOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gcmVkdWNlRXJyb3JTaGFwZSh2YWx1ZSk7XG4gICAgfTtcblxuICAvKiogT3duIHN5bWJvbC1rZXllZCBkYXRhIHJlYWQgcmV0dXJuaW5nIGEgaG9zdCBzdHJpbmcsIG9yIHVuZGVmaW5lZC4gKi9cbiAgY29uc3Qgb3duU3ltYm9sU3RyaW5nID0gKFxuICAgIHZhbHVlOiBKU1ZhbHVlSGFuZGxlLFxuICAgIG5hbWU6IFN5bWJvbE5hbWVcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBoYW5kbGUgPSBvd24odmFsdWUsIHN5bShuYW1lKSk7XG4gICAgaWYgKCFoYW5kbGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlLmlzU3RyaW5nID8gaGFuZGxlLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG4gICAgaGFuZGxlLmRpc3Bvc2UoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvbnN0IHJlZHVjZUFib3J0ID0gKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKTogdW5rbm93biA9PiB7XG4gICAgLy8gc3RyZWFtTmFtZS9ob29rVG9rZW4gbGl2ZSBvbiB0aGUgc2lnbmFsIChvciB0aGUgY29udHJvbGxlcidzIHNpZ25hbCkuXG4gICAgY29uc3Qgc2lnbmFsID0gb3duKHZhbHVlLCAnc2lnbmFsJyk7XG4gICAgY29uc3QgaG9sZGVyID0gc2lnbmFsID8/IHZhbHVlO1xuICAgIGNvbnN0IHN0cmVhbU5hbWUgPVxuICAgICAgb3duU3ltYm9sU3RyaW5nKHZhbHVlLCAnV09SS0ZMT1dfQUJPUlRfU1RSRUFNX05BTUUnKSA/P1xuICAgICAgb3duU3ltYm9sU3RyaW5nKGhvbGRlciwgJ1dPUktGTE9XX0FCT1JUX1NUUkVBTV9OQU1FJyk7XG4gICAgY29uc3QgaG9va1Rva2VuID1cbiAgICAgIG93blN5bWJvbFN0cmluZyh2YWx1ZSwgJ1dPUktGTE9XX0FCT1JUX0hPT0tfVE9LRU4nKSA/P1xuICAgICAgb3duU3ltYm9sU3RyaW5nKGhvbGRlciwgJ1dPUktGTE9XX0FCT1JUX0hPT0tfVE9LRU4nKTtcbiAgICBpZiAoIXN0cmVhbU5hbWUpIHtcbiAgICAgIHNpZ25hbD8uZGlzcG9zZSgpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgc3RyZWFtIG5hbWUgaXMgbm90IHNldCcpO1xuICAgIH1cbiAgICBjb25zdCBhYm9ydGVkID1cbiAgICAgIG93bihob2xkZXIsICdhYm9ydGVkJyk/LmNvbnN1bWUoKGgpID0+IGgudG9Cb29sZWFuKCkpID8/IGZhbHNlO1xuICAgIGNvbnN0IHJlYXNvbiA9IGFib3J0ZWQgPyBvd24oaG9sZGVyLCAncmVhc29uJykgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHNpZ25hbCAmJiBob2xkZXIgIT09IHZhbHVlKSBzaWduYWwuZGlzcG9zZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBzdHJlYW1OYW1lLFxuICAgICAgaG9va1Rva2VuLFxuICAgICAgYWJvcnRlZCxcbiAgICAgIHJlYXNvbjogYWJvcnRlZCA/IHJlYXNvbiA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHJlZHVjZXJzOiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PiA9IHtcbiAgICAvLyBPcmRlciBpcyB3aXJlLXNpZ25pZmljYW50IChmaXJzdCBtYXRjaCB3aW5zKSBhbmQgbWlycm9yc1xuICAgIC8vIGNvZGVjLWRldmFsdWUtdm0udHMgZ2V0UmVkdWNlcnNGb3JNb2RlKCd3b3JrZmxvdycpIGV4YWN0bHkuXG4gICAgQWJvcnRDb250cm9sbGVyOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8IHZhbHVlLnR5cGVvZiAhPT0gJ29iamVjdCcgfHwgdmFsdWUuaXNOdWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghZ3Vlc3RIYXNPd24odmFsdWUsICdzaWduYWwnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgaGFzU3RhbXAgPVxuICAgICAgICBvd25TeW1ib2xTdHJpbmcodmFsdWUsICdXT1JLRkxPV19BQk9SVF9TVFJFQU1fTkFNRScpICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgb3duKHZhbHVlLCAnc2lnbmFsJyk/LmNvbnN1bWUoXG4gICAgICAgICAgKHNpZ25hbCkgPT5cbiAgICAgICAgICAgIG93blN5bWJvbFN0cmluZyhzaWduYWwsICdXT1JLRkxPV19BQk9SVF9TVFJFQU1fTkFNRScpICE9PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIGlmICghaGFzU3RhbXApIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiByZWR1Y2VBYm9ydCh2YWx1ZSk7XG4gICAgfSxcbiAgICBBYm9ydFNpZ25hbDogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCB2YWx1ZS50eXBlb2YgIT09ICdvYmplY3QnIHx8IHZhbHVlLmlzTnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAob3duU3ltYm9sU3RyaW5nKHZhbHVlLCAnV09SS0ZMT1dfQUJPUlRfU1RSRUFNX05BTUUnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZWR1Y2VBYm9ydCh2YWx1ZSk7XG4gICAgfSxcbiAgICBDbGFzczogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCB2YWx1ZS50eXBlb2YgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGNsYXNzSWQgPSBvd25TdHJpbmcodmFsdWUsICdjbGFzc0lkJyk7XG4gICAgICBpZiAoY2xhc3NJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4geyBjbGFzc0lkIH07XG4gICAgfSxcbiAgICBJbnN0YW5jZTogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCB2YWx1ZS50eXBlb2YgIT09ICdvYmplY3QnIHx8IHZhbHVlLmlzTnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBjbHMgPSBjaGFpbmVkKHZhbHVlLCAnY29uc3RydWN0b3InKTtcbiAgICAgIGlmICghY2xzIHx8IGNscy50eXBlb2YgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2xzPy5kaXNwb3NlKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZU1ldGhvZCA9IGNoYWluZWQoY2xzLCBzeW0oJ3dvcmtmbG93LXNlcmlhbGl6ZScpKTtcbiAgICAgICAgaWYgKCFzZXJpYWxpemVNZXRob2QgfHwgc2VyaWFsaXplTWV0aG9kLnR5cGVvZiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNlcmlhbGl6ZU1ldGhvZD8uZGlzcG9zZSgpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNsYXNzSWQgPSBjaGFpbmVkU3RyaW5nKGNscywgJ2NsYXNzSWQnKTtcbiAgICAgICAgICBpZiAoY2xhc3NJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gY2hhaW5lZFN0cmluZyhjbHMsICduYW1lJykgPz8gJzxhbm9ueW1vdXM+JztcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYENsYXNzIFwiJHtuYW1lfVwiIHdpdGggU3ltYm9sKHdvcmtmbG93LXNlcmlhbGl6ZSkgbXVzdCBoYXZlIGEgc3RhdGljIFwiY2xhc3NJZFwiIHByb3BlcnR5LmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEd1ZXN0IGNvZGUgYnkgY29udHJhY3Q6IHRoZSBjbGFzcydzIG93biBzZXJpYWxpemVyIHJ1bnMsIGV4YWN0bHlcbiAgICAgICAgICAvLyBhcyBpdCBkaWQgdW5kZXIgdGhlIGluLVZNIGNvZGVjLlxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBjYWxsKHNlcmlhbGl6ZU1ldGhvZCwgY2xzLCB2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIHsgY2xhc3NJZCwgZGF0YSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNlcmlhbGl6ZU1ldGhvZC5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNscy5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBTdGVwRnVuY3Rpb246ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdmFsdWUudHlwZW9mICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBzdGVwSWQgPSBvd25TdHJpbmcodmFsdWUsICdzdGVwSWQnKTtcbiAgICAgIGlmIChzdGVwSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgcGF5bG9hZDoge1xuICAgICAgICBzdGVwSWQ6IHN0cmluZztcbiAgICAgICAgY2xvc3VyZVZhcnM/OiB1bmtub3duO1xuICAgICAgICBib3VuZFRoaXM/OiB1bmtub3duO1xuICAgICAgICBib3VuZEFyZ3M/OiB1bmtub3duO1xuICAgICAgfSA9IHsgc3RlcElkIH07XG4gICAgICBjb25zdCBjbG9zdXJlVmFyc0ZuID0gb3duKHZhbHVlLCAnX19jbG9zdXJlVmFyc0ZuJyk7XG4gICAgICBpZiAoY2xvc3VyZVZhcnNGbikge1xuICAgICAgICBpZiAoY2xvc3VyZVZhcnNGbi50eXBlb2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBHdWVzdCBjb2RlIGJ5IGNvbnRyYWN0IChzYW1lIGFzIHRoZSBpbi1WTSBjb2RlYykuXG4gICAgICAgICAgY29uc3QgY2xvc3VyZVZhcnMgPSBjYWxsKGNsb3N1cmVWYXJzRm4sIHZtLnVuZGVmaW5lZCk7XG4gICAgICAgICAgaWYgKCFjbG9zdXJlVmFycy5pc1VuZGVmaW5lZCkgcGF5bG9hZC5jbG9zdXJlVmFycyA9IGNsb3N1cmVWYXJzO1xuICAgICAgICAgIGVsc2UgY2xvc3VyZVZhcnMuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNsb3N1cmVWYXJzRm4uZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGd1ZXN0SGFzT3duKHZhbHVlLCAnX19ib3VuZFRoaXMnKSkge1xuICAgICAgICBwYXlsb2FkLmJvdW5kVGhpcyA9IG93bih2YWx1ZSwgJ19fYm91bmRUaGlzJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBib3VuZEFyZ3MgPSBvd24odmFsdWUsICdfX2JvdW5kQXJncycpO1xuICAgICAgaWYgKGJvdW5kQXJncykge1xuICAgICAgICBjb25zdCBsZW5ndGggPVxuICAgICAgICAgIG93bihib3VuZEFyZ3MsICdsZW5ndGgnKT8uY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKSA/PyAwO1xuICAgICAgICBpZiAoYm91bmRBcmdzLmlzQXJyYXkgJiYgbGVuZ3RoID4gMCkgcGF5bG9hZC5ib3VuZEFyZ3MgPSBib3VuZEFyZ3M7XG4gICAgICAgIGVsc2UgYm91bmRBcmdzLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH0sXG4gICAgQXJyYXlCdWZmZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdGFnT2ZIYW5kbGUodmFsdWUpICE9PSAnQXJyYXlCdWZmZXInKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBieXRlc1RvQmFzZTY0KG5ldyBVaW50OEFycmF5KHZhbHVlLnRvQXJyYXlCdWZmZXIoKSkpO1xuICAgIH0sXG4gICAgQmlnSW50OiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8ICF2YWx1ZS5pc0JpZ0ludCkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGd1ZXN0QmlnSW50KHZhbHVlKS50b1N0cmluZygpO1xuICAgIH0sXG4gICAgQmlnSW50NjRBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ0JpZ0ludDY0QXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICAgIEJpZ1VpbnQ2NEFycmF5OiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnQmlnVWludDY0QXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICAgIERhdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgdGFnT2ZIYW5kbGUodmFsdWUpICE9PSAnRGF0ZScpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHRpbWUgPSBjYWxsKGkuZGF0ZUdldFRpbWUsIHZhbHVlKS5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpO1xuICAgICAgaWYgKE51bWJlci5pc05hTih0aW1lKSkgcmV0dXJuICcuJztcbiAgICAgIHJldHVybiBjYWxsKGkuZGF0ZVRvSVNPU3RyaW5nLCB2YWx1ZSkuY29uc3VtZSgoaCkgPT4gaC50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIERPTUV4Y2VwdGlvbjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCAhaXNIYW5kbGUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoXG4gICAgICAgICFpLmRvbUV4Y2VwdGlvblByb3RvdHlwZSB8fFxuICAgICAgICAhaGFzUHJvdG90eXBlKHZhbHVlLCBpLmRvbUV4Y2VwdGlvblByb3RvdHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzaGFwZSA9IHJlZHVjZUVycm9yU2hhcGUodmFsdWUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWVzc2FnZTogc2hhcGUubWVzc2FnZSxcbiAgICAgICAgbmFtZTogY2hhaW5lZFN0cmluZyh2YWx1ZSwgJ25hbWUnKSxcbiAgICAgICAgc3RhY2s6IHNoYXBlLnN0YWNrLFxuICAgICAgICAuLi4oT2JqZWN0Lmhhc093bihzaGFwZSwgJ2NhdXNlJykgPyB7IGNhdXNlOiBzaGFwZS5jYXVzZSB9IDoge30pLFxuICAgICAgfTtcbiAgICB9LFxuICAgIEFnZ3JlZ2F0ZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8ICF2YWx1ZS5pc0Vycm9yKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoY2hhaW5lZFN0cmluZyh2YWx1ZSwgJ25hbWUnKSAhPT0gJ0FnZ3JlZ2F0ZUVycm9yJykgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3Qgc2hhcGUgPSByZWR1Y2VFcnJvclNoYXBlKHZhbHVlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IHNoYXBlLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBzaGFwZS5zdGFjayxcbiAgICAgICAgZXJyb3JzOiBvd24odmFsdWUsICdlcnJvcnMnKSxcbiAgICAgICAgLi4uKE9iamVjdC5oYXNPd24oc2hhcGUsICdjYXVzZScpID8geyBjYXVzZTogc2hhcGUuY2F1c2UgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBFdmFsRXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1JlZHVjZXIoJ0V2YWxFcnJvcicpLFxuICAgIEZhdGFsRXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1JlZHVjZXIoJ0ZhdGFsRXJyb3InKSxcbiAgICBIb29rQ29uZmxpY3RFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCAhdmFsdWUuaXNFcnJvcikgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGNoYWluZWRTdHJpbmcodmFsdWUsICduYW1lJykgIT09ICdIb29rQ29uZmxpY3RFcnJvcicpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHNoYXBlID0gcmVkdWNlRXJyb3JTaGFwZSh2YWx1ZSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCByZWR1Y2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgbWVzc2FnZTogc2hhcGUubWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IHNoYXBlLnN0YWNrLFxuICAgICAgICB0b2tlbjogb3duKHZhbHVlLCAndG9rZW4nKSxcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25mbGljdGluZ1J1bklkID0gb3duKHZhbHVlLCAnY29uZmxpY3RpbmdSdW5JZCcpO1xuICAgICAgaWYgKGNvbmZsaWN0aW5nUnVuSWQgJiYgIWNvbmZsaWN0aW5nUnVuSWQuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgcmVkdWNlZC5jb25mbGljdGluZ1J1bklkID0gY29uZmxpY3RpbmdSdW5JZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmZsaWN0aW5nUnVuSWQ/LmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3QuaGFzT3duKHNoYXBlLCAnY2F1c2UnKSkgcmVkdWNlZC5jYXVzZSA9IHNoYXBlLmNhdXNlO1xuICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgfSxcbiAgICBSYW5nZUVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZWR1Y2VyKCdSYW5nZUVycm9yJyksXG4gICAgUmVmZXJlbmNlRXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1JlZHVjZXIoJ1JlZmVyZW5jZUVycm9yJyksXG4gICAgUmV0cnlhYmxlRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFpc0hhbmRsZSh2YWx1ZSkgfHwgIXZhbHVlLmlzRXJyb3IpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChjaGFpbmVkU3RyaW5nKHZhbHVlLCAnbmFtZScpICE9PSAnUmV0cnlhYmxlRXJyb3InKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBzaGFwZSA9IHJlZHVjZUVycm9yU2hhcGUodmFsdWUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgLy8gcmV0cnlBZnRlciBpcyBhIGd1ZXN0IERhdGUgKG9yIHN0cmluZy9udW1iZXIpOyBub3JtYWxpemUgdG8gYW4gZXBvY2hcbiAgICAgIC8vIHRpbWVzdGFtcCBleGFjdGx5IGxpa2UgdGhlIGluLVZNIHJlZHVjZXIuIFRoZSBhYnNlbnQvaW52YWxpZFxuICAgICAgLy8gZmFsbGJhY2sgcmVhZHMgdGhlIEdVRVNUIGNsb2NrICh0aGUgZGV0ZXJtaW5pc3RpYyByZXBsYXkgY2xvY2sgYXRcbiAgICAgIC8vIHRoZSBXQVNJIGxheWVyKSwgbm90IHRoZSBob3N0IHdhbGwgY2xvY2s6IHRoZSBpbi1WTSByZWR1Y2VyJ3NcbiAgICAgIC8vIGBEYXRlLm5vdygpYCB3YXMgcmVwbGF5LXN0YWJsZSBieSBjb25zdHJ1Y3Rpb24sIGFuZCBhIGhvc3Qtc2lkZVxuICAgICAgLy8gYERhdGUubm93KClgIGhlcmUgd291bGQgd3JpdGUgZGlmZmVyZW50IGJ5dGVzIG9uIGV2ZXJ5IHJlcGxheSBvZlxuICAgICAgLy8gdGhlIHNhbWUgdmFsdWUuXG4gICAgICBsZXQgcmV0cnlBZnRlciA9IGludm9rZShpLmRhdGVOb3cpLmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSkgKyAxMDAwO1xuICAgICAgY29uc3QgcmF3ID0gb3duKHZhbHVlLCAncmV0cnlBZnRlcicpO1xuICAgICAgaWYgKHJhdykge1xuICAgICAgICBpZiAodGFnT2ZIYW5kbGUocmF3KSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgY29uc3QgdCA9IGNhbGwoaS5kYXRlR2V0VGltZSwgcmF3KS5jb25zdW1lKChoKSA9PiBoLnRvTnVtYmVyKCkpO1xuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHQpKSByZXRyeUFmdGVyID0gdDtcbiAgICAgICAgfSBlbHNlIGlmIChyYXcuaXNTdHJpbmcgfHwgcmF3LmlzTnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgdCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgcmF3LmlzU3RyaW5nID8gcmF3LnRvU3RyaW5nKCkgOiByYXcudG9OdW1iZXIoKVxuICAgICAgICAgICkuZ2V0VGltZSgpO1xuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHQpKSByZXRyeUFmdGVyID0gdDtcbiAgICAgICAgfVxuICAgICAgICByYXcuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVkdWNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIG1lc3NhZ2U6IHNoYXBlLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBzaGFwZS5zdGFjayxcbiAgICAgICAgcmV0cnlBZnRlcixcbiAgICAgIH07XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihzaGFwZSwgJ2NhdXNlJykpIHJlZHVjZWQuY2F1c2UgPSBzaGFwZS5jYXVzZTtcbiAgICAgIHJldHVybiByZWR1Y2VkO1xuICAgIH0sXG4gICAgUnVudGltZURlY3J5cHRpb25FcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCAhdmFsdWUuaXNFcnJvcikgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGNoYWluZWRTdHJpbmcodmFsdWUsICduYW1lJykgIT09ICdSdW50aW1lRGVjcnlwdGlvbkVycm9yJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzaGFwZSA9IHJlZHVjZUVycm9yU2hhcGUodmFsdWUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgcmVkdWNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIG1lc3NhZ2U6IHNoYXBlLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBzaGFwZS5zdGFjayxcbiAgICAgIH07XG4gICAgICBjb25zdCBjb250ZXh0ID0gb3duKHZhbHVlLCAnY29udGV4dCcpO1xuICAgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaXNVbmRlZmluZWQpIHJlZHVjZWQuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICBlbHNlIGNvbnRleHQ/LmRpc3Bvc2UoKTtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duKHNoYXBlLCAnY2F1c2UnKSkgcmVkdWNlZC5jYXVzZSA9IHNoYXBlLmNhdXNlO1xuICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgfSxcbiAgICBTeW50YXhFcnJvcjogbmFtZWRFcnJvclN1YmNsYXNzUmVkdWNlcignU3ludGF4RXJyb3InKSxcbiAgICBUeXBlRXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1JlZHVjZXIoJ1R5cGVFcnJvcicpLFxuICAgIFVSSUVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZWR1Y2VyKCdVUklFcnJvcicpLFxuICAgIEVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8ICF2YWx1ZS5pc0Vycm9yKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBzaGFwZSA9IHJlZHVjZUVycm9yU2hhcGUodmFsdWUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY2hhaW5lZFN0cmluZyh2YWx1ZSwgJ25hbWUnKSA/PyAnRXJyb3InLFxuICAgICAgICBtZXNzYWdlOiBzaGFwZS5tZXNzYWdlLFxuICAgICAgICBzdGFjazogc2hhcGUuc3RhY2ssXG4gICAgICAgIC4uLihPYmplY3QuaGFzT3duKHNoYXBlLCAnY2F1c2UnKSA/IHsgY2F1c2U6IHNoYXBlLmNhdXNlIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0sXG4gICAgRmxvYXQzMkFycmF5OiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnRmxvYXQzMkFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBGbG9hdDY0QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSAmJiB0YWdPZkhhbmRsZSh2YWx1ZSkgPT09ICdGbG9hdDY0QXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICAgIEludDhBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ0ludDhBcnJheSdcbiAgICAgICAgPyBieXRlc1RvQmFzZTY0KHZpZXdCeXRlcyh2YWx1ZSkpXG4gICAgICAgIDogZmFsc2UsXG4gICAgSW50MTZBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ0ludDE2QXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICAgIEludDMyQXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSAmJiB0YWdPZkhhbmRsZSh2YWx1ZSkgPT09ICdJbnQzMkFycmF5J1xuICAgICAgICA/IGJ5dGVzVG9CYXNlNjQodmlld0J5dGVzKHZhbHVlKSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBNYXA6ICh2YWx1ZSkgPT5cbiAgICAgIGlzSGFuZGxlKHZhbHVlKSAmJiB0YWdPZkhhbmRsZSh2YWx1ZSkgPT09ICdNYXAnXG4gICAgICAgID8gY29sbGVjdChpLm1hcEZvckVhY2gsIHZhbHVlLCAyKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFJlZ0V4cDogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCB0YWdPZkhhbmRsZSh2YWx1ZSkgIT09ICdSZWdFeHAnKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IGNhbGwoaS5yZWdFeHBTb3VyY2UsIHZhbHVlKS5jb25zdW1lKChoKSA9PiBoLnRvU3RyaW5nKCkpLFxuICAgICAgICBmbGFnczogY2FsbChpLnJlZ0V4cEZsYWdzLCB2YWx1ZSkuY29uc3VtZSgoaCkgPT4gaC50b1N0cmluZygpKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBIZWFkZXJzOiAodmFsdWUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzSGFuZGxlKHZhbHVlKSB8fFxuICAgICAgICAhaS5oZWFkZXJzUHJvdG90eXBlIHx8XG4gICAgICAgICFoYXNQcm90b3R5cGUodmFsdWUsIGkuaGVhZGVyc1Byb3RvdHlwZSkgfHxcbiAgICAgICAgIWkuaGVhZGVyc0ZvckVhY2hcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBIZWFkZXJzLmZvckVhY2ggeWllbGRzICh2YWx1ZSwga2V5KTsgbm9ybWFsaXplIHRvIFtrZXksIHZhbHVlXVxuICAgICAgLy8gcGFpcnMgb2YgaG9zdCBzdHJpbmdzLCBtYXRjaGluZyBBcnJheS5mcm9tKGhlYWRlcnMpLlxuICAgICAgY29uc3QgZW50cmllczogW3N0cmluZywgc3RyaW5nXVtdID0gW107XG4gICAgICBjb25zdCB2aXNpdG9yID0gdm0ubmV3RXBoZW1lcmFsRnVuY3Rpb24oXG4gICAgICAgIChoZWFkZXJWYWx1ZTogSlNWYWx1ZUhhbmRsZSwgaGVhZGVyS2V5OiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtoZWFkZXJLZXkudG9TdHJpbmcoKSwgaGVhZGVyVmFsdWUudG9TdHJpbmcoKV0pO1xuICAgICAgICAgIHJldHVybiB2bS51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0cnkge1xuICAgICAgICBjYWxsKGkuaGVhZGVyc0ZvckVhY2gsIHZhbHVlLCB2aXNpdG9yKS5kaXNwb3NlKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB2aXNpdG9yLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH0sXG4gICAgUmVxdWVzdDogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCB2YWx1ZS50eXBlb2YgIT09ICdvYmplY3QnIHx8IHZhbHVlLmlzTnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBpc1JlcXVlc3QgPVxuICAgICAgICAoaS5yZXF1ZXN0UHJvdG90eXBlICYmIGhhc1Byb3RvdHlwZSh2YWx1ZSwgaS5yZXF1ZXN0UHJvdG90eXBlKSkgfHxcbiAgICAgICAgb3duKHZhbHVlLCAnanNvbicpPy5jb25zdW1lKChoKSA9PiBoLnR5cGVvZiA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgICBpZiAoIWlzUmVxdWVzdCkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgbWV0aG9kID0gb3duKHZhbHVlLCAnbWV0aG9kJyk7XG4gICAgICBpZiAoIW1ldGhvZCB8fCAhbWV0aG9kLmlzU3RyaW5nKSB7XG4gICAgICAgIG1ldGhvZD8uZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmw6IG93bih2YWx1ZSwgJ3VybCcpLFxuICAgICAgICBoZWFkZXJzOiBvd24odmFsdWUsICdoZWFkZXJzJyksXG4gICAgICAgIGJvZHk6IG93bih2YWx1ZSwgJ2JvZHknKSxcbiAgICAgICAgZHVwbGV4OiBvd24odmFsdWUsICdkdXBsZXgnKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZVdyaXRhYmxlID0gb3duKHZhbHVlLCBzeW0oJ1dFQkhPT0tfUkVTUE9OU0VfV1JJVEFCTEUnKSk7XG4gICAgICBpZiAocmVzcG9uc2VXcml0YWJsZSAmJiAhcmVzcG9uc2VXcml0YWJsZS5pc1VuZGVmaW5lZCkge1xuICAgICAgICBkYXRhLnJlc3BvbnNlV3JpdGFibGUgPSByZXNwb25zZVdyaXRhYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VXcml0YWJsZT8uZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICBSZXNwb25zZTogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIWlzSGFuZGxlKHZhbHVlKSB8fCB2YWx1ZS50eXBlb2YgIT09ICdvYmplY3QnIHx8IHZhbHVlLmlzTnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBpc1Jlc3BvbnNlID1cbiAgICAgICAgKGkucmVzcG9uc2VQcm90b3R5cGUgJiYgaGFzUHJvdG90eXBlKHZhbHVlLCBpLnJlc3BvbnNlUHJvdG90eXBlKSkgfHxcbiAgICAgICAgY2hhaW5lZCh2YWx1ZSwgJ2Nsb25lJyk/LmNvbnN1bWUoKGgpID0+IGgudHlwZW9mID09PSAnZnVuY3Rpb24nKTtcbiAgICAgIGlmICghaXNSZXNwb25zZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3Qgc3RhdHVzID0gb3duKHZhbHVlLCAnc3RhdHVzJyk7XG4gICAgICBpZiAoIXN0YXR1cyB8fCAhc3RhdHVzLmlzTnVtYmVyKSB7XG4gICAgICAgIHN0YXR1cz8uZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBvd24odmFsdWUsICd0eXBlJyksXG4gICAgICAgIHVybDogb3duKHZhbHVlLCAndXJsJyksXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogb3duKHZhbHVlLCAnc3RhdHVzVGV4dCcpLFxuICAgICAgICBoZWFkZXJzOiBvd24odmFsdWUsICdoZWFkZXJzJyksXG4gICAgICAgIGJvZHk6IG93bih2YWx1ZSwgJ2JvZHknKSxcbiAgICAgICAgcmVkaXJlY3RlZDogb3duKHZhbHVlLCAncmVkaXJlY3RlZCcpLFxuICAgICAgfTtcbiAgICB9LFxuICAgIFJlYWRhYmxlU3RyZWFtOiAodmFsdWUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzSGFuZGxlKHZhbHVlKSB8fFxuICAgICAgICB2YWx1ZS50eXBlb2YgIT09ICdvYmplY3QnIHx8XG4gICAgICAgIHZhbHVlLmlzTnVsbCB8fFxuICAgICAgICAhaS5yZWFkYWJsZVN0cmVhbVByb3RvdHlwZSB8fFxuICAgICAgICAhaGFzUHJvdG90eXBlKHZhbHVlLCBpLnJlYWRhYmxlU3RyZWFtUHJvdG90eXBlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHlJbml0ID0gb3duKHZhbHVlLCBzeW0oJ0JPRFlfSU5JVCcpKTtcbiAgICAgIGlmIChib2R5SW5pdCAmJiAhYm9keUluaXQuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHsgYm9keUluaXQgfTtcbiAgICAgIH1cbiAgICAgIGJvZHlJbml0Py5kaXNwb3NlKCk7XG4gICAgICBjb25zdCBuYW1lID0gb3duU3ltYm9sU3RyaW5nKHZhbHVlLCAnV09SS0ZMT1dfU1RSRUFNX05BTUUnKTtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGNvbnN0IHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lIH07XG4gICAgICAgIGNvbnN0IHR5cGUgPSBvd25TeW1ib2xTdHJpbmcodmFsdWUsICdXT1JLRkxPV19TVFJFQU1fVFlQRScpO1xuICAgICAgICBpZiAodHlwZSkgcy50eXBlID0gdHlwZTtcbiAgICAgICAgY29uc3QgZnJhbWluZyA9IG93blN5bWJvbFN0cmluZyh2YWx1ZSwgJ1dPUktGTE9XX1NUUkVBTV9GUkFNSU5HJyk7XG4gICAgICAgIGlmIChmcmFtaW5nKSBzLmZyYW1pbmcgPSBmcmFtaW5nO1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG5hbWU6ICdfX2VtcHR5JyB9O1xuICAgIH0sXG4gICAgV3JpdGFibGVTdHJlYW06ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhaXNIYW5kbGUodmFsdWUpIHx8XG4gICAgICAgIHZhbHVlLnR5cGVvZiAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgdmFsdWUuaXNOdWxsIHx8XG4gICAgICAgICFpLndyaXRhYmxlU3RyZWFtUHJvdG90eXBlIHx8XG4gICAgICAgICFoYXNQcm90b3R5cGUodmFsdWUsIGkud3JpdGFibGVTdHJlYW1Qcm90b3R5cGUpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIG5hbWU6IG93blN5bWJvbFN0cmluZyh2YWx1ZSwgJ1dPUktGTE9XX1NUUkVBTV9OQU1FJykgfHwgJ19fZW1wdHknLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJ1bklkID0gb3duU3ltYm9sU3RyaW5nKHZhbHVlLCAnV09SS0ZMT1dfU1RSRUFNX1NFUlZFUl9SVU5fSUQnKTtcbiAgICAgIGlmIChydW5JZCkgcy5ydW5JZCA9IHJ1bklkO1xuICAgICAgY29uc3QgZGVwbG95bWVudElkID0gb3duU3ltYm9sU3RyaW5nKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgJ1dPUktGTE9XX1NUUkVBTV9TRVJWRVJfREVQTE9ZTUVOVF9JRCdcbiAgICAgICk7XG4gICAgICBpZiAoZGVwbG95bWVudElkKSBzLmRlcGxveW1lbnRJZCA9IGRlcGxveW1lbnRJZDtcbiAgICAgIHJldHVybiBzO1xuICAgIH0sXG4gICAgU2V0OiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnU2V0J1xuICAgICAgICA/IGNvbGxlY3QoaS5zZXRGb3JFYWNoLCB2YWx1ZSwgMSlcbiAgICAgICAgOiBmYWxzZSxcbiAgICBVUkw6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhaXNIYW5kbGUodmFsdWUpIHx8XG4gICAgICAgICFpLnVybFByb3RvdHlwZSB8fFxuICAgICAgICAhaGFzUHJvdG90eXBlKHZhbHVlLCBpLnVybFByb3RvdHlwZSkgfHxcbiAgICAgICAgIWkudXJsSHJlZlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWxsKGkudXJsSHJlZiwgdmFsdWUpLmNvbnN1bWUoKGgpID0+IGgudG9TdHJpbmcoKSk7XG4gICAgfSxcbiAgICBXb3JrZmxvd0Z1bmN0aW9uOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpIHx8IHZhbHVlLnR5cGVvZiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3Qgd29ya2Zsb3dJZCA9IG93blN0cmluZyh2YWx1ZSwgJ3dvcmtmbG93SWQnKTtcbiAgICAgIGlmICh3b3JrZmxvd0lkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB7IHdvcmtmbG93SWQgfTtcbiAgICB9LFxuICAgIFVSTFNlYXJjaFBhcmFtczogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFpc0hhbmRsZSh2YWx1ZSkgfHxcbiAgICAgICAgIWkudXJsU2VhcmNoUGFyYW1zUHJvdG90eXBlIHx8XG4gICAgICAgICFoYXNQcm90b3R5cGUodmFsdWUsIGkudXJsU2VhcmNoUGFyYW1zUHJvdG90eXBlKSB8fFxuICAgICAgICAhaS51cmxTZWFyY2hQYXJhbXNUb1N0cmluZ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpemUgPSBpLnVybFNlYXJjaFBhcmFtc1NpemVcbiAgICAgICAgPyBjYWxsKGkudXJsU2VhcmNoUGFyYW1zU2l6ZSwgdmFsdWUpLmNvbnN1bWUoKGgpID0+IGgudG9OdW1iZXIoKSlcbiAgICAgICAgOiBOdW1iZXIuTmFOO1xuICAgICAgaWYgKHNpemUgPT09IDApIHJldHVybiAnLic7XG4gICAgICByZXR1cm4gY2FsbChpLnVybFNlYXJjaFBhcmFtc1RvU3RyaW5nLCB2YWx1ZSkuY29uc3VtZSgoaCkgPT5cbiAgICAgICAgaC50b1N0cmluZygpXG4gICAgICApO1xuICAgIH0sXG4gICAgVWludDhBcnJheTogKHZhbHVlKSA9PlxuICAgICAgaXNIYW5kbGUodmFsdWUpICYmIHRhZ09mSGFuZGxlKHZhbHVlKSA9PT0gJ1VpbnQ4QXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFVpbnQ4Q2xhbXBlZEFycmF5OiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnVWludDhDbGFtcGVkQXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFVpbnQxNkFycmF5OiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnVWludDE2QXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFVpbnQzMkFycmF5OiAodmFsdWUpID0+XG4gICAgICBpc0hhbmRsZSh2YWx1ZSkgJiYgdGFnT2ZIYW5kbGUodmFsdWUpID09PSAnVWludDMyQXJyYXknXG4gICAgICAgID8gYnl0ZXNUb0Jhc2U2NCh2aWV3Qnl0ZXModmFsdWUpKVxuICAgICAgICA6IGZhbHNlLFxuICB9O1xuXG4gIC8vIC0tLSBwYXJzZSBvcGVyYXRpb25zIChoYW5kbGUtb25seTogZXZlcnl0aGluZyBpcyBidWlsdCBpbiB0aGUgVk0pIC0tLVxuXG4gIGNvbnN0IHBhcnNlT3BlcmF0aW9uczogUGFyc2VPcGVyYXRpb25zID0ge1xuICAgIGZyb21QcmltaXRpdmU6ICh2YWx1ZSkgPT5cbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgPyB2bS5uZXdCaWdJbnQodmFsdWUpIDogdm0uaG9zdFRvSGFuZGxlKHZhbHVlKSxcbiAgICBmcm9tSVNPU3RyaW5nOiAoaXNvKSA9PiB7XG4gICAgICBjb25zdCBhcmd1bWVudCA9XG4gICAgICAgIGlzbyA9PT0gJycgPyB2bS5uZXdOdW1iZXIoTnVtYmVyLk5hTikgOiB2bS5uZXdTdHJpbmcoaXNvKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB2bS5jb25zdHJ1Y3QoaS5EYXRlLCBhcmd1bWVudCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhcmd1bWVudC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBmcm9tU3RyaW5nVmFsdWU6ICh0YWcsIF9zdHJpbmcpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWd9IGNhbm5vdCBiZSByZXZpdmVkIGluIHRoZSBWTWApO1xuICAgIH0sXG4gICAgZnJvbUFycmF5QnVmZmVyOiAoYnVmZmVyKSA9PiB2bS5uZXdBcnJheUJ1ZmZlcihidWZmZXIpLFxuICAgIGZyb21SZWdFeHBJbmZvOiAoc291cmNlLCBmbGFncykgPT4ge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gdm0ubmV3U3RyaW5nKHNvdXJjZSk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWZsYWdzKSByZXR1cm4gdm0uY29uc3RydWN0KGkuUmVnRXhwLCBzb3VyY2VIYW5kbGUpO1xuICAgICAgICBjb25zdCBmbGFnc0hhbmRsZSA9IHZtLm5ld1N0cmluZyhmbGFncyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHZtLmNvbnN0cnVjdChpLlJlZ0V4cCwgc291cmNlSGFuZGxlLCBmbGFnc0hhbmRsZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZmxhZ3NIYW5kbGUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzb3VyY2VIYW5kbGUuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnJvbVZpZXdJbmZvOiAodGFnLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkgPT4ge1xuICAgICAgY29uc3QgQ29uc3RydWN0b3IgPSB0eXBlZEFycmF5Q29uc3RydWN0b3JzLmdldCh0YWcpO1xuICAgICAgaWYgKCFDb25zdHJ1Y3RvcikgdGhyb3cgbmV3IEVycm9yKGAke3RhZ30gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgVk1gKTtcbiAgICAgIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHZtLmNvbnN0cnVjdChDb25zdHJ1Y3RvciwgYnVmZmVyIGFzIEpTVmFsdWVIYW5kbGUpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2Zmc2V0SGFuZGxlID0gdm0ubmV3TnVtYmVyKGJ5dGVPZmZzZXQpO1xuICAgICAgY29uc3QgbGVuZ3RoSGFuZGxlID0gdm0ubmV3TnVtYmVyKGxlbmd0aCA/PyAwKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB2bS5jb25zdHJ1Y3QoXG4gICAgICAgICAgQ29uc3RydWN0b3IsXG4gICAgICAgICAgYnVmZmVyIGFzIEpTVmFsdWVIYW5kbGUsXG4gICAgICAgICAgb2Zmc2V0SGFuZGxlLFxuICAgICAgICAgIGxlbmd0aEhhbmRsZVxuICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgb2Zmc2V0SGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgICAgbGVuZ3RoSGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGJveDogKHZhbHVlKSA9PiB2bS5jb25zdHJ1Y3QoaS5PYmplY3QsIHZhbHVlIGFzIEpTVmFsdWVIYW5kbGUpLFxuICAgIGNyZWF0ZUFycmF5OiAobGVuZ3RoKSA9PiB7XG4gICAgICBjb25zdCBsZW5ndGhIYW5kbGUgPSB2bS5uZXdOdW1iZXIobGVuZ3RoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB2bS5jb25zdHJ1Y3QoaS5BcnJheSwgbGVuZ3RoSGFuZGxlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxlbmd0aEhhbmRsZS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVTcGFyc2VBcnJheTogKGxlbmd0aCkgPT4ge1xuICAgICAgY29uc3QgbGVuZ3RoSGFuZGxlID0gdm0ubmV3TnVtYmVyKGxlbmd0aCk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gaW52b2tlKGkubWFrZVNwYXJzZUFycmF5LCBsZW5ndGhIYW5kbGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbGVuZ3RoSGFuZGxlLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZU9iamVjdDogKCkgPT4gdm0ubmV3T2JqZWN0KCksXG4gICAgY3JlYXRlTnVsbFByb3RvdHlwZU9iamVjdDogKCkgPT5cbiAgICAgIGNhbGwoaS5vYmplY3RDcmVhdGUsIHZtLnVuZGVmaW5lZCwgdm0ubnVsbCksXG4gICAgY3JlYXRlU2V0OiAoKSA9PiB2bS5jb25zdHJ1Y3QoaS5TZXQpLFxuICAgIGNyZWF0ZU1hcDogKCkgPT4gdm0uY29uc3RydWN0KGkuTWFwKSxcbiAgICBzZXQ6ICh0YXJnZXQsIGtleSwgdmFsdWUpID0+XG4gICAgICBkZWZpbmUodGFyZ2V0IGFzIEpTVmFsdWVIYW5kbGUsIFN0cmluZyhrZXkpLCB2YWx1ZSBhcyBKU1ZhbHVlSGFuZGxlKSxcbiAgICBhZGRWYWx1ZTogKHNldCwgdmFsdWUpID0+IHtcbiAgICAgIGNhbGwoaS5zZXRBZGQsIHNldCBhcyBKU1ZhbHVlSGFuZGxlLCB2YWx1ZSBhcyBKU1ZhbHVlSGFuZGxlKS5kaXNwb3NlKCk7XG4gICAgfSxcbiAgICBhZGRFbnRyeTogKG1hcCwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgY2FsbChcbiAgICAgICAgaS5tYXBTZXQsXG4gICAgICAgIG1hcCBhcyBKU1ZhbHVlSGFuZGxlLFxuICAgICAgICBrZXkgYXMgSlNWYWx1ZUhhbmRsZSxcbiAgICAgICAgdmFsdWUgYXMgSlNWYWx1ZUhhbmRsZVxuICAgICAgKS5kaXNwb3NlKCk7XG4gICAgfSxcbiAgfTtcblxuICAvLyAtLS0gd29ya2Zsb3cgcmV2aXZlcnMgKGhhbmRsZSBzcGFjZSkgLS0tXG5cbiAgLyoqIEd1ZXN0IGxvb2t1cCBvZiBhIHJlZ2lzdGVyZWQgZXJyb3IgY2xhc3Mgb24gZ2xvYmFsVGhpcywgYnkgc3ltYm9sLiAqL1xuICBjb25zdCByZWdpc3RlcmVkRXJyb3JDbGFzcyA9IChcbiAgICBuYW1lOiBTeW1ib2xOYW1lXG4gICk6IEpTVmFsdWVIYW5kbGUgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGNscyA9IG93bih2bS5nbG9iYWwsIHN5bShuYW1lKSk7XG4gICAgaWYgKCFjbHMgfHwgY2xzLnR5cGVvZiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2xzPy5kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gY2xzO1xuICB9O1xuXG4gIC8qKiBDb25zdHJ1Y3QgYSBndWVzdCBFcnJvciB2aWEgYGN0b3IobWVzc2FnZSlgICsgZGVmaW5lIHN0YWNrL2NhdXNlLiAqL1xuICBjb25zdCBidWlsZEVycm9yID0gKFxuICAgIGN0b3I6IEpTVmFsdWVIYW5kbGUsXG4gICAgdmFsdWU6IEpTVmFsdWVIYW5kbGUsXG4gICAgb3B0czogeyBuYW1lPzogc3RyaW5nOyBleHRyYUN0b3JBcmdzPzogSlNWYWx1ZUhhbmRsZVtdIH0gPSB7fVxuICApOiBKU1ZhbHVlSGFuZGxlID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gb3duKHZhbHVlLCAnbWVzc2FnZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICBjb25zdCBlcnJvciA9IHZtLmNvbnN0cnVjdChjdG9yLCBtZXNzYWdlLCAuLi4ob3B0cy5leHRyYUN0b3JBcmdzID8/IFtdKSk7XG4gICAgaWYgKG1lc3NhZ2UgIT09IHZtLnVuZGVmaW5lZCkgbWVzc2FnZS5kaXNwb3NlKCk7XG4gICAgaWYgKG9wdHMubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBuYW1lSGFuZGxlID0gbmV3R3Vlc3RTdHJpbmcob3B0cy5uYW1lKTtcbiAgICAgIGRlZmluZShlcnJvciwgJ25hbWUnLCBuYW1lSGFuZGxlKTtcbiAgICAgIG5hbWVIYW5kbGUuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IG93bih2YWx1ZSwgJ3N0YWNrJyk7XG4gICAgaWYgKHN0YWNrICYmICFzdGFjay5pc1VuZGVmaW5lZCkgZGVmaW5lKGVycm9yLCAnc3RhY2snLCBzdGFjayk7XG4gICAgc3RhY2s/LmRpc3Bvc2UoKTtcbiAgICBpZiAoZ3Vlc3RIYXNPd24odmFsdWUsICdjYXVzZScpKSB7XG4gICAgICBjb25zdCBjYXVzZSA9IG93bih2YWx1ZSwgJ2NhdXNlJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgZGVmaW5lKGVycm9yLCAnY2F1c2UnLCBjYXVzZSk7XG4gICAgICBpZiAoY2F1c2UgIT09IHZtLnVuZGVmaW5lZCkgY2F1c2UuZGlzcG9zZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG4gIH07XG5cbiAgY29uc3QgbmFtZWRFcnJvclN1YmNsYXNzUmV2aXZlciA9XG4gICAgKHN1YmNsYXNzTmFtZTogc3RyaW5nKSA9PiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IGN0b3IgPSBlcnJvckNvbnN0cnVjdG9ycy5nZXQoc3ViY2xhc3NOYW1lKTtcbiAgICAgIGlmIChjdG9yKSByZXR1cm4gYnVpbGRFcnJvcihjdG9yLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gYnVpbGRFcnJvcihpLkVycm9yLCB2YWx1ZSwgeyBuYW1lOiBzdWJjbGFzc05hbWUgfSk7XG4gICAgfTtcblxuICBjb25zdCByZXZpdmVBYm9ydFNpZ25hbCA9ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSk6IEpTVmFsdWVIYW5kbGUgPT4ge1xuICAgIGNvbnN0IGNscyA9IG93bih2bS5nbG9iYWwsICdfX1dvcmtmbG93QWJvcnRTaWduYWwnKTtcbiAgICBpZiAoIWNscyB8fCBjbHMudHlwZW9mICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjbHM/LmRpc3Bvc2UoKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1dvcmtmbG93QWJvcnRTaWduYWwgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIFZNIChib290c3RyYXAgbm90IGV2YWx1YXRlZCknXG4gICAgICApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtTmFtZSA9IG93bih2YWx1ZSwgJ3N0cmVhbU5hbWUnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICBjb25zdCBob29rVG9rZW4gPSBvd24odmFsdWUsICdob29rVG9rZW4nKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICBjb25zdCBzaWduYWwgPSB2bS5jb25zdHJ1Y3QoY2xzLCBzdHJlYW1OYW1lLCBob29rVG9rZW4pO1xuICAgICAgaWYgKHN0cmVhbU5hbWUgIT09IHZtLnVuZGVmaW5lZCkgc3RyZWFtTmFtZS5kaXNwb3NlKCk7XG4gICAgICBpZiAoaG9va1Rva2VuICE9PSB2bS51bmRlZmluZWQpIGhvb2tUb2tlbi5kaXNwb3NlKCk7XG4gICAgICBjb25zdCBhYm9ydGVkID0gb3duKHZhbHVlLCAnYWJvcnRlZCcpO1xuICAgICAgaWYgKGFib3J0ZWQ/LnRvQm9vbGVhbigpKSB7XG4gICAgICAgIGNvbnN0IHNldEFib3J0ZWQgPSBjaGFpbmVkKHNpZ25hbCwgJ19zZXRBYm9ydGVkJyk7XG4gICAgICAgIGlmIChzZXRBYm9ydGVkKSB7XG4gICAgICAgICAgY29uc3QgcmVhc29uID0gb3duKHZhbHVlLCAncmVhc29uJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICAgIGNhbGwoc2V0QWJvcnRlZCwgc2lnbmFsLCByZWFzb24pLmRpc3Bvc2UoKTtcbiAgICAgICAgICBpZiAocmVhc29uICE9PSB2bS51bmRlZmluZWQpIHJlYXNvbi5kaXNwb3NlKCk7XG4gICAgICAgICAgc2V0QWJvcnRlZC5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFib3J0ZWQ/LmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiBzaWduYWw7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNscy5kaXNwb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJldml2ZXJzOiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PiA9IHtcbiAgICBBYm9ydENvbnRyb2xsZXI6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IHZtLm5ld09iamVjdCgpO1xuICAgICAgY29uc3Qgc3RyZWFtTmFtZSA9IG93bih2YWx1ZSwgJ3N0cmVhbU5hbWUnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICBkZWZpbmUoY29udHJvbGxlciwgc3ltKCdXT1JLRkxPV19BQk9SVF9TVFJFQU1fTkFNRScpLCBzdHJlYW1OYW1lKTtcbiAgICAgIGlmIChzdHJlYW1OYW1lICE9PSB2bS51bmRlZmluZWQpIHN0cmVhbU5hbWUuZGlzcG9zZSgpO1xuICAgICAgY29uc3QgaG9va1Rva2VuID0gb3duKHZhbHVlLCAnaG9va1Rva2VuJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgZGVmaW5lKGNvbnRyb2xsZXIsIHN5bSgnV09SS0ZMT1dfQUJPUlRfSE9PS19UT0tFTicpLCBob29rVG9rZW4pO1xuICAgICAgaWYgKGhvb2tUb2tlbiAhPT0gdm0udW5kZWZpbmVkKSBob29rVG9rZW4uZGlzcG9zZSgpO1xuICAgICAgY29uc3Qgc2lnbmFsID0gcmV2aXZlQWJvcnRTaWduYWwodmFsdWUpO1xuICAgICAgZGVmaW5lKGNvbnRyb2xsZXIsICdzaWduYWwnLCBzaWduYWwpO1xuICAgICAgc2lnbmFsLmRpc3Bvc2UoKTtcbiAgICAgIGNvbnN0IG5vb3AgPSB2bS5ldmFsQ29kZSgnKGZ1bmN0aW9uKCl7fSknKTtcbiAgICAgIGRlZmluZShjb250cm9sbGVyLCAnYWJvcnQnLCBub29wKTtcbiAgICAgIG5vb3AuZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIGNvbnRyb2xsZXI7XG4gICAgfSxcbiAgICBBYm9ydFNpZ25hbDogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiByZXZpdmVBYm9ydFNpZ25hbCh2YWx1ZSksXG4gICAgQ2xhc3M6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IG93blN0cmluZyh2YWx1ZSwgJ2NsYXNzSWQnKTtcbiAgICAgIGNvbnN0IGNscyA9IGxvb2t1cFJlZ2lzdGVyZWRDbGFzcyhjbGFzc0lkKTtcbiAgICAgIGlmICghY2xzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhlIGNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCByZWdpc3RlclNlcmlhbGl6YXRpb25DbGFzcy5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xzO1xuICAgIH0sXG4gICAgSW5zdGFuY2U6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IG93blN0cmluZyh2YWx1ZSwgJ2NsYXNzSWQnKTtcbiAgICAgIGNvbnN0IGNscyA9IGxvb2t1cFJlZ2lzdGVyZWRDbGFzcyhjbGFzc0lkKTtcbiAgICAgIGlmICghY2xzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhlIGNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCByZWdpc3RlclNlcmlhbGl6YXRpb25DbGFzcy5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZU1ldGhvZCA9IGNoYWluZWQoY2xzLCBzeW0oJ3dvcmtmbG93LWRlc2VyaWFsaXplJykpO1xuICAgICAgICBpZiAoIWRlc2VyaWFsaXplTWV0aG9kIHx8IGRlc2VyaWFsaXplTWV0aG9kLnR5cGVvZiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGRlc2VyaWFsaXplTWV0aG9kPy5kaXNwb3NlKCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgU3ltYm9sKHdvcmtmbG93LWRlc2VyaWFsaXplKSBtZXRob2QuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gb3duKHZhbHVlLCAnZGF0YScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYWxsKGRlc2VyaWFsaXplTWV0aG9kLCBjbHMsIGRhdGEpO1xuICAgICAgICAgIGlmIChkYXRhICE9PSB2bS51bmRlZmluZWQpIGRhdGEuZGlzcG9zZSgpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZGVzZXJpYWxpemVNZXRob2QuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbHMuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgU3RlcEZ1bmN0aW9uOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IHVzZVN0ZXAgPSBvd24odm0uZ2xvYmFsLCBzeW0oJ1dPUktGTE9XX1VTRV9TVEVQJykpO1xuICAgICAgaWYgKCF1c2VTdGVwIHx8IHVzZVN0ZXAudHlwZW9mICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHVzZVN0ZXA/LmRpc3Bvc2UoKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdXT1JLRkxPV19VU0VfU1RFUCBub3QgZm91bmQgb24gZ2xvYmFsIG9iamVjdC4gU3RlcCBmdW5jdGlvbnMgY2Fubm90IGJlIGRlc2VyaWFsaXplZCBvdXRzaWRlIHdvcmtmbG93IGNvbnRleHQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RlcElkID0gb3duKHZhbHVlLCAnc3RlcElkJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBjbG9zdXJlVmFycyA9IG93bih2YWx1ZSwgJ2Nsb3N1cmVWYXJzJyk7XG4gICAgICAgIGxldCBwcm94eTogSlNWYWx1ZUhhbmRsZTtcbiAgICAgICAgaWYgKGNsb3N1cmVWYXJzICYmICFjbG9zdXJlVmFycy5pc1VuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHRodW5rID0gaW52b2tlKGkubWFrZVRodW5rLCBjbG9zdXJlVmFycyk7XG4gICAgICAgICAgcHJveHkgPSBpbnZva2UodXNlU3RlcCwgc3RlcElkLCB0aHVuayk7XG4gICAgICAgICAgdGh1bmsuZGlzcG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3h5ID0gaW52b2tlKHVzZVN0ZXAsIHN0ZXBJZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xvc3VyZVZhcnM/LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKHN0ZXBJZCAhPT0gdm0udW5kZWZpbmVkKSBzdGVwSWQuZGlzcG9zZSgpO1xuICAgICAgICBpZiAoZ3Vlc3RIYXNPd24odmFsdWUsICdib3VuZFRoaXMnKSkge1xuICAgICAgICAgIC8vIFJlLWJpbmQgdGhyb3VnaCB0aGUgcHJveHkncyBvd24gKG92ZXJyaWRkZW4pIGAuYmluZGAsIHdoaWNoIGlzXG4gICAgICAgICAgLy8gYW4gb3duIGRhdGEgcHJvcGVydHkgc3RhbXBlZCBieSBXT1JLRkxPV19VU0VfU1RFUC5cbiAgICAgICAgICBjb25zdCBiaW5kID0gb3duKHByb3h5LCAnYmluZCcpID8/IGNoYWluZWQocHJveHksICdiaW5kJyk7XG4gICAgICAgICAgY29uc3QgYm91bmRUaGlzID0gb3duKHZhbHVlLCAnYm91bmRUaGlzJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGJvdW5kQXJncyA9IG93bih2YWx1ZSwgJ2JvdW5kQXJncycpO1xuICAgICAgICAgIGNvbnN0IGFyZ3M6IEpTVmFsdWVIYW5kbGVbXSA9IFtib3VuZFRoaXNdO1xuICAgICAgICAgIGNvbnN0IGFyZ0hhbmRsZXM6IEpTVmFsdWVIYW5kbGVbXSA9IFtdO1xuICAgICAgICAgIGlmIChib3VuZEFyZ3MgJiYgYm91bmRBcmdzLmlzQXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9XG4gICAgICAgICAgICAgIG93bihib3VuZEFyZ3MsICdsZW5ndGgnKT8uY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKSA/PyAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gb3duKGJvdW5kQXJncywgU3RyaW5nKGluZGV4KSkgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICAgICAgICBhcmdzLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50ICE9PSB2bS51bmRlZmluZWQpIGFyZ0hhbmRsZXMucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYm91bmRBcmdzPy5kaXNwb3NlKCk7XG4gICAgICAgICAgaWYgKGJpbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kID0gY2FsbChiaW5kLCBwcm94eSwgLi4uYXJncyk7XG4gICAgICAgICAgICBiaW5kLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHByb3h5LmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHByb3h5ID0gYm91bmQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChib3VuZFRoaXMgIT09IHZtLnVuZGVmaW5lZCkgYm91bmRUaGlzLmRpc3Bvc2UoKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBhcmdIYW5kbGVzKSBoYW5kbGUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm94eTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHVzZVN0ZXAuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyYXlCdWZmZXI6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIHZtLm5ld0FycmF5QnVmZmVyKFxuICAgICAgICBiYXNlNjRUb0J5dGVzKGlzSGFuZGxlKHZhbHVlKSA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZSlcbiAgICAgICAgICAuYnVmZmVyIGFzIEFycmF5QnVmZmVyXG4gICAgICApLFxuICAgIEJpZ0ludDogKHZhbHVlOiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgdm0ubmV3QmlnSW50KEJpZ0ludChpc0hhbmRsZSh2YWx1ZSkgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWUpKSxcbiAgICBCaWdJbnQ2NEFycmF5OiAodmFsdWU6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGUpID0+XG4gICAgICBidWlsZFR5cGVkQXJyYXkoJ0JpZ0ludDY0QXJyYXknLCB2YWx1ZSksXG4gICAgQmlnVWludDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkVHlwZWRBcnJheSgnQmlnVWludDY0QXJyYXknLCB2YWx1ZSksXG4gICAgRGF0ZTogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlIHwgc3RyaW5nKSA9PiB7XG4gICAgICAvLyBUaGUgcmVkdWNlciBlbWl0cyAnLicgZm9yIGludmFsaWQgZGF0ZXMgYW5kIGFuIElTTyBzdHJpbmcgb3RoZXJ3aXNlLlxuICAgICAgY29uc3QgaXNvID0gaXNIYW5kbGUodmFsdWUpID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlO1xuICAgICAgY29uc3QgYXJndW1lbnQgPVxuICAgICAgICBpc28gPT09ICcuJyA/IHZtLm5ld051bWJlcihOdW1iZXIuTmFOKSA6IHZtLm5ld1N0cmluZyhpc28pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHZtLmNvbnN0cnVjdChpLkRhdGUsIGFyZ3VtZW50KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGFyZ3VtZW50LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGlzSGFuZGxlKHZhbHVlKSkgdmFsdWUuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgRE9NRXhjZXB0aW9uOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGlmIChpLkRPTUV4Y2VwdGlvbikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gb3duKHZhbHVlLCAnbWVzc2FnZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbmFtZSA9IG93bih2YWx1ZSwgJ25hbWUnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGVycm9yID0gdm0uY29uc3RydWN0KGkuRE9NRXhjZXB0aW9uLCBtZXNzYWdlLCBuYW1lKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IHZtLnVuZGVmaW5lZCkgbWVzc2FnZS5kaXNwb3NlKCk7XG4gICAgICAgIGlmIChuYW1lICE9PSB2bS51bmRlZmluZWQpIG5hbWUuZGlzcG9zZSgpO1xuICAgICAgICBjb25zdCBzdGFjayA9IG93bih2YWx1ZSwgJ3N0YWNrJyk7XG4gICAgICAgIGlmIChzdGFjayAmJiAhc3RhY2suaXNVbmRlZmluZWQpIGRlZmluZShlcnJvciwgJ3N0YWNrJywgc3RhY2spO1xuICAgICAgICBzdGFjaz8uZGlzcG9zZSgpO1xuICAgICAgICBpZiAoZ3Vlc3RIYXNPd24odmFsdWUsICdjYXVzZScpKSB7XG4gICAgICAgICAgY29uc3QgY2F1c2UgPSBvd24odmFsdWUsICdjYXVzZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgICBkZWZpbmUoZXJyb3IsICdjYXVzZScsIGNhdXNlKTtcbiAgICAgICAgICBpZiAoY2F1c2UgIT09IHZtLnVuZGVmaW5lZCkgY2F1c2UuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWlsZEVycm9yKGkuRXJyb3IsIHZhbHVlLCB7XG4gICAgICAgIG5hbWU6IG93blN0cmluZyh2YWx1ZSwgJ25hbWUnKSA/PyAnRE9NRXhjZXB0aW9uJyxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgQWdncmVnYXRlRXJyb3I6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgZXJyb3JzID0gb3duKHZhbHVlLCAnZXJyb3JzJyk7XG4gICAgICBjb25zdCBlcnJvcnNBcmcgPVxuICAgICAgICBlcnJvcnMgJiYgIWVycm9ycy5pc1VuZGVmaW5lZCA/IGVycm9ycyA6IHZtLmV2YWxDb2RlKCcoW10pJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gb3duKHZhbHVlLCAnbWVzc2FnZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGN0b3IgPSBpLkFnZ3JlZ2F0ZUVycm9yID8/IGkuRXJyb3I7XG4gICAgICBjb25zdCBlcnJvciA9XG4gICAgICAgIGN0b3IgPT09IGkuQWdncmVnYXRlRXJyb3JcbiAgICAgICAgICA/IHZtLmNvbnN0cnVjdChjdG9yLCBlcnJvcnNBcmcsIG1lc3NhZ2UpXG4gICAgICAgICAgOiBidWlsZEVycm9yKGkuRXJyb3IsIHZhbHVlLCB7IG5hbWU6ICdBZ2dyZWdhdGVFcnJvcicgfSk7XG4gICAgICBpZiAoY3RvciA9PT0gaS5BZ2dyZWdhdGVFcnJvcikge1xuICAgICAgICBjb25zdCBzdGFjayA9IG93bih2YWx1ZSwgJ3N0YWNrJyk7XG4gICAgICAgIGlmIChzdGFjayAmJiAhc3RhY2suaXNVbmRlZmluZWQpIGRlZmluZShlcnJvciwgJ3N0YWNrJywgc3RhY2spO1xuICAgICAgICBzdGFjaz8uZGlzcG9zZSgpO1xuICAgICAgICBpZiAoZ3Vlc3RIYXNPd24odmFsdWUsICdjYXVzZScpKSB7XG4gICAgICAgICAgY29uc3QgY2F1c2UgPSBvd24odmFsdWUsICdjYXVzZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgICBkZWZpbmUoZXJyb3IsICdjYXVzZScsIGNhdXNlKTtcbiAgICAgICAgICBpZiAoY2F1c2UgIT09IHZtLnVuZGVmaW5lZCkgY2F1c2UuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZSAhPT0gdm0udW5kZWZpbmVkKSBtZXNzYWdlLmRpc3Bvc2UoKTtcbiAgICAgIGVycm9yc0FyZy5kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBFdmFsRXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ0V2YWxFcnJvcicpLFxuICAgIEZhdGFsRXJyb3I6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgY2xzID0gcmVnaXN0ZXJlZEVycm9yQ2xhc3MoJ0B3b3JrZmxvdy9lcnJvcnMvL0ZhdGFsRXJyb3InKTtcbiAgICAgIGNvbnN0IGVycm9yID0gY2xzXG4gICAgICAgID8gYnVpbGRFcnJvcihjbHMsIHZhbHVlKVxuICAgICAgICA6IGJ1aWxkRXJyb3IoaS5FcnJvciwgdmFsdWUsIHsgbmFtZTogJ0ZhdGFsRXJyb3InIH0pO1xuICAgICAgY2xzPy5kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBIb29rQ29uZmxpY3RFcnJvcjogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBjb25zdCBjbHMgPSByZWdpc3RlcmVkRXJyb3JDbGFzcygnQHdvcmtmbG93L2Vycm9ycy8vSG9va0NvbmZsaWN0RXJyb3InKTtcbiAgICAgIGxldCBlcnJvcjogSlNWYWx1ZUhhbmRsZTtcbiAgICAgIGlmIChjbHMpIHtcbiAgICAgICAgLy8gQ29uc3RydWN0b3IgdGFrZXMgKHRva2VuLCBjb25mbGljdGluZ1J1bklkKS5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBvd24odmFsdWUsICd0b2tlbicpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgY29uZmxpY3RpbmdSdW5JZCA9IG93bih2YWx1ZSwgJ2NvbmZsaWN0aW5nUnVuSWQnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgIGVycm9yID0gdm0uY29uc3RydWN0KGNscywgdG9rZW4sIGNvbmZsaWN0aW5nUnVuSWQpO1xuICAgICAgICBpZiAodG9rZW4gIT09IHZtLnVuZGVmaW5lZCkgdG9rZW4uZGlzcG9zZSgpO1xuICAgICAgICBpZiAoY29uZmxpY3RpbmdSdW5JZCAhPT0gdm0udW5kZWZpbmVkKSBjb25mbGljdGluZ1J1bklkLmRpc3Bvc2UoKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBvd24odmFsdWUsICdzdGFjaycpO1xuICAgICAgICBpZiAoc3RhY2sgJiYgIXN0YWNrLmlzVW5kZWZpbmVkKSBkZWZpbmUoZXJyb3IsICdzdGFjaycsIHN0YWNrKTtcbiAgICAgICAgc3RhY2s/LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGd1ZXN0SGFzT3duKHZhbHVlLCAnY2F1c2UnKSkge1xuICAgICAgICAgIGNvbnN0IGNhdXNlID0gb3duKHZhbHVlLCAnY2F1c2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgICAgZGVmaW5lKGVycm9yLCAnY2F1c2UnLCBjYXVzZSk7XG4gICAgICAgICAgaWYgKGNhdXNlICE9PSB2bS51bmRlZmluZWQpIGNhdXNlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjbHMuZGlzcG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSBidWlsZEVycm9yKGkuRXJyb3IsIHZhbHVlLCB7IG5hbWU6ICdIb29rQ29uZmxpY3RFcnJvcicgfSk7XG4gICAgICAgIGNvbnN0IHRva2VuID0gb3duKHZhbHVlLCAndG9rZW4nKTtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgZGVmaW5lKGVycm9yLCAndG9rZW4nLCB0b2tlbik7XG4gICAgICAgICAgdG9rZW4uZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZsaWN0aW5nUnVuSWQgPSBvd24odmFsdWUsICdjb25mbGljdGluZ1J1bklkJyk7XG4gICAgICAgIGlmIChjb25mbGljdGluZ1J1bklkICYmICFjb25mbGljdGluZ1J1bklkLmlzVW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVmaW5lKGVycm9yLCAnY29uZmxpY3RpbmdSdW5JZCcsIGNvbmZsaWN0aW5nUnVuSWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZsaWN0aW5nUnVuSWQ/LmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFJhbmdlRXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ1JhbmdlRXJyb3InKSxcbiAgICBSZWZlcmVuY2VFcnJvcjogbmFtZWRFcnJvclN1YmNsYXNzUmV2aXZlcignUmVmZXJlbmNlRXJyb3InKSxcbiAgICBSZXRyeWFibGVFcnJvcjogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBjb25zdCByZXRyeUFmdGVyTXMgPVxuICAgICAgICBvd24odmFsdWUsICdyZXRyeUFmdGVyJyk/LmNvbnN1bWUoKGgpID0+XG4gICAgICAgICAgaC5pc051bWJlciA/IGgudG9OdW1iZXIoKSA6IE51bWJlci5OYU5cbiAgICAgICAgKSA/PyBOdW1iZXIuTmFOO1xuICAgICAgY29uc3QgdGltZUhhbmRsZSA9IHZtLm5ld051bWJlcihyZXRyeUFmdGVyTXMpO1xuICAgICAgY29uc3QgcmV0cnlBZnRlckRhdGUgPSB2bS5jb25zdHJ1Y3QoaS5EYXRlLCB0aW1lSGFuZGxlKTtcbiAgICAgIHRpbWVIYW5kbGUuZGlzcG9zZSgpO1xuICAgICAgY29uc3QgY2xzID0gcmVnaXN0ZXJlZEVycm9yQ2xhc3MoJ0B3b3JrZmxvdy9lcnJvcnMvL1JldHJ5YWJsZUVycm9yJyk7XG4gICAgICBsZXQgZXJyb3I6IEpTVmFsdWVIYW5kbGU7XG4gICAgICBpZiAoY2xzKSB7XG4gICAgICAgIC8vIENvbnN0cnVjdG9yIHRha2VzIChtZXNzYWdlLCB7IHJldHJ5QWZ0ZXIgfSkuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB2bS5uZXdPYmplY3QoKTtcbiAgICAgICAgb3B0aW9ucy5zZXRQcm9wKCdyZXRyeUFmdGVyJywgcmV0cnlBZnRlckRhdGUpO1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gb3duKHZhbHVlLCAnbWVzc2FnZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgZXJyb3IgPSB2bS5jb25zdHJ1Y3QoY2xzLCBtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IHZtLnVuZGVmaW5lZCkgbWVzc2FnZS5kaXNwb3NlKCk7XG4gICAgICAgIG9wdGlvbnMuZGlzcG9zZSgpO1xuICAgICAgICBjb25zdCBzdGFjayA9IG93bih2YWx1ZSwgJ3N0YWNrJyk7XG4gICAgICAgIGlmIChzdGFjayAmJiAhc3RhY2suaXNVbmRlZmluZWQpIGRlZmluZShlcnJvciwgJ3N0YWNrJywgc3RhY2spO1xuICAgICAgICBzdGFjaz8uZGlzcG9zZSgpO1xuICAgICAgICBpZiAoZ3Vlc3RIYXNPd24odmFsdWUsICdjYXVzZScpKSB7XG4gICAgICAgICAgY29uc3QgY2F1c2UgPSBvd24odmFsdWUsICdjYXVzZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgICBkZWZpbmUoZXJyb3IsICdjYXVzZScsIGNhdXNlKTtcbiAgICAgICAgICBpZiAoY2F1c2UgIT09IHZtLnVuZGVmaW5lZCkgY2F1c2UuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNscy5kaXNwb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvciA9IGJ1aWxkRXJyb3IoaS5FcnJvciwgdmFsdWUsIHsgbmFtZTogJ1JldHJ5YWJsZUVycm9yJyB9KTtcbiAgICAgICAgZGVmaW5lKGVycm9yLCAncmV0cnlBZnRlcicsIHJldHJ5QWZ0ZXJEYXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHJ5QWZ0ZXJEYXRlLmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3I6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3QgY2xzID0gcmVnaXN0ZXJlZEVycm9yQ2xhc3MoXG4gICAgICAgICdAd29ya2Zsb3cvZXJyb3JzLy9SdW50aW1lRGVjcnlwdGlvbkVycm9yJ1xuICAgICAgKTtcbiAgICAgIGxldCBlcnJvcjogSlNWYWx1ZUhhbmRsZTtcbiAgICAgIGlmIChjbHMpIHtcbiAgICAgICAgLy8gQ29uc3RydWN0b3IgdGFrZXMgKG1lc3NhZ2UsIHsgY2F1c2UsIGNvbnRleHQgfSkuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB2bS5uZXdPYmplY3QoKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG93bih2YWx1ZSwgJ2NvbnRleHQnKTtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgICBvcHRpb25zLnNldFByb3AoJ2NvbnRleHQnLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0Py5kaXNwb3NlKCk7XG4gICAgICAgIGlmIChndWVzdEhhc093bih2YWx1ZSwgJ2NhdXNlJykpIHtcbiAgICAgICAgICBjb25zdCBjYXVzZSA9IG93bih2YWx1ZSwgJ2NhdXNlJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICAgIG9wdGlvbnMuc2V0UHJvcCgnY2F1c2UnLCBjYXVzZSk7XG4gICAgICAgICAgaWYgKGNhdXNlICE9PSB2bS51bmRlZmluZWQpIGNhdXNlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gb3duKHZhbHVlLCAnbWVzc2FnZScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgZXJyb3IgPSB2bS5jb25zdHJ1Y3QoY2xzLCBtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IHZtLnVuZGVmaW5lZCkgbWVzc2FnZS5kaXNwb3NlKCk7XG4gICAgICAgIG9wdGlvbnMuZGlzcG9zZSgpO1xuICAgICAgICBjb25zdCBzdGFjayA9IG93bih2YWx1ZSwgJ3N0YWNrJyk7XG4gICAgICAgIGlmIChzdGFjayAmJiAhc3RhY2suaXNVbmRlZmluZWQpIGRlZmluZShlcnJvciwgJ3N0YWNrJywgc3RhY2spO1xuICAgICAgICBzdGFjaz8uZGlzcG9zZSgpO1xuICAgICAgICBjbHMuZGlzcG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSBidWlsZEVycm9yKGkuRXJyb3IsIHZhbHVlLCB7IG5hbWU6ICdSdW50aW1lRGVjcnlwdGlvbkVycm9yJyB9KTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG93bih2YWx1ZSwgJ2NvbnRleHQnKTtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaXNVbmRlZmluZWQpIHtcbiAgICAgICAgICBkZWZpbmUoZXJyb3IsICdjb250ZXh0JywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dD8uZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgU3ludGF4RXJyb3I6IG5hbWVkRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ1N5bnRheEVycm9yJyksXG4gICAgVHlwZUVycm9yOiBuYW1lZEVycm9yU3ViY2xhc3NSZXZpdmVyKCdUeXBlRXJyb3InKSxcbiAgICBVUklFcnJvcjogbmFtZWRFcnJvclN1YmNsYXNzUmV2aXZlcignVVJJRXJyb3InKSxcbiAgICBFcnJvcjogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgYnVpbGRFcnJvcihpLkVycm9yLCB2YWx1ZSwge1xuICAgICAgICBuYW1lOiBvd25TdHJpbmcodmFsdWUsICduYW1lJykgPz8gJ0Vycm9yJyxcbiAgICAgIH0pLFxuICAgIEZsb2F0MzJBcnJheTogKHZhbHVlOiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgYnVpbGRUeXBlZEFycmF5KCdGbG9hdDMyQXJyYXknLCB2YWx1ZSksXG4gICAgRmxvYXQ2NEFycmF5OiAodmFsdWU6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGUpID0+XG4gICAgICBidWlsZFR5cGVkQXJyYXkoJ0Zsb2F0NjRBcnJheScsIHZhbHVlKSxcbiAgICBJbnQ4QXJyYXk6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkVHlwZWRBcnJheSgnSW50OEFycmF5JywgdmFsdWUpLFxuICAgIEludDE2QXJyYXk6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkVHlwZWRBcnJheSgnSW50MTZBcnJheScsIHZhbHVlKSxcbiAgICBJbnQzMkFycmF5OiAodmFsdWU6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGUpID0+XG4gICAgICBidWlsZFR5cGVkQXJyYXkoJ0ludDMyQXJyYXknLCB2YWx1ZSksXG4gICAgTWFwOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIC8vIHZhbHVlIGlzIGEgZ3Vlc3QgYXJyYXkgb2YgW2ssIHZdIGFycmF5cy5cbiAgICAgIGNvbnN0IG1hcCA9IHZtLmNvbnN0cnVjdChpLk1hcCk7XG4gICAgICBjb25zdCBsZW5ndGggPSBvd24odmFsdWUsICdsZW5ndGgnKT8uY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKSA/PyAwO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBlbnRyeSA9IG93bih2YWx1ZSwgU3RyaW5nKGluZGV4KSk7XG4gICAgICAgIGlmICghZW50cnkpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBrZXkgPSBvd24oZW50cnksICcwJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBlbnRyeVZhbHVlID0gb3duKGVudHJ5LCAnMScpID8/IHZtLnVuZGVmaW5lZDtcbiAgICAgICAgY2FsbChpLm1hcFNldCwgbWFwLCBrZXksIGVudHJ5VmFsdWUpLmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKGtleSAhPT0gdm0udW5kZWZpbmVkKSBrZXkuZGlzcG9zZSgpO1xuICAgICAgICBpZiAoZW50cnlWYWx1ZSAhPT0gdm0udW5kZWZpbmVkKSBlbnRyeVZhbHVlLmRpc3Bvc2UoKTtcbiAgICAgICAgZW50cnkuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LFxuICAgIFJlZ0V4cDogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBvd24odmFsdWUsICdzb3VyY2UnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICBjb25zdCBmbGFncyA9IG93bih2YWx1ZSwgJ2ZsYWdzJykgPz8gdm0udW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVnZXhwID0gdm0uY29uc3RydWN0KGkuUmVnRXhwLCBzb3VyY2UsIGZsYWdzKTtcbiAgICAgIGlmIChzb3VyY2UgIT09IHZtLnVuZGVmaW5lZCkgc291cmNlLmRpc3Bvc2UoKTtcbiAgICAgIGlmIChmbGFncyAhPT0gdm0udW5kZWZpbmVkKSBmbGFncy5kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gcmVnZXhwO1xuICAgIH0sXG4gICAgU2V0OiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IHNldCA9IHZtLmNvbnN0cnVjdChpLlNldCk7XG4gICAgICBjb25zdCBsZW5ndGggPSBvd24odmFsdWUsICdsZW5ndGgnKT8uY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKSA/PyAwO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gb3duKHZhbHVlLCBTdHJpbmcoaW5kZXgpKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICAgIGNhbGwoaS5zZXRBZGQsIHNldCwgZWxlbWVudCkuZGlzcG9zZSgpO1xuICAgICAgICBpZiAoZWxlbWVudCAhPT0gdm0udW5kZWZpbmVkKSBlbGVtZW50LmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXQ7XG4gICAgfSxcbiAgICBVUkw6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSB8IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFpLlVSTCkgdGhyb3cgbmV3IEVycm9yKCdVUkwgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgVk0nKTtcbiAgICAgIGNvbnN0IGhyZWYgPSBpc0hhbmRsZSh2YWx1ZSkgPyB2YWx1ZSA6IHZtLm5ld1N0cmluZyh2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdm0uY29uc3RydWN0KGkuVVJMLCBocmVmKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICghaXNIYW5kbGUodmFsdWUpKSBocmVmLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFdvcmtmbG93RnVuY3Rpb246ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgY29uc3Qgd29ya2Zsb3dJZCA9IG93bih2YWx1ZSwgJ3dvcmtmbG93SWQnKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aHJvd2VyRmFjdG9yeSA9IHZtLmV2YWxDb2RlKFxuICAgICAgICBgKGZ1bmN0aW9uKHdvcmtmbG93SWQpIHtcbiAgICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZmxvdyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBkaXJlY3RseS4gVXNlIHN0YXJ0KCkgdG8gaW52b2tlIHRoZW0uJyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmLndvcmtmbG93SWQgPSB3b3JrZmxvd0lkO1xuICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9KWBcbiAgICAgICk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gaW52b2tlKHRocm93ZXJGYWN0b3J5LCB3b3JrZmxvd0lkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93ZXJGYWN0b3J5LmRpc3Bvc2UoKTtcbiAgICAgICAgaWYgKHdvcmtmbG93SWQgIT09IHZtLnVuZGVmaW5lZCkgd29ya2Zsb3dJZC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBVUkxTZWFyY2hQYXJhbXM6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSB8IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFpLlVSTFNlYXJjaFBhcmFtcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTFNlYXJjaFBhcmFtcyBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBWTScpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF3ID0gaXNIYW5kbGUodmFsdWUpID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlO1xuICAgICAgY29uc3QgaW5pdCA9IHZtLm5ld1N0cmluZyhyYXcgPT09ICcuJyA/ICcnIDogcmF3KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB2bS5jb25zdHJ1Y3QoaS5VUkxTZWFyY2hQYXJhbXMsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaW5pdC5kaXNwb3NlKCk7XG4gICAgICAgIGlmIChpc0hhbmRsZSh2YWx1ZSkpIHZhbHVlLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFVpbnQ4QXJyYXk6ICh2YWx1ZTogc3RyaW5nIHwgSlNWYWx1ZUhhbmRsZSkgPT5cbiAgICAgIGJ1aWxkVHlwZWRBcnJheSgnVWludDhBcnJheScsIHZhbHVlKSxcbiAgICBVaW50OENsYW1wZWRBcnJheTogKHZhbHVlOiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgYnVpbGRUeXBlZEFycmF5KCdVaW50OENsYW1wZWRBcnJheScsIHZhbHVlKSxcbiAgICBVaW50MTZBcnJheTogKHZhbHVlOiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgYnVpbGRUeXBlZEFycmF5KCdVaW50MTZBcnJheScsIHZhbHVlKSxcbiAgICBVaW50MzJBcnJheTogKHZhbHVlOiBzdHJpbmcgfCBKU1ZhbHVlSGFuZGxlKSA9PlxuICAgICAgYnVpbGRUeXBlZEFycmF5KCdVaW50MzJBcnJheScsIHZhbHVlKSxcbiAgICBIZWFkZXJzOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGlmICghaS5IZWFkZXJzKSB0aHJvdyBuZXcgRXJyb3IoJ0hlYWRlcnMgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgVk0nKTtcbiAgICAgIHJldHVybiB2bS5jb25zdHJ1Y3QoaS5IZWFkZXJzLCB2YWx1ZSk7XG4gICAgfSxcbiAgICBSZXF1ZXN0OiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIC8vIE1pcnJvciB0aGUgaW4tVk0gcmV2aXZlcjogbXV0YXRlIHRoZSBwYXJzZWQgb2JqZWN0IGludG8gYVxuICAgICAgLy8gUmVxdWVzdC1hbGlrZSBieSBhdHRhY2hpbmcgdGhlIHByb3RvdHlwZSBtZXRob2RzIGRpcmVjdGx5LlxuICAgICAgaWYgKGkucmVxdWVzdFByb3RvdHlwZSkge1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBbJ2pzb24nLCAndGV4dCcsICdhcnJheUJ1ZmZlciddKSB7XG4gICAgICAgICAgY29uc3QgZm4gPSBvd24oaS5yZXF1ZXN0UHJvdG90eXBlLCBtZXRob2QpO1xuICAgICAgICAgIGlmIChmbiAmJiBmbi50eXBlb2YgPT09ICdmdW5jdGlvbicpIGRlZmluZSh2YWx1ZSwgbWV0aG9kLCBmbik7XG4gICAgICAgICAgZm4/LmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2VXcml0YWJsZSA9IG93bih2YWx1ZSwgJ3Jlc3BvbnNlV3JpdGFibGUnKTtcbiAgICAgIGlmIChyZXNwb25zZVdyaXRhYmxlICYmICFyZXNwb25zZVdyaXRhYmxlLmlzVW5kZWZpbmVkKSB7XG4gICAgICAgIGRlZmluZSh2YWx1ZSwgc3ltKCdXRUJIT09LX1JFU1BPTlNFX1dSSVRBQkxFJyksIHJlc3BvbnNlV3JpdGFibGUpO1xuICAgICAgfVxuICAgICAgcmVzcG9uc2VXcml0YWJsZT8uZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHZhbHVlLmR1cCgpO1xuICAgIH0sXG4gICAgUmVzcG9uc2U6ICh2YWx1ZTogSlNWYWx1ZUhhbmRsZSkgPT4ge1xuICAgICAgaWYgKGkucmVzcG9uc2VQcm90b3R5cGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBtZXRob2Qgb2YgW1xuICAgICAgICAgICdqc29uJyxcbiAgICAgICAgICAndGV4dCcsXG4gICAgICAgICAgJ2FycmF5QnVmZmVyJyxcbiAgICAgICAgICAnYnl0ZXMnLFxuICAgICAgICAgICdjbG9uZScsXG4gICAgICAgIF0pIHtcbiAgICAgICAgICBjb25zdCBmbiA9IG93bihpLnJlc3BvbnNlUHJvdG90eXBlLCBtZXRob2QpO1xuICAgICAgICAgIGlmIChmbiAmJiBmbi50eXBlb2YgPT09ICdmdW5jdGlvbicpIGRlZmluZSh2YWx1ZSwgbWV0aG9kLCBmbik7XG4gICAgICAgICAgZm4/LmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgYm9keSA9IG93bih2YWx1ZSwgJ2JvZHknKSA/PyB2bS51bmRlZmluZWQ7XG4gICAgICBkZWZpbmUodmFsdWUsICdfYm9keScsIGJvZHkpO1xuICAgICAgaWYgKGJvZHkgIT09IHZtLnVuZGVmaW5lZCkgYm9keS5kaXNwb3NlKCk7XG4gICAgICBjb25zdCBzdGF0dXMgPSBvd24odmFsdWUsICdzdGF0dXMnKT8uY29uc3VtZSgoaCkgPT4gaC50b051bWJlcigpKSA/PyAwO1xuICAgICAgY29uc3Qgb2sgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCA/IHZtLnRydWUgOiB2bS5mYWxzZTtcbiAgICAgIGRlZmluZSh2YWx1ZSwgJ29rJywgb2spO1xuICAgICAgZGVmaW5lKHZhbHVlLCAnYm9keVVzZWQnLCB2bS5mYWxzZSk7XG4gICAgICByZXR1cm4gdmFsdWUuZHVwKCk7XG4gICAgfSxcbiAgICBSZWFkYWJsZVN0cmVhbTogKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKSA9PiB7XG4gICAgICBjb25zdCBwcm90b3R5cGUgPSBpLnJlYWRhYmxlU3RyZWFtUHJvdG90eXBlID8/IHZtLm51bGw7XG4gICAgICBjb25zdCBzdHJlYW0gPSBjYWxsKGkub2JqZWN0Q3JlYXRlLCB2bS51bmRlZmluZWQsIHByb3RvdHlwZSk7XG4gICAgICBjb25zdCBib2R5SW5pdCA9IG93bih2YWx1ZSwgJ2JvZHlJbml0Jyk7XG4gICAgICBpZiAoYm9keUluaXQgJiYgIWJvZHlJbml0LmlzVW5kZWZpbmVkKSB7XG4gICAgICAgIGRlZmluZShzdHJlYW0sIHN5bSgnQk9EWV9JTklUJyksIGJvZHlJbml0KTtcbiAgICAgICAgYm9keUluaXQuZGlzcG9zZSgpO1xuICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgICAgfVxuICAgICAgYm9keUluaXQ/LmRpc3Bvc2UoKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBvd24odmFsdWUsICduYW1lJyk7XG4gICAgICBpZiAobmFtZSAmJiAhbmFtZS5pc1VuZGVmaW5lZCkge1xuICAgICAgICBkZWZpbmUoc3RyZWFtLCBzeW0oJ1dPUktGTE9XX1NUUkVBTV9OQU1FJyksIG5hbWUpO1xuICAgICAgICBjb25zdCB0eXBlID0gb3duKHZhbHVlLCAndHlwZScpO1xuICAgICAgICBpZiAodHlwZSAmJiAhdHlwZS5pc1VuZGVmaW5lZCkge1xuICAgICAgICAgIGRlZmluZShzdHJlYW0sIHN5bSgnV09SS0ZMT1dfU1RSRUFNX1RZUEUnKSwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdHlwZT8uZGlzcG9zZSgpO1xuICAgICAgICBjb25zdCBmcmFtaW5nID0gb3duKHZhbHVlLCAnZnJhbWluZycpO1xuICAgICAgICBpZiAoZnJhbWluZyAmJiAhZnJhbWluZy5pc1VuZGVmaW5lZCkge1xuICAgICAgICAgIGRlZmluZShzdHJlYW0sIHN5bSgnV09SS0ZMT1dfU1RSRUFNX0ZSQU1JTkcnKSwgZnJhbWluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnJhbWluZz8uZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgbmFtZT8uZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9LFxuICAgIFdyaXRhYmxlU3RyZWFtOiAodmFsdWU6IEpTVmFsdWVIYW5kbGUpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvdHlwZSA9IGkud3JpdGFibGVTdHJlYW1Qcm90b3R5cGUgPz8gdm0ubnVsbDtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGNhbGwoaS5vYmplY3RDcmVhdGUsIHZtLnVuZGVmaW5lZCwgcHJvdG90eXBlKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBvd24odmFsdWUsICduYW1lJyk7XG4gICAgICBpZiAobmFtZSAmJiAhbmFtZS5pc1VuZGVmaW5lZCkge1xuICAgICAgICBkZWZpbmUoc3RyZWFtLCBzeW0oJ1dPUktGTE9XX1NUUkVBTV9OQU1FJyksIG5hbWUpO1xuICAgICAgfVxuICAgICAgbmFtZT8uZGlzcG9zZSgpO1xuICAgICAgY29uc3QgcnVuSWQgPSBvd24odmFsdWUsICdydW5JZCcpO1xuICAgICAgaWYgKHJ1bklkPy5pc1N0cmluZykge1xuICAgICAgICBkZWZpbmUoc3RyZWFtLCBzeW0oJ1dPUktGTE9XX1NUUkVBTV9TRVJWRVJfUlVOX0lEJyksIHJ1bklkKTtcbiAgICAgIH1cbiAgICAgIHJ1bklkPy5kaXNwb3NlKCk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50SWQgPSBvd24odmFsdWUsICdkZXBsb3ltZW50SWQnKTtcbiAgICAgIGlmIChkZXBsb3ltZW50SWQ/LmlzU3RyaW5nKSB7XG4gICAgICAgIGRlZmluZShcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc3ltKCdXT1JLRkxPV19TVFJFQU1fU0VSVkVSX0RFUExPWU1FTlRfSUQnKSxcbiAgICAgICAgICBkZXBsb3ltZW50SWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlcGxveW1lbnRJZD8uZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9LFxuICB9O1xuXG4gIGZ1bmN0aW9uIGJ1aWxkVHlwZWRBcnJheShcbiAgICB0YWc6IHN0cmluZyxcbiAgICBiYXNlNjQ6IHN0cmluZyB8IEpTVmFsdWVIYW5kbGVcbiAgKTogSlNWYWx1ZUhhbmRsZSB7XG4gICAgY29uc3QgQ29uc3RydWN0b3IgPSB0eXBlZEFycmF5Q29uc3RydWN0b3JzLmdldCh0YWcpO1xuICAgIGlmICghQ29uc3RydWN0b3IpIHRocm93IG5ldyBFcnJvcihgJHt0YWd9IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIFZNYCk7XG4gICAgLy8gUGFyc2Ugb3BlcmF0aW9ucyBidWlsZCBndWVzdCB2YWx1ZXMsIHNvIGEgcmVkdWNlZCBiYXNlNjQgcGF5bG9hZFxuICAgIC8vIGFycml2ZXMgYXMgYSBndWVzdCBzdHJpbmcgaGFuZGxlLlxuICAgIGNvbnN0IHJhdyA9IGlzSGFuZGxlKGJhc2U2NCkgPyBiYXNlNjQudG9TdHJpbmcoKSA6IGJhc2U2NDtcbiAgICBjb25zdCBieXRlcyA9IGJhc2U2NFRvQnl0ZXMocmF3KTtcbiAgICBjb25zdCBidWZmZXIgPSB2bS5uZXdBcnJheUJ1ZmZlcihcbiAgICAgIGJ5dGVzLmJ1ZmZlci5zbGljZShcbiAgICAgICAgYnl0ZXMuYnl0ZU9mZnNldCxcbiAgICAgICAgYnl0ZXMuYnl0ZU9mZnNldCArIGJ5dGVzLmJ5dGVMZW5ndGhcbiAgICAgICkgYXMgQXJyYXlCdWZmZXJcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdm0uY29uc3RydWN0KENvbnN0cnVjdG9yLCBidWZmZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBidWZmZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb2t1cFJlZ2lzdGVyZWRDbGFzcyhcbiAgICBjbGFzc0lkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogSlNWYWx1ZUhhbmRsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNsYXNzSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCByZWdpc3RyeSA9IG93bih2bS5nbG9iYWwsIHN5bSgnd29ya2Zsb3ctY2xhc3MtcmVnaXN0cnknKSk7XG4gICAgaWYgKCFyZWdpc3RyeSB8fCByZWdpc3RyeS5pc1VuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0cnk/LmRpc3Bvc2UoKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZXRNZXRob2QgPSBjaGFpbmVkKHJlZ2lzdHJ5LCAnZ2V0Jyk7XG4gICAgICBpZiAoIWdldE1ldGhvZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHZtLm5ld1N0cmluZyhjbGFzc0lkKTtcbiAgICAgICAgY29uc3QgY2xzID0gY2FsbChnZXRNZXRob2QsIHJlZ2lzdHJ5LCBrZXkpO1xuICAgICAgICBrZXkuZGlzcG9zZSgpO1xuICAgICAgICBpZiAoY2xzLmlzVW5kZWZpbmVkIHx8IGNscy50eXBlb2YgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjbHMuZGlzcG9zZSgpO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNscztcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGdldE1ldGhvZC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlZ2lzdHJ5LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gcHVibGljIEFQSSAtLS1cblxuICByZXR1cm4ge1xuICAgIHJlZHVjZXJLZXlzOiBPYmplY3Qua2V5cyhyZWR1Y2VycyksXG4gICAgcmV2aXZlcktleXM6IE9iamVjdC5rZXlzKHJldml2ZXJzKSxcbiAgICBpbnN0YWxsUHJvY2Vzc0VudihlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsYWluOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSBwbGFpbltrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICB1c2luZyBlbnZIYW5kbGUgPSB2bS5ob3N0VG9IYW5kbGUocGxhaW4pO1xuICAgICAgY2FsbChpLm9iamVjdEZyZWV6ZSwgdm0udW5kZWZpbmVkLCBlbnZIYW5kbGUpLmRpc3Bvc2UoKTtcbiAgICAgIHVzaW5nIHByb2Nlc3NIYW5kbGUgPSB2bS5uZXdPYmplY3QoKTtcbiAgICAgIGRlZmluZShwcm9jZXNzSGFuZGxlLCAnZW52JywgZW52SGFuZGxlKTtcbiAgICAgIHZtLnNldFByb3Aodm0uZ2xvYmFsLCAncHJvY2VzcycsIHByb2Nlc3NIYW5kbGUpO1xuICAgIH0sXG4gICAgc2VyaWFsaXplKHZhbHVlOiBKU1ZhbHVlSGFuZGxlKTogVWludDhBcnJheSB7XG4gICAgICAvLyBIYW5kbGUgc2NvcGU6IHJlZHVjZXJzIGFuZCB0aGUgaHlicmlkIG9wZXJhdGlvbnMgbWludCBvbmUgaGFuZGxlXG4gICAgICAvLyBwZXIgdmlzaXRlZCB2YWx1ZSBub2RlIChkZXNjcmlwdG9yIHJlYWRzLCBkdXAoKXMsIGludHJpbnNpYyBjYWxsXG4gICAgICAvLyByZXN1bHRzKSBhbmQgbm90aGluZyBkaXNwb3NlcyB0aGVtIGluZGl2aWR1YWxseS4gV2l0aG91dCB0aGVcbiAgICAgIC8vIHNjb3BlIGVhY2ggc2VyaWFsaXplIGxlYWtzIH5vbmUgaGFuZGxlIHBlciBub2RlIGZvciB0aGUgVk0nc1xuICAgICAgLy8gbGlmZXRpbWUsIHdoaWNoIGNvbXBvdW5kcyBhY3Jvc3MgYW4gaW5saW5lLWxvb3Agc2Vzc2lvbidzIHdob2xlXG4gICAgICAvLyBiYXRjaC4gUmVxdWlyZXMgcXVpY2tqcy13YXNpID49IDMuMy4xOiBlYXJsaWVyIHZlcnNpb25zIGFsc29cbiAgICAgIC8vIHNjb3BlLXRyYWNrZWQgdGhlIGhhbmRsZXMgdGhlIGhvc3QtY2FsbGJhY2sgdHJhbXBvbGluZSB3cmFwc1xuICAgICAgLy8gYXJvdW5kIEMtb3duZWQgYXJndiBwb2ludGVycywgYW5kIGRpc3Bvc2luZyB0aG9zZSAoTWFwL1NldC9cbiAgICAgIC8vIEhlYWRlcnMgZm9yRWFjaCB2aXNpdG9ycyBydW4gbWlkLXBhc3MpIGNvcnJ1cHRlZCB0aGUgZ3Vlc3QgaGVhcDtcbiAgICAgIC8vIDMuMy4xIG1hcmtzIHRoZW0gYm9ycm93ZWQgYW5kIHNjb3BlLWV4ZW1wdC4gVGhlIGlucHV0IGhhbmRsZSBpc1xuICAgICAgLy8gY2FsbGVyLW93bmVkIChjcmVhdGVkIGJlZm9yZSB0aGUgc2NvcGUpIGFuZCB0aGUgb3V0cHV0IGlzIGhvc3RcbiAgICAgIC8vIGJ5dGVzLCBzbyBub3RoaW5nIGVzY2FwZXMuXG4gICAgICAvL1xuICAgICAgLy8gYGlkZW50aXRpZXNgIG11c3QgYmUgY2xlYXJlZCBwZXIgcGFzcyBPTkNFIGhhbmRsZXMgYXJlIGJ1bGstZnJlZWQ6XG4gICAgICAvLyBpdCBrZXlzIG9iamVjdCBpZGVudGl0eSBvbiB0aGUgcmF3IGd1ZXN0IHBvaW50ZXIsIGFuZCBmcmVlaW5nXG4gICAgICAvLyBoYW5kbGVzIGxldHMgUXVpY2tKUyByZXVzZSBwb2ludGVycywgc28gYSBzdGFsZSBlbnRyeSBmcm9tIGFuXG4gICAgICAvLyBlYXJsaWVyIHBhc3MgY291bGQgdGhlbiBhbGlhcyBhIGRpZmZlcmVudCBvYmplY3QgYW5kIGNvcnJ1cHQgdGhlXG4gICAgICAvLyBkZWR1cC9jeWNsZSBkZXRlY3Rpb24uIElkZW50aXR5IG9ubHkgbmVlZHMgc3RhYmlsaXR5IHdpdGhpbiBvbmVcbiAgICAgIC8vIHN0cmluZ2lmeSBwYXNzLlxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHZtLndpdGhTY29wZSgoKSA9PlxuICAgICAgICAgIGVuY29kZXIuZW5jb2RlKFxuICAgICAgICAgICAgc3RyaW5naWZ5KHZhbHVlLCByZWR1Y2VycywgeyBvcGVyYXRpb25zOiBzdHJpbmdpZnlPcGVyYXRpb25zIH0pXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBlbmNvZGVyLmVuY29kZShTZXJpYWxpemF0aW9uRm9ybWF0LkRFVkFMVUVfVjEpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShwcmVmaXgubGVuZ3RoICsgcGF5bG9hZC5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc2V0KHByZWZpeCwgMCk7XG4gICAgICAgIHJlc3VsdC5zZXQocGF5bG9hZCwgcHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZGVudGl0aWVzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShkYXRhOiBVaW50OEFycmF5KTogSlNWYWx1ZUhhbmRsZSB7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPCBGT1JNQVRfUFJFRklYX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEgdG9vIHNob3J0IHRvIGNvbnRhaW4gZm9ybWF0IHByZWZpeCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJlZml4ID0gZGVjb2Rlci5kZWNvZGUoZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCkpO1xuICAgICAgaWYgKHByZWZpeCAhPT0gU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2VyaWFsaXphdGlvbiBmb3JtYXQ6ICR7cHJlZml4fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5bG9hZCA9IGRlY29kZXIuZGVjb2RlKGRhdGEuc3ViYXJyYXkoRk9STUFUX1BSRUZJWF9MRU5HVEgpKTtcbiAgICAgIC8vIEhhbmRsZSBzY29wZSwgbWlycm9yaW5nIHNlcmlhbGl6ZSgpOiByZXZpdmVycyBtaW50IGludGVybWVkaWF0ZVxuICAgICAgLy8gaGFuZGxlcyAoY2hpbGRyZW4gYWxyZWFkeSBhdHRhY2hlZCB0byB0aGVpciBwYXJlbnRzLCBpbnRyaW5zaWNcbiAgICAgIC8vIGNhbGwgcmVzdWx0cykgdGhhdCBhcmUgc2FmZSB0byBmcmVlIG9uY2UgdGhlIGdyYXBoIGlzIGJ1aWx0OlxuICAgICAgLy8gZ3Vlc3QgdmFsdWVzIGFyZSByZWZjb3VudGVkLCBzbyBwYXJlbnRzIGtlZXAgdGhlaXIgY2hpbGRyZW5cbiAgICAgIC8vIGFsaXZlLiBPbmx5IHRoZSByb290IGVzY2FwZXMgdG8gdGhlIGNhbGxlci5cbiAgICAgIHJldHVybiB2bS53aXRoU2NvcGUoKHNjb3BlKSA9PlxuICAgICAgICBzY29wZS5lc2NhcGUoXG4gICAgICAgICAgcGFyc2UocGF5bG9hZCwgcmV2aXZlcnMsIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnM6IHBhcnNlT3BlcmF0aW9ucyxcbiAgICAgICAgICB9KSBhcyBKU1ZhbHVlSGFuZGxlXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSxcbiAgICBkaXNwb3NlKCkge1xuICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgZGlzcG9zYWJsZXMucmV2ZXJzZSgpKSBoYW5kbGUuZGlzcG9zZSgpO1xuICAgICAgZGlzcG9zYWJsZXMubGVuZ3RoID0gMDtcbiAgICAgIGlkZW50aXRpZXMuY2xlYXIoKTtcbiAgICB9LFxuICB9O1xufVxuIl19
|