@workflow/core 5.0.0-beta.44 → 5.0.0-beta.47
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/attribute-changes.d.ts +3 -5
- package/dist/attribute-changes.d.ts.map +1 -1
- package/dist/attribute-changes.js +2 -2
- package/dist/capabilities.d.ts +6 -5
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +14 -12
- package/dist/events-consumer.d.ts +30 -7
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +67 -11
- package/dist/flushable-stream.js +2 -2
- package/dist/global.d.ts +3 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +8 -5
- package/dist/private.d.ts +20 -14
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +67 -29
- package/dist/replay-payload-cache.d.ts +13 -17
- package/dist/replay-payload-cache.d.ts.map +1 -1
- package/dist/replay-payload-cache.js +55 -57
- package/dist/runtime/constants.d.ts +3 -3
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +4 -4
- package/dist/runtime/helpers.d.ts +15 -34
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +18 -43
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
- package/dist/runtime/quickjs-entrypoint.js +8 -1
- package/dist/runtime/quickjs-runtime.js +7 -1
- package/dist/runtime/resume-hook.d.ts +20 -12
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +195 -249
- package/dist/runtime/resume-latency.d.ts +13 -6
- package/dist/runtime/resume-latency.d.ts.map +1 -1
- package/dist/runtime/resume-latency.js +4 -2
- package/dist/runtime/run.d.ts +1 -1
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +3 -2
- package/dist/runtime/start.js +12 -10
- package/dist/runtime/step-latency.d.ts +31 -14
- package/dist/runtime/step-latency.d.ts.map +1 -1
- package/dist/runtime/step-latency.js +19 -13
- package/dist/runtime/suspension-handler.d.ts +9 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +41 -41
- package/dist/runtime/vm-mode.d.ts +1 -1
- package/dist/runtime/vm-mode.d.ts.map +1 -1
- package/dist/runtime/vm-mode.js +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +278 -125
- package/dist/serialization/hardened.d.ts +5 -4
- package/dist/serialization/hardened.d.ts.map +1 -1
- package/dist/serialization/hardened.js +7 -1
- package/dist/serialization-format.js +2 -2
- package/dist/serialization.d.ts +8 -9
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +32 -25
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +3 -11
- package/dist/telemetry/semantic-conventions.d.ts +51 -8
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +38 -5
- package/dist/telemetry.d.ts +12 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +62 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/script-cache.d.ts +9 -11
- package/dist/vm/script-cache.d.ts.map +1 -1
- package/dist/vm/script-cache.js +25 -40
- package/dist/workflow/attribute-dispatcher.d.ts.map +1 -1
- package/dist/workflow/attribute-dispatcher.js +3 -6
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +6 -15
- package/dist/workflow.d.ts +16 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +73 -29
- package/docs/foundations/errors-and-retries.mdx +1 -1
- package/package.json +6 -6
|
@@ -59,6 +59,9 @@ export const WorkflowStartedAt = SemanticConvention('workflow.started_at');
|
|
|
59
59
|
export const WorkflowEventsCount = SemanticConvention('workflow.events.count');
|
|
60
60
|
/** Whether workflow execution starts with replay or resumes a retained VM */
|
|
61
61
|
export const WorkflowExecutionMode = SemanticConvention('workflow.execution.mode');
|
|
62
|
+
/** Whether the compiled application workflow bundle was cached. */
|
|
63
|
+
export const WorkflowBundleCompileCacheHit = SemanticConvention('workflow.bundle.compile.cache_hit');
|
|
64
|
+
export const WorkflowReplayLoadSource = SemanticConvention('workflow.replay.load.source');
|
|
62
65
|
/**
|
|
63
66
|
* Events the replay walked past that no consumer claimed, still held when the
|
|
64
67
|
* replay stopped.
|
|
@@ -254,15 +257,41 @@ export const HookFound = SemanticConvention('workflow.hook.found');
|
|
|
254
257
|
* `hook_received` write failed transiently but the queue dispatch succeeded, so
|
|
255
258
|
* the resume is recovered via the consumer's re-ensure. Corresponds to
|
|
256
259
|
* `ResumedHook.resilientResume === true`.
|
|
260
|
+
*
|
|
261
|
+
* No longer emitted: current producers require the durable event write to
|
|
262
|
+
* succeed. Retained so dashboards and queries built on the attribute keep
|
|
263
|
+
* resolving while older producers are still deployed.
|
|
257
264
|
*/
|
|
258
265
|
export const HookResilientResume = SemanticConvention('workflow.hook.resilient_resume');
|
|
266
|
+
/**
|
|
267
|
+
* Producer-side signal (on the `hook.resume` span) that the durable
|
|
268
|
+
* `hook_received` write COMMITTED. Stamped after the write resolves, so it
|
|
269
|
+
* distinguishes a committed resume from an attempted one — an entry-time
|
|
270
|
+
* attribute cannot, because a span that later records an exception may have
|
|
271
|
+
* failed either before or after the commit.
|
|
272
|
+
*/
|
|
273
|
+
export const HookResumeCommitted = SemanticConvention('workflow.hook.resume_committed');
|
|
274
|
+
/**
|
|
275
|
+
* Producer-side signal (on the `hook.resume` span) that the workflow wake was
|
|
276
|
+
* ACCEPTED by the queue, stamped after the publish resolves.
|
|
277
|
+
*
|
|
278
|
+
* Together with {@link HookResumeCommitted} this makes stranded resumes
|
|
279
|
+
* queryable: `resume_committed=true` with `wake_published` absent is a resume
|
|
280
|
+
* whose durable event exists but whose wake publish failed (the caller was
|
|
281
|
+
* told, but nothing re-drives it), and `resume_committed=true` +
|
|
282
|
+
* `wake_published=true` with no subsequent workflow execution for the run is
|
|
283
|
+
* a wake the queue accepted but never delivered. Both are detection-only
|
|
284
|
+
* signals — nothing recovers such a run automatically today beyond a later
|
|
285
|
+
* wake from any other source.
|
|
286
|
+
*/
|
|
287
|
+
export const HookWakePublished = SemanticConvention('workflow.hook.wake_published');
|
|
259
288
|
/**
|
|
260
289
|
* Consumer-side signal (on the workflow execution span) that this replay
|
|
261
290
|
* materialized the `hook_received` event from the queue message's `hookInput`
|
|
262
|
-
* because
|
|
263
|
-
*
|
|
291
|
+
* because no committed event was found, which completes the recovery path
|
|
292
|
+
* {@link HookResilientResume} began.
|
|
264
293
|
*
|
|
265
|
-
* Legacy / non-atomic re-ensure signal only.
|
|
294
|
+
* Legacy / non-atomic re-ensure signal only. Legacy atomic lazy resumes
|
|
266
295
|
* (resumeId + digest) go through the hoisted preload write instead, whose
|
|
267
296
|
* response cannot tell whether the producer or the consumer won the
|
|
268
297
|
* `(runId, resumeId)` claim, so this attribute is deliberately NOT emitted
|
|
@@ -349,7 +378,11 @@ export const ResumeStepClaimMs = SemanticConvention('workflow.resume.phase.step_
|
|
|
349
378
|
export const ResumeStepPrepareMs = SemanticConvention('workflow.resume.phase.step_prepare_ms');
|
|
350
379
|
/** What triggered the measured resumption. */
|
|
351
380
|
export const ResumeTrigger = SemanticConvention('workflow.resume.trigger');
|
|
352
|
-
/**
|
|
381
|
+
/**
|
|
382
|
+
* Which `resumeHook()` dispatch path produced this resume. `parallel` only
|
|
383
|
+
* appears for messages published by an older producer, which wrote
|
|
384
|
+
* `hook_received` itself in parallel with the publish.
|
|
385
|
+
*/
|
|
353
386
|
export const ResumeStrategy = SemanticConvention('workflow.resume.strategy');
|
|
354
387
|
/**
|
|
355
388
|
* How the consuming invocation initialized replay state. Distinct from the
|
|
@@ -442,4 +475,4 @@ export const RpcMethod = SemanticConvention('rpc.method');
|
|
|
442
475
|
export const ErrorRetryable = SemanticConvention('error.retryable');
|
|
443
476
|
/** Error category (workflow-specific: fatal, retryable, transient) */
|
|
444
477
|
export const ErrorCategory = SemanticConvention('error.category');
|
|
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
|
|
478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBSUg7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUksR0FBRyxLQUFlO0lBQy9DLE9BQU8sQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsc0JBQXNCO0FBRXRCLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUVqRCxvQkFBb0IsQ0FBQyxDQUFDO0FBRXhCLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELHFCQUFxQixDQUFDLENBQUM7QUFFekIscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtC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LGlCQUFpQixDQUFDLENBQUM7QUFFN0Usc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FFN0MsZ0JBQWdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9ucyBmb3IgVmVyY2VsIFdvcmtmbG93IHRlbGVtZXRyeS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdGFuZGFyZGl6ZWQgdGVsZW1ldHJ5IGF0dHJpYnV0ZXMgZm9sbG93aW5nIE9wZW5UZWxlbWV0cnkgc2VtYW50aWMgY29udmVudGlvbnNcbiAqIGZvciBpbnN0cnVtZW50aW5nIHdvcmtmbG93IGV4ZWN1dGlvbiwgc3RlcCBwcm9jZXNzaW5nLCBhbmQgcmVsYXRlZCBvcGVyYXRpb25zLiBFYWNoIGV4cG9ydGVkIGZ1bmN0aW9uXG4gKiBjcmVhdGVzIGEgcHJvcGVybHkgZm9ybWF0dGVkIGF0dHJpYnV0ZSBvYmplY3QgZm9yIHVzZSB3aXRoIE9wZW5UZWxlbWV0cnkgc3BhbnMuXG4gKlxuICogVGhlIHNlbWFudGljIGNvbnZlbnRpb25zIGFyZSBvcmdhbml6ZWQgaW50byBzZXZlcmFsIGNhdGVnb3JpZXM6XG4gKiAtICoqV29ya2Zsb3cgYXR0cmlidXRlcyoqOiBUcmFjayB3b3JrZmxvdyBsaWZlY3ljbGUsIHN0YXR1cywgYW5kIG1ldGFkYXRhXG4gKiAtICoqU3RlcCBhdHRyaWJ1dGVzKio6IE1vbml0b3IgaW5kaXZpZHVhbCBzdGVwIGV4ZWN1dGlvbiwgcmV0cmllcywgYW5kIHJlc3VsdHNcbiAqIC0gKipRdWV1ZSBhdHRyaWJ1dGVzKio6IEluc3RydW1lbnQgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zXG4gKiAtICoqRGVwbG95bWVudCBhdHRyaWJ1dGVzKio6IENhcHR1cmUgZGVwbG95bWVudCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxuICpcbiAqIEFsbCBhdHRyaWJ1dGUgZnVuY3Rpb25zIGFyZSB0eXBlLXNhZmUgYW5kIHVzZSBleGlzdGluZyBiYWNrZW5kIHR5cGVzIHRvIGVuc3VyZVxuICogY29uc2lzdGVuY3kgYmV0d2VlbiB0ZWxlbWV0cnkgZGF0YSBhbmQgYWN0dWFsIHN5c3RlbSBzdGF0ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcbiAqXG4gKiAvLyBTZXQgd29ya2Zsb3cgYXR0cmlidXRlcyBvbiBhIHNwYW5cbiAqIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd05hbWUoJ215LXdvcmtmbG93JyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd09wZXJhdGlvbignc3RhcnQnKSxcbiAqICAgLi4uQXR0cmlidXRlLldvcmtmbG93UnVuU3RhdHVzKCdydW5uaW5nJyksXG4gKiB9KTtcbiAqXG4gKiAvLyBTZXQgc3RlcCBhdHRyaWJ1dGVzXG4gKiBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICogICAuLi5BdHRyaWJ1dGUuU3RlcE5hbWUoJ3Byb2Nlc3MtZGF0YScpLFxuICogICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnY29tcGxldGVkJyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5TdGVwQXR0ZW1wdCgxKSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi99IE9wZW5UZWxlbWV0cnkgU2VtYW50aWMgQ29udmVudGlvbnNcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmltcG9ydCB0eXBlIHsgTWVzc2FnZUlkLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlbWFudGljIGNvbnZlbnRpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGF0dHJpYnV0ZSBvYmplY3QuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZSBmb2xsb3dpbmcgT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9uc1xuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYW4gYXR0cmlidXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBTZW1hbnRpY0NvbnZlbnRpb248VD4oLi4ubmFtZXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiAodmFsdWU6IFQpID0+XG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKG5hbWVzLm1hcCgobmFtZSkgPT4gW25hbWUsIHZhbHVlXSBhcyBjb25zdCkpO1xufVxuXG4vLyBXb3JrZmxvdyBhdHRyaWJ1dGVzXG5cbi8qKiBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cgYmVpbmcgZXhlY3V0ZWQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd05hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cubmFtZScpO1xuXG4vKiogVGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgb24gdGhlIHdvcmtmbG93ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dPcGVyYXRpb24gPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdzdGFydCcgfCAnZXhlY3V0ZScgfCAnZXhlY3V0ZV92MicgfCAncnVuJ1xuPignd29ya2Zsb3cub3BlcmF0aW9uJyk7XG5cbi8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgYSBzcGVjaWZpYyB3b3JrZmxvdyBydW4gaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1J1bklkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93LnJ1bi5pZCcpO1xuXG4vKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHdvcmtmbG93IHJ1biAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuU3RhdHVzID0gU2VtYW50aWNDb252ZW50aW9uPFxuICBXb3JrZmxvd1J1blsnc3RhdHVzJ10gfCAnd29ya2Zsb3dfc3VzcGVuZGVkJ1xuPignd29ya2Zsb3cucnVuLnN0YXR1cycpO1xuXG4vKiogVGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzdGFydGVkIChVbml4IHRpbWVzdGFtcCkgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N0YXJ0ZWRBdCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3RhcnRlZF9hdCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgZXZlbnRzIHByb2Nlc3NlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFdmVudHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLmNvdW50J1xuKTtcblxuLyoqIFdoZXRoZXIgd29ya2Zsb3cgZXhlY3V0aW9uIHN0YXJ0cyB3aXRoIHJlcGxheSBvciByZXN1bWVzIGEgcmV0YWluZWQgVk0gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0V4ZWN1dGlvbk1vZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J3JlcGxheScgfCAncmV0YWluZWQnPihcbiAgJ3dvcmtmbG93LmV4ZWN1dGlvbi5tb2RlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhlIGNvbXBpbGVkIGFwcGxpY2F0aW9uIHdvcmtmbG93IGJ1bmRsZSB3YXMgY2FjaGVkLiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QnVuZGxlQ29tcGlsZUNhY2hlSGl0ID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cuYnVuZGxlLmNvbXBpbGUuY2FjaGVfaGl0J1xuKTtcblxuLyoqIE9wZXJhdGlvbiB0aGF0IHN1cHBsaWVkIGV2ZW50cyB0byB0aGUgY3VycmVudCByZXBsYXkuICovXG5leHBvcnQgdHlwZSBXb3JrZmxvd1JlcGxheUxvYWRTb3VyY2UgPVxuICB8ICdydW5fc3RhcnRlZCdcbiAgfCAnaG9va19wcmVsb2FkJ1xuICB8ICdldmVudHNfbGlzdCdcbiAgfCAnZXZlbnRzX2xpc3RfaW5jcmVtZW50YWwnO1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UmVwbGF5TG9hZFNvdXJjZSA9XG4gIFNlbWFudGljQ29udmVudGlvbjxXb3JrZmxvd1JlcGxheUxvYWRTb3VyY2U+KCd3b3JrZmxvdy5yZXBsYXkubG9hZC5zb3VyY2UnKTtcblxuLyoqXG4gKiBFdmVudHMgdGhlIHJlcGxheSB3YWxrZWQgcGFzdCB0aGF0IG5vIGNvbnN1bWVyIGNsYWltZWQsIHN0aWxsIGhlbGQgd2hlbiB0aGVcbiAqIHJlcGxheSBzdG9wcGVkLlxuICpcbiAqIEEgbm9uLXplcm8gY291bnQgb24gYSBzdXNwZW5zaW9uIGlzIG9yZGluYXJ5OiBhbiBvdXQtb2YtYmFuZCBkZWxpdmVyeSB0aGF0XG4gKiBsYW5kZWQgYWhlYWQgb2YgdGhlIGNvZGUgdGhhdCByZWFkcyBpdCB3YWl0cyBmb3IgdGhlIHJlcGxheSB0aGF0IGdldHMgdGhlcmUuXG4gKiBGcm9tIGluc2lkZSBvbmUgcmVwbGF5IHRoYXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBldmVudCBubyByZXBsYXkgd2lsbFxuICogZXZlciBjbGFpbSwgYmVjYXVzZSB0aGUgdHdvIGRpZmZlciBvbmx5IGluIHdoYXQgdGhlIG5leHQgcmVwbGF5IGRvZXMuIFNvIHRoZVxuICogY291bnQgZ29lcyBvbiB0aGUgc3BhbiBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHJ1biwgYW5kIHRoZSBjYXNlIHdvcnRoIGFjdGluZ1xuICogb24gaXMgYSBxdWVyeSBhY3Jvc3MgYSBydW4ncyBzcGFuczogdGhlIHNhbWVcbiAqIHtAbGluayBXb3JrZmxvd1BhcmtlZEV2ZW50SWR9IGhlbGQgb24gc3VzcGVuc2lvbiBhZnRlciBzdXNwZW5zaW9uLlxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5jb3VudCdcbik7XG5cbi8qKiBPbGRlc3QgZXZlbnQgc3RpbGwgaGVsZCB1bmNsYWltZWQgd2hlbiB0aGUgcmVwbGF5IHN0b3BwZWQuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5ldmVudHMucGFya2VkLmV2ZW50X2lkJ1xuKTtcblxuLyoqIFR5cGUgb2YgdGhlIG9sZGVzdCBldmVudCBzdGlsbCBoZWxkIHVuY2xhaW1lZCB3aGVuIHRoZSByZXBsYXkgc3RvcHBlZC4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1BhcmtlZEV2ZW50VHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5ldmVudF90eXBlJ1xuKTtcblxuLyoqIE51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB3b3JrZmxvdyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QXJndW1lbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmFyZ3VtZW50cy5jb3VudCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSB3b3JrZmxvdyByZXN1bHQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1Jlc3VsdFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LnJlc3VsdC50eXBlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdHJhY2UgY29udGV4dCB3YXMgcHJvcGFnYXRlZCB0byB0aGlzIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHJhY2VQcm9wYWdhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cudHJhY2UucHJvcGFnYXRlZCdcbik7XG5cbi8vIFF1aWNrSlMgVk0gZW5naW5lIGF0dHJpYnV0ZXNcblxuLyoqIFRoZSBWTSBlbmdpbmUgZXhlY3V0aW5nIHRoZSB3b3JrZmxvdyBmdW5jdGlvbiBmb3IgdGhpcyBpbnZvY2F0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dWbSA9IFNlbWFudGljQ29udmVudGlvbjwnbm9kZScgfCAncXVpY2tqcyc+KCd3b3JrZmxvdy52bScpO1xuXG4vKiogT3V0Y29tZSBvZiBhIFF1aWNrSlMgVk0gd29ya2Zsb3cgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNPdXRjb21lID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnY29tcGxldGVkJyB8ICdzdXNwZW5kZWQnIHwgJ2ZhaWxlZCdcbj4oJ3dvcmtmbG93LnZtLm91dGNvbWUnKTtcblxuLyoqIFdoZXRoZXIgcHJlbG9hZGVkIGV2ZW50cyBmcm9tIGBldmVudHMuY3JlYXRlKCdydW5fc3RhcnRlZCcpYCB3ZXJlIHVzZWQgKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTRXZlbnRzUHJlbG9hZGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cudm0uZXZlbnRzLnByZWxvYWRlZCdcbik7XG5cbi8qKiBUb3RhbCBudW1iZXIgb2YgZXZlbnRzIGZldGNoZWQgZnJvbSB0aGUgd29ybGQgZm9yIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNFdmVudHNGZXRjaGVkQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnZtLmV2ZW50cy5mZXRjaGVkX2NvdW50J1xuKTtcblxuLyoqIE51bWJlciBvZiBwYWdlcyByZXF1aXJlZCB0byBmZXRjaCBhbGwgZXZlbnRzICovXG5leHBvcnQgY29uc3QgUXVpY2tKU0V2ZW50c0ZldGNoZWRQYWdlcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cudm0uZXZlbnRzLmZldGNoZWRfcGFnZXMnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHBlbmRpbmcgVk0gb3BlcmF0aW9ucyBjYXB0dXJlZCBhdCBzdXNwZW5zaW9uICovXG5leHBvcnQgY29uc3QgUXVpY2tKU1BlbmRpbmdPcHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cudm0ucGVuZGluZ19vcHNfY291bnQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHN0ZXBzIGV4ZWN1dGVkIGlubGluZSAobGl2ZS1WTSBjb250aW51YXRpb24pIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNJbmxpbmVTdGVwcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAncXVpY2tqcy5pbmxpbmVfc3RlcHMnXG4pO1xuXG4vKiogQWN0aXZlIHRyYWNlLWNvcnJlbGF0aW9uIG1vZGUgZm9yIHRoaXMgaW52b2NhdGlvbiAobGlua2VkIG9yIGNvbnRpbnVvdXMpICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dUcmFjZU1vZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J2xpbmtlZCcgfCAnY29udGludW91cyc+KFxuICAnd29ya2Zsb3cudHJhY2UubW9kZSdcbik7XG5cbi8qKiBXaGV0aGVyIHRoaXMgd29ya2Zsb3cgaW52b2NhdGlvbiBpcyB1c2luZyB0aGUgdHVyYm8gZmlyc3QtZGVsaXZlcnkgcGF0aCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHVyYm8gPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3dvcmtmbG93LnR1cmJvJyk7XG5cbi8qKiBOYW1lIG9mIHRoZSBlcnJvciB0aGF0IGNhdXNlZCB3b3JrZmxvdyBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvck5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLm5hbWUnXG4pO1xuXG4vKiogRXJyb3IgbWVzc2FnZSB3aGVuIHdvcmtmbG93IGZhaWxzICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvck1lc3NhZ2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLm1lc3NhZ2UnXG4pO1xuXG4vKiogRXJyb3IgY2xhc3NpZmljYXRpb24gY29kZSAoVVNFUl9FUlJPUiwgUlVOVElNRV9FUlJPUiwgZXRjLikgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0Vycm9yQ29kZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXJyb3IuY29kZSdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygc3RlcHMgY3JlYXRlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdGVwc0NyZWF0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0ZXBzLmNyZWF0ZWQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIGhvb2tzIGNyZWF0ZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93SG9va3NDcmVhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5ob29rcy5jcmVhdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiB3YWl0cyBjcmVhdGVkIGR1cmluZyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1dhaXRzQ3JlYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cud2FpdHMuY3JlYXRlZCdcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHRoaXMgc3VzcGVuc2lvbiBmaW5hbGl6ZWQgYXMgZmFpbGVkIGJlY2F1c2UgdGhlaXJcbiAqIGFyZ3VtZW50cyByZWZ1c2VkIHRvIHNlcmlhbGl6ZSAoc3RlcF9jcmVhdGVkIHBsYWNlaG9sZGVyICsgc3RlcF9mYWlsZWRcbiAqIGNhcnJ5aW5nIHRoZSBTZXJpYWxpemF0aW9uRXJyb3I7IHNlZSBmaW5hbGl6ZVVuc2VyaWFsaXphYmxlU3RlcCkuXG4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N0ZXBzRmFpbGVkU2VyaWFsaXphdGlvbiA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3RlcHMuZmFpbGVkX3NlcmlhbGl6YXRpb24nXG4pO1xuXG4vKipcbiAqIE51bWJlciBvZiBpbmxpbmUtb3duZWQgc3RlcHMgdGhpcyBpbnZvY2F0aW9uIHJlLWV4ZWN1dGVkIGJlY2F1c2UgaXQgaXMgYVxuICogcmVkZWxpdmVyeSBvZiB0aGVpciBvd25pbmcgcXVldWUgbWVzc2FnZSAoY3Jhc2ggcmVjb3ZlcnkgZm9yIGlubGluZVxuICogc3RlcHM7IHNlZSB0aGUgaW5saW5lIHN0ZXAgb3duZXJzaGlwIGNoYW5nZWxvZywgd29ya2Zsb3cjMjc4MCkuXG4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd093bmVkUmVjb3ZlcnlTdGVwcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuaW5saW5lX293bmVyc2hpcC5vd25lZF9yZWNvdmVyeV9zdGVwcydcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIHBlbmRpbmcgc3RlcHMgZm9yIHdoaWNoIHRoaXMgcmVwbGF5IHN1cHByZXNzZWQgdGhlIGltbWVkaWF0ZVxuICogcmVxdWV1ZSAoYW5vdGhlciBpbnZvY2F0aW9uIGlubGluZS1vd25zIHRoZW0gdW5kZXIgYSBsaXZlIGxlYXNlKSBhbmRcbiAqIGVuc3VyZWQgYSBkZWxheWVkIGJhY2tzdG9wIHdha2UgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QmFja3N0b3BXYWtlc0FybWVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5pbmxpbmVfb3duZXJzaGlwLmJhY2tzdG9wX3dha2VzX2FybWVkJ1xuKTtcblxuLy8gUm91dGUgYXR0cmlidXRlc1xuXG4vKiogVGhlIHdvcmtmbG93IHJ1bnRpbWUgcm91dGUgYmVpbmcgaGFuZGxlZCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPCdmbG93Jz4oXG4gICd3b3JrZmxvdy5yb3V0ZS50eXBlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhpcyByb3V0ZSBpbnZvY2F0aW9uIHJldXNlZCBhbiBhbHJlYWR5LWNyZWF0ZWQgcmVxdWVzdCBoYW5kbGVyICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUhhbmRsZXJDYWNoZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5oYW5kbGVyX2NhY2hlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgdGltZXMgdGhpcyBpbi1tZW1vcnkgcm91dGUgaGFuZGxlciBoYXMgYmVlbiBpbnZva2VkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUludm9jYXRpb25Db3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucm91dGUuaW52b2NhdGlvbl9jb3VudCdcbik7XG5cbi8qKiBUaW1lIHNpbmNlIHRoaXMgcm91dGUgZW50cnlwb2ludCB3YXMgY29uc3RydWN0ZWQsIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVFbnRyeXBvaW50QWdlTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJvdXRlLmVudHJ5cG9pbnRfYWdlX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgZXZhbHVhdGluZyB0aGUgZ2VuZXJhdGVkIHJvdXRlIG1vZHVsZSBib2R5IGJlZm9yZSBjcmVhdGluZyB0aGUgZW50cnlwb2ludCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93Um91dGVNb2R1bGVCb2R5SW5pdE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5tb2R1bGVfYm9keV9pbml0X21zJ1xuKTtcblxuLyoqXG4gKiBDb21wdXRlIGluc3RhbmNlIGhhbmRsaW5nIHRoaXMgcm91dGU6IHRoZSBzeW50aGVzaXplZCBgQ09NUFVURV9JTlNUQU5DRV9JRGAuXG4gKiBVc2VzIE9URUwgYGZhYXMuaW5zdGFuY2VgIChleGVjdXRpb24tZW52aXJvbm1lbnQgaWQsIHJldXNlZCBhY3Jvc3NcbiAqIGludm9jYXRpb25zIHRvIHRoZSBzYW1lIGZ1bmN0aW9uKTpcbiAqIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvYXR0cmlidXRlcy1yZWdpc3RyeS9mYWFzL1xuICovXG5leHBvcnQgY29uc3QgRmFhc0luc3RhbmNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2ZhYXMuaW5zdGFuY2UnKTtcblxuLy8gU3RlcCBhdHRyaWJ1dGVzXG5cbi8qKiBOYW1lIG9mIHRoZSBzdGVwIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkICovXG5leHBvcnQgY29uc3QgU3RlcE5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5uYW1lJyk7XG5cbi8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHN0ZXAgaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBTdGVwSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5pZCcpO1xuXG4vKiogQ3VycmVudCBhdHRlbXB0IG51bWJlciBmb3Igc3RlcCBleGVjdXRpb24gKHN0YXJ0cyBhdCAxKSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBBdHRlbXB0ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAuYXR0ZW1wdCcpO1xuXG4vKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHN0ZXAgKi9cbmV4cG9ydCBjb25zdCBTdGVwU3RhdHVzID0gU2VtYW50aWNDb252ZW50aW9uPFN0ZXBbJ3N0YXR1cyddPignc3RlcC5zdGF0dXMnKTtcblxuLyoqIE1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgYWxsb3dlZCBmb3IgdGhpcyBzdGVwICovXG5leHBvcnQgY29uc3QgU3RlcE1heFJldHJpZXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5tYXhfcmV0cmllcycpO1xuXG4vKiogV2hldGhlciB0cmFjZSBjb250ZXh0IHdhcyBwcm9wYWdhdGVkIHRvIHRoaXMgc3RlcCBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBTdGVwVHJhY2VQcm9wYWdhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnc3RlcC50cmFjZS5wcm9wYWdhdGVkJ1xuKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgdGltZS10by1maXJzdC1zdGVwIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzOiBydW4gY3JlYXRpb24g4oaSXG4gKiB0aGlzIHN0ZXAncyBib2R5IGJlZ2lubmluZyB0byBleGVjdXRlLCBtaW51cyBwcmUtc3RlcCBob29rLWNyZWF0aW9uIHRpbWUuXG4gKiBPbmx5IHByZXNlbnQgb24gdGhlIHJ1bidzIGZpcnN0IHN0ZXAgZXhlY3V0aW9uIHdoZW4gaXQgcXVhbGlmaWVkIGZvclxuICogbWVhc3VyZW1lbnQgKHNlZSBydW50aW1lL3N0ZXAtbGF0ZW5jeS50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwVHRmc01zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAudHRmc19tcycpO1xuXG4vKipcbiAqIENsaWVudC1tZWFzdXJlZCBzdGVwLXRvLXN0ZXAgb3ZlcmhlYWQgaW4gbWlsbGlzZWNvbmRzOiB0aGUgcHJldmlvdXMgc3RlcCdzXG4gKiB0ZXJtaW5hbCBldmVudCDihpIgdGhpcyBzdGVwJ3MgYm9keSBiZWdpbm5pbmcgdG8gZXhlY3V0ZS4gT25seSBwcmVzZW50IHdoZW5cbiAqIHRoZSB0d28gc3RlcHMgcmFuIGJhY2stdG8tYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTdHNvTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5zdHNvX21zJyk7XG5cbi8qKlxuICogQ2xpZW50LW1lYXN1cmVkIHJ1bl9zdGFydGVkLXRvLWZpcnN0LXN0ZXAgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHM6IHRoZVxuICogYHJ1bl9zdGFydGVkYCByZXNwb25zZSBsYW5kaW5nIChvciwgdW5kZXIgdHVyYm8sIHRoZSBsb2NhbCBydW4gc3ludGhlc2lzXG4gKiBpbnN0YW50KSDihpIgdGhpcyBzdGVwJ3Mgc3RhcnQgUE9TVCBiZWluZyBpc3N1ZWQuIEEgc3ViLXdpbmRvdyBvZiB0dGZzIHRoYXRcbiAqIGlzb2xhdGVzIHJlcGxheSBvdmVyaGVhZCBmcm9tIHRoZSBydW4tY3JlYXRpb24gcXVldWUgaG9wLiBPbmx5IHByZXNlbnQgb25cbiAqIHRoZSBydW4ncyBmaXJzdCBzdGVwIGV4ZWN1dGlvbiB3aGVuIGl0IHF1YWxpZmllZCBmb3IgbWVhc3VyZW1lbnQgKHNlZVxuICogcnVudGltZS9zdGVwLWxhdGVuY3kudHMpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcFJzZnNNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLnJzZnNfbXMnKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgc3luY2hyb25vdXMgd29ya2Zsb3ctZnVuY3Rpb24gcmVwbGF5IGR1cmF0aW9uIGluXG4gKiBtaWxsaXNlY29uZHMsIGV4Y2x1ZGluZyBhd2FpdGVkIG5ldHdvcmsgSS9PLCBvZiBvbmx5IHRoZSBGSU5BTCByZXBsYXkgcGFzc1xuICogd2l0aGluIHRoZSByc2ZzIHdpbmRvdzogdGhlIHBhc3MgdGhhdCByZWFjaGVkIGFuZCBzY2hlZHVsZWQgdGhlIGZpcnN0XG4gKiBzdGVwLiBOb3QgYWNjdW11bGF0ZWQgYWNyb3NzIGVhcmxpZXIgcHJlLWZpcnN0LXN0ZXAgcGFzc2VzIChlLmcuIGFcbiAqIHdvcmtmbG93LWJvZHkgYHNldEF0dHJpYnV0ZXMoKWAgZGV0b3VyIHJlcGxheXMgbW9yZSB0aGFuIG9uY2UsIGFuZCBhXG4gKiByZWRlbGl2ZXJ5IG9taXRzIGVhcmxpZXIgaW52b2NhdGlvbnMnIHdvcmsgZW50aXJlbHkpLCBzbyB0aGlzIG11c3Qgbm90IGJlXG4gKiByZWFkIGFzIFwidGhlIHJlcGxheSBwb3J0aW9uIG9mIHJzZnNcIjsgc3RlcC5yc2ZzX21zIGNvdmVycyB0aGUgd2hvbGVcbiAqIHdpbmRvdy4gT25seSBwcmVzZW50IGFsb25nc2lkZSBzdGVwLnJzZnNfbXMgYW5kIG9ubHkgZm9yIHRoZSBydW4ncyBmaXJzdFxuICogc3RlcCAoc2VlIHJ1bnRpbWUvc3RlcC1sYXRlbmN5LnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBGaW5hbFNjaGVkdWxpbmdSZXBsYXlNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnc3RlcC5maW5hbF9zY2hlZHVsaW5nX3JlcGxheV9tcydcbik7XG5cbi8qKlxuICogUnVudGltZSBzdGFydHVwLWxhdGVuY3kgb3B0aW1pemF0aW9ucyBhY3RpdmUgZm9yIHRoZSB0dGZzL3N0c28gbWVhc3VyZW1lbnRcbiAqIChlLmcuICd0dXJibycsICdsYXp5U3RlcFN0YXJ0JywgJ29wdGltaXN0aWNTdGFydCcpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcExhdGVuY3lPcHRpbWl6YXRpb25zID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZ1tdPihcbiAgJ3N0ZXAubGF0ZW5jeV9vcHRpbWl6YXRpb25zJ1xuKTtcblxuLyoqIFdoZXRoZXIgdGhlIHN0ZXAgd2FzIHNraXBwZWQgZHVyaW5nIGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTa2lwcGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCdzdGVwLnNraXBwZWQnKTtcblxuLyoqIFJlYXNvbiB3aHkgdGhlIHN0ZXAgd2FzIHNraXBwZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwU2tpcFJlYXNvbiA9XG4gIFNlbWFudGljQ29udmVudGlvbjxTdGVwWydzdGF0dXMnXT4oJ3N0ZXAuc2tpcF9yZWFzb24nKTtcblxuLyoqIE51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBzdGVwIGZ1bmN0aW9uICovXG5leHBvcnQgY29uc3QgU3RlcEFyZ3VtZW50c0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLmFyZ3VtZW50cy5jb3VudCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSBzdGVwIHJlc3VsdCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXN1bHRUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3N0ZXAucmVzdWx0LnR5cGUnKTtcblxuLyoqIE5hbWUgb2YgdGhlIGVycm9yIHRoYXQgY2F1c2VkIHN0ZXAgZmFpbHVyZSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBFcnJvck5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5lcnJvci5uYW1lJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIHdoZW4gc3RlcCBmYWlscyAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBFcnJvck1lc3NhZ2UgPVxuICBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5lcnJvci5tZXNzYWdlJyk7XG5cbi8qKiBXaGV0aGVyIHRoZSBzdGVwIGZhaWxlZCB3aXRoIGEgZmF0YWwgZXJyb3IgKG5vIHJldHJpZXMpICovXG5leHBvcnQgY29uc3QgU3RlcEZhdGFsRXJyb3IgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3N0ZXAuZmF0YWxfZXJyb3InKTtcblxuLyoqIFdoZXRoZXIgYWxsIHJldHJ5IGF0dGVtcHRzIGhhdmUgYmVlbiBleGhhdXN0ZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlFeGhhdXN0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnJldHJ5LmV4aGF1c3RlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBuZXh0IHJldHJ5IGF0dGVtcHQgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlUaW1lb3V0U2Vjb25kcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnc3RlcC5yZXRyeS50aW1lb3V0X3NlY29uZHMnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgc3RlcCB3aWxsIGJlIHJldHJpZWQgYWZ0ZXIgdGhpcyBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgU3RlcFJldHJ5V2lsbFJldHJ5ID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnc3RlcC5yZXRyeS53aWxsX3JldHJ5J1xuKTtcblxuLy8gUXVldWUvTWVzc2FnaW5nIGF0dHJpYnV0ZXMgLSBTdGFuZGFyZCBPVEVMIG1lc3NhZ2luZyBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L21lc3NhZ2luZy9tZXNzYWdpbmctc3BhbnMvXG5cbi8qKiBNZXNzYWdpbmcgc3lzdGVtIGlkZW50aWZpZXIgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5zeXN0ZW0pICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nU3lzdGVtID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ21lc3NhZ2luZy5zeXN0ZW0nKTtcblxuLyoqIERlc3RpbmF0aW9uIG5hbWUvcXVldWUgbmFtZSAoc3RhbmRhcmQgT1RFTDogbWVzc2FnaW5nLmRlc3RpbmF0aW9uLm5hbWUpICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nRGVzdGluYXRpb25OYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICdtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZSdcbik7XG5cbi8qKiBUaGUgbWVzc2FnZSBpZCBiZWluZyBoYW5kbGVkIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcubWVzc2FnZS5pZCkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdNZXNzYWdlSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248TWVzc2FnZUlkPihcbiAgJ21lc3NhZ2luZy5tZXNzYWdlLmlkJ1xuKTtcblxuLyoqIE9wZXJhdGlvbiB0eXBlIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUpICovXG5leHBvcnQgY29uc3QgTWVzc2FnaW5nT3BlcmF0aW9uVHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ3B1Ymxpc2gnIHwgJ3JlY2VpdmUnIHwgJ3Byb2Nlc3MnXG4+KCdtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUnKTtcblxuLyoqIFRpbWUgdGFrZW4gdG8gZW5xdWV1ZSB0aGUgbWVzc2FnZSBpbiBtaWxsaXNlY29uZHMgKHdvcmtmbG93LXNwZWNpZmljKSAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlT3ZlcmhlYWRNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUub3ZlcmhlYWRfbXMnXG4pO1xuXG4vLyBEZXBsb3ltZW50IGF0dHJpYnV0ZXNcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZGVwbG95bWVudCBlbnZpcm9ubWVudCAqL1xuZXhwb3J0IGNvbnN0IERlcGxveW1lbnRJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdkZXBsb3ltZW50LmlkJyk7XG5cbi8qKiBUaGUgZGVwbG95bWVudCBhIHJ1biBpcyBwaW5uZWQgdG8sIHNldCBvbmx5IG9uIGEgbWlzcm91dGVkIGRlbGl2ZXJ5LiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuUGlubmVkRGVwbG95bWVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5kZXBsb3ltZW50LnBpbm5lZF9pZCdcbik7XG5cbi8qKiBSZS1yb3V0ZSBhdHRlbXB0cyBmb3IgdGhpcyBtaXNyb3V0ZWQgZGVsaXZlcnksIGluY2x1ZGluZyB0aGlzIG9uZS4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0RlcGxveW1lbnRNaXNtYXRjaFJldHJ5Q291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmRlcGxveW1lbnRfbWlzbWF0Y2gucmV0cnlfY291bnQnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgbWlzcm91dGVkIGRlbGl2ZXJ5IHdhcyByZS1yb3V0ZWQgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBydW4uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dEZXBsb3ltZW50TWlzbWF0Y2hSZWNvdmVyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5kZXBsb3ltZW50X21pc21hdGNoLnJlY292ZXJlZCdcbik7XG5cbi8vIEhvb2sgYXR0cmlidXRlc1xuXG4vKiogVG9rZW4gaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBob29rICovXG5leHBvcnQgY29uc3QgSG9va1Rva2VuID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93Lmhvb2sudG9rZW4nKTtcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIGhvb2sgaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBIb29rSWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cuaG9vay5pZCcpO1xuXG4vKiogV2hldGhlciBhIGhvb2sgd2FzIGZvdW5kIGJ5IGl0cyB0b2tlbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tGb3VuZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignd29ya2Zsb3cuaG9vay5mb3VuZCcpO1xuXG4vKipcbiAqIFByb2R1Y2VyLXNpZGUgc2lnbmFsIChvbiB0aGUgYGhvb2sucmVzdW1lYCBzcGFuKSB0aGF0IHRoZSBkaXJlY3RcbiAqIGBob29rX3JlY2VpdmVkYCB3cml0ZSBmYWlsZWQgdHJhbnNpZW50bHkgYnV0IHRoZSBxdWV1ZSBkaXNwYXRjaCBzdWNjZWVkZWQsIHNvXG4gKiB0aGUgcmVzdW1lIGlzIHJlY292ZXJlZCB2aWEgdGhlIGNvbnN1bWVyJ3MgcmUtZW5zdXJlLiBDb3JyZXNwb25kcyB0b1xuICogYFJlc3VtZWRIb29rLnJlc2lsaWVudFJlc3VtZSA9PT0gdHJ1ZWAuXG4gKlxuICogTm8gbG9uZ2VyIGVtaXR0ZWQ6IGN1cnJlbnQgcHJvZHVjZXJzIHJlcXVpcmUgdGhlIGR1cmFibGUgZXZlbnQgd3JpdGUgdG9cbiAqIHN1Y2NlZWQuIFJldGFpbmVkIHNvIGRhc2hib2FyZHMgYW5kIHF1ZXJpZXMgYnVpbHQgb24gdGhlIGF0dHJpYnV0ZSBrZWVwXG4gKiByZXNvbHZpbmcgd2hpbGUgb2xkZXIgcHJvZHVjZXJzIGFyZSBzdGlsbCBkZXBsb3llZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tSZXNpbGllbnRSZXN1bWUgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5ob29rLnJlc2lsaWVudF9yZXN1bWUnXG4pO1xuXG4vKipcbiAqIFByb2R1Y2VyLXNpZGUgc2lnbmFsIChvbiB0aGUgYGhvb2sucmVzdW1lYCBzcGFuKSB0aGF0IHRoZSBkdXJhYmxlXG4gKiBgaG9va19yZWNlaXZlZGAgd3JpdGUgQ09NTUlUVEVELiBTdGFtcGVkIGFmdGVyIHRoZSB3cml0ZSByZXNvbHZlcywgc28gaXRcbiAqIGRpc3Rpbmd1aXNoZXMgYSBjb21taXR0ZWQgcmVzdW1lIGZyb20gYW4gYXR0ZW1wdGVkIG9uZSDigJQgYW4gZW50cnktdGltZVxuICogYXR0cmlidXRlIGNhbm5vdCwgYmVjYXVzZSBhIHNwYW4gdGhhdCBsYXRlciByZWNvcmRzIGFuIGV4Y2VwdGlvbiBtYXkgaGF2ZVxuICogZmFpbGVkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tSZXN1bWVDb21taXR0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5ob29rLnJlc3VtZV9jb21taXR0ZWQnXG4pO1xuXG4vKipcbiAqIFByb2R1Y2VyLXNpZGUgc2lnbmFsIChvbiB0aGUgYGhvb2sucmVzdW1lYCBzcGFuKSB0aGF0IHRoZSB3b3JrZmxvdyB3YWtlIHdhc1xuICogQUNDRVBURUQgYnkgdGhlIHF1ZXVlLCBzdGFtcGVkIGFmdGVyIHRoZSBwdWJsaXNoIHJlc29sdmVzLlxuICpcbiAqIFRvZ2V0aGVyIHdpdGgge0BsaW5rIEhvb2tSZXN1bWVDb21taXR0ZWR9IHRoaXMgbWFrZXMgc3RyYW5kZWQgcmVzdW1lc1xuICogcXVlcnlhYmxlOiBgcmVzdW1lX2NvbW1pdHRlZD10cnVlYCB3aXRoIGB3YWtlX3B1Ymxpc2hlZGAgYWJzZW50IGlzIGEgcmVzdW1lXG4gKiB3aG9zZSBkdXJhYmxlIGV2ZW50IGV4aXN0cyBidXQgd2hvc2Ugd2FrZSBwdWJsaXNoIGZhaWxlZCAodGhlIGNhbGxlciB3YXNcbiAqIHRvbGQsIGJ1dCBub3RoaW5nIHJlLWRyaXZlcyBpdCksIGFuZCBgcmVzdW1lX2NvbW1pdHRlZD10cnVlYCArXG4gKiBgd2FrZV9wdWJsaXNoZWQ9dHJ1ZWAgd2l0aCBubyBzdWJzZXF1ZW50IHdvcmtmbG93IGV4ZWN1dGlvbiBmb3IgdGhlIHJ1biBpc1xuICogYSB3YWtlIHRoZSBxdWV1ZSBhY2NlcHRlZCBidXQgbmV2ZXIgZGVsaXZlcmVkLiBCb3RoIGFyZSBkZXRlY3Rpb24tb25seVxuICogc2lnbmFscyDigJQgbm90aGluZyByZWNvdmVycyBzdWNoIGEgcnVuIGF1dG9tYXRpY2FsbHkgdG9kYXkgYmV5b25kIGEgbGF0ZXJcbiAqIHdha2UgZnJvbSBhbnkgb3RoZXIgc291cmNlLlxuICovXG5leHBvcnQgY29uc3QgSG9va1dha2VQdWJsaXNoZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5ob29rLndha2VfcHVibGlzaGVkJ1xuKTtcblxuLyoqXG4gKiBDb25zdW1lci1zaWRlIHNpZ25hbCAob24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSB0aGF0IHRoaXMgcmVwbGF5XG4gKiBtYXRlcmlhbGl6ZWQgdGhlIGBob29rX3JlY2VpdmVkYCBldmVudCBmcm9tIHRoZSBxdWV1ZSBtZXNzYWdlJ3MgYGhvb2tJbnB1dGBcbiAqIGJlY2F1c2Ugbm8gY29tbWl0dGVkIGV2ZW50IHdhcyBmb3VuZCwgd2hpY2ggY29tcGxldGVzIHRoZSByZWNvdmVyeSBwYXRoXG4gKiB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZX0gYmVnYW4uXG4gKlxuICogTGVnYWN5IC8gbm9uLWF0b21pYyByZS1lbnN1cmUgc2lnbmFsIG9ubHkuIExlZ2FjeSBhdG9taWMgbGF6eSByZXN1bWVzXG4gKiAocmVzdW1lSWQgKyBkaWdlc3QpIGdvIHRocm91Z2ggdGhlIGhvaXN0ZWQgcHJlbG9hZCB3cml0ZSBpbnN0ZWFkLCB3aG9zZVxuICogcmVzcG9uc2UgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgcHJvZHVjZXIgb3IgdGhlIGNvbnN1bWVyIHdvbiB0aGVcbiAqIGAocnVuSWQsIHJlc3VtZUlkKWAgY2xhaW0sIHNvIHRoaXMgYXR0cmlidXRlIGlzIGRlbGliZXJhdGVseSBOT1QgZW1pdHRlZFxuICogZm9yIHRoZW0gKGVtaXR0aW5nIGB0cnVlYCB1bmNvbmRpdGlvbmFsbHkgd291bGQgY291bnQgZXZlcnkgcHJvZHVjZXItd29uXG4gKiByZXN1bWUgYXMgYSByZWNvdmVyeSkuIFRoZSBwcm9kdWNlci1iZWdpbiAoe0BsaW5rIEhvb2tSZXNpbGllbnRSZXN1bWV9KSAvXG4gKiBjb25zdW1lci1tYXRlcmlhbGl6ZWQgcGFpcmluZyBpcyB0aGVyZWZvcmUgbm8gbG9uZ2VyIGNvbXBsZXRlIGZvciBhdG9taWNcbiAqIGxhenkgcmVzdW1wdGlvbnM7IHVzZSB7QGxpbmsgSG9va1Jlc3VtZVNldHVwU291cmNlfSB0byBvYnNlcnZlIHRoYXQgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tSZXNpbGllbnRSZXN1bWVNYXRlcmlhbGl6ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5ob29rLnJlc2lsaWVudF9yZXN1bWVfbWF0ZXJpYWxpemVkJ1xuKTtcblxuLyoqXG4gKiBDb25zdW1lci1zaWRlIHNpZ25hbCAob24gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzcGFuKSBvZiBob3cgYSBsYXp5IGhvb2tcbiAqIHJlc3VtZSBpbml0aWFsaXplZCBpdHMgcmVwbGF5IHN0YXRlOlxuICpcbiAqIC0gYGhvb2tfcmVjZWl2ZWRfc3RyZWFtYDogdGhlIGhvaXN0ZWQgYGhvb2tfcmVjZWl2ZWRgIHdyaXRlIHJldHVybmVkIGFcbiAqICAgdXNhYmxlIHJlcGxheSBwcmVsb2FkIChydW4gKyBjb21wbGV0ZSBldmVudCBsb2cpLCBzbyB0aGUgaW52b2NhdGlvblxuICogICBza2lwcGVkIGJvdGggdGhlIGBydW5fc3RhcnRlZGAgd3JpdGUgYW5kIHRoZSBpbml0aWFsIGBldmVudHMubGlzdGAuXG4gKiAtIGBob29rX3JlY2VpdmVkX2ZhbGxiYWNrYDogdGhlIGhvaXN0ZWQgd3JpdGUgc3VjY2VlZGVkIGJ1dCByZXR1cm5lZCBub1xuICogICB1c2FibGUgcHJlbG9hZCAoYSBDQk9SIHJlc3BvbnNlIGZyb20gYW4gb2xkZXIgc2VydmVyLCBhIFdvcmxkIHRoYXRcbiAqICAgaWdub3JlZCB0aGUgb3B0LWluLCBhIGJvdW5kZWQgYGhhc01vcmVgIHBhZ2UsIG9yIGEgcHJlbG9hZCB0aGF0IGZhaWxlZFxuICogICB2YWxpZGF0aW9uKTsgdGhlIGludm9jYXRpb24gZmVsbCBiYWNrIHRvIHRoZSBgcnVuX3N0YXJ0ZWRgIHNldHVwIHdpdGhvdXRcbiAqICAgcmUtcG9zdGluZyB0aGUgaG9vay5cbiAqXG4gKiBBYnNlbnQgb24gbGVnYWN5IGhvb2sgZGVsaXZlcmllcyAobm8gcmVzdW1lSWQvZGlnZXN0KSBhbmQgb24gZXZlcnkgb3RoZXJcbiAqIGRlbGl2ZXJ5IGtpbmQsIHdoaWNoIHRha2UgdGhlIGBydW5fc3RhcnRlZGAgc2V0dXAgdW5jb25kaXRpb25hbGx5LlxuICpcbiAqIFRoaXMgaXMgYSBsYXRlbmN5L3NldHVwLXBhdGggc2lnbmFsOiBpdCBzYXlzIHdoaWNoIHJlcXVlc3RzIGluaXRpYWxpemVkXG4gKiB0aGUgaW52b2NhdGlvbiwgTk9UIHRoYXQgdGhpcyBjb25zdW1lciBjcmVhdGVkIHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnRcbiAqICh0aGUgaG9pc3RlZCB3cml0ZSBtYXkgZXF1YWxseSBoYXZlIGNvbnZlcmdlZCBvbiB0aGUgcHJvZHVjZXIncywgc2luY2VcbiAqIGNsYWltIG93bmVyc2hpcCBpcyBub3Qgb2JzZXJ2YWJsZSBjbGllbnQtc2lkZTsgY2YuXG4gKiB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZU1hdGVyaWFsaXplZH0pLlxuICovXG5leHBvcnQgY29uc3QgSG9va1Jlc3VtZVNldHVwU291cmNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5yZXN1bWVfc2V0dXBfc291cmNlJ1xuKTtcblxuLyoqXG4gKiBQcm9kdWNlci1zaWRlIHNpZ25hbCAob24gdGhlIHN1c3BlbnNpb24gc3BhbikgY291bnRpbmcgc3RlcHMgd2hvc2UgZGlyZWN0XG4gKiBgc3RlcF9jcmVhdGVkYCB3cml0ZSBmYWlsZWQgdHJhbnNpZW50bHkgd2hpbGUgdGhlaXIgYHN0ZXBJbnB1dGAtY2FycnlpbmdcbiAqIHF1ZXVlIHB1Ymxpc2ggc3VjY2VlZGVkLCBzbyBzdGVwIGNyZWF0aW9uIGlzIHJlY292ZXJlZCB2aWEgdGhlIGNvbnN1bWVyJ3NcbiAqIHJlLWVuc3VyZS4gTWlycm9ycyB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZX0uXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwUmVzaWxpZW50RGlzcGF0Y2hSZWNvdmVyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0ZXAucmVzaWxpZW50X2Rpc3BhdGNoX3JlY292ZXJlZCdcbik7XG5cbi8qKlxuICogQ29uc3VtZXItc2lkZSBzaWduYWwgKG9uIHRoZSB3b3JrZmxvdyBleGVjdXRpb24gc3BhbikgdGhhdCB0aGlzIGRlbGl2ZXJ5XG4gKiBtYXRlcmlhbGl6ZWQgdGhlIGBzdGVwX2NyZWF0ZWRgIGV2ZW50IGZyb20gdGhlIHF1ZXVlIG1lc3NhZ2UncyBgc3RlcElucHV0YFxuICogYmVjYXVzZSB0aGUgcHJvZHVjZXIncyBkaXJlY3Qgd3JpdGUgaGFkIG5vdCBsYW5kZWQsIHdoaWNoIGNvbXBsZXRlcyB0aGVcbiAqIHJlY292ZXJ5IHBhdGgge0BsaW5rIFN0ZXBSZXNpbGllbnREaXNwYXRjaFJlY292ZXJlZH0gYmVnYW4uXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwUmVzaWxpZW50RGlzcGF0Y2hNYXRlcmlhbGl6ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5zdGVwLnJlc2lsaWVudF9kaXNwYXRjaF9tYXRlcmlhbGl6ZWQnXG4pO1xuXG4vLyBIb29rLXRyaWdnZXJlZCB0aW1lLXRvLXJlc3VtZSAoVFRSKSBhdHRyaWJ1dGVzXG4vL1xuLy8gU2V0IG9uIHRoZSBgc3RlcC5leGVjdXRlIDxuYW1lPmAgc3BhbiBvZiB0aGUgRklSU1QgZHVyYWJsZSBzdGVwIGZvbGxvd2luZyBhXG4vLyBob29rIHJlc3VtZSwgYW5kIG9ubHkgdGhlcmU6IG9uZSByZXN1bXB0aW9uIHByb2R1Y2VzIGV4YWN0bHkgb25lIHNhbXBsZSwgc29cbi8vIGEgbGF0ZXIgc3RlcCBpbiB0aGUgc2FtZSBpbnZvY2F0aW9uLCBhIHJldHJ5LCBvciBhIHJlZGVsaXZlcnkgbmV2ZXJcbi8vIHJlLXJlcG9ydHMgaXQuIFRoZSBwaGFzZXMgYXJlIG5vbi1vdmVybGFwcGluZyBhbmQgc3VtIGV4YWN0bHkgdG9cbi8vIHtAbGluayBSZXN1bWVUb3RhbE1zfTsgc2VlIHJ1bnRpbWUvcmVzdW1lLWxhdGVuY3kudHMgZm9yIHRoZSBib3VuZGFyeVxuLy8gZGVmaW5pdGlvbnMgYW5kIHRoZSBlbWlzc2lvbiBnYXRlLlxuLy9cbi8vIERlbGliZXJhdGVseSBjYXJyaWVzIG5vIGByZXN1bWVJZGAsIHJ1biBJRCwgb3IgdG9rZW46IHRoZSBtZXRyaWMgaXMgbWVhbnQgdG9cbi8vIGJlIGFnZ3JlZ2F0ZWQgYWNyb3NzIGV2ZXJ5IHJlc3VtZSwgYW5kIGhpZ2gtY2FyZGluYWxpdHkga2V5cyB3b3VsZCBtYWtlIHRoYXRcbi8vIHByb2hpYml0aXZlLiBFeGlzdGluZyB0cmFjZS1jb3JyZWxhdGlvbiBmaWVsZHMgb24gdGhlIHNhbWUgc3BhbiBhcmVcbi8vIHVuY2hhbmdlZCBhbmQgc3RpbGwgaWRlbnRpZnkgdGhlIGluZGl2aWR1YWwgcnVuLlxuXG4vKiogVG90YWwgVFRSOiBlbnRyeSBpbnRvIGByZXN1bWVIb29rKClgIOKGkiBpbW1lZGlhdGVseSBiZWZvcmUgYHN0ZXBGbi5hcHBseSgpYC4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVUb3RhbE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUudG90YWxfbXMnXG4pO1xuXG4vKiogUGhhc2U6IGByZXN1bWVIb29rKClgIGVudHJ5IOKGkiB0aGUgcXVldWUgcHVibGlzaCBiZWluZyByZXF1ZXN0ZWQuICovXG5leHBvcnQgY29uc3QgUmVzdW1lUHJvZHVjZXJQcmVwTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5wcm9kdWNlcl9wcmVwX21zJ1xuKTtcblxuLyoqIFBoYXNlOiBxdWV1ZSBwdWJsaXNoIHJlcXVlc3RlZCDihpIgdGhlIGZpbmFsIGNvbnN1bWVyJ3MgaGFuZGxlciBiZWluZyBlbnRlcmVkLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVF1ZXVlRGVsaXZlcnlNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnF1ZXVlX2RlbGl2ZXJ5X21zJ1xuKTtcblxuLyoqIFBoYXNlOiBjb25zdW1lciBlbnRyeSDihpIgcmVwbGF5IGJlZ2lubmluZy4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVTZXR1cE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2UucmVzdW1lX3NldHVwX21zJ1xuKTtcblxuLyoqIFBoYXNlOiByZXBsYXkgYmVnaW5uaW5nIOKGkiB0aGUgbmV4dCBkdXJhYmxlIHN0ZXAgYmVpbmcgZW5jb3VudGVyZWQuICovXG5leHBvcnQgY29uc3QgUmVzdW1lUmVwbGF5TXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5yZXBsYXlfbXMnXG4pO1xuXG4vKiogUGhhc2U6IHN0ZXAgZW5jb3VudGVyZWQg4oaSIHRoZSBgc3RlcF9zdGFydGVkYCByZXF1ZXN0IGJlZ2lubmluZy4gKi9cbmV4cG9ydCBjb25zdCBSZXN1bWVTdGVwRGlzcGF0Y2hNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucmVzdW1lLnBoYXNlLnN0ZXBfZGlzcGF0Y2hfbXMnXG4pO1xuXG4vKipcbiAqIFBoYXNlOiBgc3RlcF9zdGFydGVkYCByZXF1ZXN0IGJlZ2lubmluZyDihpIgaXRzIHJlc3BvbnNlIHJldHVybmluZy4gT21pdHRlZFxuICogdW5kZXIgb3B0aW1pc3RpYyBpbmxpbmUgc3RhcnQsIHdoZXJlIHRoZSBjbGFpbSBpcyBub3QgYXdhaXRlZCBiZWZvcmUgdGhlXG4gKiBib2R5IHJ1bnMgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY29tcGxldGlvbiBpbnN0YW50IGF0IHRoYXQgcG9pbnQ7IHRoZSB0aW1lXG4gKiBpcyB0aGVuIHJlcG9ydGVkIGVudGlyZWx5IGFzIHtAbGluayBSZXN1bWVTdGVwUHJlcGFyZU1zfS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVN0ZXBDbGFpbU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yZXN1bWUucGhhc2Uuc3RlcF9jbGFpbV9tcydcbik7XG5cbi8qKlxuICogUGhhc2U6IGNsYWltIHJldHVybmluZyDihpIgaW1tZWRpYXRlbHkgYmVmb3JlIGBzdGVwRm4uYXBwbHkoKWAuIERlbGliZXJhdGVseVxuICogaW5jbHVkZXMgZW5jcnlwdGlvbi1rZXkgcmVzb2x1dGlvbiwgYXJndW1lbnQgaHlkcmF0aW9uLCBhbmQgc3RlcC1jb250ZXh0XG4gKiBzZXR1cDsgYHdvcmtmbG93LnF1ZXVlLmRlc2VyaWFsaXplX3RpbWVfbXNgIHN0aWxsIGlzb2xhdGVzIGh5ZHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVN0ZXBQcmVwYXJlTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJlc3VtZS5waGFzZS5zdGVwX3ByZXBhcmVfbXMnXG4pO1xuXG4vKiogV2hhdCB0cmlnZ2VyZWQgdGhlIG1lYXN1cmVkIHJlc3VtcHRpb24uICovXG5leHBvcnQgY29uc3QgUmVzdW1lVHJpZ2dlciA9IFNlbWFudGljQ29udmVudGlvbjwnaG9vayc+KFxuICAnd29ya2Zsb3cucmVzdW1lLnRyaWdnZXInXG4pO1xuXG4vKipcbiAqIFdoaWNoIGByZXN1bWVIb29rKClgIGRpc3BhdGNoIHBhdGggcHJvZHVjZWQgdGhpcyByZXN1bWUuIGBwYXJhbGxlbGAgb25seVxuICogYXBwZWFycyBmb3IgbWVzc2FnZXMgcHVibGlzaGVkIGJ5IGFuIG9sZGVyIHByb2R1Y2VyLCB3aGljaCB3cm90ZVxuICogYGhvb2tfcmVjZWl2ZWRgIGl0c2VsZiBpbiBwYXJhbGxlbCB3aXRoIHRoZSBwdWJsaXNoLlxuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU3RyYXRlZ3kgPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdsYXp5JyB8ICdwYXJhbGxlbCcgfCAnc2VxdWVudGlhbCdcbj4oJ3dvcmtmbG93LnJlc3VtZS5zdHJhdGVneScpO1xuXG4vKipcbiAqIEhvdyB0aGUgY29uc3VtaW5nIGludm9jYXRpb24gaW5pdGlhbGl6ZWQgcmVwbGF5IHN0YXRlLiBEaXN0aW5jdCBmcm9tIHRoZVxuICogcHJlLWV4aXN0aW5nIHtAbGluayBIb29rUmVzdW1lU2V0dXBTb3VyY2V9IChgd29ya2Zsb3cucmVzdW1lX3NldHVwX3NvdXJjZWAsXG4gKiBvbiB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uIHNwYW4pLCB3aGljaCByZXBvcnRzIHRoZSBmaW5lci1ncmFpbmVkXG4gKiBob2lzdGVkLXdyaXRlIG91dGNvbWU7IHRoaXMgb25lIGlzIHRoZSBUVFIgZGltZW5zaW9uIGFuZCBzaGFyZXMgdGhlIG1ldHJpYydzXG4gKiB0aHJlZS12YWx1ZSB2b2NhYnVsYXJ5LlxuICovXG5leHBvcnQgY29uc3QgUmVzdW1lU2V0dXBTb3VyY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdob29rX3ByZWxvYWQnIHwgJ3J1bl9zdGFydGVkJyB8ICdldmVudF9sb2FkJ1xuPignd29ya2Zsb3cucmVzdW1lLnNldHVwX3NvdXJjZScpO1xuXG4vKiogV2hldGhlciB0aGUgbWVhc3VyZWQgc3RlcCByYW4gaW4gdGhlIHJlc3VtaW5nIGludm9jYXRpb24gb3IgYSBxdWV1ZWQgb25lLiAqL1xuZXhwb3J0IGNvbnN0IFJlc3VtZVN0ZXBFeGVjdXRpb24gPSBTZW1hbnRpY0NvbnZlbnRpb248J2lubGluZScgfCAnZGlzcGF0Y2hlZCc+KFxuICAnd29ya2Zsb3cucmVzdW1lLnN0ZXBfZXhlY3V0aW9uJ1xuKTtcblxuLy8gV2ViaG9vayBhdHRyaWJ1dGVzXG5cbi8qKiBOdW1iZXIgb2Ygd2ViaG9vayBoYW5kbGVycyB0cmlnZ2VyZWQgKi9cbmV4cG9ydCBjb25zdCBXZWJob29rSGFuZGxlcnNUcmlnZ2VyZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dlYmhvb2suaGFuZGxlcnMudHJpZ2dlcmVkJ1xuKTtcblxuLy8gU3VzcGVuc2lvbiBhdHRyaWJ1dGVzXG5cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25TdGF0ZSA9IFNlbWFudGljQ29udmVudGlvbjwnc3VzcGVuZGVkJz4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLnN0YXRlJ1xuKTtcbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25Ib29rQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24uaG9va19jb3VudCdcbik7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uU3RlcENvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLnN0ZXBfY291bnQnXG4pO1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvbldhaXRDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi53YWl0X2NvdW50J1xuKTtcblxuLy8gV29ybGQvU3RvcmFnZSBhdHRyaWJ1dGVzIC0gU3RhbmRhcmQgT1RFTCBIVFRQIGNvbnZlbnRpb25zXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvaHR0cC9odHRwLXNwYW5zL1xuXG4vKiogSFRUUCByZXF1ZXN0IG1ldGhvZCAoc3RhbmRhcmQgT1RFTDogaHR0cC5yZXF1ZXN0Lm1ldGhvZCkgKi9cbmV4cG9ydCBjb25zdCBIdHRwUmVxdWVzdE1ldGhvZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnaHR0cC5yZXF1ZXN0Lm1ldGhvZCdcbik7XG5cbi8qKiBSb3V0ZSBwYXR0ZXJuIGZvciB0aGUgcmVxdWVzdCAoc3RhbmRhcmQgT1RFTDogaHR0cC5yb3V0ZSkgKi9cbmV4cG9ydCBjb25zdCBIdHRwUm91dGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignaHR0cC5yb3V0ZScpO1xuXG4vKiogRnVsbCBVUkwgb2YgdGhlIHJlcXVlc3QgKHN0YW5kYXJkIE9URUw6IHVybC5mdWxsKSAqL1xuZXhwb3J0IGNvbnN0IFVybEZ1bGwgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigndXJsLmZ1bGwnKTtcblxuLyoqIFNlcnZlciBob3N0bmFtZSAoc3RhbmRhcmQgT1RFTDogc2VydmVyLmFkZHJlc3MpICovXG5leHBvcnQgY29uc3QgU2VydmVyQWRkcmVzcyA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzZXJ2ZXIuYWRkcmVzcycpO1xuXG4vKiogU2VydmVyIHBvcnQgKHN0YW5kYXJkIE9URUw6IHNlcnZlci5wb3J0KSAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlclBvcnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc2VydmVyLnBvcnQnKTtcblxuLyoqIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgKHN0YW5kYXJkIE9URUw6IGh0dHAucmVzcG9uc2Uuc3RhdHVzX2NvZGUpICovXG5leHBvcnQgY29uc3QgSHR0cFJlc3BvbnNlU3RhdHVzQ29kZSA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnaHR0cC5yZXNwb25zZS5zdGF0dXNfY29kZSdcbik7XG5cbi8qKiBFcnJvciB0eXBlIHdoZW4gcmVxdWVzdCBmYWlscyAoc3RhbmRhcmQgT1RFTDogZXJyb3IudHlwZSkgKi9cbmV4cG9ydCBjb25zdCBFcnJvclR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignZXJyb3IudHlwZScpO1xuXG4vLyBXb3JsZC1zcGVjaWZpYyBjdXN0b20gYXR0cmlidXRlcyAoZm9yIHdvcmtmbG93LXNwZWNpZmljIGNvbnRleHQpXG5cbi8qKiBGb3JtYXQgdXNlZCBmb3IgcGFyc2luZyByZXNwb25zZSBib2R5IChjYm9yIG9yIGpzb24pICovXG5leHBvcnQgY29uc3QgV29ybGRQYXJzZUZvcm1hdCA9IFNlbWFudGljQ29udmVudGlvbjwnY2JvcicgfCAnanNvbic+KFxuICAnd29ya2Zsb3cud29ybGQucGFyc2UuZm9ybWF0J1xuKTtcblxuLy8gRXZlbnQgbG9hZGluZyBhdHRyaWJ1dGVzXG5cbi8qKiBOdW1iZXIgb2YgcGFnaW5hdGlvbiBwYWdlcyBsb2FkZWQgd2hlbiBmZXRjaGluZyB3b3JrZmxvdyBldmVudHMgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0V2ZW50c1BhZ2VzTG9hZGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5ldmVudHMucGFnZXNfbG9hZGVkJ1xuKTtcblxuLy8gUXVldWUgdGltaW5nIGJyZWFrZG93biBhdHRyaWJ1dGVzICh3b3JrZmxvdy1zcGVjaWZpYylcblxuLyoqIFRpbWUgc3BlbnQgZGVzZXJpYWxpemluZyB0aGUgcXVldWUgbWVzc2FnZSBpbiBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBjb25zdCBRdWV1ZURlc2VyaWFsaXplVGltZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5kZXNlcmlhbGl6ZV90aW1lX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgZXhlY3V0aW5nIHRoZSBoYW5kbGVyIGxvZ2ljIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlRXhlY3V0aW9uVGltZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5leGVjdXRpb25fdGltZV9tcydcbik7XG5cbi8qKiBUaW1lIHNwZW50IHNlcmlhbGl6aW5nIHRoZSByZXNwb25zZSBpbiBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBjb25zdCBRdWV1ZVNlcmlhbGl6ZVRpbWVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUuc2VyaWFsaXplX3RpbWVfbXMnXG4pO1xuXG4vLyBQYXlsb2FkIGNvbXByZXNzaW9uIGF0dHJpYnV0ZXMgKHpzdGQgcHJlZmVycmVkLCBnemlwIGZhbGxiYWNrOyBzcGVjVmVyc2lvbiA+PSA1KVxuLy9cbi8vIFNpemVzIGFyZSBtZWFzdXJlZCBhdCB0aGUgY29tcHJlc3Npb24gYm91bmRhcnk6IGJlZm9yZSBlbmNyeXB0aW9uIG9uIHRoZVxuLy8gd3JpdGUgcGF0aCBhbmQgYWZ0ZXIgZGVjcnlwdGlvbiBvbiB0aGUgcmVhZCBwYXRoLiBUaGV5IHRoZXJlZm9yZSByZWZsZWN0XG4vLyBjb21wcmVzc2lvbidzIGVmZmVjdCwgbm90IHRoZSBhdC1yZXN0IHNpemUgKHdoaWNoIGFsc28gaW5jbHVkZXMgdGhlXG4vLyB+MjgtYnl0ZSBgZW5jcmAgZW52ZWxvcGUgYW5kLCBvbiBzb21lIGJhY2tlbmRzLCBiYXNlNjQgZXhwYW5zaW9uKS5cblxuLyoqIFdoZXRoZXIgdGhpcyBzZXJpYWxpemUvZGVzZXJpYWxpemUgd2FzIGEgd3JpdGUgb3IgcmVhZC4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uT3BlcmF0aW9uID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnc2VyaWFsaXplJyB8ICdkZXNlcmlhbGl6ZSdcbj4oJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24ub3BlcmF0aW9uJyk7XG5cbi8qKiBXaGV0aGVyIGEgY29tcHJlc3Npb24gY29kZWMgd2FzIGFwcGxpZWQgKHdyaXRlKSAvIHByZXNlbnQgKHJlYWQpLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25Db21wcmVzc2VkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5jb21wcmVzc2VkJ1xuKTtcblxuLyoqIFdoaWNoIGNvbXByZXNzaW9uIGNvZGVjIGFwcGxpZWQgLyB3YXMgcHJlc2VudCAoYHpzdGRgLCBgZ3ppcGAsIG9yIGBub25lYCkuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkNvZGVjID0gU2VtYW50aWNDb252ZW50aW9uPCd6c3RkJyB8ICdnemlwJyB8ICdub25lJz4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmNvZGVjJ1xuKTtcblxuLyoqIExvZ2ljYWwgKHVuY29tcHJlc3NlZCwgZGV2YWx1ZS1wcmVmaXhlZCkgcGF5bG9hZCBzaXplIGluIGJ5dGVzLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25VbmNvbXByZXNzZWRCeXRlcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi51bmNvbXByZXNzZWRfYnl0ZXMnXG4pO1xuXG4vKiogU3RvcmVkIChwb3N0LWNvbXByZXNzaW9uLCBwcmUtZW5jcnlwdGlvbikgcGF5bG9hZCBzaXplIGluIGJ5dGVzLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25TdG9yZWRCeXRlcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5zdG9yZWRfYnl0ZXMnXG4pO1xuXG4vKiogRnJhY3Rpb24gb2YgYnl0ZXMgc2F2ZWQgYnkgY29tcHJlc3Npb24gKDAuLjEpOyBzZXQgb25seSB3aGVuIGNvbXByZXNzZWQuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkNvbXByZXNzaW9uUmF0aW8gPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uY29tcHJlc3Npb25fcmF0aW8nXG4pO1xuXG4vKipcbiAqIE51bWJlciBvZiB3b3JrZmxvdyAoZ3Vlc3QpIGNvZGUgZXhlY3V0aW9ucyBzZXJpYWxpemF0aW9uIGNvdWxkIG5vdCBhdm9pZFxuICogKGdldHRlcnMsIHByb3hpZXMsIGN1c3RvbSBzZXJpYWxpemVycyk7IHNldCBvbmx5IHdoZW4gbm9uLXplcm8uXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uR3Vlc3RDb2RlRXhlY3V0aW9ucyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5ndWVzdF9jb2RlX2V4ZWN1dGlvbnMnXG4pO1xuXG4vKipcbiAqIERlZHVwbGljYXRlZCBga2luZCAoZGV0YWlsKWAgZGVzY3JpcHRpb25zIG9mIHRoZSBndWVzdC1jb2RlIGV4ZWN1dGlvbnM7XG4gKiBzZXQgb25seSB3aGVuIG5vbi16ZXJvLlxuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkd1ZXN0Q29kZURldGFpbHMgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nW10+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5ndWVzdF9jb2RlX2RldGFpbHMnXG4pO1xuXG4vLyBSUEMvUGVlciBTZXJ2aWNlIGF0dHJpYnV0ZXMgLSBGb3Igc2VydmljZSBtYXBzIGFuZCBkZXBlbmRlbmN5IHRyYWNraW5nXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvcnBjL3JwYy1zcGFucy9cblxuLyoqIFRoZSByZW1vdGUgc2VydmljZSBuYW1lIGZvciBEYXRhZG9nIHNlcnZpY2UgbWFwcyAoRGF0YWRvZy1zcGVjaWZpYzogcGVlci5zZXJ2aWNlKSAqL1xuZXhwb3J0IGNvbnN0IFBlZXJTZXJ2aWNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3BlZXIuc2VydmljZScpO1xuXG4vKiogUlBDIHN5c3RlbSBpZGVudGlmaWVyIChzdGFuZGFyZCBPVEVMOiBycGMuc3lzdGVtKSAqL1xuZXhwb3J0IGNvbnN0IFJwY1N5c3RlbSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdycGMuc3lzdGVtJyk7XG5cbi8qKiBSUEMgc2VydmljZSBuYW1lIChzdGFuZGFyZCBPVEVMOiBycGMuc2VydmljZSkgKi9cbmV4cG9ydCBjb25zdCBScGNTZXJ2aWNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3JwYy5zZXJ2aWNlJyk7XG5cbi8qKiBSUEMgbWV0aG9kIG5hbWUgKHN0YW5kYXJkIE9URUw6IHJwYy5tZXRob2QpICovXG5leHBvcnQgY29uc3QgUnBjTWV0aG9kID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3JwYy5tZXRob2QnKTtcblxuLy8gRXJyb3IgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgZXJyb3IgY29udmVudGlvbnNcbi8vIFNlZTogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9leGNlcHRpb25zL2V4Y2VwdGlvbnMtc3BhbnMvXG5cbi8qKiBXaGV0aGVyIHRoZSBlcnJvciBpcyByZXRyeWFibGUgKHdvcmtmbG93LXNwZWNpZmljKSAqL1xuZXhwb3J0IGNvbnN0IEVycm9yUmV0cnlhYmxlID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCdlcnJvci5yZXRyeWFibGUnKTtcblxuLyoqIEVycm9yIGNhdGVnb3J5ICh3b3JrZmxvdy1zcGVjaWZpYzogZmF0YWwsIHJldHJ5YWJsZSwgdHJhbnNpZW50KSAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ2F0ZWdvcnkgPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdmYXRhbCcgfCAncmV0cnlhYmxlJyB8ICd0cmFuc2llbnQnXG4+KCdlcnJvci5jYXRlZ29yeScpO1xuIl19
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -73,6 +73,18 @@ export declare function deserializeTraceCarrier(traceCarrier: Record<string, str
|
|
|
73
73
|
*/
|
|
74
74
|
export declare function withTraceContext<T>(traceCarrier: Record<string, string> | undefined, fn: () => Promise<T>): Promise<T>;
|
|
75
75
|
export declare function trace<T>(spanName: string, ...args: [fn: (span?: Span) => Promise<T>] | [opts: SpanOptions, fn: (span?: Span) => Promise<T>]): Promise<T>;
|
|
76
|
+
/** Starts a child span without installing it as the active context. */
|
|
77
|
+
export declare function startTraceSpan(spanName: string): Promise<{
|
|
78
|
+
end: () => void;
|
|
79
|
+
fail: (error: unknown) => void;
|
|
80
|
+
}>;
|
|
81
|
+
/** Bind work to the currently active span even when it starts from a child. */
|
|
82
|
+
export declare function bindActiveTraceContext<Args extends unknown[], Result>(fn: (...args: Args) => Result): Promise<(...args: Args) => Result>;
|
|
83
|
+
/** Keeps a parked workflow's ambient trace context aligned with each resume. */
|
|
84
|
+
export declare function createRefreshableTraceContext(): Promise<{
|
|
85
|
+
refresh(): void;
|
|
86
|
+
run: <T>(fn: () => T) => T;
|
|
87
|
+
}>;
|
|
76
88
|
/**
|
|
77
89
|
* Emit a span whose start is back-dated to `startEpochMs` and whose end is now,
|
|
78
90
|
* so its duration reflects an interval only measurable at its end (e.g.
|
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;AAaxD;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAcxD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC1C,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,iBAAiB,EAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAClD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAIjC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,iBAAiB,EAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAClD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAMjC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,oCAMrC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAChD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAcZ;
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|