@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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This module provides standardized telemetry attributes following OpenTelemetry semantic conventions
|
|
5
5
|
* for instrumenting workflow execution, step processing, and related operations. Each exported function
|
|
6
|
-
* creates a properly formatted attribute object
|
|
6
|
+
* creates a properly formatted attribute object for use with OpenTelemetry spans.
|
|
7
7
|
*
|
|
8
8
|
* The semantic conventions are organized into several categories:
|
|
9
9
|
* - **Workflow attributes**: Track workflow lifecycle, status, and metadata
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - **Queue attributes**: Instrument message queue operations
|
|
12
12
|
* - **Deployment attributes**: Capture deployment environment information
|
|
13
13
|
*
|
|
14
|
-
* All attribute functions are type-safe and
|
|
14
|
+
* All attribute functions are type-safe and use existing backend types to ensure
|
|
15
15
|
* consistency between telemetry data and actual system state.
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
@@ -113,10 +113,16 @@ export const WorkflowStepsCreated = SemanticConvention('workflow.steps.created')
|
|
|
113
113
|
export const WorkflowHooksCreated = SemanticConvention('workflow.hooks.created');
|
|
114
114
|
/** Number of waits created during workflow execution */
|
|
115
115
|
export const WorkflowWaitsCreated = SemanticConvention('workflow.waits.created');
|
|
116
|
+
/**
|
|
117
|
+
* Number of steps this suspension finalized as failed because their
|
|
118
|
+
* arguments refused to serialize (step_created placeholder + step_failed
|
|
119
|
+
* carrying the SerializationError; see finalizeUnserializableStep).
|
|
120
|
+
*/
|
|
121
|
+
export const WorkflowStepsFailedSerialization = SemanticConvention('workflow.steps.failed_serialization');
|
|
116
122
|
/**
|
|
117
123
|
* Number of inline-owned steps this invocation re-executed because it is a
|
|
118
124
|
* redelivery of their owning queue message (crash recovery for inline
|
|
119
|
-
* steps
|
|
125
|
+
* steps; see the inline step ownership changelog, workflow#2780).
|
|
120
126
|
*/
|
|
121
127
|
export const WorkflowOwnedRecoverySteps = SemanticConvention('workflow.inline_ownership.owned_recovery_steps');
|
|
122
128
|
/**
|
|
@@ -137,7 +143,7 @@ export const WorkflowRouteEntrypointAgeMs = SemanticConvention('workflow.route.e
|
|
|
137
143
|
/** Time spent evaluating the generated route module body before creating the entrypoint */
|
|
138
144
|
export const WorkflowRouteModuleBodyInitMs = SemanticConvention('workflow.route.module_body_init_ms');
|
|
139
145
|
/**
|
|
140
|
-
* Compute instance handling this route
|
|
146
|
+
* Compute instance handling this route: the synthesized `COMPUTE_INSTANCE_ID`.
|
|
141
147
|
* Uses OTEL `faas.instance` (execution-environment id, reused across
|
|
142
148
|
* invocations to the same function):
|
|
143
149
|
* https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/
|
|
@@ -181,11 +187,11 @@ export const StepRsfsMs = SemanticConvention('step.rsfs_ms');
|
|
|
181
187
|
/**
|
|
182
188
|
* Client-measured synchronous workflow-function replay duration in
|
|
183
189
|
* milliseconds, excluding awaited network I/O, of only the FINAL replay pass
|
|
184
|
-
* within the rsfs window
|
|
190
|
+
* within the rsfs window: the pass that reached and scheduled the first
|
|
185
191
|
* step. Not accumulated across earlier pre-first-step passes (e.g. a
|
|
186
192
|
* workflow-body `setAttributes()` detour replays more than once, and a
|
|
187
193
|
* redelivery omits earlier invocations' work entirely), so this must not be
|
|
188
|
-
* read as "the replay portion of rsfs"
|
|
194
|
+
* read as "the replay portion of rsfs"; step.rsfs_ms covers the whole
|
|
189
195
|
* window. Only present alongside step.rsfs_ms and only for the run's first
|
|
190
196
|
* step (see runtime/step-latency.ts).
|
|
191
197
|
*/
|
|
@@ -253,13 +259,13 @@ export const HookResilientResume = SemanticConvention('workflow.hook.resilient_r
|
|
|
253
259
|
/**
|
|
254
260
|
* Consumer-side signal (on the workflow execution span) that this replay
|
|
255
261
|
* materialized the `hook_received` event from the queue message's `hookInput`
|
|
256
|
-
* because the producer's direct write had not landed
|
|
262
|
+
* because the producer's direct write had not landed, which completes the
|
|
257
263
|
* recovery path {@link HookResilientResume} began.
|
|
258
264
|
*
|
|
259
265
|
* Legacy / non-atomic re-ensure signal only. Atomic lazy resumes
|
|
260
266
|
* (resumeId + digest) go through the hoisted preload write instead, whose
|
|
261
267
|
* response cannot tell whether the producer or the consumer won the
|
|
262
|
-
* `(runId, resumeId)` claim
|
|
268
|
+
* `(runId, resumeId)` claim, so this attribute is deliberately NOT emitted
|
|
263
269
|
* for them (emitting `true` unconditionally would count every producer-won
|
|
264
270
|
* resume as a recovery). The producer-begin ({@link HookResilientResume}) /
|
|
265
271
|
* consumer-materialized pairing is therefore no longer complete for atomic
|
|
@@ -270,10 +276,10 @@ export const HookResilientResumeMaterialized = SemanticConvention('workflow.hook
|
|
|
270
276
|
* Consumer-side signal (on the workflow execution span) of how a lazy hook
|
|
271
277
|
* resume initialized its replay state:
|
|
272
278
|
*
|
|
273
|
-
* - `hook_received_stream
|
|
279
|
+
* - `hook_received_stream`: the hoisted `hook_received` write returned a
|
|
274
280
|
* usable replay preload (run + complete event log), so the invocation
|
|
275
281
|
* skipped both the `run_started` write and the initial `events.list`.
|
|
276
|
-
* - `hook_received_fallback
|
|
282
|
+
* - `hook_received_fallback`: the hoisted write succeeded but returned no
|
|
277
283
|
* usable preload (a CBOR response from an older server, a World that
|
|
278
284
|
* ignored the opt-in, a bounded `hasMore` page, or a preload that failed
|
|
279
285
|
* validation); the invocation fell back to the `run_started` setup without
|
|
@@ -284,8 +290,8 @@ export const HookResilientResumeMaterialized = SemanticConvention('workflow.hook
|
|
|
284
290
|
*
|
|
285
291
|
* This is a latency/setup-path signal: it says which requests initialized
|
|
286
292
|
* the invocation, NOT that this consumer created the `hook_received` event
|
|
287
|
-
* (the hoisted write may equally have converged on the producer's
|
|
288
|
-
* ownership is not observable client-side; cf.
|
|
293
|
+
* (the hoisted write may equally have converged on the producer's, since
|
|
294
|
+
* claim ownership is not observable client-side; cf.
|
|
289
295
|
* {@link HookResilientResumeMaterialized}).
|
|
290
296
|
*/
|
|
291
297
|
export const HookResumeSetupSource = SemanticConvention('workflow.resume_setup_source');
|
|
@@ -299,7 +305,7 @@ export const StepResilientDispatchRecovered = SemanticConvention('workflow.step.
|
|
|
299
305
|
/**
|
|
300
306
|
* Consumer-side signal (on the workflow execution span) that this delivery
|
|
301
307
|
* materialized the `step_created` event from the queue message's `stepInput`
|
|
302
|
-
* because the producer's direct write had not landed
|
|
308
|
+
* because the producer's direct write had not landed, which completes the
|
|
303
309
|
* recovery path {@link StepResilientDispatchRecovered} began.
|
|
304
310
|
*/
|
|
305
311
|
export const StepResilientDispatchMaterialized = SemanticConvention('workflow.step.resilient_dispatch_materialized');
|
|
@@ -309,7 +315,7 @@ export const StepResilientDispatchMaterialized = SemanticConvention('workflow.st
|
|
|
309
315
|
// hook resume, and only there: one resumption produces exactly one sample, so
|
|
310
316
|
// a later step in the same invocation, a retry, or a redelivery never
|
|
311
317
|
// re-reports it. The phases are non-overlapping and sum exactly to
|
|
312
|
-
// {@link ResumeTotalMs}
|
|
318
|
+
// {@link ResumeTotalMs}; see runtime/resume-latency.ts for the boundary
|
|
313
319
|
// definitions and the emission gate.
|
|
314
320
|
//
|
|
315
321
|
// Deliberately carries no `resumeId`, run ID, or token: the metric is meant to
|
|
@@ -436,4 +442,4 @@ export const RpcMethod = SemanticConvention('rpc.method');
|
|
|
436
442
|
export const ErrorRetryable = SemanticConvention('error.retryable');
|
|
437
443
|
/** Error category (workflow-specific: fatal, retryable, transient) */
|
|
438
444
|
export const ErrorCategory = SemanticConvention('error.category');
|
|
439
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBSUg7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUksR0FBRyxLQUFlO0lBQy9DLE9BQU8sQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsc0JBQXNCO0FBRXRCLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUVqRCxvQkFBb0IsQ0FBQyxDQUFDO0FBRXhCLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELHFCQUFxQixDQUFDLENBQUM7QUFFekIscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtC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Q0FBQyxNQUFNLGdDQUFnQyxHQUFHLGtCQUFrQixDQUNoRSw4Q0FBOEMsQ0FDL0MsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUM3RCwyQ0FBMkMsQ0FDNUMsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxrRUFBa0U7QUFFbEUsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUV0RSx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFTLFlBQVksQ0FBQyxDQUFDO0FBRWxFLG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQVMsYUFBYSxDQUFDLENBQUM7QUFFcEUsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBUyxZQUFZLENBQUMsQ0FBQztBQUVsRSxxREFBcUQ7QUFDckQsZ0ZBQWdGO0FBRWhGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQVUsaUJBQWlCLENBQUMsQ0FBQztBQUU3RSxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUU3QyxnQkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPcGVuVGVsZW1ldHJ5IHNlbWFudGljIGNvbnZlbnRpb25zIGZvciBWZXJjZWwgV29ya2Zsb3cgdGVsZW1ldHJ5LlxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN0YW5kYXJkaXplZCB0ZWxlbWV0cnkgYXR0cmlidXRlcyBmb2xsb3dpbmcgT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9uc1xuICogZm9yIGluc3RydW1lbnRpbmcgd29ya2Zsb3cgZXhlY3V0aW9uLCBzdGVwIHByb2Nlc3NpbmcsIGFuZCByZWxhdGVkIG9wZXJhdGlvbnMuIEVhY2ggZXhwb3J0ZWQgZnVuY3Rpb25cbiAqIGNyZWF0ZXMgYSBwcm9wZXJseSBmb3JtYXR0ZWQgYXR0cmlidXRlIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHdpdGggT3BlblRlbGVtZXRyeSBzcGFucy5cbiAqXG4gKiBUaGUgc2VtYW50aWMgY29udmVudGlvbnMgYXJlIG9yZ2FuaXplZCBpbnRvIHNldmVyYWwgY2F0ZWdvcmllczpcbiAqIC0gKipXb3JrZmxvdyBhdHRyaWJ1dGVzKio6IFRyYWNrIHdvcmtmbG93IGxpZmVjeWNsZSwgc3RhdHVzLCBhbmQgbWV0YWRhdGFcbiAqIC0gKipTdGVwIGF0dHJpYnV0ZXMqKjogTW9uaXRvciBpbmRpdmlkdWFsIHN0ZXAgZXhlY3V0aW9uLCByZXRyaWVzLCBhbmQgcmVzdWx0c1xuICogLSAqKlF1ZXVlIGF0dHJpYnV0ZXMqKjogSW5zdHJ1bWVudCBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnNcbiAqIC0gKipEZXBsb3ltZW50IGF0dHJpYnV0ZXMqKjogQ2FwdHVyZSBkZXBsb3ltZW50IGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gKlxuICogQWxsIGF0dHJpYnV0ZSBmdW5jdGlvbnMgYXJlIHR5cGUtc2FmZSBhbmQgbGV2ZXJhZ2UgZXhpc3RpbmcgYmFja2VuZCB0eXBlcyB0byBlbnN1cmVcbiAqIGNvbnNpc3RlbmN5IGJldHdlZW4gdGVsZW1ldHJ5IGRhdGEgYW5kIGFjdHVhbCBzeXN0ZW0gc3RhdGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCAqIGFzIEF0dHJpYnV0ZSBmcm9tICcuL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG4gKlxuICogLy8gU2V0IHdvcmtmbG93IGF0dHJpYnV0ZXMgb24gYSBzcGFuXG4gKiBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICogICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dOYW1lKCdteS13b3JrZmxvdycpLFxuICogICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dPcGVyYXRpb24oJ3N0YXJ0JyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd1J1blN0YXR1cygncnVubmluZycpLFxuICogfSk7XG4gKlxuICogLy8gU2V0IHN0ZXAgYXR0cmlidXRlc1xuICogc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAqICAgLi4uQXR0cmlidXRlLlN0ZXBOYW1lKCdwcm9jZXNzLWRhdGEnKSxcbiAqICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2NvbXBsZXRlZCcpLFxuICogICAuLi5BdHRyaWJ1dGUuU3RlcEF0dGVtcHQoMSksXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvfSBPcGVuVGVsZW1ldHJ5IFNlbWFudGljIENvbnZlbnRpb25zXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VJZCwgU3RlcCwgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZW1hbnRpYyBjb252ZW50aW9uIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBhdHRyaWJ1dGUgb2JqZWN0LlxuICogQHBhcmFtIG5hbWUgLSBUaGUgYXR0cmlidXRlIG5hbWUgZm9sbG93aW5nIE9wZW5UZWxlbWV0cnkgc2VtYW50aWMgY29udmVudGlvbnNcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gU2VtYW50aWNDb252ZW50aW9uPFQ+KC4uLm5hbWVzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gKHZhbHVlOiBUKSA9PlxuICAgIE9iamVjdC5mcm9tRW50cmllcyhuYW1lcy5tYXAoKG5hbWUpID0+IFtuYW1lLCB2YWx1ZV0gYXMgY29uc3QpKTtcbn1cblxuLy8gV29ya2Zsb3cgYXR0cmlidXRlc1xuXG4vKiogVGhlIG5hbWUgb2YgdGhlIHdvcmtmbG93IGJlaW5nIGV4ZWN1dGVkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dOYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93Lm5hbWUnKTtcblxuLyoqIFRoZSBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSB3b3JrZmxvdyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93T3BlcmF0aW9uID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnc3RhcnQnIHwgJ2V4ZWN1dGUnIHwgJ2V4ZWN1dGVfdjInIHwgJ3J1bidcbj4oJ3dvcmtmbG93Lm9wZXJhdGlvbicpO1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgc3BlY2lmaWMgd29ya2Zsb3cgcnVuIGluc3RhbmNlICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSdW5JZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCd3b3JrZmxvdy5ydW4uaWQnKTtcblxuLyoqIEN1cnJlbnQgc3RhdHVzIG9mIHRoZSB3b3JrZmxvdyBydW4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1J1blN0YXR1cyA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgV29ya2Zsb3dSdW5bJ3N0YXR1cyddIHwgJ3dvcmtmbG93X3N1c3BlbmRlZCdcbj4oJ3dvcmtmbG93LnJ1bi5zdGF0dXMnKTtcblxuLyoqIFRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBleGVjdXRpb24gc3RhcnRlZCAoVW5peCB0aW1lc3RhbXApICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdGFydGVkQXQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0YXJ0ZWRfYXQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIGV2ZW50cyBwcm9jZXNzZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXZlbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5jb3VudCdcbik7XG5cbi8qKiBXaGV0aGVyIHdvcmtmbG93IGV4ZWN1dGlvbiBzdGFydHMgd2l0aCByZXBsYXkgb3IgcmVzdW1lcyBhIHJldGFpbmVkIFZNICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFeGVjdXRpb25Nb2RlID0gU2VtYW50aWNDb252ZW50aW9uPCdyZXBsYXknIHwgJ3JldGFpbmVkJz4oXG4gICd3b3JrZmxvdy5leGVjdXRpb24ubW9kZSdcbik7XG5cbi8qKlxuICogRXZlbnRzIHRoZSByZXBsYXkgd2Fsa2VkIHBhc3QgdGhhdCBubyBjb25zdW1lciBjbGFpbWVkLCBzdGlsbCBoZWxkIHdoZW4gdGhlXG4gKiByZXBsYXkgc3RvcHBlZC5cbiAqXG4gKiBBIG5vbi16ZXJvIGNvdW50IG9uIGEgc3VzcGVuc2lvbiBpcyBvcmRpbmFyeTogYW4gb3V0LW9mLWJhbmQgZGVsaXZlcnkgdGhhdFxuICogbGFuZGVkIGFoZWFkIG9mIHRoZSBjb2RlIHRoYXQgcmVhZHMgaXQgd2FpdHMgZm9yIHRoZSByZXBsYXkgdGhhdCBnZXRzIHRoZXJlLlxuICogRnJvbSBpbnNpZGUgb25lIHJlcGxheSB0aGF0IGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gZXZlbnQgbm8gcmVwbGF5IHdpbGxcbiAqIGV2ZXIgY2xhaW0sIGJlY2F1c2UgdGhlIHR3byBkaWZmZXIgb25seSBpbiB3aGF0IHRoZSBuZXh0IHJlcGxheSBkb2VzLiBTbyB0aGVcbiAqIGNvdW50IGdvZXMgb24gdGhlIHNwYW4gaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBydW4sIGFuZCB0aGUgY2FzZSB3b3J0aCBhY3RpbmdcbiAqIG9uIGlzIGEgcXVlcnkgYWNyb3NzIGEgcnVuJ3Mgc3BhbnM6IHRoZSBzYW1lXG4gKiB7QGxpbmsgV29ya2Zsb3dQYXJrZWRFdmVudElkfSBoZWxkIG9uIHN1c3BlbnNpb24gYWZ0ZXIgc3VzcGVuc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UGFya2VkRXZlbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5wYXJrZWQuY291bnQnXG4pO1xuXG4vKiogT2xkZXN0IGV2ZW50IHN0aWxsIGhlbGQgdW5jbGFpbWVkIHdoZW4gdGhlIHJlcGxheSBzdG9wcGVkLiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UGFya2VkRXZlbnRJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5ldmVudF9pZCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSBvbGRlc3QgZXZlbnQgc3RpbGwgaGVsZCB1bmNsYWltZWQgd2hlbiB0aGUgcmVwbGF5IHN0b3BwZWQuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5wYXJrZWQuZXZlbnRfdHlwZSdcbik7XG5cbi8qKiBOdW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgd29ya2Zsb3cgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0FyZ3VtZW50c0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5hcmd1bWVudHMuY291bnQnXG4pO1xuXG4vKiogVHlwZSBvZiB0aGUgd29ya2Zsb3cgcmVzdWx0ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSZXN1bHRUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5yZXN1bHQudHlwZSdcbik7XG5cbi8qKiBXaGV0aGVyIHRyYWNlIGNvbnRleHQgd2FzIHByb3BhZ2F0ZWQgdG8gdGhpcyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1RyYWNlUHJvcGFnYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnRyYWNlLnByb3BhZ2F0ZWQnXG4pO1xuXG4vLyBRdWlja0pTIFZNIGVuZ2luZSBhdHRyaWJ1dGVzXG5cbi8qKiBUaGUgVk0gZW5naW5lIGV4ZWN1dGluZyB0aGUgd29ya2Zsb3cgZnVuY3Rpb24gZm9yIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Vm0gPSBTZW1hbnRpY0NvbnZlbnRpb248J25vZGUnIHwgJ3F1aWNranMnPignd29ya2Zsb3cudm0nKTtcblxuLyoqIE91dGNvbWUgb2YgYSBRdWlja0pTIFZNIHdvcmtmbG93IGludm9jYXRpb24gKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTT3V0Y29tZSA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ2NvbXBsZXRlZCcgfCAnc3VzcGVuZGVkJyB8ICdmYWlsZWQnXG4+KCd3b3JrZmxvdy52bS5vdXRjb21lJyk7XG5cbi8qKiBXaGV0aGVyIHByZWxvYWRlZCBldmVudHMgZnJvbSBgZXZlbnRzLmNyZWF0ZSgncnVuX3N0YXJ0ZWQnKWAgd2VyZSB1c2VkICovXG5leHBvcnQgY29uc3QgUXVpY2tKU0V2ZW50c1ByZWxvYWRlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnZtLmV2ZW50cy5wcmVsb2FkZWQnXG4pO1xuXG4vKiogVG90YWwgbnVtYmVyIG9mIGV2ZW50cyBmZXRjaGVkIGZyb20gdGhlIHdvcmxkIGZvciB0aGlzIGludm9jYXRpb24gKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTRXZlbnRzRmV0Y2hlZENvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy52bS5ldmVudHMuZmV0Y2hlZF9jb3VudCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgcGFnZXMgcmVxdWlyZWQgdG8gZmV0Y2ggYWxsIGV2ZW50cyAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNFdmVudHNGZXRjaGVkUGFnZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnZtLmV2ZW50cy5mZXRjaGVkX3BhZ2VzJ1xuKTtcblxuLyoqIE51bWJlciBvZiBwZW5kaW5nIFZNIG9wZXJhdGlvbnMgY2FwdHVyZWQgYXQgc3VzcGVuc2lvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNQZW5kaW5nT3BzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnZtLnBlbmRpbmdfb3BzX2NvdW50J1xuKTtcblxuLyoqIE51bWJlciBvZiBzdGVwcyBleGVjdXRlZCBpbmxpbmUgKGxpdmUtVk0gY29udGludWF0aW9uKSB0aGlzIGludm9jYXRpb24gKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTSW5saW5lU3RlcHMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3F1aWNranMuaW5saW5lX3N0ZXBzJ1xuKTtcblxuLyoqIEFjdGl2ZSB0cmFjZS1jb3JyZWxhdGlvbiBtb2RlIGZvciB0aGlzIGludm9jYXRpb24gKGxpbmtlZCBvciBjb250aW51b3VzKSAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHJhY2VNb2RlID0gU2VtYW50aWNDb252ZW50aW9uPCdsaW5rZWQnIHwgJ2NvbnRpbnVvdXMnPihcbiAgJ3dvcmtmbG93LnRyYWNlLm1vZGUnXG4pO1xuXG4vKiogV2hldGhlciB0aGlzIHdvcmtmbG93IGludm9jYXRpb24gaXMgdXNpbmcgdGhlIHR1cmJvIGZpcnN0LWRlbGl2ZXJ5IHBhdGggKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1R1cmJvID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCd3b3JrZmxvdy50dXJibycpO1xuXG4vKiogTmFtZSBvZiB0aGUgZXJyb3IgdGhhdCBjYXVzZWQgd29ya2Zsb3cgZmFpbHVyZSAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXJyb3JOYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5lcnJvci5uYW1lJ1xuKTtcblxuLyoqIEVycm9yIG1lc3NhZ2Ugd2hlbiB3b3JrZmxvdyBmYWlscyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXJyb3JNZXNzYWdlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5lcnJvci5tZXNzYWdlJ1xuKTtcblxuLyoqIEVycm9yIGNsYXNzaWZpY2F0aW9uIGNvZGUgKFVTRVJfRVJST1IsIFJVTlRJTUVfRVJST1IsIGV0Yy4pICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvckNvZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLmNvZGUnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHN0ZXBzIGNyZWF0ZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3RlcHNDcmVhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdGVwcy5jcmVhdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiBob29rcyBjcmVhdGVkIGR1cmluZyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0hvb2tzQ3JlYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuaG9va3MuY3JlYXRlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygd2FpdHMgY3JlYXRlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dXYWl0c0NyZWF0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LndhaXRzLmNyZWF0ZWQnXG4pO1xuXG4vKipcbiAqIE51bWJlciBvZiBpbmxpbmUtb3duZWQgc3RlcHMgdGhpcyBpbnZvY2F0aW9uIHJlLWV4ZWN1dGVkIGJlY2F1c2UgaXQgaXMgYVxuICogcmVkZWxpdmVyeSBvZiB0aGVpciBvd25pbmcgcXVldWUgbWVzc2FnZSAoY3Jhc2ggcmVjb3ZlcnkgZm9yIGlubGluZVxuICogc3RlcHMg4oCUIHNlZSB0aGUgaW5saW5lIHN0ZXAgb3duZXJzaGlwIGNoYW5nZWxvZywgd29ya2Zsb3cjMjc4MCkuXG4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd093bmVkUmVjb3ZlcnlTdGVwcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuaW5saW5lX293bmVyc2hpcC5vd25lZF9yZWNvdmVyeV9zdGVwcydcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIHBlbmRpbmcgc3RlcHMgZm9yIHdoaWNoIHRoaXMgcmVwbGF5IHN1cHByZXNzZWQgdGhlIGltbWVkaWF0ZVxuICogcmVxdWV1ZSAoYW5vdGhlciBpbnZvY2F0aW9uIGlubGluZS1vd25zIHRoZW0gdW5kZXIgYSBsaXZlIGxlYXNlKSBhbmRcbiAqIGVuc3VyZWQgYSBkZWxheWVkIGJhY2tzdG9wIHdha2UgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QmFja3N0b3BXYWtlc0FybWVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5pbmxpbmVfb3duZXJzaGlwLmJhY2tzdG9wX3dha2VzX2FybWVkJ1xuKTtcblxuLy8gUm91dGUgYXR0cmlidXRlc1xuXG4vKiogVGhlIHdvcmtmbG93IHJ1bnRpbWUgcm91dGUgYmVpbmcgaGFuZGxlZCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPCdmbG93Jz4oXG4gICd3b3JrZmxvdy5yb3V0ZS50eXBlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhpcyByb3V0ZSBpbnZvY2F0aW9uIHJldXNlZCBhbiBhbHJlYWR5LWNyZWF0ZWQgcmVxdWVzdCBoYW5kbGVyICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUhhbmRsZXJDYWNoZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5oYW5kbGVyX2NhY2hlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgdGltZXMgdGhpcyBpbi1tZW1vcnkgcm91dGUgaGFuZGxlciBoYXMgYmVlbiBpbnZva2VkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUludm9jYXRpb25Db3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucm91dGUuaW52b2NhdGlvbl9jb3VudCdcbik7XG5cbi8qKiBUaW1lIHNpbmNlIHRoaXMgcm91dGUgZW50cnlwb2ludCB3YXMgY29uc3RydWN0ZWQsIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVFbnRyeXBvaW50QWdlTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJvdXRlLmVudHJ5cG9pbnRfYWdlX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgZXZhbHVhdGluZyB0aGUgZ2VuZXJhdGVkIHJvdXRlIG1vZHVsZSBib2R5IGJlZm9yZSBjcmVhdGluZyB0aGUgZW50cnlwb2ludCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVNb2R1bGVCb2R5SW5pdE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5tb2R1bGVfYm9keV9pbml0X21zJ1xuKTtcblxuLyoqXG4gKiBDb21wdXRlIGluc3RhbmNlIGhhbmRsaW5nIHRoaXMgcm91dGUg4oCUIHRoZSBzeW50aGVzaXplZCBgQ09NUFVURV9JTlNUQU5DRV9JRGAuXG4gKiBVc2VzIE9URUwgYGZhYXMuaW5zdGFuY2VgIChleGVjdXRpb24tZW52aXJvbm1lbnQgaWQsIHJldXNlZCBhY3Jvc3NcbiAqIGludm9jYXRpb25zIHRvIHRoZSBzYW1lIGZ1bmN0aW9uKTpcbiAqIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvYXR0cmlidXRlcy1yZWdpc3RyeS9mYWFzL1xuICovXG5leHBvcnQgY29uc3QgRmFhc0luc3RhbmNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2ZhYXMuaW5zdGFuY2UnKTtcblxuLy8gU3RlcCBhdHRyaWJ1dGVzXG5cbi8qKiBOYW1lIG9mIHRoZSBzdGVwIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkICovXG5leHBvcnQgY29uc3QgU3RlcE5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5uYW1lJyk7XG5cbi8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHN0ZXAgaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBTdGVwSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5pZCcpO1xuXG4vKiogQ3VycmVudCBhdHRlbXB0IG51bWJlciBmb3Igc3RlcCBleGVjdXRpb24gKHN0YXJ0cyBhdCAxKSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBBdHRlbXB0ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAuYXR0ZW1wdCcpO1xuXG4vKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHN0ZXAgKi9cbmV4cG9ydCBjb25zdCBTdGVwU3RhdHVzID0gU2VtYW50aWNDb252ZW50aW9uPFN0ZXBbJ3N0YXR1cyddPignc3RlcC5zdGF0dXMnKTtcblxuLyoqIE1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgYWxsb3dlZCBmb3IgdGhpcyBzdGVwICovXG5leHBvcnQgY29uc3QgU3RlcE1heFJldHJpZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5tYXhfcmV0cmllcycpO1xuXG4vKiogV2hldGhlciB0cmFjZSBjb250ZXh0IHdhcyBwcm9wYWdhdGVkIHRvIHRoaXMgc3RlcCBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBTdGVwVHJhY2VQcm9wYWdhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnc3RlcC50cmFjZS5wcm9wYWdhdGVkJ1xuKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgdGltZS10by1maXJzdC1zdGVwIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzOiBydW4gY3JlYXRpb24g4oaSXG4gKiB0aGlzIHN0ZXAncyBib2R5IGJlZ2lubmluZyB0byBleGVjdXRlLCBtaW51cyBwcmUtc3RlcCBob29rLWNyZWF0aW9uIHRpbWUuXG4gKiBPbmx5IHByZXNlbnQgb24gdGhlIHJ1bidzIGZpcnN0IHN0ZXAgZXhlY3V0aW9uIHdoZW4gaXQgcXVhbGlmaWVkIGZvclxuICogbWVhc3VyZW1lbnQgKHNlZSBydW50aW1lL3N0ZXAtbGF0ZW5jeS50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwVHRmc01zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAudHRmc19tcycpO1xuXG4vKipcbiAqIENsaWVudC1tZWFzdXJlZCBzdGVwLXRvLXN0ZXAgb3ZlcmhlYWQgaW4gbWlsbGlzZWNvbmRzOiB0aGUgcHJldmlvdXMgc3RlcCdzXG4gKiB0ZXJtaW5hbCBldmVudCDihpIgdGhpcyBzdGVwJ3MgYm9keSBiZWdpbm5pbmcgdG8gZXhlY3V0ZS4gT25seSBwcmVzZW50IHdoZW5cbiAqIHRoZSB0d28gc3RlcHMgcmFuIGJhY2stdG8tYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTdHNvTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5zdHNvX21zJyk7XG5cbi8qKlxuICogQ2xpZW50LW1lYXN1cmVkIHJ1bl9zdGFydGVkLXRvLWZpcnN0LXN0ZXAgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHM6IHRoZVxuICogYHJ1bl9zdGFydGVkYCByZXNwb25zZSBsYW5kaW5nIChvciwgdW5kZXIgdHVyYm8sIHRoZSBsb2NhbCBydW4gc3ludGhlc2lzXG4gKiBpbnN0YW50KSDihpIgdGhpcyBzdGVwJ3Mgc3RhcnQgUE9TVCBiZWluZyBpc3N1ZWQuIEEgc3ViLXdpbmRvdyBvZiB0dGZzIHRoYXRcbiAqIGlzb2xhdGVzIHJlcGxheSBvdmVyaGVhZCBmcm9tIHRoZSBydW4tY3JlYXRpb24gcXVldWUgaG9wLiBPbmx5IHByZXNlbnQgb25cbiAqIHRoZSBydW4ncyBmaXJzdCBzdGVwIGV4ZWN1dGlvbiB3aGVuIGl0IHF1YWxpZmllZCBmb3IgbWVhc3VyZW1lbnQgKHNlZVxuICogcnVudGltZS9zdGVwLWxhdGVuY3kudHMpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcFJzZnNNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLnJzZnNfbXMnKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgc3luY2hyb25vdXMgd29ya2Zsb3ctZnVuY3Rpb24gcmVwbGF5IGR1cmF0aW9uIGluXG4gKiBtaWxsaXNlY29uZHMsIGV4Y2x1ZGluZyBhd2FpdGVkIG5ldHdvcmsgSS9PLCBvZiBvbmx5IHRoZSBGSU5BTCByZXBsYXkgcGFzc1xuICogd2l0aGluIHRoZSByc2ZzIHdpbmRvdyDigJQgdGhlIHBhc3MgdGhhdCByZWFjaGVkIGFuZCBzY2hlZHVsZWQgdGhlIGZpcnN0XG4gKiBzdGVwLiBOb3QgYWNjdW11bGF0ZWQgYWNyb3NzIGVhcmxpZXIgcHJlLWZpcnN0LXN0ZXAgcGFzc2VzIChlLmcuIGFcbiAqIHdvcmtmbG93LWJvZHkgYHNldEF0dHJpYnV0ZXMoKWAgZGV0b3VyIHJlcGxheXMgbW9yZSB0aGFuIG9uY2UsIGFuZCBhXG4gKiByZWRlbGl2ZXJ5IG9taXRzIGVhcmxpZXIgaW52b2NhdGlvbnMnIHdvcmsgZW50aXJlbHkpLCBzbyB0aGlzIG11c3Qgbm90IGJlXG4gKiByZWFkIGFzIFwidGhlIHJlcGxheSBwb3J0aW9uIG9mIHJzZnNcIiDigJQgc3RlcC5yc2ZzX21zIGNvdmVycyB0aGUgd2hvbGVcbiAqIHdpbmRvdy4gT25seSBwcmVzZW50IGFsb25nc2lkZSBzdGVwLnJzZnNfbXMgYW5kIG9ubHkgZm9yIHRoZSBydW4ncyBmaXJzdFxuICogc3RlcCAoc2VlIHJ1bnRpbWUvc3RlcC1sYXRlbmN5LnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBGaW5hbFNjaGVkdWxpbmdSZXBsYXlNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnc3RlcC5maW5hbF9zY2hlZHVsaW5nX3JlcGxheV9tcydcbik7XG5cbi8qKlxuICogUnVudGltZSBzdGFydHVwLWxhdGVuY3kgb3B0aW1pemF0aW9ucyBhY3RpdmUgZm9yIHRoZSB0dGZzL3N0c28gbWVhc3VyZW1lbnRcbiAqIChlLmcuICd0dXJibycsICdsYXp5U3RlcFN0YXJ0JywgJ29wdGltaXN0aWNTdGFydCcpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcExhdGVuY3lPcHRpbWl6YXRpb25zID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZ1tdPihcbiAgJ3N0ZXAubGF0ZW5jeV9vcHRpbWl6YXRpb25zJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhlIHN0ZXAgd2FzIHNraXBwZWQgZHVyaW5nIGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTa2lwcGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCdzdGVwLnNraXBwZWQnKTtcblxuLyoqIFJlYXNvbiB3aHkgdGhlIHN0ZXAgd2FzIHNraXBwZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwU2tpcFJlYXNvbiA9XG4gIFNlbWFudGljQ29udmVudGlvbjxTdGVwWydzdGF0dXMnXT4oJ3N0ZXAuc2tpcF9yZWFzb24nKTtcblxuLyoqIE51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBzdGVwIGZ1bmN0aW9uICovXG5leHBvcnQgY29uc3QgU3RlcEFyZ3VtZW50c0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLmFyZ3VtZW50cy5jb3VudCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSBzdGVwIHJlc3VsdCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXN1bHRUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3N0ZXAucmVzdWx0LnR5cGUnKTtcblxuLyoqIE5hbWUgb2YgdGhlIGVycm9yIHRoYXQgY2F1c2VkIHN0ZXAgZmFpbHVyZSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBFcnJvck5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5lcnJvci5uYW1lJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIHdoZW4gc3RlcCBmYWlscyAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBFcnJvck1lc3NhZ2UgPVxuICBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5lcnJvci5tZXNzYWdlJyk7XG5cbi8qKiBXaGV0aGVyIHRoZSBzdGVwIGZhaWxlZCB3aXRoIGEgZmF0YWwgZXJyb3IgKG5vIHJldHJpZXMpICovXG5leHBvcnQgY29uc3QgU3RlcEZhdGFsRXJyb3IgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3N0ZXAuZmF0YWxfZXJyb3InKTtcblxuLyoqIFdoZXRoZXIgYWxsIHJldHJ5IGF0dGVtcHRzIGhhdmUgYmVlbiBleGhhdXN0ZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlFeGhhdXN0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnJldHJ5LmV4aGF1c3RlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBuZXh0IHJldHJ5IGF0dGVtcHQgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlUaW1lb3V0U2Vjb25kcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnc3RlcC5yZXRyeS50aW1lb3V0X3NlY29uZHMnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgc3RlcCB3aWxsIGJlIHJldHJpZWQgYWZ0ZXIgdGhpcyBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgU3RlcFJldHJ5V2lsbFJldHJ5ID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnc3RlcC5yZXRyeS53aWxsX3JldHJ5J1xuKTtcblxuLy8gUXVldWUvTWVzc2FnaW5nIGF0dHJpYnV0ZXMgLSBTdGFuZGFyZCBPVEVMIG1lc3NhZ2luZyBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L21lc3NhZ2luZy9tZXNzYWdpbmctc3BhbnMvXG5cbi8qKiBNZXNzYWdpbmcgc3lzdGVtIGlkZW50aWZpZXIgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5zeXN0ZW0pICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nU3lzdGVtID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ21lc3NhZ2luZy5zeXN0ZW0nKTtcblxuLyoqIERlc3RpbmF0aW9uIG5hbWUvcXVldWUgbmFtZSAoc3RhbmRhcmQgT1RFTDogbWVzc2FnaW5nLmRlc3RpbmF0aW9uLm5hbWUpICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nRGVzdGluYXRpb25OYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICdtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZSdcbik7XG5cbi8qKiBUaGUgbWVzc2FnZSBpZCBiZWluZyBoYW5kbGVkIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcubWVzc2FnZS5pZCkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdNZXNzYWdlSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248TWVzc2FnZUlkPihcbiAgJ21lc3NhZ2luZy5tZXNzYWdlLmlkJ1xuKTtcblxuLyoqIE9wZXJhdGlvbiB0eXBlIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUpICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nT3BlcmF0aW9uVHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ3B1Ymxpc2gnIHwgJ3JlY2VpdmUnIHwgJ3Byb2Nlc3MnXG4+KCdtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUnKTtcblxuLyoqIFRpbWUgdGFrZW4gdG8gZW5xdWV1ZSB0aGUgbWVzc2FnZSBpbiBtaWxsaXNlY29uZHMgKHdvcmtmbG93LXNwZWNpZmljKSAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlT3ZlcmhlYWRNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUub3ZlcmhlYWRfbXMnXG4pO1xuXG4vLyBEZXBsb3ltZW50IGF0dHJpYnV0ZXNcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZGVwbG95bWVudCBlbnZpcm9ubWVudCAqL1xuZXhwb3J0IGNvbnN0IERlcGxveW1lbnRJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdkZXBsb3ltZW50LmlkJyk7XG5cbi8qKiBUaGUgZGVwbG95bWVudCBhIHJ1biBpcyBwaW5uZWQgdG8sIHNldCBvbmx5IG9uIGEgbWlzcm91dGVkIGRlbGl2ZXJ5LiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuUGlubmVkRGVwbG95bWVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5kZXBsb3ltZW50LnBpbm5lZF9pZCdcbik7XG5cbi8qKiBSZS1yb3V0ZSBhdHRlbXB0cyBmb3IgdGhpcyBtaXNyb3V0ZWQgZGVsaXZlcnksIGluY2x1ZGluZyB0aGlzIG9uZS4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0RlcGxveW1lbnRNaXNtYXRjaFJldHJ5Q291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmRlcGxveW1lbnRfbWlzbWF0Y2gucmV0cnlfY291bnQnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgbWlzcm91dGVkIGRlbGl2ZXJ5IHdhcyByZS1yb3V0ZWQgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBydW4uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dEZXBsb3ltZW50TWlzbWF0Y2hSZWNvdmVyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5kZXBsb3ltZW50X21pc21hdGNoLnJlY292ZXJlZCdcbik7XG5cbi8vIEhvb2sgYXR0cmlidXRlc1xuXG4vKiogVG9rZW4gaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBob29rICovXG5leHBvcnQgY29uc3QgSG9va1Rva2VuID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93Lmhvb2sudG9rZW4nKTtcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIGhvb2sgaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBIb29rSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cuaG9vay5pZCcpO1xuXG4vKiogV2hldGhlciBhIGhvb2sgd2FzIGZvdW5kIGJ5IGl0cyB0b2tlbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tGb3VuZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignd29ya2Zsb3cuaG9vay5mb3VuZCcpO1xuXG4vKipcbiAqIFByb2R1Y2VyLXNpZGUgc2lnbmFsIChvbiB0aGUgYGhvb2sucmVzdW1lYCBzcGFuKSB0aGF0IHRoZSBkaXJlY3RcbiAqIGBob29rX3JlY2VpdmVkYCB3cml0ZSBmYWlsZWQgdHJhbnNpZW50bHkgYnV0IHRoZSBxdWV1ZSBkaXNwYXRjaCBzdWNjZWVkZWQsIHNvXG4gKiB0aGUgcmVzdW1lIGlzIHJlY292ZXJlZCB2aWEgdGhlIGNvbnN1bWVyJ3MgcmUtZW5zdXJlLiBDb3JyZXNwb25kcyB0b1xuICogYFJlc3VtZWRIb29rLnJlc2lsaWVudFJlc3VtZSA9PT0gdHJ1ZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBIb29rUmVzaWxpZW50UmVzdW1lID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cuaG9vay5yZXNpbGllbnRfcmVzdW1lJ1xuKTtcblxuLyoqXG4gKiBDb25zdW1lci1zaWRlIHNpZ25hbCAob24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSB0aGF0IHRoaXMgcmVwbGF5XG4gKiBtYXRlcmlhbGl6ZWQgdGhlIGBob29rX3JlY2VpdmVkYCBldmVudCBmcm9tIHRoZSBxdWV1ZSBtZXNzYWdlJ3MgYGhvb2tJbnB1dGBcbiAqIGJlY2F1c2UgdGhlIHByb2R1Y2VyJ3MgZGlyZWN0IHdyaXRlIGhhZCBub3QgbGFuZGVkIOKAlCB0aGUgY29tcGxldGlvbiBvZiB0aGVcbiAqIHJlY292ZXJ5IHBhdGgge0BsaW5rIEhvb2tSZXNpbGllbnRSZXN1bWV9IGJlZ2FuLlxuICpcbiAqIExlZ2FjeSAvIG5vbi1hdG9taWMgcmUtZW5zdXJlIHNpZ25hbCBvbmx5LiBBdG9taWMgbGF6eSByZXN1bWVzXG4gKiAocmVzdW1lSWQgKyBkaWdlc3QpIGdvIHRocm91Z2ggdGhlIGhvaXN0ZWQgcHJlbG9hZCB3cml0ZSBpbnN0ZWFkLCB3aG9zZVxuICogcmVzcG9uc2UgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgcHJvZHVjZXIgb3IgdGhlIGNvbnN1bWVyIHdvbiB0aGVcbiAqIGAocnVuSWQsIHJlc3VtZUlkKWAgY2xhaW0g4oCUIHNvIHRoaXMgYXR0cmlidXRlIGlzIGRlbGliZXJhdGVseSBOT1QgZW1pdHRlZFxuICogZm9yIHRoZW0gKGVtaXR0aW5nIGB0cnVlYCB1bmNvbmRpdGlvbmFsbHkgd291bGQgY291bnQgZXZlcnkgcHJvZHVjZXItd29uXG4gKiByZXN1bWUgYXMgYSByZWNvdmVyeSkuIFRoZSBwcm9kdWNlci1iZWdpbiAoe0BsaW5rIEhvb2tSZXNpbGllbnRSZXN1bWV9KSAvXG4gKiBjb25zdW1lci1tYXRlcmlhbGl6ZWQgcGFpcmluZyBpcyB0aGVyZWZvcmUgbm8gbG9uZ2VyIGNvbXBsZXRlIGZvciBhdG9taWNcbiAqIGxhenkgcmVzdW1wdGlvbnM7IHVzZSB7QGxpbmsgSG9va1Jlc3VtZVNldHVwU291cmNlfSB0byBvYnNlcnZlIHRoYXQgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tSZXNpbGllbnRSZXN1bWVNYXRlcmlhbGl6ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5ob29rLnJlc2lsaWVudF9yZXN1bWVfbWF0ZXJpYWxpemVkJ1xuKTtcblxuLyoqXG4gKiBDb25zdW1lci1zaWRlIHNpZ25hbCAob24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSBvZiBob3cgYSBsYXp5IGhvb2tcbiAqIHJlc3VtZSBpbml0aWFsaXplZCBpdHMgcmVwbGF5IHN0YXRlOlxuICpcbiAqIC0gYGhvb2tfcmVjZWl2ZWRfc3RyZWFtYCDigJQgdGhlIGhvaXN0ZWQgYGhvb2tfcmVjZWl2ZWRgIHdyaXRlIHJldHVybmVkIGFcbiAqICAgdXNhYmxlIHJlcGxheSBwcmVsb2FkIChydW4gKyBjb21wbGV0ZSBldmVudCBsb2cpLCBzbyB0aGUgaW52b2NhdGlvblxuICogICBza2lwcGVkIGJvdGggdGhlIGBydW5fc3RhcnRlZGAgd3JpdGUgYW5kIHRoZSBpbml0aWFsIGBldmVudHMubGlzdGAuXG4gKiAtIGBob29rX3JlY2VpdmVkX2ZhbGxiYWNrYCDigJQgdGhlIGhvaXN0ZWQgd3JpdGUgc3VjY2VlZGVkIGJ1dCByZXR1cm5lZCBub1xuICogICB1c2FibGUgcHJlbG9hZCAoYSBDQk9SIHJlc3BvbnNlIGZyb20gYW4gb2xkZXIgc2VydmVyLCBhIFdvcmxkIHRoYXRcbiAqICAgaWdub3JlZCB0aGUgb3B0LWluLCBhIGJvdW5kZWQgYGhhc01vcmVgIHBhZ2UsIG9yIGEgcHJlbG9hZCB0aGF0IGZhaWxlZFxuICogICB2YWxpZGF0aW9uKTsgdGhlIGludm9jYXRpb24gZmVsbCBiYWNrIHRvIHRoZSBgcnVuX3N0YXJ0ZWRgIHNldHVwIHdpdGhvdXRcbiAqICAgcmUtcG9zdGluZyB0aGUgaG9vay5cbiAqXG4gKiBBYnNlbnQgb24gbGVnYWN5IGhvb2sgZGVsaXZlcmllcyAobm8gcmVzdW1lSWQvZGlnZXN0KSBhbmQgb24gZXZlcnkgb3RoZXJcbiAqIGRlbGl2ZXJ5IGtpbmQsIHdoaWNoIHRha2UgdGhlIGBydW5fc3RhcnRlZGAgc2V0dXAgdW5jb25kaXRpb25hbGx5LlxuICpcbiAqIFRoaXMgaXMgYSBsYXRlbmN5L3NldHVwLXBhdGggc2lnbmFsOiBpdCBzYXlzIHdoaWNoIHJlcXVlc3RzIGluaXRpYWxpemVkXG4gKiB0aGUgaW52b2NhdGlvbiwgTk9UIHRoYXQgdGhpcyBjb25zdW1lciBjcmVhdGVkIHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnRcbiAqICh0aGUgaG9pc3RlZCB3cml0ZSBtYXkgZXF1YWxseSBoYXZlIGNvbnZlcmdlZCBvbiB0aGUgcHJvZHVjZXIncyDigJQgY2xhaW1cbiAqIG93bmVyc2hpcCBpcyBub3Qgb2JzZXJ2YWJsZSBjbGllbnQtc2lkZTsgY2YuXG4gKiB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZU1hdGVyaWFsaXplZH0pLlxuICovXG5leHBvcnQgY29uc3QgSG9va1Jlc3VtZVNldHVwU291cmNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5yZXN1bWVfc2V0dXBfc291cmNlJ1xuKTtcblxuLyoqXG4gKiBQcm9kdWNlci1zaWRlIHNpZ25hbCAob24gdGhlIHN1c3BlbnNpb24gc3BhbikgY291bnRpbmcgc3RlcHMgd2hvc2UgZGlyZWN0XG4gKiBgc3RlcF9jcmVhdGVkYCB3cml0ZSBmYWlsZWQgdHJhbnNpZW50bHkgd2hpbGUgdGhlaXIgYHN0ZXBJbnB1dGAtY2FycnlpbmdcbiAqIHF1ZXVlIHB1Ymxpc2ggc3VjY2VlZGVkLCBzbyBzdGVwIGNyZWF0aW9uIGlzIHJlY292ZXJlZCB2aWEgdGhlIGNvbnN1bWVyJ3NcbiAqIHJlLWVuc3VyZS4gTWlycm9ycyB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZX0uXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwUmVzaWxpZW50RGlzcGF0Y2hSZWNvdmVyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0ZXAucmVzaWxpZW50X2Rpc3BhdGNoX3JlY292ZXJlZCdcbik7XG5cbi8qKlxuICogQ29uc3VtZXItc2lkZSBzaWduYWwgKG9uIHRoZSB3b3JrZmxvdyBleGVjdXRpb24gc3BhbikgdGhhdCB0aGlzIGRlbGl2ZXJ5XG4gKiBtYXRlcmlhbGl6ZWQgdGhlIGBzdGVwX2NyZWF0ZWRgIGV2ZW50IGZyb20gdGhlIHF1ZXVlIG1lc3NhZ2UncyBgc3RlcElucHV0YFxuICogYmVjYXVzZSB0aGUgcHJvZHVjZXIncyBkaXJlY3Qgd3JpdGUgaGFkIG5vdCBsYW5kZWQg4oCUIHRoZSBjb21wbGV0aW9uIG9mIHRoZVxuICogcmVjb3ZlcnkgcGF0aCB7QGxpbmsgU3RlcFJlc2lsaWVudERpc3BhdGNoUmVjb3ZlcmVkfSBiZWdhbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXNpbGllbnREaXNwYXRjaE1hdGVyaWFsaXplZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnN0ZXAucmVzaWxpZW50X2Rpc3BhdGNoX21hdGVyaWFsaXplZCdcbik7XG5cbi8vIEhvb2stdHJpZ2dlcmVkIHRpbWUtdG8tcmVzdW1lIChUVFIpIGF0dHJpYnV0ZXNcbi8vXG4vLyBTZXQgb24gdGhlIGBzdGVwLmV4ZWN1dGUgPG5hbWU+YCBzcGFuIG9mIHRoZSBGSVJTVCBkdXJhYmxlIHN0ZXAgZm9sbG93aW5nIGFcbi8vIGhvb2sgcmVzdW1lLCBhbmQgb25seSB0aGVyZTogb25lIHJlc3VtcHRpb24gcHJvZHVjZXMgZXhhY3RseSBvbmUgc2FtcGxlLCBzb1xuLy8gYSBsYXRlciBzdGVwIGluIHRoZSBzYW1lIGludm9jYXRpb24sIGEgcmV0cnksIG9yIGEgcmVkZWxpdmVyeSBuZXZlclxuLy8gcmUtcmVwb3J0cyBpdC4gVGhlIHBoYXNlcyBhcmUgbm9uLW92ZXJsYXBwaW5nIGFuZCBzdW0gZXhhY3RseSB0b1xuLy8ge0BsaW5rIFJlc3VtZVRvdGFsTXN9IOKAlCBzZWUgcnVudGltZS9yZXN1bWUtbGF0ZW5jeS50cyBmb3IgdGhlIGJvdW5kYXJ5XG4vLyBkZWZpbml0aW9ucyBhbmQgdGhlIGVtaXNzaW9uIGdhdGUuXG4vL1xuLy8gRGVsaWJlcmF0ZWx5IGNhcnJpZXMgbm8gYHJlc3VtZUlkYCwgcnVuIElELCBvciB0b2tlbjogdGhlIG1ldHJpYyBpcyBtZWFudCB0b1xuLy8gYmUgYWdncmVnYXRlZCBhY3Jvc3MgZXZlcnkgcmVzdW1lLCBhbmQgaGlnaC1jYXJkaW5hbGl0eSBrZXlzIHdvdWxkIG1ha2UgdGhhdFxuLy8gcHJvaGliaXRpdmUuIEV4aXN0aW5nIHRyYWNlLWNvcnJlbGF0aW9uIGZpZWxkcyBvbiB0aGUgc2FtZSBzcGFuIGFyZVxuLy8gdW5jaGFuZ2VkIGFuZCBzdGlsbCBpZGVudGlmeSB0aGUgaW5kaXZpZHVhbCBydW4uXG5cbi8qKiBUb3RhbCBUVFI6IGVudHJ5IGludG8gYHJlc3VtZUhvb2soKWAg4oaSIGltbWVkaWF0ZWx5IGJlZm9yZSBgc3RlcEZuLmFwcGx5KClgLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVRvdGFsTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS50b3RhbF9tcydcbik7XG5cbi8qKiBQaGFzZTogYHJlc3VtZUhvb2soKWAgZW50cnkg4oaSIHRoZSBxdWV1ZSBwdWJsaXNoIGJlaW5nIHJlcXVlc3RlZC4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVQcm9kdWNlclByZXBNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnByb2R1Y2VyX3ByZXBfbXMnXG4pO1xuXG4vKiogUGhhc2U6IHF1ZXVlIHB1Ymxpc2ggcmVxdWVzdGVkIOKGkiB0aGUgZmluYWwgY29uc3VtZXIncyBoYW5kbGVyIGJlaW5nIGVudGVyZWQuICovXG5leHBvcnQgY29uc3QgUmVzdW1lUXVldWVEZWxpdmVyeU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2UucXVldWVfZGVsaXZlcnlfbXMnXG4pO1xuXG4vKiogUGhhc2U6IGNvbnN1bWVyIGVudHJ5IOKGkiByZXBsYXkgYmVnaW5uaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVNldHVwTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5yZXN1bWVfc2V0dXBfbXMnXG4pO1xuXG4vKiogUGhhc2U6IHJlcGxheSBiZWdpbm5pbmcg4oaSIHRoZSBuZXh0IGR1cmFibGUgc3RlcCBiZWluZyBlbmNvdW50ZXJlZC4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVSZXBsYXlNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnJlcGxheV9tcydcbik7XG5cbi8qKiBQaGFzZTogc3RlcCBlbmNvdW50ZXJlZCDihpIgdGhlIGBzdGVwX3N0YXJ0ZWRgIHJlcXVlc3QgYmVnaW5uaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVN0ZXBEaXNwYXRjaE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2Uuc3RlcF9kaXNwYXRjaF9tcydcbik7XG5cbi8qKlxuICogUGhhc2U6IGBzdGVwX3N0YXJ0ZWRgIHJlcXVlc3QgYmVnaW5uaW5nIOKGkiBpdHMgcmVzcG9uc2UgcmV0dXJuaW5nLiBPbWl0dGVkXG4gKiB1bmRlciBvcHRpbWlzdGljIGlubGluZSBzdGFydCwgd2hlcmUgdGhlIGNsYWltIGlzIG5vdCBhd2FpdGVkIGJlZm9yZSB0aGVcbiAqIGJvZHkgcnVucyBhbmQgdGhlcmVmb3JlIGhhcyBubyBjb21wbGV0aW9uIGluc3RhbnQgYXQgdGhhdCBwb2ludDsgdGhlIHRpbWVcbiAqIGlzIHRoZW4gcmVwb3J0ZWQgZW50aXJlbHkgYXMge0BsaW5rIFJlc3VtZVN0ZXBQcmVwYXJlTXN9LlxuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU3RlcENsYWltTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5zdGVwX2NsYWltX21zJ1xuKTtcblxuLyoqXG4gKiBQaGFzZTogY2xhaW0gcmV0dXJuaW5nIOKGkiBpbW1lZGlhdGVseSBiZWZvcmUgYHN0ZXBGbi5hcHBseSgpYC4gRGVsaWJlcmF0ZWx5XG4gKiBpbmNsdWRlcyBlbmNyeXB0aW9uLWtleSByZXNvbHV0aW9uLCBhcmd1bWVudCBoeWRyYXRpb24sIGFuZCBzdGVwLWNvbnRleHRcbiAqIHNldHVwOyBgd29ya2Zsb3cucXVldWUuZGVzZXJpYWxpemVfdGltZV9tc2Agc3RpbGwgaXNvbGF0ZXMgaHlkcmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU3RlcFByZXBhcmVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnN0ZXBfcHJlcGFyZV9tcydcbik7XG5cbi8qKiBXaGF0IHRyaWdnZXJlZCB0aGUgbWVhc3VyZWQgcmVzdW1wdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVUcmlnZ2VyID0gU2VtYW50aWNDb252ZW50aW9uPCdob29rJz4oXG4gICd3b3JrZmxvdy5yZXN1bWUudHJpZ2dlcidcbik7XG5cbi8qKiBXaGljaCBgcmVzdW1lSG9vaygpYCBkaXNwYXRjaCBwYXRoIHByb2R1Y2VkIHRoaXMgcmVzdW1lLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVN0cmF0ZWd5ID0gU2VtYW50aWNDb252ZW50aW9uPCdwYXJhbGxlbCcgfCAnc2VxdWVudGlhbCc+KFxuICAnd29ya2Zsb3cucmVzdW1lLnN0cmF0ZWd5J1xuKTtcblxuLyoqXG4gKiBIb3cgdGhlIGNvbnN1bWluZyBpbnZvY2F0aW9uIGluaXRpYWxpemVkIHJlcGxheSBzdGF0ZS4gRGlzdGluY3QgZnJvbSB0aGVcbiAqIHByZS1leGlzdGluZyB7QGxpbmsgSG9va1Jlc3VtZVNldHVwU291cmNlfSAoYHdvcmtmbG93LnJlc3VtZV9zZXR1cF9zb3VyY2VgLFxuICogb24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSwgd2hpY2ggcmVwb3J0cyB0aGUgZmluZXItZ3JhaW5lZFxuICogaG9pc3RlZC13cml0ZSBvdXRjb21lOyB0aGlzIG9uZSBpcyB0aGUgVFRSIGRpbWVuc2lvbiBhbmQgc2hhcmVzIHRoZSBtZXRyaWMnc1xuICogdGhyZWUtdmFsdWUgdm9jYWJ1bGFyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVNldHVwU291cmNlID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnaG9va19wcmVsb2FkJyB8ICdydW5fc3RhcnRlZCcgfCAnZXZlbnRfbG9hZCdcbj4oJ3dvcmtmbG93LnJlc3VtZS5zZXR1cF9zb3VyY2UnKTtcblxuLyoqIFdoZXRoZXIgdGhlIG1lYXN1cmVkIHN0ZXAgcmFuIGluIHRoZSByZXN1bWluZyBpbnZvY2F0aW9uIG9yIGEgcXVldWVkIG9uZS4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVTdGVwRXhlY3V0aW9uID0gU2VtYW50aWNDb252ZW50aW9uPCdpbmxpbmUnIHwgJ2Rpc3BhdGNoZWQnPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5zdGVwX2V4ZWN1dGlvbidcbik7XG5cbi8vIFdlYmhvb2sgYXR0cmlidXRlc1xuXG4vKiogTnVtYmVyIG9mIHdlYmhvb2sgaGFuZGxlcnMgdHJpZ2dlcmVkICovXG5leHBvcnQgY29uc3QgV2ViaG9va0hhbmRsZXJzVHJpZ2dlcmVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3ZWJob29rLmhhbmRsZXJzLnRyaWdnZXJlZCdcbik7XG5cbi8vIFN1c3BlbnNpb24gYXR0cmlidXRlc1xuXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uU3RhdGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J3N1c3BlbmRlZCc+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi5zdGF0ZSdcbik7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uSG9va0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLmhvb2tfY291bnQnXG4pO1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvblN0ZXBDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi5zdGVwX2NvdW50J1xuKTtcbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25XYWl0Q291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24ud2FpdF9jb3VudCdcbik7XG5cbi8vIFdvcmxkL1N0b3JhZ2UgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgSFRUUCBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2h0dHAvaHR0cC1zcGFucy9cblxuLyoqIEhUVFAgcmVxdWVzdCBtZXRob2QgKHN0YW5kYXJkIE9URUw6IGh0dHAucmVxdWVzdC5tZXRob2QpICovXG5leHBvcnQgY29uc3QgSHR0cFJlcXVlc3RNZXRob2QgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ2h0dHAucmVxdWVzdC5tZXRob2QnXG4pO1xuXG4vKiogUm91dGUgcGF0dGVybiBmb3IgdGhlIHJlcXVlc3QgKHN0YW5kYXJkIE9URUw6IGh0dHAucm91dGUpICovXG5leHBvcnQgY29uc3QgSHR0cFJvdXRlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2h0dHAucm91dGUnKTtcblxuLyoqIEZ1bGwgVVJMIG9mIHRoZSByZXF1ZXN0IChzdGFuZGFyZCBPVEVMOiB1cmwuZnVsbCkgKi9cbmV4cG9ydCBjb25zdCBVcmxGdWxsID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3VybC5mdWxsJyk7XG5cbi8qKiBTZXJ2ZXIgaG9zdG5hbWUgKHN0YW5kYXJkIE9URUw6IHNlcnZlci5hZGRyZXNzKSAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlckFkZHJlc3MgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc2VydmVyLmFkZHJlc3MnKTtcblxuLyoqIFNlcnZlciBwb3J0IChzdGFuZGFyZCBPVEVMOiBzZXJ2ZXIucG9ydCkgKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQb3J0ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3NlcnZlci5wb3J0Jyk7XG5cbi8qKiBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlIChzdGFuZGFyZCBPVEVMOiBodHRwLnJlc3BvbnNlLnN0YXR1c19jb2RlKSAqL1xuZXhwb3J0IGNvbnN0IEh0dHBSZXNwb25zZVN0YXR1c0NvZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ2h0dHAucmVzcG9uc2Uuc3RhdHVzX2NvZGUnXG4pO1xuXG4vKiogRXJyb3IgdHlwZSB3aGVuIHJlcXVlc3QgZmFpbHMgKHN0YW5kYXJkIE9URUw6IGVycm9yLnR5cGUpICovXG5leHBvcnQgY29uc3QgRXJyb3JUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2Vycm9yLnR5cGUnKTtcblxuLy8gV29ybGQtc3BlY2lmaWMgY3VzdG9tIGF0dHJpYnV0ZXMgKGZvciB3b3JrZmxvdy1zcGVjaWZpYyBjb250ZXh0KVxuXG4vKiogRm9ybWF0IHVzZWQgZm9yIHBhcnNpbmcgcmVzcG9uc2UgYm9keSAoY2JvciBvciBqc29uKSAqL1xuZXhwb3J0IGNvbnN0IFdvcmxkUGFyc2VGb3JtYXQgPSBTZW1hbnRpY0NvbnZlbnRpb248J2Nib3InIHwgJ2pzb24nPihcbiAgJ3dvcmtmbG93LndvcmxkLnBhcnNlLmZvcm1hdCdcbik7XG5cbi8vIEV2ZW50IGxvYWRpbmcgYXR0cmlidXRlc1xuXG4vKiogTnVtYmVyIG9mIHBhZ2luYXRpb24gcGFnZXMgbG9hZGVkIHdoZW4gZmV0Y2hpbmcgd29ya2Zsb3cgZXZlbnRzICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFdmVudHNQYWdlc0xvYWRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhZ2VzX2xvYWRlZCdcbik7XG5cbi8vIFF1ZXVlIHRpbWluZyBicmVha2Rvd24gYXR0cmlidXRlcyAod29ya2Zsb3ctc3BlY2lmaWMpXG5cbi8qKiBUaW1lIHNwZW50IGRlc2VyaWFsaXppbmcgdGhlIHF1ZXVlIG1lc3NhZ2UgaW4gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgY29uc3QgUXVldWVEZXNlcmlhbGl6ZVRpbWVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUuZGVzZXJpYWxpemVfdGltZV9tcydcbik7XG5cbi8qKiBUaW1lIHNwZW50IGV4ZWN1dGluZyB0aGUgaGFuZGxlciBsb2dpYyBpbiBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBjb25zdCBRdWV1ZUV4ZWN1dGlvblRpbWVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUuZXhlY3V0aW9uX3RpbWVfbXMnXG4pO1xuXG4vKiogVGltZSBzcGVudCBzZXJpYWxpemluZyB0aGUgcmVzcG9uc2UgaW4gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgY29uc3QgUXVldWVTZXJpYWxpemVUaW1lTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnF1ZXVlLnNlcmlhbGl6ZV90aW1lX21zJ1xuKTtcblxuLy8gUGF5bG9hZCBjb21wcmVzc2lvbiBhdHRyaWJ1dGVzICh6c3RkIHByZWZlcnJlZCwgZ3ppcCBmYWxsYmFjazsgc3BlY1ZlcnNpb24gPj0gNSlcbi8vXG4vLyBTaXplcyBhcmUgbWVhc3VyZWQgYXQgdGhlIGNvbXByZXNzaW9uIGJvdW5kYXJ5OiBiZWZvcmUgZW5jcnlwdGlvbiBvbiB0aGVcbi8vIHdyaXRlIHBhdGggYW5kIGFmdGVyIGRlY3J5cHRpb24gb24gdGhlIHJlYWQgcGF0aC4gVGhleSB0aGVyZWZvcmUgcmVmbGVjdFxuLy8gY29tcHJlc3Npb24ncyBlZmZlY3QsIG5vdCB0aGUgYXQtcmVzdCBzaXplICh3aGljaCBhbHNvIGluY2x1ZGVzIHRoZVxuLy8gfjI4LWJ5dGUgYGVuY3JgIGVudmVsb3BlIGFuZCwgb24gc29tZSBiYWNrZW5kcywgYmFzZTY0IGV4cGFuc2lvbikuXG5cbi8qKiBXaGV0aGVyIHRoaXMgc2VyaWFsaXplL2Rlc2VyaWFsaXplIHdhcyBhIHdyaXRlIG9yIHJlYWQuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbk9wZXJhdGlvbiA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ3NlcmlhbGl6ZScgfCAnZGVzZXJpYWxpemUnXG4+KCd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLm9wZXJhdGlvbicpO1xuXG4vKiogV2hldGhlciBhIGNvbXByZXNzaW9uIGNvZGVjIHdhcyBhcHBsaWVkICh3cml0ZSkgLyBwcmVzZW50IChyZWFkKS4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uQ29tcHJlc3NlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uY29tcHJlc3NlZCdcbik7XG5cbi8qKiBXaGljaCBjb21wcmVzc2lvbiBjb2RlYyBhcHBsaWVkIC8gd2FzIHByZXNlbnQgKGB6c3RkYCwgYGd6aXBgLCBvciBgbm9uZWApLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25Db2RlYyA9IFNlbWFudGljQ29udmVudGlvbjwnenN0ZCcgfCAnZ3ppcCcgfCAnbm9uZSc+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5jb2RlYydcbik7XG5cbi8qKiBMb2dpY2FsICh1bmNvbXByZXNzZWQsIGRldmFsdWUtcHJlZml4ZWQpIHBheWxvYWQgc2l6ZSBpbiBieXRlcy4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uVW5jb21wcmVzc2VkQnl0ZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24udW5jb21wcmVzc2VkX2J5dGVzJ1xuKTtcblxuLyoqIFN0b3JlZCAocG9zdC1jb21wcmVzc2lvbiwgcHJlLWVuY3J5cHRpb24pIHBheWxvYWQgc2l6ZSBpbiBieXRlcy4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uU3RvcmVkQnl0ZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uc3RvcmVkX2J5dGVzJ1xuKTtcblxuLyoqIEZyYWN0aW9uIG9mIGJ5dGVzIHNhdmVkIGJ5IGNvbXByZXNzaW9uICgwLi4xKTsgc2V0IG9ubHkgd2hlbiBjb21wcmVzc2VkLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25Db21wcmVzc2lvblJhdGlvID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmNvbXByZXNzaW9uX3JhdGlvJ1xuKTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygd29ya2Zsb3cgKGd1ZXN0KSBjb2RlIGV4ZWN1dGlvbnMgc2VyaWFsaXphdGlvbiBjb3VsZCBub3QgYXZvaWRcbiAqIChnZXR0ZXJzLCBwcm94aWVzLCBjdXN0b20gc2VyaWFsaXplcnMpOyBzZXQgb25seSB3aGVuIG5vbi16ZXJvLlxuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkd1ZXN0Q29kZUV4ZWN1dGlvbnMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uZ3Vlc3RfY29kZV9leGVjdXRpb25zJ1xuKTtcblxuLyoqXG4gKiBEZWR1cGxpY2F0ZWQgYGtpbmQgKGRldGFpbClgIGRlc2NyaXB0aW9ucyBvZiB0aGUgZ3Vlc3QtY29kZSBleGVjdXRpb25zO1xuICogc2V0IG9ubHkgd2hlbiBub24temVyby5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25HdWVzdENvZGVEZXRhaWxzID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZ1tdPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uZ3Vlc3RfY29kZV9kZXRhaWxzJ1xuKTtcblxuLy8gUlBDL1BlZXIgU2VydmljZSBhdHRyaWJ1dGVzIC0gRm9yIHNlcnZpY2UgbWFwcyBhbmQgZGVwZW5kZW5jeSB0cmFja2luZ1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L3JwYy9ycGMtc3BhbnMvXG5cbi8qKiBUaGUgcmVtb3RlIHNlcnZpY2UgbmFtZSBmb3IgRGF0YWRvZyBzZXJ2aWNlIG1hcHMgKERhdGFkb2ctc3BlY2lmaWM6IHBlZXIuc2VydmljZSkgKi9cbmV4cG9ydCBjb25zdCBQZWVyU2VydmljZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdwZWVyLnNlcnZpY2UnKTtcblxuLyoqIFJQQyBzeXN0ZW0gaWRlbnRpZmllciAoc3RhbmRhcmQgT1RFTDogcnBjLnN5c3RlbSkgKi9cbmV4cG9ydCBjb25zdCBScGNTeXN0ZW0gPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigncnBjLnN5c3RlbScpO1xuXG4vKiogUlBDIHNlcnZpY2UgbmFtZSAoc3RhbmRhcmQgT1RFTDogcnBjLnNlcnZpY2UpICovXG5leHBvcnQgY29uc3QgUnBjU2VydmljZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdycGMuc2VydmljZScpO1xuXG4vKiogUlBDIG1ldGhvZCBuYW1lIChzdGFuZGFyZCBPVEVMOiBycGMubWV0aG9kKSAqL1xuZXhwb3J0IGNvbnN0IFJwY01ldGhvZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdycGMubWV0aG9kJyk7XG5cbi8vIEVycm9yIGF0dHJpYnV0ZXMgLSBTdGFuZGFyZCBPVEVMIGVycm9yIGNvbnZlbnRpb25zXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvZXhjZXB0aW9ucy9leGNlcHRpb25zLXNwYW5zL1xuXG4vKiogV2hldGhlciB0aGUgZXJyb3IgaXMgcmV0cnlhYmxlICh3b3JrZmxvdy1zcGVjaWZpYykgKi9cbmV4cG9ydCBjb25zdCBFcnJvclJldHJ5YWJsZSA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignZXJyb3IucmV0cnlhYmxlJyk7XG5cbi8qKiBFcnJvciBjYXRlZ29yeSAod29ya2Zsb3ctc3BlY2lmaWM6IGZhdGFsLCByZXRyeWFibGUsIHRyYW5zaWVudCkgKi9cbmV4cG9ydCBjb25zdCBFcnJvckNhdGVnb3J5ID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnZmF0YWwnIHwgJ3JldHJ5YWJsZScgfCAndHJhbnNpZW50J1xuPignZXJyb3IuY2F0ZWdvcnknKTtcbiJdfQ==
|
|
445
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBSUg7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUksR0FBRyxLQUFlO0lBQy9DLE9BQU8sQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsc0JBQXNCO0FBRXRCLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUVqRCxvQkFBb0IsQ0FBQyxDQUFDO0FBRXhCLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELHFCQUFxQixDQUFDLENBQUM7QUFFekIscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtC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LENBQUMsTUFBTSw2QkFBNkIsR0FBRyxrQkFBa0IsQ0FDN0QsMENBQTBDLENBQzNDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxrQkFBa0IsQ0FDaEUsOENBQThDLENBQy9DLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxrQkFBa0IsQ0FDN0QsMkNBQTJDLENBQzVDLENBQUM7QUFFRix5RUFBeUU7QUFDekUsa0VBQWtFO0FBRWxFLHdGQUF3RjtBQUN4RixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQVMsY0FBYyxDQUFDLENBQUM7QUFFdEUsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBUyxZQUFZLENBQUMsQ0FBQztBQUVsRSxvREFBb0Q7QUFDcEQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFTLGFBQWEsQ0FBQyxDQUFDO0FBRXBFLGtEQUFrRDtBQUNsRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQVMsWUFBWSxDQUFDLENBQUM7QUFFbEUscURBQXFEO0FBQ3JELGdGQUFnRjtBQUVoRix5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFVLGlCQUFpQixDQUFDLENBQUM7QUFFN0Usc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FFN0MsZ0JBQWdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9ucyBmb3IgVmVyY2VsIFdvcmtmbG93IHRlbGVtZXRyeS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdGFuZGFyZGl6ZWQgdGVsZW1ldHJ5IGF0dHJpYnV0ZXMgZm9sbG93aW5nIE9wZW5UZWxlbWV0cnkgc2VtYW50aWMgY29udmVudGlvbnNcbiAqIGZvciBpbnN0cnVtZW50aW5nIHdvcmtmbG93IGV4ZWN1dGlvbiwgc3RlcCBwcm9jZXNzaW5nLCBhbmQgcmVsYXRlZCBvcGVyYXRpb25zLiBFYWNoIGV4cG9ydGVkIGZ1bmN0aW9uXG4gKiBjcmVhdGVzIGEgcHJvcGVybHkgZm9ybWF0dGVkIGF0dHJpYnV0ZSBvYmplY3QgZm9yIHVzZSB3aXRoIE9wZW5UZWxlbWV0cnkgc3BhbnMuXG4gKlxuICogVGhlIHNlbWFudGljIGNvbnZlbnRpb25zIGFyZSBvcmdhbml6ZWQgaW50byBzZXZlcmFsIGNhdGVnb3JpZXM6XG4gKiAtICoqV29ya2Zsb3cgYXR0cmlidXRlcyoqOiBUcmFjayB3b3JrZmxvdyBsaWZlY3ljbGUsIHN0YXR1cywgYW5kIG1ldGFkYXRhXG4gKiAtICoqU3RlcCBhdHRyaWJ1dGVzKio6IE1vbml0b3IgaW5kaXZpZHVhbCBzdGVwIGV4ZWN1dGlvbiwgcmV0cmllcywgYW5kIHJlc3VsdHNcbiAqIC0gKipRdWV1ZSBhdHRyaWJ1dGVzKio6IEluc3RydW1lbnQgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zXG4gKiAtICoqRGVwbG95bWVudCBhdHRyaWJ1dGVzKio6IENhcHR1cmUgZGVwbG95bWVudCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxuICpcbiAqIEFsbCBhdHRyaWJ1dGUgZnVuY3Rpb25zIGFyZSB0eXBlLXNhZmUgYW5kIHVzZSBleGlzdGluZyBiYWNrZW5kIHR5cGVzIHRvIGVuc3VyZVxuICogY29uc2lzdGVuY3kgYmV0d2VlbiB0ZWxlbWV0cnkgZGF0YSBhbmQgYWN0dWFsIHN5c3RlbSBzdGF0ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcbiAqXG4gKiAvLyBTZXQgd29ya2Zsb3cgYXR0cmlidXRlcyBvbiBhIHNwYW5cbiAqIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd05hbWUoJ215LXdvcmtmbG93JyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd09wZXJhdGlvbignc3RhcnQnKSxcbiAqICAgLi4uQXR0cmlidXRlLldvcmtmbG93UnVuU3RhdHVzKCdydW5uaW5nJyksXG4gKiB9KTtcbiAqXG4gKiAvLyBTZXQgc3RlcCBhdHRyaWJ1dGVzXG4gKiBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICogICAuLi5BdHRyaWJ1dGUuU3RlcE5hbWUoJ3Byb2Nlc3MtZGF0YScpLFxuICogICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnY29tcGxldGVkJyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5TdGVwQXR0ZW1wdCgxKSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi99IE9wZW5UZWxlbWV0cnkgU2VtYW50aWMgQ29udmVudGlvbnNcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmltcG9ydCB0eXBlIHsgTWVzc2FnZUlkLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlbWFudGljIGNvbnZlbnRpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGF0dHJpYnV0ZSBvYmplY3QuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZSBmb2xsb3dpbmcgT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9uc1xuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYW4gYXR0cmlidXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBTZW1hbnRpY0NvbnZlbnRpb248VD4oLi4ubmFtZXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiAodmFsdWU6IFQpID0+XG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKG5hbWVzLm1hcCgobmFtZSkgPT4gW25hbWUsIHZhbHVlXSBhcyBjb25zdCkpO1xufVxuXG4vLyBXb3JrZmxvdyBhdHRyaWJ1dGVzXG5cbi8qKiBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cgYmVpbmcgZXhlY3V0ZWQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd05hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cubmFtZScpO1xuXG4vKiogVGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgb24gdGhlIHdvcmtmbG93ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dPcGVyYXRpb24gPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdzdGFydCcgfCAnZXhlY3V0ZScgfCAnZXhlY3V0ZV92MicgfCAncnVuJ1xuPignd29ya2Zsb3cub3BlcmF0aW9uJyk7XG5cbi8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgYSBzcGVjaWZpYyB3b3JrZmxvdyBydW4gaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1J1bklkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93LnJ1bi5pZCcpO1xuXG4vKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHdvcmtmbG93IHJ1biAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuU3RhdHVzID0gU2VtYW50aWNDb252ZW50aW9uPFxuICBXb3JrZmxvd1J1blsnc3RhdHVzJ10gfCAnd29ya2Zsb3dfc3VzcGVuZGVkJ1xuPignd29ya2Zsb3cucnVuLnN0YXR1cycpO1xuXG4vKiogVGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzdGFydGVkIChVbml4IHRpbWVzdGFtcCkgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N0YXJ0ZWRBdCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3RhcnRlZF9hdCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgZXZlbnRzIHByb2Nlc3NlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFdmVudHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLmNvdW50J1xuKTtcblxuLyoqIFdoZXRoZXIgd29ya2Zsb3cgZXhlY3V0aW9uIHN0YXJ0cyB3aXRoIHJlcGxheSBvciByZXN1bWVzIGEgcmV0YWluZWQgVk0gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0V4ZWN1dGlvbk1vZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J3JlcGxheScgfCAncmV0YWluZWQnPihcbiAgJ3dvcmtmbG93LmV4ZWN1dGlvbi5tb2RlJ1xuKTtcblxuLyoqXG4gKiBFdmVudHMgdGhlIHJlcGxheSB3YWxrZWQgcGFzdCB0aGF0IG5vIGNvbnN1bWVyIGNsYWltZWQsIHN0aWxsIGhlbGQgd2hlbiB0aGVcbiAqIHJlcGxheSBzdG9wcGVkLlxuICpcbiAqIEEgbm9uLXplcm8gY291bnQgb24gYSBzdXNwZW5zaW9uIGlzIG9yZGluYXJ5OiBhbiBvdXQtb2YtYmFuZCBkZWxpdmVyeSB0aGF0XG4gKiBsYW5kZWQgYWhlYWQgb2YgdGhlIGNvZGUgdGhhdCByZWFkcyBpdCB3YWl0cyBmb3IgdGhlIHJlcGxheSB0aGF0IGdldHMgdGhlcmUuXG4gKiBGcm9tIGluc2lkZSBvbmUgcmVwbGF5IHRoYXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBldmVudCBubyByZXBsYXkgd2lsbFxuICogZXZlciBjbGFpbSwgYmVjYXVzZSB0aGUgdHdvIGRpZmZlciBvbmx5IGluIHdoYXQgdGhlIG5leHQgcmVwbGF5IGRvZXMuIFNvIHRoZVxuICogY291bnQgZ29lcyBvbiB0aGUgc3BhbiBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHJ1biwgYW5kIHRoZSBjYXNlIHdvcnRoIGFjdGluZ1xuICogb24gaXMgYSBxdWVyeSBhY3Jvc3MgYSBydW4ncyBzcGFuczogdGhlIHNhbWVcbiAqIHtAbGluayBXb3JrZmxvd1BhcmtlZEV2ZW50SWR9IGhlbGQgb24gc3VzcGVuc2lvbiBhZnRlciBzdXNwZW5zaW9uLlxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5jb3VudCdcbik7XG5cbi8qKiBPbGRlc3QgZXZlbnQgc3RpbGwgaGVsZCB1bmNsYWltZWQgd2hlbiB0aGUgcmVwbGF5IHN0b3BwZWQuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5ldmVudHMucGFya2VkLmV2ZW50X2lkJ1xuKTtcblxuLyoqIFR5cGUgb2YgdGhlIG9sZGVzdCBldmVudCBzdGlsbCBoZWxkIHVuY2xhaW1lZCB3aGVuIHRoZSByZXBsYXkgc3RvcHBlZC4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1BhcmtlZEV2ZW50VHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5ldmVudF90eXBlJ1xuKTtcblxuLyoqIE51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB3b3JrZmxvdyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QXJndW1lbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmFyZ3VtZW50cy5jb3VudCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSB3b3JrZmxvdyByZXN1bHQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1Jlc3VsdFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LnJlc3VsdC50eXBlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdHJhY2UgY29udGV4dCB3YXMgcHJvcGFnYXRlZCB0byB0aGlzIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHJhY2VQcm9wYWdhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cudHJhY2UucHJvcGFnYXRlZCdcbik7XG5cbi8vIFF1aWNrSlMgVk0gZW5naW5lIGF0dHJpYnV0ZXNcblxuLyoqIFRoZSBWTSBlbmdpbmUgZXhlY3V0aW5nIHRoZSB3b3JrZmxvdyBmdW5jdGlvbiBmb3IgdGhpcyBpbnZvY2F0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dWbSA9IFNlbWFudGljQ29udmVudGlvbjwnbm9kZScgfCAncXVpY2tqcyc+KCd3b3JrZmxvdy52bScpO1xuXG4vKiogT3V0Y29tZSBvZiBhIFF1aWNrSlMgVk0gd29ya2Zsb3cgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNPdXRjb21lID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnY29tcGxldGVkJyB8ICdzdXNwZW5kZWQnIHwgJ2ZhaWxlZCdcbj4oJ3dvcmtmbG93LnZtLm91dGNvbWUnKTtcblxuLyoqIFdoZXRoZXIgcHJlbG9hZGVkIGV2ZW50cyBmcm9tIGBldmVudHMuY3JlYXRlKCdydW5fc3RhcnRlZCcpYCB3ZXJlIHVzZWQgKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTRXZlbnRzUHJlbG9hZGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cudm0uZXZlbnRzLnByZWxvYWRlZCdcbik7XG5cbi8qKiBUb3RhbCBudW1iZXIgb2YgZXZlbnRzIGZldGNoZWQgZnJvbSB0aGUgd29ybGQgZm9yIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNFdmVudHNGZXRjaGVkQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnZtLmV2ZW50cy5mZXRjaGVkX2NvdW50J1xuKTtcblxuLyoqIE51bWJlciBvZiBwYWdlcyByZXF1aXJlZCB0byBmZXRjaCBhbGwgZXZlbnRzICovXG5leHBvcnQgY29uc3QgUXVpY2tKU0V2ZW50c0ZldGNoZWRQYWdlcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cudm0uZXZlbnRzLmZldGNoZWRfcGFnZXMnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHBlbmRpbmcgVk0gb3BlcmF0aW9ucyBjYXB0dXJlZCBhdCBzdXNwZW5zaW9uICovXG5leHBvcnQgY29uc3QgUXVpY2tKU1BlbmRpbmdPcHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cudm0ucGVuZGluZ19vcHNfY291bnQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHN0ZXBzIGV4ZWN1dGVkIGlubGluZSAobGl2ZS1WTSBjb250aW51YXRpb24pIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNJbmxpbmVTdGVwcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAncXVpY2tqcy5pbmxpbmVfc3RlcHMnXG4pO1xuXG4vKiogQWN0aXZlIHRyYWNlLWNvcnJlbGF0aW9uIG1vZGUgZm9yIHRoaXMgaW52b2NhdGlvbiAobGlua2VkIG9yIGNvbnRpbnVvdXMpICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dUcmFjZU1vZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J2xpbmtlZCcgfCAnY29udGludW91cyc+KFxuICAnd29ya2Zsb3cudHJhY2UubW9kZSdcbik7XG5cbi8qKiBXaGV0aGVyIHRoaXMgd29ya2Zsb3cgaW52b2NhdGlvbiBpcyB1c2luZyB0aGUgdHVyYm8gZmlyc3QtZGVsaXZlcnkgcGF0aCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHVyYm8gPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3dvcmtmbG93LnR1cmJvJyk7XG5cbi8qKiBOYW1lIG9mIHRoZSBlcnJvciB0aGF0IGNhdXNlZCB3b3JrZmxvdyBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvck5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLm5hbWUnXG4pO1xuXG4vKiogRXJyb3IgbWVzc2FnZSB3aGVuIHdvcmtmbG93IGZhaWxzICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvck1lc3NhZ2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLm1lc3NhZ2UnXG4pO1xuXG4vKiogRXJyb3IgY2xhc3NpZmljYXRpb24gY29kZSAoVVNFUl9FUlJPUiwgUlVOVElNRV9FUlJPUiwgZXRjLikgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0Vycm9yQ29kZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXJyb3IuY29kZSdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygc3RlcHMgY3JlYXRlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdGVwc0NyZWF0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0ZXBzLmNyZWF0ZWQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIGhvb2tzIGNyZWF0ZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93SG9va3NDcmVhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5ob29rcy5jcmVhdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiB3YWl0cyBjcmVhdGVkIGR1cmluZyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1dhaXRzQ3JlYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cud2FpdHMuY3JlYXRlZCdcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHRoaXMgc3VzcGVuc2lvbiBmaW5hbGl6ZWQgYXMgZmFpbGVkIGJlY2F1c2UgdGhlaXJcbiAqIGFyZ3VtZW50cyByZWZ1c2VkIHRvIHNlcmlhbGl6ZSAoc3RlcF9jcmVhdGVkIHBsYWNlaG9sZGVyICsgc3RlcF9mYWlsZWRcbiAqIGNhcnJ5aW5nIHRoZSBTZXJpYWxpemF0aW9uRXJyb3I7IHNlZSBmaW5hbGl6ZVVuc2VyaWFsaXphYmxlU3RlcCkuXG4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N0ZXBzRmFpbGVkU2VyaWFsaXphdGlvbiA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3RlcHMuZmFpbGVkX3NlcmlhbGl6YXRpb24nXG4pO1xuXG4vKipcbiAqIE51bWJlciBvZiBpbmxpbmUtb3duZWQgc3RlcHMgdGhpcyBpbnZvY2F0aW9uIHJlLWV4ZWN1dGVkIGJlY2F1c2UgaXQgaXMgYVxuICogcmVkZWxpdmVyeSBvZiB0aGVpciBvd25pbmcgcXVldWUgbWVzc2FnZSAoY3Jhc2ggcmVjb3ZlcnkgZm9yIGlubGluZVxuICogc3RlcHM7IHNlZSB0aGUgaW5saW5lIHN0ZXAgb3duZXJzaGlwIGNoYW5nZWxvZywgd29ya2Zsb3cjMjc4MCkuXG4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd093bmVkUmVjb3ZlcnlTdGVwcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuaW5saW5lX293bmVyc2hpcC5vd25lZF9yZWNvdmVyeV9zdGVwcydcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIHBlbmRpbmcgc3RlcHMgZm9yIHdoaWNoIHRoaXMgcmVwbGF5IHN1cHByZXNzZWQgdGhlIGltbWVkaWF0ZVxuICogcmVxdWV1ZSAoYW5vdGhlciBpbnZvY2F0aW9uIGlubGluZS1vd25zIHRoZW0gdW5kZXIgYSBsaXZlIGxlYXNlKSBhbmRcbiAqIGVuc3VyZWQgYSBkZWxheWVkIGJhY2tzdG9wIHdha2UgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QmFja3N0b3BXYWtlc0FybWVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5pbmxpbmVfb3duZXJzaGlwLmJhY2tzdG9wX3dha2VzX2FybWVkJ1xuKTtcblxuLy8gUm91dGUgYXR0cmlidXRlc1xuXG4vKiogVGhlIHdvcmtmbG93IHJ1bnRpbWUgcm91dGUgYmVpbmcgaGFuZGxlZCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPCdmbG93Jz4oXG4gICd3b3JrZmxvdy5yb3V0ZS50eXBlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhpcyByb3V0ZSBpbnZvY2F0aW9uIHJldXNlZCBhbiBhbHJlYWR5LWNyZWF0ZWQgcmVxdWVzdCBoYW5kbGVyICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUhhbmRsZXJDYWNoZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5oYW5kbGVyX2NhY2hlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgdGltZXMgdGhpcyBpbi1tZW1vcnkgcm91dGUgaGFuZGxlciBoYXMgYmVlbiBpbnZva2VkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUludm9jYXRpb25Db3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucm91dGUuaW52b2NhdGlvbl9jb3VudCdcbik7XG5cbi8qKiBUaW1lIHNpbmNlIHRoaXMgcm91dGUgZW50cnlwb2ludCB3YXMgY29uc3RydWN0ZWQsIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVFbnRyeXBvaW50QWdlTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJvdXRlLmVudHJ5cG9pbnRfYWdlX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgZXZhbHVhdGluZyB0aGUgZ2VuZXJhdGVkIHJvdXRlIG1vZHVsZSBib2R5IGJlZm9yZSBjcmVhdGluZyB0aGUgZW50cnlwb2ludCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVNb2R1bGVCb2R5SW5pdE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5tb2R1bGVfYm9keV9pbml0X21zJ1xuKTtcblxuLyoqXG4gKiBDb21wdXRlIGluc3RhbmNlIGhhbmRsaW5nIHRoaXMgcm91dGU6IHRoZSBzeW50aGVzaXplZCBgQ09NUFVURV9JTlNUQU5DRV9JRGAuXG4gKiBVc2VzIE9URUwgYGZhYXMuaW5zdGFuY2VgIChleGVjdXRpb24tZW52aXJvbm1lbnQgaWQsIHJldXNlZCBhY3Jvc3NcbiAqIGludm9jYXRpb25zIHRvIHRoZSBzYW1lIGZ1bmN0aW9uKTpcbiAqIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvYXR0cmlidXRlcy1yZWdpc3RyeS9mYWFzL1xuICovXG5leHBvcnQgY29uc3QgRmFhc0luc3RhbmNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2ZhYXMuaW5zdGFuY2UnKTtcblxuLy8gU3RlcCBhdHRyaWJ1dGVzXG5cbi8qKiBOYW1lIG9mIHRoZSBzdGVwIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkICovXG5leHBvcnQgY29uc3QgU3RlcE5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5uYW1lJyk7XG5cbi8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHN0ZXAgaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBTdGVwSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5pZCcpO1xuXG4vKiogQ3VycmVudCBhdHRlbXB0IG51bWJlciBmb3Igc3RlcCBleGVjdXRpb24gKHN0YXJ0cyBhdCAxKSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBBdHRlbXB0ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAuYXR0ZW1wdCcpO1xuXG4vKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHN0ZXAgKi9cbmV4cG9ydCBjb25zdCBTdGVwU3RhdHVzID0gU2VtYW50aWNDb252ZW50aW9uPFN0ZXBbJ3N0YXR1cyddPignc3RlcC5zdGF0dXMnKTtcblxuLyoqIE1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgYWxsb3dlZCBmb3IgdGhpcyBzdGVwICovXG5leHBvcnQgY29uc3QgU3RlcE1heFJldHJpZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5tYXhfcmV0cmllcycpO1xuXG4vKiogV2hldGhlciB0cmFjZSBjb250ZXh0IHdhcyBwcm9wYWdhdGVkIHRvIHRoaXMgc3RlcCBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBTdGVwVHJhY2VQcm9wYWdhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnc3RlcC50cmFjZS5wcm9wYWdhdGVkJ1xuKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgdGltZS10by1maXJzdC1zdGVwIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzOiBydW4gY3JlYXRpb24g4oaSXG4gKiB0aGlzIHN0ZXAncyBib2R5IGJlZ2lubmluZyB0byBleGVjdXRlLCBtaW51cyBwcmUtc3RlcCBob29rLWNyZWF0aW9uIHRpbWUuXG4gKiBPbmx5IHByZXNlbnQgb24gdGhlIHJ1bidzIGZpcnN0IHN0ZXAgZXhlY3V0aW9uIHdoZW4gaXQgcXVhbGlmaWVkIGZvclxuICogbWVhc3VyZW1lbnQgKHNlZSBydW50aW1lL3N0ZXAtbGF0ZW5jeS50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwVHRmc01zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAudHRmc19tcycpO1xuXG4vKipcbiAqIENsaWVudC1tZWFzdXJlZCBzdGVwLXRvLXN0ZXAgb3ZlcmhlYWQgaW4gbWlsbGlzZWNvbmRzOiB0aGUgcHJldmlvdXMgc3RlcCdzXG4gKiB0ZXJtaW5hbCBldmVudCDihpIgdGhpcyBzdGVwJ3MgYm9keSBiZWdpbm5pbmcgdG8gZXhlY3V0ZS4gT25seSBwcmVzZW50IHdoZW5cbiAqIHRoZSB0d28gc3RlcHMgcmFuIGJhY2stdG8tYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTdHNvTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5zdHNvX21zJyk7XG5cbi8qKlxuICogQ2xpZW50LW1lYXN1cmVkIHJ1bl9zdGFydGVkLXRvLWZpcnN0LXN0ZXAgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHM6IHRoZVxuICogYHJ1bl9zdGFydGVkYCByZXNwb25zZSBsYW5kaW5nIChvciwgdW5kZXIgdHVyYm8sIHRoZSBsb2NhbCBydW4gc3ludGhlc2lzXG4gKiBpbnN0YW50KSDihpIgdGhpcyBzdGVwJ3Mgc3RhcnQgUE9TVCBiZWluZyBpc3N1ZWQuIEEgc3ViLXdpbmRvdyBvZiB0dGZzIHRoYXRcbiAqIGlzb2xhdGVzIHJlcGxheSBvdmVyaGVhZCBmcm9tIHRoZSBydW4tY3JlYXRpb24gcXVldWUgaG9wLiBPbmx5IHByZXNlbnQgb25cbiAqIHRoZSBydW4ncyBmaXJzdCBzdGVwIGV4ZWN1dGlvbiB3aGVuIGl0IHF1YWxpZmllZCBmb3IgbWVhc3VyZW1lbnQgKHNlZVxuICogcnVudGltZS9zdGVwLWxhdGVuY3kudHMpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcFJzZnNNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLnJzZnNfbXMnKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgc3luY2hyb25vdXMgd29ya2Zsb3ctZnVuY3Rpb24gcmVwbGF5IGR1cmF0aW9uIGluXG4gKiBtaWxsaXNlY29uZHMsIGV4Y2x1ZGluZyBhd2FpdGVkIG5ldHdvcmsgSS9PLCBvZiBvbmx5IHRoZSBGSU5BTCByZXBsYXkgcGFzc1xuICogd2l0aGluIHRoZSByc2ZzIHdpbmRvdzogdGhlIHBhc3MgdGhhdCByZWFjaGVkIGFuZCBzY2hlZHVsZWQgdGhlIGZpcnN0XG4gKiBzdGVwLiBOb3QgYWNjdW11bGF0ZWQgYWNyb3NzIGVhcmxpZXIgcHJlLWZpcnN0LXN0ZXAgcGFzc2VzIChlLmcuIGFcbiAqIHdvcmtmbG93LWJvZHkgYHNldEF0dHJpYnV0ZXMoKWAgZGV0b3VyIHJlcGxheXMgbW9yZSB0aGFuIG9uY2UsIGFuZCBhXG4gKiByZWRlbGl2ZXJ5IG9taXRzIGVhcmxpZXIgaW52b2NhdGlvbnMnIHdvcmsgZW50aXJlbHkpLCBzbyB0aGlzIG11c3Qgbm90IGJlXG4gKiByZWFkIGFzIFwidGhlIHJlcGxheSBwb3J0aW9uIG9mIHJzZnNcIjsgc3RlcC5yc2ZzX21zIGNvdmVycyB0aGUgd2hvbGVcbiAqIHdpbmRvdy4gT25seSBwcmVzZW50IGFsb25nc2lkZSBzdGVwLnJzZnNfbXMgYW5kIG9ubHkgZm9yIHRoZSBydW4ncyBmaXJzdFxuICogc3RlcCAoc2VlIHJ1bnRpbWUvc3RlcC1sYXRlbmN5LnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBGaW5hbFNjaGVkdWxpbmdSZXBsYXlNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnc3RlcC5maW5hbF9zY2hlZHVsaW5nX3JlcGxheV9tcydcbik7XG5cbi8qKlxuICogUnVudGltZSBzdGFydHVwLWxhdGVuY3kgb3B0aW1pemF0aW9ucyBhY3RpdmUgZm9yIHRoZSB0dGZzL3N0c28gbWVhc3VyZW1lbnRcbiAqIChlLmcuICd0dXJibycsICdsYXp5U3RlcFN0YXJ0JywgJ29wdGltaXN0aWNTdGFydCcpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcExhdGVuY3lPcHRpbWl6YXRpb25zID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZ1tdPihcbiAgJ3N0ZXAubGF0ZW5jeV9vcHRpbWl6YXRpb25zJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhlIHN0ZXAgd2FzIHNraXBwZWQgZHVyaW5nIGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTa2lwcGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCdzdGVwLnNraXBwZWQnKTtcblxuLyoqIFJlYXNvbiB3aHkgdGhlIHN0ZXAgd2FzIHNraXBwZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwU2tpcFJlYXNvbiA9XG4gIFNlbWFudGljQ29udmVudGlvbjxTdGVwWydzdGF0dXMnXT4oJ3N0ZXAuc2tpcF9yZWFzb24nKTtcblxuLyoqIE51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBzdGVwIGZ1bmN0aW9uICovXG5leHBvcnQgY29uc3QgU3RlcEFyZ3VtZW50c0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLmFyZ3VtZW50cy5jb3VudCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSBzdGVwIHJlc3VsdCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXN1bHRUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3N0ZXAucmVzdWx0LnR5cGUnKTtcblxuLyoqIE5hbWUgb2YgdGhlIGVycm9yIHRoYXQgY2F1c2VkIHN0ZXAgZmFpbHVyZSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBFcnJvck5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5lcnJvci5uYW1lJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIHdoZW4gc3RlcCBmYWlscyAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBFcnJvck1lc3NhZ2UgPVxuICBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5lcnJvci5tZXNzYWdlJyk7XG5cbi8qKiBXaGV0aGVyIHRoZSBzdGVwIGZhaWxlZCB3aXRoIGEgZmF0YWwgZXJyb3IgKG5vIHJldHJpZXMpICovXG5leHBvcnQgY29uc3QgU3RlcEZhdGFsRXJyb3IgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3N0ZXAuZmF0YWxfZXJyb3InKTtcblxuLyoqIFdoZXRoZXIgYWxsIHJldHJ5IGF0dGVtcHRzIGhhdmUgYmVlbiBleGhhdXN0ZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlFeGhhdXN0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnJldHJ5LmV4aGF1c3RlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBuZXh0IHJldHJ5IGF0dGVtcHQgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlUaW1lb3V0U2Vjb25kcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnc3RlcC5yZXRyeS50aW1lb3V0X3NlY29uZHMnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgc3RlcCB3aWxsIGJlIHJldHJpZWQgYWZ0ZXIgdGhpcyBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgU3RlcFJldHJ5V2lsbFJldHJ5ID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnc3RlcC5yZXRyeS53aWxsX3JldHJ5J1xuKTtcblxuLy8gUXVldWUvTWVzc2FnaW5nIGF0dHJpYnV0ZXMgLSBTdGFuZGFyZCBPVEVMIG1lc3NhZ2luZyBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L21lc3NhZ2luZy9tZXNzYWdpbmctc3BhbnMvXG5cbi8qKiBNZXNzYWdpbmcgc3lzdGVtIGlkZW50aWZpZXIgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5zeXN0ZW0pICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nU3lzdGVtID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ21lc3NhZ2luZy5zeXN0ZW0nKTtcblxuLyoqIERlc3RpbmF0aW9uIG5hbWUvcXVldWUgbmFtZSAoc3RhbmRhcmQgT1RFTDogbWVzc2FnaW5nLmRlc3RpbmF0aW9uLm5hbWUpICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nRGVzdGluYXRpb25OYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICdtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZSdcbik7XG5cbi8qKiBUaGUgbWVzc2FnZSBpZCBiZWluZyBoYW5kbGVkIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcubWVzc2FnZS5pZCkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdNZXNzYWdlSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248TWVzc2FnZUlkPihcbiAgJ21lc3NhZ2luZy5tZXNzYWdlLmlkJ1xuKTtcblxuLyoqIE9wZXJhdGlvbiB0eXBlIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUpICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nT3BlcmF0aW9uVHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ3B1Ymxpc2gnIHwgJ3JlY2VpdmUnIHwgJ3Byb2Nlc3MnXG4+KCdtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUnKTtcblxuLyoqIFRpbWUgdGFrZW4gdG8gZW5xdWV1ZSB0aGUgbWVzc2FnZSBpbiBtaWxsaXNlY29uZHMgKHdvcmtmbG93LXNwZWNpZmljKSAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlT3ZlcmhlYWRNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUub3ZlcmhlYWRfbXMnXG4pO1xuXG4vLyBEZXBsb3ltZW50IGF0dHJpYnV0ZXNcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZGVwbG95bWVudCBlbnZpcm9ubWVudCAqL1xuZXhwb3J0IGNvbnN0IERlcGxveW1lbnRJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdkZXBsb3ltZW50LmlkJyk7XG5cbi8qKiBUaGUgZGVwbG95bWVudCBhIHJ1biBpcyBwaW5uZWQgdG8sIHNldCBvbmx5IG9uIGEgbWlzcm91dGVkIGRlbGl2ZXJ5LiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuUGlubmVkRGVwbG95bWVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5kZXBsb3ltZW50LnBpbm5lZF9pZCdcbik7XG5cbi8qKiBSZS1yb3V0ZSBhdHRlbXB0cyBmb3IgdGhpcyBtaXNyb3V0ZWQgZGVsaXZlcnksIGluY2x1ZGluZyB0aGlzIG9uZS4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0RlcGxveW1lbnRNaXNtYXRjaFJldHJ5Q291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmRlcGxveW1lbnRfbWlzbWF0Y2gucmV0cnlfY291bnQnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgbWlzcm91dGVkIGRlbGl2ZXJ5IHdhcyByZS1yb3V0ZWQgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBydW4uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dEZXBsb3ltZW50TWlzbWF0Y2hSZWNvdmVyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5kZXBsb3ltZW50X21pc21hdGNoLnJlY292ZXJlZCdcbik7XG5cbi8vIEhvb2sgYXR0cmlidXRlc1xuXG4vKiogVG9rZW4gaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBob29rICovXG5leHBvcnQgY29uc3QgSG9va1Rva2VuID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93Lmhvb2sudG9rZW4nKTtcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIGhvb2sgaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBIb29rSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cuaG9vay5pZCcpO1xuXG4vKiogV2hldGhlciBhIGhvb2sgd2FzIGZvdW5kIGJ5IGl0cyB0b2tlbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tGb3VuZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignd29ya2Zsb3cuaG9vay5mb3VuZCcpO1xuXG4vKipcbiAqIFByb2R1Y2VyLXNpZGUgc2lnbmFsIChvbiB0aGUgYGhvb2sucmVzdW1lYCBzcGFuKSB0aGF0IHRoZSBkaXJlY3RcbiAqIGBob29rX3JlY2VpdmVkYCB3cml0ZSBmYWlsZWQgdHJhbnNpZW50bHkgYnV0IHRoZSBxdWV1ZSBkaXNwYXRjaCBzdWNjZWVkZWQsIHNvXG4gKiB0aGUgcmVzdW1lIGlzIHJlY292ZXJlZCB2aWEgdGhlIGNvbnN1bWVyJ3MgcmUtZW5zdXJlLiBDb3JyZXNwb25kcyB0b1xuICogYFJlc3VtZWRIb29rLnJlc2lsaWVudFJlc3VtZSA9PT0gdHJ1ZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBIb29rUmVzaWxpZW50UmVzdW1lID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cuaG9vay5yZXNpbGllbnRfcmVzdW1lJ1xuKTtcblxuLyoqXG4gKiBDb25zdW1lci1zaWRlIHNpZ25hbCAob24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSB0aGF0IHRoaXMgcmVwbGF5XG4gKiBtYXRlcmlhbGl6ZWQgdGhlIGBob29rX3JlY2VpdmVkYCBldmVudCBmcm9tIHRoZSBxdWV1ZSBtZXNzYWdlJ3MgYGhvb2tJbnB1dGBcbiAqIGJlY2F1c2UgdGhlIHByb2R1Y2VyJ3MgZGlyZWN0IHdyaXRlIGhhZCBub3QgbGFuZGVkLCB3aGljaCBjb21wbGV0ZXMgdGhlXG4gKiByZWNvdmVyeSBwYXRoIHtAbGluayBIb29rUmVzaWxpZW50UmVzdW1lfSBiZWdhbi5cbiAqXG4gKiBMZWdhY3kgLyBub24tYXRvbWljIHJlLWVuc3VyZSBzaWduYWwgb25seS4gQXRvbWljIGxhenkgcmVzdW1lc1xuICogKHJlc3VtZUlkICsgZGlnZXN0KSBnbyB0aHJvdWdoIHRoZSBob2lzdGVkIHByZWxvYWQgd3JpdGUgaW5zdGVhZCwgd2hvc2VcbiAqIHJlc3BvbnNlIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHByb2R1Y2VyIG9yIHRoZSBjb25zdW1lciB3b24gdGhlXG4gKiBgKHJ1bklkLCByZXN1bWVJZClgIGNsYWltLCBzbyB0aGlzIGF0dHJpYnV0ZSBpcyBkZWxpYmVyYXRlbHkgTk9UIGVtaXR0ZWRcbiAqIGZvciB0aGVtIChlbWl0dGluZyBgdHJ1ZWAgdW5jb25kaXRpb25hbGx5IHdvdWxkIGNvdW50IGV2ZXJ5IHByb2R1Y2VyLXdvblxuICogcmVzdW1lIGFzIGEgcmVjb3ZlcnkpLiBUaGUgcHJvZHVjZXItYmVnaW4gKHtAbGluayBIb29rUmVzaWxpZW50UmVzdW1lfSkgL1xuICogY29uc3VtZXItbWF0ZXJpYWxpemVkIHBhaXJpbmcgaXMgdGhlcmVmb3JlIG5vIGxvbmdlciBjb21wbGV0ZSBmb3IgYXRvbWljXG4gKiBsYXp5IHJlc3VtcHRpb25zOyB1c2Uge0BsaW5rIEhvb2tSZXN1bWVTZXR1cFNvdXJjZX0gdG8gb2JzZXJ2ZSB0aGF0IHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBIb29rUmVzaWxpZW50UmVzdW1lTWF0ZXJpYWxpemVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cuaG9vay5yZXNpbGllbnRfcmVzdW1lX21hdGVyaWFsaXplZCdcbik7XG5cbi8qKlxuICogQ29uc3VtZXItc2lkZSBzaWduYWwgKG9uIHRoZSB3b3JrZmxvdyBleGVjdXRpb24gc3Bhbikgb2YgaG93IGEgbGF6eSBob29rXG4gKiByZXN1bWUgaW5pdGlhbGl6ZWQgaXRzIHJlcGxheSBzdGF0ZTpcbiAqXG4gKiAtIGBob29rX3JlY2VpdmVkX3N0cmVhbWA6IHRoZSBob2lzdGVkIGBob29rX3JlY2VpdmVkYCB3cml0ZSByZXR1cm5lZCBhXG4gKiAgIHVzYWJsZSByZXBsYXkgcHJlbG9hZCAocnVuICsgY29tcGxldGUgZXZlbnQgbG9nKSwgc28gdGhlIGludm9jYXRpb25cbiAqICAgc2tpcHBlZCBib3RoIHRoZSBgcnVuX3N0YXJ0ZWRgIHdyaXRlIGFuZCB0aGUgaW5pdGlhbCBgZXZlbnRzLmxpc3RgLlxuICogLSBgaG9va19yZWNlaXZlZF9mYWxsYmFja2A6IHRoZSBob2lzdGVkIHdyaXRlIHN1Y2NlZWRlZCBidXQgcmV0dXJuZWQgbm9cbiAqICAgdXNhYmxlIHByZWxvYWQgKGEgQ0JPUiByZXNwb25zZSBmcm9tIGFuIG9sZGVyIHNlcnZlciwgYSBXb3JsZCB0aGF0XG4gKiAgIGlnbm9yZWQgdGhlIG9wdC1pbiwgYSBib3VuZGVkIGBoYXNNb3JlYCBwYWdlLCBvciBhIHByZWxvYWQgdGhhdCBmYWlsZWRcbiAqICAgdmFsaWRhdGlvbik7IHRoZSBpbnZvY2F0aW9uIGZlbGwgYmFjayB0byB0aGUgYHJ1bl9zdGFydGVkYCBzZXR1cCB3aXRob3V0XG4gKiAgIHJlLXBvc3RpbmcgdGhlIGhvb2suXG4gKlxuICogQWJzZW50IG9uIGxlZ2FjeSBob29rIGRlbGl2ZXJpZXMgKG5vIHJlc3VtZUlkL2RpZ2VzdCkgYW5kIG9uIGV2ZXJ5IG90aGVyXG4gKiBkZWxpdmVyeSBraW5kLCB3aGljaCB0YWtlIHRoZSBgcnVuX3N0YXJ0ZWRgIHNldHVwIHVuY29uZGl0aW9uYWxseS5cbiAqXG4gKiBUaGlzIGlzIGEgbGF0ZW5jeS9zZXR1cC1wYXRoIHNpZ25hbDogaXQgc2F5cyB3aGljaCByZXF1ZXN0cyBpbml0aWFsaXplZFxuICogdGhlIGludm9jYXRpb24sIE5PVCB0aGF0IHRoaXMgY29uc3VtZXIgY3JlYXRlZCB0aGUgYGhvb2tfcmVjZWl2ZWRgIGV2ZW50XG4gKiAodGhlIGhvaXN0ZWQgd3JpdGUgbWF5IGVxdWFsbHkgaGF2ZSBjb252ZXJnZWQgb24gdGhlIHByb2R1Y2VyJ3MsIHNpbmNlXG4gKiBjbGFpbSBvd25lcnNoaXAgaXMgbm90IG9ic2VydmFibGUgY2xpZW50LXNpZGU7IGNmLlxuICoge0BsaW5rIEhvb2tSZXNpbGllbnRSZXN1bWVNYXRlcmlhbGl6ZWR9KS5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tSZXN1bWVTZXR1cFNvdXJjZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cucmVzdW1lX3NldHVwX3NvdXJjZSdcbik7XG5cbi8qKlxuICogUHJvZHVjZXItc2lkZSBzaWduYWwgKG9uIHRoZSBzdXNwZW5zaW9uIHNwYW4pIGNvdW50aW5nIHN0ZXBzIHdob3NlIGRpcmVjdFxuICogYHN0ZXBfY3JlYXRlZGAgd3JpdGUgZmFpbGVkIHRyYW5zaWVudGx5IHdoaWxlIHRoZWlyIGBzdGVwSW5wdXRgLWNhcnJ5aW5nXG4gKiBxdWV1ZSBwdWJsaXNoIHN1Y2NlZWRlZCwgc28gc3RlcCBjcmVhdGlvbiBpcyByZWNvdmVyZWQgdmlhIHRoZSBjb25zdW1lcidzXG4gKiByZS1lbnN1cmUuIE1pcnJvcnMge0BsaW5rIEhvb2tSZXNpbGllbnRSZXN1bWV9LlxuICovXG5leHBvcnQgY29uc3QgU3RlcFJlc2lsaWVudERpc3BhdGNoUmVjb3ZlcmVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdGVwLnJlc2lsaWVudF9kaXNwYXRjaF9yZWNvdmVyZWQnXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXNpZGUgc2lnbmFsIChvbiB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uIHNwYW4pIHRoYXQgdGhpcyBkZWxpdmVyeVxuICogbWF0ZXJpYWxpemVkIHRoZSBgc3RlcF9jcmVhdGVkYCBldmVudCBmcm9tIHRoZSBxdWV1ZSBtZXNzYWdlJ3MgYHN0ZXBJbnB1dGBcbiAqIGJlY2F1c2UgdGhlIHByb2R1Y2VyJ3MgZGlyZWN0IHdyaXRlIGhhZCBub3QgbGFuZGVkLCB3aGljaCBjb21wbGV0ZXMgdGhlXG4gKiByZWNvdmVyeSBwYXRoIHtAbGluayBTdGVwUmVzaWxpZW50RGlzcGF0Y2hSZWNvdmVyZWR9IGJlZ2FuLlxuICovXG5leHBvcnQgY29uc3QgU3RlcFJlc2lsaWVudERpc3BhdGNoTWF0ZXJpYWxpemVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cuc3RlcC5yZXNpbGllbnRfZGlzcGF0Y2hfbWF0ZXJpYWxpemVkJ1xuKTtcblxuLy8gSG9vay10cmlnZ2VyZWQgdGltZS10by1yZXN1bWUgKFRUUikgYXR0cmlidXRlc1xuLy9cbi8vIFNldCBvbiB0aGUgYHN0ZXAuZXhlY3V0ZSA8bmFtZT5gIHNwYW4gb2YgdGhlIEZJUlNUIGR1cmFibGUgc3RlcCBmb2xsb3dpbmcgYVxuLy8gaG9vayByZXN1bWUsIGFuZCBvbmx5IHRoZXJlOiBvbmUgcmVzdW1wdGlvbiBwcm9kdWNlcyBleGFjdGx5IG9uZSBzYW1wbGUsIHNvXG4vLyBhIGxhdGVyIHN0ZXAgaW4gdGhlIHNhbWUgaW52b2NhdGlvbiwgYSByZXRyeSwgb3IgYSByZWRlbGl2ZXJ5IG5ldmVyXG4vLyByZS1yZXBvcnRzIGl0LiBUaGUgcGhhc2VzIGFyZSBub24tb3ZlcmxhcHBpbmcgYW5kIHN1bSBleGFjdGx5IHRvXG4vLyB7QGxpbmsgUmVzdW1lVG90YWxNc307IHNlZSBydW50aW1lL3Jlc3VtZS1sYXRlbmN5LnRzIGZvciB0aGUgYm91bmRhcnlcbi8vIGRlZmluaXRpb25zIGFuZCB0aGUgZW1pc3Npb24gZ2F0ZS5cbi8vXG4vLyBEZWxpYmVyYXRlbHkgY2FycmllcyBubyBgcmVzdW1lSWRgLCBydW4gSUQsIG9yIHRva2VuOiB0aGUgbWV0cmljIGlzIG1lYW50IHRvXG4vLyBiZSBhZ2dyZWdhdGVkIGFjcm9zcyBldmVyeSByZXN1bWUsIGFuZCBoaWdoLWNhcmRpbmFsaXR5IGtleXMgd291bGQgbWFrZSB0aGF0XG4vLyBwcm9oaWJpdGl2ZS4gRXhpc3RpbmcgdHJhY2UtY29ycmVsYXRpb24gZmllbGRzIG9uIHRoZSBzYW1lIHNwYW4gYXJlXG4vLyB1bmNoYW5nZWQgYW5kIHN0aWxsIGlkZW50aWZ5IHRoZSBpbmRpdmlkdWFsIHJ1bi5cblxuLyoqIFRvdGFsIFRUUjogZW50cnkgaW50byBgcmVzdW1lSG9vaygpYCDihpIgaW1tZWRpYXRlbHkgYmVmb3JlIGBzdGVwRm4uYXBwbHkoKWAuICovXG5leHBvcnQgY29uc3QgUmVzdW1lVG90YWxNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnRvdGFsX21zJ1xuKTtcblxuLyoqIFBoYXNlOiBgcmVzdW1lSG9vaygpYCBlbnRyeSDihpIgdGhlIHF1ZXVlIHB1Ymxpc2ggYmVpbmcgcmVxdWVzdGVkLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVByb2R1Y2VyUHJlcE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2UucHJvZHVjZXJfcHJlcF9tcydcbik7XG5cbi8qKiBQaGFzZTogcXVldWUgcHVibGlzaCByZXF1ZXN0ZWQg4oaSIHRoZSBmaW5hbCBjb25zdW1lcidzIGhhbmRsZXIgYmVpbmcgZW50ZXJlZC4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVRdWV1ZURlbGl2ZXJ5TXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5xdWV1ZV9kZWxpdmVyeV9tcydcbik7XG5cbi8qKiBQaGFzZTogY29uc3VtZXIgZW50cnkg4oaSIHJlcGxheSBiZWdpbm5pbmcuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU2V0dXBNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnJlc3VtZV9zZXR1cF9tcydcbik7XG5cbi8qKiBQaGFzZTogcmVwbGF5IGJlZ2lubmluZyDihpIgdGhlIG5leHQgZHVyYWJsZSBzdGVwIGJlaW5nIGVuY291bnRlcmVkLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVJlcGxheU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2UucmVwbGF5X21zJ1xuKTtcblxuLyoqIFBoYXNlOiBzdGVwIGVuY291bnRlcmVkIOKGkiB0aGUgYHN0ZXBfc3RhcnRlZGAgcmVxdWVzdCBiZWdpbm5pbmcuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU3RlcERpc3BhdGNoTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5zdGVwX2Rpc3BhdGNoX21zJ1xuKTtcblxuLyoqXG4gKiBQaGFzZTogYHN0ZXBfc3RhcnRlZGAgcmVxdWVzdCBiZWdpbm5pbmcg4oaSIGl0cyByZXNwb25zZSByZXR1cm5pbmcuIE9taXR0ZWRcbiAqIHVuZGVyIG9wdGltaXN0aWMgaW5saW5lIHN0YXJ0LCB3aGVyZSB0aGUgY2xhaW0gaXMgbm90IGF3YWl0ZWQgYmVmb3JlIHRoZVxuICogYm9keSBydW5zIGFuZCB0aGVyZWZvcmUgaGFzIG5vIGNvbXBsZXRpb24gaW5zdGFudCBhdCB0aGF0IHBvaW50OyB0aGUgdGltZVxuICogaXMgdGhlbiByZXBvcnRlZCBlbnRpcmVseSBhcyB7QGxpbmsgUmVzdW1lU3RlcFByZXBhcmVNc30uXG4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVTdGVwQ2xhaW1NcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnN0ZXBfY2xhaW1fbXMnXG4pO1xuXG4vKipcbiAqIFBoYXNlOiBjbGFpbSByZXR1cm5pbmcg4oaSIGltbWVkaWF0ZWx5IGJlZm9yZSBgc3RlcEZuLmFwcGx5KClgLiBEZWxpYmVyYXRlbHlcbiAqIGluY2x1ZGVzIGVuY3J5cHRpb24ta2V5IHJlc29sdXRpb24sIGFyZ3VtZW50IGh5ZHJhdGlvbiwgYW5kIHN0ZXAtY29udGV4dFxuICogc2V0dXA7IGB3b3JrZmxvdy5xdWV1ZS5kZXNlcmlhbGl6ZV90aW1lX21zYCBzdGlsbCBpc29sYXRlcyBoeWRyYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVTdGVwUHJlcGFyZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2Uuc3RlcF9wcmVwYXJlX21zJ1xuKTtcblxuLyoqIFdoYXQgdHJpZ2dlcmVkIHRoZSBtZWFzdXJlZCByZXN1bXB0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVRyaWdnZXIgPSBTZW1hbnRpY0NvbnZlbnRpb248J2hvb2snPihcbiAgJ3dvcmtmbG93LnJlc3VtZS50cmlnZ2VyJ1xuKTtcblxuLyoqIFdoaWNoIGByZXN1bWVIb29rKClgIGRpc3BhdGNoIHBhdGggcHJvZHVjZWQgdGhpcyByZXN1bWUuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU3RyYXRlZ3kgPSBTZW1hbnRpY0NvbnZlbnRpb248J3BhcmFsbGVsJyB8ICdzZXF1ZW50aWFsJz4oXG4gICd3b3JrZmxvdy5yZXN1bWUuc3RyYXRlZ3knXG4pO1xuXG4vKipcbiAqIEhvdyB0aGUgY29uc3VtaW5nIGludm9jYXRpb24gaW5pdGlhbGl6ZWQgcmVwbGF5IHN0YXRlLiBEaXN0aW5jdCBmcm9tIHRoZVxuICogcHJlLWV4aXN0aW5nIHtAbGluayBIb29rUmVzdW1lU2V0dXBTb3VyY2V9IChgd29ya2Zsb3cucmVzdW1lX3NldHVwX3NvdXJjZWAsXG4gKiBvbiB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uIHNwYW4pLCB3aGljaCByZXBvcnRzIHRoZSBmaW5lci1ncmFpbmVkXG4gKiBob2lzdGVkLXdyaXRlIG91dGNvbWU7IHRoaXMgb25lIGlzIHRoZSBUVFIgZGltZW5zaW9uIGFuZCBzaGFyZXMgdGhlIG1ldHJpYydzXG4gKiB0aHJlZS12YWx1ZSB2b2NhYnVsYXJ5LlxuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU2V0dXBTb3VyY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdob29rX3ByZWxvYWQnIHwgJ3J1bl9zdGFydGVkJyB8ICdldmVudF9sb2FkJ1xuPignd29ya2Zsb3cucmVzdW1lLnNldHVwX3NvdXJjZScpO1xuXG4vKiogV2hldGhlciB0aGUgbWVhc3VyZWQgc3RlcCByYW4gaW4gdGhlIHJlc3VtaW5nIGludm9jYXRpb24gb3IgYSBxdWV1ZWQgb25lLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVN0ZXBFeGVjdXRpb24gPSBTZW1hbnRpY0NvbnZlbnRpb248J2lubGluZScgfCAnZGlzcGF0Y2hlZCc+KFxuICAnd29ya2Zsb3cucmVzdW1lLnN0ZXBfZXhlY3V0aW9uJ1xuKTtcblxuLy8gV2ViaG9vayBhdHRyaWJ1dGVzXG5cbi8qKiBOdW1iZXIgb2Ygd2ViaG9vayBoYW5kbGVycyB0cmlnZ2VyZWQgKi9cbmV4cG9ydCBjb25zdCBXZWJob29rSGFuZGxlcnNUcmlnZ2VyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dlYmhvb2suaGFuZGxlcnMudHJpZ2dlcmVkJ1xuKTtcblxuLy8gU3VzcGVuc2lvbiBhdHRyaWJ1dGVzXG5cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25TdGF0ZSA9IFNlbWFudGljQ29udmVudGlvbjwnc3VzcGVuZGVkJz4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLnN0YXRlJ1xuKTtcbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25Ib29rQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24uaG9va19jb3VudCdcbik7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uU3RlcENvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLnN0ZXBfY291bnQnXG4pO1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvbldhaXRDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi53YWl0X2NvdW50J1xuKTtcblxuLy8gV29ybGQvU3RvcmFnZSBhdHRyaWJ1dGVzIC0gU3RhbmRhcmQgT1RFTCBIVFRQIGNvbnZlbnRpb25zXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvaHR0cC9odHRwLXNwYW5zL1xuXG4vKiogSFRUUCByZXF1ZXN0IG1ldGhvZCAoc3RhbmRhcmQgT1RFTDogaHR0cC5yZXF1ZXN0Lm1ldGhvZCkgKi9cbmV4cG9ydCBjb25zdCBIdHRwUmVxdWVzdE1ldGhvZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnaHR0cC5yZXF1ZXN0Lm1ldGhvZCdcbik7XG5cbi8qKiBSb3V0ZSBwYXR0ZXJuIGZvciB0aGUgcmVxdWVzdCAoc3RhbmRhcmQgT1RFTDogaHR0cC5yb3V0ZSkgKi9cbmV4cG9ydCBjb25zdCBIdHRwUm91dGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignaHR0cC5yb3V0ZScpO1xuXG4vKiogRnVsbCBVUkwgb2YgdGhlIHJlcXVlc3QgKHN0YW5kYXJkIE9URUw6IHVybC5mdWxsKSAqL1xuZXhwb3J0IGNvbnN0IFVybEZ1bGwgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigndXJsLmZ1bGwnKTtcblxuLyoqIFNlcnZlciBob3N0bmFtZSAoc3RhbmRhcmQgT1RFTDogc2VydmVyLmFkZHJlc3MpICovXG5leHBvcnQgY29uc3QgU2VydmVyQWRkcmVzcyA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzZXJ2ZXIuYWRkcmVzcycpO1xuXG4vKiogU2VydmVyIHBvcnQgKHN0YW5kYXJkIE9URUw6IHNlcnZlci5wb3J0KSAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlclBvcnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc2VydmVyLnBvcnQnKTtcblxuLyoqIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgKHN0YW5kYXJkIE9URUw6IGh0dHAucmVzcG9uc2Uuc3RhdHVzX2NvZGUpICovXG5leHBvcnQgY29uc3QgSHR0cFJlc3BvbnNlU3RhdHVzQ29kZSA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnaHR0cC5yZXNwb25zZS5zdGF0dXNfY29kZSdcbik7XG5cbi8qKiBFcnJvciB0eXBlIHdoZW4gcmVxdWVzdCBmYWlscyAoc3RhbmRhcmQgT1RFTDogZXJyb3IudHlwZSkgKi9cbmV4cG9ydCBjb25zdCBFcnJvclR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignZXJyb3IudHlwZScpO1xuXG4vLyBXb3JsZC1zcGVjaWZpYyBjdXN0b20gYXR0cmlidXRlcyAoZm9yIHdvcmtmbG93LXNwZWNpZmljIGNvbnRleHQpXG5cbi8qKiBGb3JtYXQgdXNlZCBmb3IgcGFyc2luZyByZXNwb25zZSBib2R5IChjYm9yIG9yIGpzb24pICovXG5leHBvcnQgY29uc3QgV29ybGRQYXJzZUZvcm1hdCA9IFNlbWFudGljQ29udmVudGlvbjwnY2JvcicgfCAnanNvbic+KFxuICAnd29ya2Zsb3cud29ybGQucGFyc2UuZm9ybWF0J1xuKTtcblxuLy8gRXZlbnQgbG9hZGluZyBhdHRyaWJ1dGVzXG5cbi8qKiBOdW1iZXIgb2YgcGFnaW5hdGlvbiBwYWdlcyBsb2FkZWQgd2hlbiBmZXRjaGluZyB3b3JrZmxvdyBldmVudHMgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0V2ZW50c1BhZ2VzTG9hZGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5ldmVudHMucGFnZXNfbG9hZGVkJ1xuKTtcblxuLy8gUXVldWUgdGltaW5nIGJyZWFrZG93biBhdHRyaWJ1dGVzICh3b3JrZmxvdy1zcGVjaWZpYylcblxuLyoqIFRpbWUgc3BlbnQgZGVzZXJpYWxpemluZyB0aGUgcXVldWUgbWVzc2FnZSBpbiBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBjb25zdCBRdWV1ZURlc2VyaWFsaXplVGltZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5kZXNlcmlhbGl6ZV90aW1lX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgZXhlY3V0aW5nIHRoZSBoYW5kbGVyIGxvZ2ljIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlRXhlY3V0aW9uVGltZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5leGVjdXRpb25fdGltZV9tcydcbik7XG5cbi8qKiBUaW1lIHNwZW50IHNlcmlhbGl6aW5nIHRoZSByZXNwb25zZSBpbiBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBjb25zdCBRdWV1ZVNlcmlhbGl6ZVRpbWVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUuc2VyaWFsaXplX3RpbWVfbXMnXG4pO1xuXG4vLyBQYXlsb2FkIGNvbXByZXNzaW9uIGF0dHJpYnV0ZXMgKHpzdGQgcHJlZmVycmVkLCBnemlwIGZhbGxiYWNrOyBzcGVjVmVyc2lvbiA+PSA1KVxuLy9cbi8vIFNpemVzIGFyZSBtZWFzdXJlZCBhdCB0aGUgY29tcHJlc3Npb24gYm91bmRhcnk6IGJlZm9yZSBlbmNyeXB0aW9uIG9uIHRoZVxuLy8gd3JpdGUgcGF0aCBhbmQgYWZ0ZXIgZGVjcnlwdGlvbiBvbiB0aGUgcmVhZCBwYXRoLiBUaGV5IHRoZXJlZm9yZSByZWZsZWN0XG4vLyBjb21wcmVzc2lvbidzIGVmZmVjdCwgbm90IHRoZSBhdC1yZXN0IHNpemUgKHdoaWNoIGFsc28gaW5jbHVkZXMgdGhlXG4vLyB+MjgtYnl0ZSBgZW5jcmAgZW52ZWxvcGUgYW5kLCBvbiBzb21lIGJhY2tlbmRzLCBiYXNlNjQgZXhwYW5zaW9uKS5cblxuLyoqIFdoZXRoZXIgdGhpcyBzZXJpYWxpemUvZGVzZXJpYWxpemUgd2FzIGEgd3JpdGUgb3IgcmVhZC4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uT3BlcmF0aW9uID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnc2VyaWFsaXplJyB8ICdkZXNlcmlhbGl6ZSdcbj4oJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24ub3BlcmF0aW9uJyk7XG5cbi8qKiBXaGV0aGVyIGEgY29tcHJlc3Npb24gY29kZWMgd2FzIGFwcGxpZWQgKHdyaXRlKSAvIHByZXNlbnQgKHJlYWQpLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25Db21wcmVzc2VkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5jb21wcmVzc2VkJ1xuKTtcblxuLyoqIFdoaWNoIGNvbXByZXNzaW9uIGNvZGVjIGFwcGxpZWQgLyB3YXMgcHJlc2VudCAoYHpzdGRgLCBgZ3ppcGAsIG9yIGBub25lYCkuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkNvZGVjID0gU2VtYW50aWNDb252ZW50aW9uPCd6c3RkJyB8ICdnemlwJyB8ICdub25lJz4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmNvZGVjJ1xuKTtcblxuLyoqIExvZ2ljYWwgKHVuY29tcHJlc3NlZCwgZGV2YWx1ZS1wcmVmaXhlZCkgcGF5bG9hZCBzaXplIGluIGJ5dGVzLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25VbmNvbXByZXNzZWRCeXRlcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi51bmNvbXByZXNzZWRfYnl0ZXMnXG4pO1xuXG4vKiogU3RvcmVkIChwb3N0LWNvbXByZXNzaW9uLCBwcmUtZW5jcnlwdGlvbikgcGF5bG9hZCBzaXplIGluIGJ5dGVzLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25TdG9yZWRCeXRlcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5zdG9yZWRfYnl0ZXMnXG4pO1xuXG4vKiogRnJhY3Rpb24gb2YgYnl0ZXMgc2F2ZWQgYnkgY29tcHJlc3Npb24gKDAuLjEpOyBzZXQgb25seSB3aGVuIGNvbXByZXNzZWQuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkNvbXByZXNzaW9uUmF0aW8gPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uY29tcHJlc3Npb25fcmF0aW8nXG4pO1xuXG4vKipcbiAqIE51bWJlciBvZiB3b3JrZmxvdyAoZ3Vlc3QpIGNvZGUgZXhlY3V0aW9ucyBzZXJpYWxpemF0aW9uIGNvdWxkIG5vdCBhdm9pZFxuICogKGdldHRlcnMsIHByb3hpZXMsIGN1c3RvbSBzZXJpYWxpemVycyk7IHNldCBvbmx5IHdoZW4gbm9uLXplcm8uXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uR3Vlc3RDb2RlRXhlY3V0aW9ucyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5ndWVzdF9jb2RlX2V4ZWN1dGlvbnMnXG4pO1xuXG4vKipcbiAqIERlZHVwbGljYXRlZCBga2luZCAoZGV0YWlsKWAgZGVzY3JpcHRpb25zIG9mIHRoZSBndWVzdC1jb2RlIGV4ZWN1dGlvbnM7XG4gKiBzZXQgb25seSB3aGVuIG5vbi16ZXJvLlxuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkd1ZXN0Q29kZURldGFpbHMgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nW10+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5ndWVzdF9jb2RlX2RldGFpbHMnXG4pO1xuXG4vLyBSUEMvUGVlciBTZXJ2aWNlIGF0dHJpYnV0ZXMgLSBGb3Igc2VydmljZSBtYXBzIGFuZCBkZXBlbmRlbmN5IHRyYWNraW5nXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvcnBjL3JwYy1zcGFucy9cblxuLyoqIFRoZSByZW1vdGUgc2VydmljZSBuYW1lIGZvciBEYXRhZG9nIHNlcnZpY2UgbWFwcyAoRGF0YWRvZy1zcGVjaWZpYzogcGVlci5zZXJ2aWNlKSAqL1xuZXhwb3J0IGNvbnN0IFBlZXJTZXJ2aWNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3BlZXIuc2VydmljZScpO1xuXG4vKiogUlBDIHN5c3RlbSBpZGVudGlmaWVyIChzdGFuZGFyZCBPVEVMOiBycGMuc3lzdGVtKSAqL1xuZXhwb3J0IGNvbnN0IFJwY1N5c3RlbSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdycGMuc3lzdGVtJyk7XG5cbi8qKiBSUEMgc2VydmljZSBuYW1lIChzdGFuZGFyZCBPVEVMOiBycGMuc2VydmljZSkgKi9cbmV4cG9ydCBjb25zdCBScGNTZXJ2aWNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3JwYy5zZXJ2aWNlJyk7XG5cbi8qKiBSUEMgbWV0aG9kIG5hbWUgKHN0YW5kYXJkIE9URUw6IHJwYy5tZXRob2QpICovXG5leHBvcnQgY29uc3QgUnBjTWV0aG9kID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3JwYy5tZXRob2QnKTtcblxuLy8gRXJyb3IgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgZXJyb3IgY29udmVudGlvbnNcbi8vIFNlZTogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9leGNlcHRpb25zL2V4Y2VwdGlvbnMtc3BhbnMvXG5cbi8qKiBXaGV0aGVyIHRoZSBlcnJvciBpcyByZXRyeWFibGUgKHdvcmtmbG93LXNwZWNpZmljKSAqL1xuZXhwb3J0IGNvbnN0IEVycm9yUmV0cnlhYmxlID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCdlcnJvci5yZXRyeWFibGUnKTtcblxuLyoqIEVycm9yIGNhdGVnb3J5ICh3b3JrZmxvdy1zcGVjaWZpYzogZmF0YWwsIHJldHJ5YWJsZSwgdHJhbnNpZW50KSAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ2F0ZWdvcnkgPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdmYXRhbCcgfCAncmV0cnlhYmxlJyB8ICd0cmFuc2llbnQnXG4+KCdlcnJvci5jYXRlZ29yeScpO1xuIl19
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export declare function getWorkflowTraceMode(): WorkflowTraceMode;
|
|
|
25
25
|
* Returns whether a serialized trace carrier is usable, i.e. present and
|
|
26
26
|
* non-empty. `serializeTraceCarrier()` returns `{}` when no OTEL SDK is
|
|
27
27
|
* registered or no span is active, and `start()` always attaches the
|
|
28
|
-
* carrier to the first queue message
|
|
28
|
+
* carrier to the first queue message, so an empty carrier must be treated
|
|
29
29
|
* the same as an absent one wherever the trace-mode logic branches.
|
|
30
30
|
*/
|
|
31
31
|
export declare function isUsableTraceCarrier(carrier: Record<string, string> | undefined): carrier is Record<string, string>;
|
|
@@ -33,7 +33,7 @@ export declare function isUsableTraceCarrier(carrier: Record<string, string> | u
|
|
|
33
33
|
* Returns the trace carrier to attach to messages the current invocation
|
|
34
34
|
* enqueues. In `linked` mode the ORIGINAL run-origin carrier is forwarded
|
|
35
35
|
* unchanged (when usable) so every future invocation links back to the same
|
|
36
|
-
* origin; otherwise
|
|
36
|
+
* origin; otherwise (`continuous` mode, or no usable incoming carrier)
|
|
37
37
|
* the current (active) context is serialized, so the trace keeps chaining
|
|
38
38
|
* (continuous) or the first instrumented invocation becomes the de-facto
|
|
39
39
|
* origin (linked).
|
|
@@ -45,7 +45,7 @@ export declare function getNextTraceCarrier(traceMode: WorkflowTraceMode, incomi
|
|
|
45
45
|
*
|
|
46
46
|
* - In `linked` mode the invocation span is a CHILD of the local delivery
|
|
47
47
|
* (flow-route) context, so the only link is to the run-origin context
|
|
48
|
-
* from the message's trace carrier
|
|
48
|
+
* from the message's trace carrier, connecting this bounded per-invocation
|
|
49
49
|
* trace back to where the run was started. The run-origin context is a
|
|
50
50
|
* link, never a parent, and re-enqueues forward the original carrier
|
|
51
51
|
* unchanged, so the whole run is never stitched into one giant trace.
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAQjD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|