@blokjs/trigger-cron 0.6.21 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CronTrigger.d.ts +11 -3
- package/dist/CronTrigger.js +62 -7
- package/dist/index.d.ts +12 -7
- package/dist/index.js +13 -8
- package/package.json +4 -4
package/dist/CronTrigger.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Uses the 'cron' package for cron parsing and scheduling.
|
|
11
11
|
*/
|
|
12
|
-
import type { CronTriggerOpts,
|
|
12
|
+
import type { CronTriggerOpts, WorkflowV2Builder } from "@blokjs/helper";
|
|
13
13
|
import { type BlokService, DefaultLogger, type GlobalOptions, TriggerBase, type TriggerResponse } from "@blokjs/runner";
|
|
14
14
|
import { CronJob } from "cron";
|
|
15
15
|
/**
|
|
@@ -75,9 +75,10 @@ export declare abstract class CronTrigger extends TriggerBase {
|
|
|
75
75
|
protected readonly tracer: import("@opentelemetry/api").Tracer;
|
|
76
76
|
protected readonly logger: DefaultLogger;
|
|
77
77
|
protected jobs: Map<string, ScheduledJob>;
|
|
78
|
+
/** OBS-02 T4 — graceful shutdown for the OTel tracer provider, if tracing was enabled. */
|
|
79
|
+
private tracingShutdown;
|
|
78
80
|
protected abstract nodes: Record<string, BlokService<unknown>>;
|
|
79
|
-
protected abstract workflows: Record<string,
|
|
80
|
-
constructor();
|
|
81
|
+
protected abstract workflows: Record<string, WorkflowV2Builder>;
|
|
81
82
|
/**
|
|
82
83
|
* Load nodes into the node map
|
|
83
84
|
*/
|
|
@@ -98,6 +99,13 @@ export declare abstract class CronTrigger extends TriggerBase {
|
|
|
98
99
|
/**
|
|
99
100
|
* Stop all cron jobs
|
|
100
101
|
*/
|
|
102
|
+
/**
|
|
103
|
+
* OBS-02 T4 — install the OpenTelemetry SDK at boot when an OTLP endpoint is
|
|
104
|
+
* configured, so the spans the runner already creates for scheduled runs
|
|
105
|
+
* export to a backend (Tempo/Jaeger/…). No-op when `OTEL_EXPORTER_OTLP_ENDPOINT`
|
|
106
|
+
* is unset or `BLOK_TRACING_DISABLED=1`. Stores the shutdown so `stop()` flushes.
|
|
107
|
+
*/
|
|
108
|
+
private maybeBootstrapTracing;
|
|
101
109
|
stop(): Promise<void>;
|
|
102
110
|
protected onHmrWorkflowChange(): Promise<void>;
|
|
103
111
|
/**
|
package/dist/CronTrigger.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Uses the 'cron' package for cron parsing and scheduling.
|
|
11
11
|
*/
|
|
12
|
-
import { DefaultLogger, DeferredDispatchSignal, NodeMap, TriggerBase, WaitDispatchRequest, } from "@blokjs/runner";
|
|
12
|
+
import { DefaultLogger, DeferredDispatchSignal, NodeMap, TriggerBase, WaitDispatchRequest, bootstrapTracing, } from "@blokjs/runner";
|
|
13
13
|
import { SpanStatusCode, metrics, trace } from "@opentelemetry/api";
|
|
14
14
|
import { CronJob } from "cron";
|
|
15
15
|
import { v4 as uuid } from "uuid";
|
|
@@ -21,11 +21,16 @@ export class CronTrigger extends TriggerBase {
|
|
|
21
21
|
tracer = trace.getTracer(process.env.PROJECT_NAME || "trigger-cron-workflow", process.env.PROJECT_VERSION || "0.0.1");
|
|
22
22
|
logger = new DefaultLogger();
|
|
23
23
|
jobs = new Map();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
/** OBS-02 T4 — graceful shutdown for the OTel tracer provider, if tracing was enabled. */
|
|
25
|
+
tracingShutdown = null;
|
|
26
|
+
// Constructor removed (mirrors WorkerTrigger's v0.6.3 fix) — pre-fix it
|
|
27
|
+
// called `loadNodes()` + `loadWorkflows()`, but subclasses use class-field
|
|
28
|
+
// assignments for `nodes` / `workflows` (the canonical TypeScript pattern).
|
|
29
|
+
// Those fields run AFTER super(), so accessing `this.nodes` from the parent
|
|
30
|
+
// constructor read `undefined` and crashed with
|
|
31
|
+
// `TypeError: Cannot convert undefined or null to object` (Object.keys(this.nodes)).
|
|
32
|
+
// The registry init now happens at the start of `listen()`, after the
|
|
33
|
+
// subclass's fields are initialized.
|
|
29
34
|
/**
|
|
30
35
|
* Load nodes into the node map
|
|
31
36
|
*/
|
|
@@ -58,6 +63,19 @@ export class CronTrigger extends TriggerBase {
|
|
|
58
63
|
async listen() {
|
|
59
64
|
const startTime = this.startCounter();
|
|
60
65
|
try {
|
|
66
|
+
// OBS-02 T4 — opt-in distributed tracing for scheduled executions.
|
|
67
|
+
// When OTEL_EXPORTER_OTLP_ENDPOINT is set, install an OTel SDK so the
|
|
68
|
+
// spans the runner creates per cron run/step export to a backend.
|
|
69
|
+
// Mirrors HttpTrigger's B1 wiring; no-op when the env var is unset.
|
|
70
|
+
await this.maybeBootstrapTracing();
|
|
71
|
+
// Populate the trigger's node + workflow registries from the
|
|
72
|
+
// subclass's `nodes` / `workflows` fields. Mirrors WorkerTrigger's
|
|
73
|
+
// v0.6.3 fix — pre-fix these calls lived in the constructor and
|
|
74
|
+
// crashed because class fields haven't run yet at super-constructor
|
|
75
|
+
// time. Must run before `registerWorkflowsFromNodeMap`,
|
|
76
|
+
// which reads `this.nodeMap.workflows`.
|
|
77
|
+
this.loadNodes();
|
|
78
|
+
this.loadWorkflows();
|
|
61
79
|
// F5 · install crash/orphan/janitor/shutdown handlers so a
|
|
62
80
|
// cron-only process gets the same run-state integrity + storage
|
|
63
81
|
// hygiene guarantees as HTTP/Worker. Each handler is idempotent
|
|
@@ -122,7 +140,44 @@ export class CronTrigger extends TriggerBase {
|
|
|
122
140
|
/**
|
|
123
141
|
* Stop all cron jobs
|
|
124
142
|
*/
|
|
143
|
+
/**
|
|
144
|
+
* OBS-02 T4 — install the OpenTelemetry SDK at boot when an OTLP endpoint is
|
|
145
|
+
* configured, so the spans the runner already creates for scheduled runs
|
|
146
|
+
* export to a backend (Tempo/Jaeger/…). No-op when `OTEL_EXPORTER_OTLP_ENDPOINT`
|
|
147
|
+
* is unset or `BLOK_TRACING_DISABLED=1`. Stores the shutdown so `stop()` flushes.
|
|
148
|
+
*/
|
|
149
|
+
async maybeBootstrapTracing() {
|
|
150
|
+
if (process.env.BLOK_TRACING_DISABLED === "1")
|
|
151
|
+
return;
|
|
152
|
+
const base = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
153
|
+
if (!base)
|
|
154
|
+
return;
|
|
155
|
+
const endpoint = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ? base : `${base.replace(/\/$/, "")}/v1/traces`;
|
|
156
|
+
try {
|
|
157
|
+
const result = await bootstrapTracing({
|
|
158
|
+
serviceName: process.env.APP_NAME || process.env.PROJECT_NAME || "blok-cron",
|
|
159
|
+
serviceVersion: process.env.PROJECT_VERSION,
|
|
160
|
+
exporter: "otlp",
|
|
161
|
+
endpoint,
|
|
162
|
+
});
|
|
163
|
+
if (result) {
|
|
164
|
+
this.tracingShutdown = result.shutdown;
|
|
165
|
+
this.logger.log(`[blok][tracing] OTLP distributed tracing enabled → ${endpoint}`);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.logger.error("[blok][tracing] OTEL_EXPORTER_OTLP_ENDPOINT is set but the OTel trace SDK isn't installed — tracing is OFF.");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
this.logger.error(`[blok][tracing] failed to initialize: ${err.message}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
125
175
|
async stop() {
|
|
176
|
+
// OBS-02 T4 — flush pending spans before the process exits.
|
|
177
|
+
if (this.tracingShutdown) {
|
|
178
|
+
await this.tracingShutdown().catch((err) => this.logger.error(`[blok][tracing] shutdown failed: ${err.message}`));
|
|
179
|
+
this.tracingShutdown = null;
|
|
180
|
+
}
|
|
126
181
|
for (const [jobId, scheduledJob] of this.jobs) {
|
|
127
182
|
scheduledJob.job.stop();
|
|
128
183
|
this.logger.log(`Job ${jobId} stopped`);
|
|
@@ -348,4 +403,4 @@ export class CronTrigger extends TriggerBase {
|
|
|
348
403
|
}
|
|
349
404
|
}
|
|
350
405
|
export default CronTrigger;
|
|
351
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JvblRyaWdnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ3JvblRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUdILE9BQU8sRUFFTixhQUFhLEVBQ2Isc0JBQXNCLEVBRXRCLE9BQU8sRUFDUCxXQUFXLEVBRVgsbUJBQW1CLEdBQ25CLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFhLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQTREbEM7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLFdBQVksU0FBUSxXQUFXO0lBQzFDLE9BQU8sR0FBa0IsRUFBbUIsQ0FBQztJQUNwQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksdUJBQXVCLEVBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FDdEMsQ0FBQztJQUNpQixNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUN0QyxJQUFJLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUM7SUFNdEQ7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsS0FBSyxNQUFN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QUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Q7QUFFRCxlQUFlLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JvblRyaWdnZXIgLSBTY2hlZHVsZWQgd29ya2Zsb3cgZXhlY3V0aW9uIGJhc2VkIG9uIGNyb24gZXhwcmVzc2lvbnNcbiAqXG4gKiBFeHRlbmRzIFRyaWdnZXJCYXNlIHRvIHN1cHBvcnQgc2NoZWR1bGVkIHRyaWdnZXJzOlxuICogLSBDcm9uIGV4cHJlc3Npb25zIChlLmcuLCBcIjAgKiAqICogKlwiIGZvciBob3VybHkpXG4gKiAtIFRpbWV6b25lLWF3YXJlIHNjaGVkdWxpbmdcbiAqIC0gT3ZlcmxhcCBwcmV2ZW50aW9uXG4gKiAtIE1hbnVhbCB0cmlnZ2VyIHN1cHBvcnRcbiAqXG4gKiBVc2VzIHRoZSAnY3JvbicgcGFja2FnZSBmb3IgY3JvbiBwYXJzaW5nIGFuZCBzY2hlZHVsaW5nLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ3JvblRyaWdnZXJPcHRzLCBIZWxwZXJSZXNwb25zZSB9IGZyb20gXCJAYmxva2pzL2hlbHBlclwiO1xuaW1wb3J0IHtcblx0dHlwZSBCbG9rU2VydmljZSxcblx0RGVmYXVsdExvZ2dlcixcblx0RGVmZXJyZWREaXNwYXRjaFNpZ25hbCxcblx0dHlwZSBHbG9iYWxPcHRpb25zLFxuXHROb2RlTWFwLFxuXHRUcmlnZ2VyQmFzZSxcblx0dHlwZSBUcmlnZ2VyUmVzcG9uc2UsXG5cdFdhaXREaXNwYXRjaFJlcXVlc3QsXG59IGZyb20gXCJAYmxva2pzL3J1bm5lclwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0LCBNZXRyaWNzVHlwZSwgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQGJsb2tqcy9zaGFyZWRcIjtcbmltcG9ydCB7IHR5cGUgU3BhbiwgU3BhblN0YXR1c0NvZGUsIG1ldHJpY3MsIHRyYWNlIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHsgQ3JvbkpvYiB9IGZyb20gXCJjcm9uXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcblxuLyoqXG4gKiBTY2hlZHVsZWQgam9iIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVkSm9iIHtcblx0LyoqIFVuaXF1ZSBqb2IgSUQgKi9cblx0aWQ6IHN0cmluZztcblx0LyoqIFdvcmtmbG93IHBhdGggKi9cblx0d29ya2Zsb3dQYXRoOiBzdHJpbmc7XG5cdC8qKiBDcm9uIGV4cHJlc3Npb24gKi9cblx0c2NoZWR1bGU6IHN0cmluZztcblx0LyoqIFRpbWV6b25lICovXG5cdHRpbWV6b25lOiBzdHJpbmc7XG5cdC8qKiBBbGxvdyBvdmVybGFwcGluZyBleGVjdXRpb25zICovXG5cdG92ZXJsYXA6IGJvb2xlYW47XG5cdC8qKiBXaGV0aGVyIHRoZSBqb2IgaXMgY3VycmVudGx5IHJ1bm5pbmcgKi9cblx0cnVubmluZzogYm9vbGVhbjtcblx0LyoqIExhc3QgZXhlY3V0aW9uIHRpbWUgKi9cblx0bGFzdFJ1bj86IERhdGU7XG5cdC8qKiBOZXh0IHNjaGVkdWxlZCB0aW1lICovXG5cdG5leHRSdW4/OiBEYXRlO1xuXHQvKiogSW50ZXJuYWwgQ3JvbkpvYiBpbnN0YW5jZSAqL1xuXHRqb2I6IENyb25Kb2I7XG59XG5cbi8qKlxuICogRXhlY3V0aW9uIGNvbnRleHQgcGFzc2VkIHRvIHRoZSB3b3JrZmxvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyb25FeGVjdXRpb25Db250ZXh0IHtcblx0LyoqIEpvYiBJRCAqL1xuXHRqb2JJZDogc3RyaW5nO1xuXHQvKiogU2NoZWR1bGVkIHRpbWUgKHdoZW4gaXQgd2FzIHN1cHBvc2VkIHRvIHJ1bikgKi9cblx0c2NoZWR1bGVkVGltZTogRGF0ZTtcblx0LyoqIEFjdHVhbCBleGVjdXRpb24gdGltZSAqL1xuXHRleGVjdXRpb25UaW1lOiBEYXRlO1xuXHQvKiogQ3JvbiBleHByZXNzaW9uICovXG5cdHNjaGVkdWxlOiBzdHJpbmc7XG5cdC8qKiBUaW1lem9uZSAqL1xuXHR0aW1lem9uZTogc3RyaW5nO1xuXHQvKiogV2hldGhlciB0aGlzIGlzIGEgbWFudWFsIHRyaWdnZXIgKi9cblx0bWFudWFsOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IG1vZGVsIHdpdGggY3JvbiB0cmlnZ2VyIGNvbmZpZ3VyYXRpb25cbiAqL1xuaW50ZXJmYWNlIENyb25Xb3JrZmxvd01vZGVsIHtcblx0cGF0aDogc3RyaW5nO1xuXHRjb25maWc6IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0dmVyc2lvbjogc3RyaW5nO1xuXHRcdHRyaWdnZXI/OiB7XG5cdFx0XHRjcm9uPzogQ3JvblRyaWdnZXJPcHRzO1xuXHRcdFx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0XHR9O1xuXHRcdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdH07XG59XG5cbi8qKlxuICogQ3JvblRyaWdnZXIgLSBTY2hlZHVsZWQgd29ya2Zsb3cgZXhlY3V0aW9uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDcm9uVHJpZ2dlciBleHRlbmRzIFRyaWdnZXJCYXNlIHtcblx0cHJvdGVjdGVkIG5vZGVNYXA6IEdsb2JhbE9wdGlvbnMgPSB7fSBhcyBHbG9iYWxPcHRpb25zO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfTkFNRSB8fCBcInRyaWdnZXItY3Jvbi13b3JrZmxvd1wiLFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfVkVSU0lPTiB8fCBcIjAuMC4xXCIsXG5cdCk7XG5cdHByb3RlY3RlZCByZWFkb25seSBsb2dnZXIgPSBuZXcgRGVmYXVsdExvZ2dlcigpO1xuXHRwcm90ZWN0ZWQgam9iczogTWFwPHN0cmluZywgU2NoZWR1bGVkSm9iPiA9IG5ldyBNYXAoKTtcblxuXHQvLyBTdWJjbGFzc2VzIHByb3ZpZGUgdGhlc2Vcblx0cHJvdGVjdGVkIGFic3RyYWN0IG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBCbG9rU2VydmljZTx1bmtub3duPj47XG5cdHByb3RlY3RlZCBhYnN0cmFjdCB3b3JrZmxvd3M6IFJlY29yZDxzdHJpbmcsIEhlbHBlclJlc3BvbnNlPjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMubG9hZE5vZGVzKCk7XG5cdFx0dGhpcy5sb2FkV29ya2Zsb3dzKCk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZCBub2RlcyBpbnRvIHRoZSBub2RlIG1hcFxuXHQgKi9cblx0bG9hZE5vZGVzKCk6IHZvaWQge1xuXHRcdHRoaXMubm9kZU1hcC5ub2RlcyA9IG5ldyBOb2RlTWFwKCk7XG5cdFx0Y29uc3Qgbm9kZUtleXMgPSBPYmplY3Qua2V5cyh0aGlzLm5vZGVzKTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBub2RlS2V5cykge1xuXHRcdFx0dGhpcy5ub2RlTWFwLm5vZGVzLmFkZE5vZGUoa2V5LCB0aGlzLm5vZGVzW2tleV0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkIHdvcmtmbG93cyBpbnRvIHRoZSB3b3JrZmxvdyBtYXBcblx0ICovXG5cdGxvYWRXb3JrZmxvd3MoKTogdm9pZCB7XG5cdFx0dGhpcy5ub2RlTWFwLndvcmtmbG93cyA9IHRoaXMud29ya2Zsb3dzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnQgY3JvbiBEYXRlVGltZSB0byBEYXRlXG5cdCAqIFRoZSBjcm9uIHBhY2thZ2UgdXNlcyBsdXhvbiBEYXRlVGltZSB3aGljaCBoYXMgdG9KU0RhdGUoKVxuXHQgKi9cblx0cHJvdGVjdGVkIHRvRGF0ZShkYXRlVGltZTogdW5rbm93bik6IERhdGUge1xuXHRcdGlmIChkYXRlVGltZSAmJiB0eXBlb2YgZGF0ZVRpbWUgPT09IFwib2JqZWN0XCIgJiYgXCJ0b0pTRGF0ZVwiIGluIGRhdGVUaW1lKSB7XG5cdFx0XHRyZXR1cm4gKGRhdGVUaW1lIGFzIHsgdG9KU0RhdGU6ICgpID0+IERhdGUgfSkudG9KU0RhdGUoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGRhdGVUaW1lIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVUaW1lIDogbmV3IERhdGUoZGF0ZVRpbWUgYXMgc3RyaW5nIHwgbnVtYmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdGFydCB0aGUgY3JvbiBzY2hlZHVsZXIgLSBtYWluIGVudHJ5IHBvaW50XG5cdCAqL1xuXHRhc3luYyBsaXN0ZW4oKTogUHJvbWlzZTxudW1iZXI+IHtcblx0XHRjb25zdCBzdGFydFRpbWUgPSB0aGlzLnN0YXJ0Q291bnRlcigpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIEY1IMK3IGluc3RhbGwgY3Jhc2gvb3JwaGFuL2phbml0b3Ivc2h1dGRvd24gaGFuZGxlcnMgc28gYVxuXHRcdFx0Ly8gY3Jvbi1vbmx5IHByb2Nlc3MgZ2V0cyB0aGUgc2FtZSBydW4tc3RhdGUgaW50ZWdyaXR5ICsgc3RvcmFnZVxuXHRcdFx0Ly8gaHlnaWVuZSBndWFyYW50ZWVzIGFzIEhUVFAvV29ya2VyLiBFYWNoIGhhbmRsZXIgaXMgaWRlbXBvdGVudFxuXHRcdFx0Ly8gKyBpbmRpdmlkdWFsbHkga2lsbC1zd2l0Y2hlZC5cblx0XHRcdHRoaXMuaW5zdGFsbE9wZXJhdGlvbmFsSGFuZGxlcnModGhpcy5sb2dnZXIpO1xuXG5cdFx0XHQvLyBGNiDCtyBmZWVkIHRoZSBXb3JrZmxvd1JlZ2lzdHJ5IGZyb20gdGhlIG5vZGVNYXAgc28gYHN1YndvcmtmbG93OmBcblx0XHRcdC8vIHN0ZXBzICsgdHJpZ2dlci93b3JrZmxvdy9wcm9jZXNzLWdsb2JhbCBtaWRkbGV3YXJlIHJlc29sdmUgaW4gYVxuXHRcdFx0Ly8gY3Jvbi1vbmx5IGRlcGxveW1lbnQgKG5vIEhUVFAgdHJpZ2dlciB0byBwb3B1bGF0ZSB0aGUgcmVnaXN0cnkpLlxuXHRcdFx0dGhpcy5yZWdpc3RlcldvcmtmbG93c0Zyb21Ob2RlTWFwKHRoaXMubG9nZ2VyKTtcblxuXHRcdFx0Ly8gRjE0IMK3IHNlZWQgdGhlIHByb2Nlc3MtZ2xvYmFsIG1pZGRsZXdhcmUgY2hhaW4gZnJvbVxuXHRcdFx0Ly8gYEJMT0tfR0xPQkFMX01JRERMRVdBUkVgIChpZGVtcG90ZW50IOKAlCBwcm9ncmFtbWF0aWNcblx0XHRcdC8vIHNldEdsb2JhbE1pZGRsZXdhcmUgdGFrZXMgcHJlY2VkZW5jZSkuXG5cdFx0XHR0aGlzLnNlZWRHbG9iYWxNaWRkbGV3YXJlRnJvbUVudih0aGlzLmxvZ2dlcik7XG5cblx0XHRcdC8vIEZpbmQgYWxsIHdvcmtmbG93cyB3aXRoIGNyb24gdHJpZ2dlcnNcblx0XHRcdGNvbnN0IGNyb25Xb3JrZmxvd3MgPSB0aGlzLmdldENyb25Xb3JrZmxvd3MoKTtcblxuXHRcdFx0aWYgKGNyb25Xb3JrZmxvd3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhcIk5vIHdvcmtmbG93cyB3aXRoIGNyb24gdHJpZ2dlcnMgZm91bmRcIik7XG5cdFx0XHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlIGFuZCBzdGFydCBjcm9uIGpvYnMgZm9yIGVhY2ggd29ya2Zsb3dcblx0XHRcdGZvciAoY29uc3Qgd29ya2Zsb3cgb2YgY3JvbldvcmtmbG93cykge1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSB3b3JrZmxvdy5jb25maWcudHJpZ2dlcj8uY3JvbiBhcyBDcm9uVHJpZ2dlck9wdHM7XG5cdFx0XHRcdGNvbnN0IGpvYklkID0gYGNyb24tJHt3b3JrZmxvdy5wYXRofS0ke3V1aWQoKS5zbGljZSgwLCA4KX1gO1xuXG5cdFx0XHRcdC8vIGBDcm9uVHJpZ2dlck9wdHNgIGlzIGB6LmlucHV0POKApj5gIHNvIGB0aW1lem9uZWAgaXMgYHN0cmluZyB8IHVuZGVmaW5lZGBcblx0XHRcdFx0Ly8gZXZlbiB0aG91Z2ggdGhlIHNjaGVtYSBkZWNsYXJlcyBgLmRlZmF1bHQoXCJVVENcIilgLiBBcHBseSB0aGVcblx0XHRcdFx0Ly8gZGVmYXVsdCBvbmNlIGhlcmUgc28gdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2QgKGFuZCB0aGUgY3JvbiBsaWInc1xuXHRcdFx0XHQvLyBjb25zdHJ1Y3Rvcikgc2VlcyBhIGd1YXJhbnRlZWQgc3RyaW5nLlxuXHRcdFx0XHRjb25zdCB0aW1lem9uZSA9IGNvbmZpZy50aW1lem9uZSA/PyBcIlVUQ1wiO1xuXG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgU2NoZWR1bGluZyB3b3JrZmxvdzogJHt3b3JrZmxvdy5wYXRofSB3aXRoIHNjaGVkdWxlOiAke2NvbmZpZy5zY2hlZHVsZX0gKCR7dGltZXpvbmV9KWApO1xuXG5cdFx0XHRcdGNvbnN0IGpvYiA9IG5ldyBDcm9uSm9iKFxuXHRcdFx0XHRcdGNvbmZpZy5zY2hlZHVsZSxcblx0XHRcdFx0XHRhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLmV4ZWN1dGVXb3JrZmxvdyhqb2JJZCwgd29ya2Zsb3csIGNvbmZpZywgZmFsc2UpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCwgLy8gb25Db21wbGV0ZVxuXHRcdFx0XHRcdGZhbHNlLCAvLyBzdGFydFxuXHRcdFx0XHRcdHRpbWV6b25lLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IHNjaGVkdWxlZEpvYjogU2NoZWR1bGVkSm9iID0ge1xuXHRcdFx0XHRcdGlkOiBqb2JJZCxcblx0XHRcdFx0XHR3b3JrZmxvd1BhdGg6IHdvcmtmbG93LnBhdGgsXG5cdFx0XHRcdFx0c2NoZWR1bGU6IGNvbmZpZy5zY2hlZHVsZSxcblx0XHRcdFx0XHR0aW1lem9uZSxcblx0XHRcdFx0XHRvdmVybGFwOiBjb25maWcub3ZlcmxhcCA/PyBmYWxzZSxcblx0XHRcdFx0XHRydW5uaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRuZXh0UnVuOiB0aGlzLnRvRGF0ZShqb2IubmV4dERhdGUoKSksXG5cdFx0XHRcdFx0am9iLFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRoaXMuam9icy5zZXQoam9iSWQsIHNjaGVkdWxlZEpvYik7XG5cblx0XHRcdFx0Ly8gU3RhcnQgdGhlIGpvYlxuXHRcdFx0XHRqb2Iuc3RhcnQoKTtcblx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKGBKb2IgJHtqb2JJZH0gc3RhcnRlZC4gTmV4dCBydW46ICR7c2NoZWR1bGVkSm9iLm5leHRSdW59YCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgQ3JvbiB0cmlnZ2VyIHN0YXJ0ZWQuICR7dGhpcy5qb2JzLnNpemV9IGpvYihzKSBzY2hlZHVsZWRgKTtcblxuXHRcdFx0Ly8gRW5hYmxlIEhNUiBpbiBkZXZlbG9wbWVudCBtb2RlXG5cdFx0XHRpZiAocHJvY2Vzcy5lbnYuQkxPS19ITVIgPT09IFwidHJ1ZVwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lbmFibGVIb3RSZWxvYWQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuZW5kQ291bnRlcihzdGFydFRpbWUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0YXJ0IGNyb24gdHJpZ2dlcjogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU3RvcCBhbGwgY3JvbiBqb2JzXG5cdCAqL1xuXHRhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGZvciAoY29uc3QgW2pvYklkLCBzY2hlZHVsZWRKb2JdIG9mIHRoaXMuam9icykge1xuXHRcdFx0c2NoZWR1bGVkSm9iLmpvYi5zdG9wKCk7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYEpvYiAke2pvYklkfSBzdG9wcGVkYCk7XG5cdFx0fVxuXHRcdHRoaXMuam9icy5jbGVhcigpO1xuXHRcdHRoaXMubG9nZ2VyLmxvZyhcIkNyb24gdHJpZ2dlciBzdG9wcGVkXCIpO1xuXHR9XG5cblx0cHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIG9uSG1yV29ya2Zsb3dDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFwiW0hNUl0gQ3JvbiB3b3JrZmxvdyBjaGFuZ2VkLCByZWxvYWRpbmcuLi5cIik7XG5cdFx0YXdhaXQgdGhpcy53YWl0Rm9ySW5GbGlnaHRSZXF1ZXN0cygpO1xuXHRcdGF3YWl0IHRoaXMuc3RvcCgpO1xuXHRcdHRoaXMubG9hZFdvcmtmbG93cygpO1xuXHRcdGF3YWl0IHRoaXMubGlzdGVuKCk7XG5cdH1cblxuXHQvKipcblx0ICogTWFudWFsbHkgdHJpZ2dlciBhIHNwZWNpZmljIGpvYlxuXHQgKi9cblx0YXN5bmMgdHJpZ2dlckpvYihqb2JJZDogc3RyaW5nKTogUHJvbWlzZTxUcmlnZ2VyUmVzcG9uc2UgfCBudWxsPiB7XG5cdFx0Y29uc3Qgc2NoZWR1bGVkSm9iID0gdGhpcy5qb2JzLmdldChqb2JJZCk7XG5cdFx0aWYgKCFzY2hlZHVsZWRKb2IpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBKb2Igbm90IGZvdW5kOiAke2pvYklkfWApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRoZSB3b3JrZmxvd1xuXHRcdGNvbnN0IHdvcmtmbG93ID0gdGhpcy5nZXRXb3JrZmxvd0J5UGF0aChzY2hlZHVsZWRKb2Iud29ya2Zsb3dQYXRoKTtcblx0XHRpZiAoIXdvcmtmbG93KSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgV29ya2Zsb3cgbm90IGZvdW5kOiAke3NjaGVkdWxlZEpvYi53b3JrZmxvd1BhdGh9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBjb25maWcgPSB3b3JrZmxvdy5jb25maWcudHJpZ2dlcj8uY3JvbiBhcyBDcm9uVHJpZ2dlck9wdHM7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZVdvcmtmbG93KGpvYklkLCB3b3JrZmxvdywgY29uZmlnLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIHNjaGVkdWxlZCBqb2JzXG5cdCAqL1xuXHRnZXRKb2JzKCk6IFNjaGVkdWxlZEpvYltdIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmpvYnMudmFsdWVzKCkpLm1hcCgoam9iKSA9PiAoe1xuXHRcdFx0Li4uam9iLFxuXHRcdFx0bmV4dFJ1bjogdGhpcy50b0RhdGUoam9iLmpvYi5uZXh0RGF0ZSgpKSxcblx0XHR9KSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGFsbCB3b3JrZmxvd3MgdGhhdCBoYXZlIGNyb24gdHJpZ2dlcnNcblx0ICovXG5cdHByb3RlY3RlZCBnZXRDcm9uV29ya2Zsb3dzKCk6IENyb25Xb3JrZmxvd01vZGVsW10ge1xuXHRcdGNvbnN0IHdvcmtmbG93czogQ3JvbldvcmtmbG93TW9kZWxbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBbcGF0aCwgd29ya2Zsb3ddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubm9kZU1hcC53b3JrZmxvd3MgfHwge30pKSB7XG5cdFx0XHRjb25zdCB3b3JrZmxvd0NvbmZpZyA9ICh3b3JrZmxvdyBhcyB1bmtub3duIGFzIHsgX2NvbmZpZzogQ3JvbldvcmtmbG93TW9kZWxbXCJjb25maWdcIl0gfSkuX2NvbmZpZztcblxuXHRcdFx0aWYgKHdvcmtmbG93Q29uZmlnPy50cmlnZ2VyKSB7XG5cdFx0XHRcdGNvbnN0IHRyaWdnZXJUeXBlID0gT2JqZWN0LmtleXMod29ya2Zsb3dDb25maWcudHJpZ2dlcilbMF07XG5cblx0XHRcdFx0aWYgKHRyaWdnZXJUeXBlID09PSBcImNyb25cIiAmJiB3b3JrZmxvd0NvbmZpZy50cmlnZ2VyLmNyb24pIHtcblx0XHRcdFx0XHR3b3JrZmxvd3MucHVzaCh7XG5cdFx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdFx0Y29uZmlnOiB3b3JrZmxvd0NvbmZpZyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB3b3JrZmxvd3M7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHdvcmtmbG93IGJ5IHBhdGhcblx0ICovXG5cdHByb3RlY3RlZCBnZXRXb3JrZmxvd0J5UGF0aChwYXRoOiBzdHJpbmcpOiBDcm9uV29ya2Zsb3dNb2RlbCB8IG51bGwge1xuXHRcdGNvbnN0IHdvcmtmbG93ID0gdGhpcy5ub2RlTWFwLndvcmtmbG93cz8uW3BhdGhdO1xuXHRcdGlmICghd29ya2Zsb3cpIHJldHVybiBudWxsO1xuXG5cdFx0Y29uc3Qgd29ya2Zsb3dDb25maWcgPSAod29ya2Zsb3cgYXMgdW5rbm93biBhcyB7IF9jb25maWc6IENyb25Xb3JrZmxvd01vZGVsW1wiY29uZmlnXCJdIH0pLl9jb25maWc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdGgsXG5cdFx0XHRjb25maWc6IHdvcmtmbG93Q29uZmlnLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZSBhIHdvcmtmbG93XG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgZXhlY3V0ZVdvcmtmbG93KFxuXHRcdGpvYklkOiBzdHJpbmcsXG5cdFx0d29ya2Zsb3c6IENyb25Xb3JrZmxvd01vZGVsLFxuXHRcdGNvbmZpZzogQ3JvblRyaWdnZXJPcHRzLFxuXHRcdG1hbnVhbDogYm9vbGVhbixcblx0KTogUHJvbWlzZTxUcmlnZ2VyUmVzcG9uc2U+IHtcblx0XHRjb25zdCBzY2hlZHVsZWRKb2IgPSB0aGlzLmpvYnMuZ2V0KGpvYklkKTtcblx0XHRpZiAoIXNjaGVkdWxlZEpvYikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBKb2Igbm90IGZvdW5kOiAke2pvYklkfWApO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBvdmVybGFwXG5cdFx0aWYgKHNjaGVkdWxlZEpvYi5ydW5uaW5nICYmICFzY2hlZHVsZWRKb2Iub3ZlcmxhcCkge1xuXHRcdFx0dGhpcy5sb2dnZXIubG9nKGBTa2lwcGluZyAke2pvYklkfTogcHJldmlvdXMgZXhlY3V0aW9uIHN0aWxsIHJ1bm5pbmcgKG92ZXJsYXAgZGlzYWJsZWQpYCk7XG5cdFx0XHRyZXR1cm4geyBjdHg6IHt9IGFzIENvbnRleHQsIG1ldHJpY3M6IHt9IGFzIE1ldHJpY3NUeXBlIH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXhlY3V0aW9uSWQgPSB1dWlkKCk7XG5cdFx0Y29uc3QgbGFzdERhdGUgPSBzY2hlZHVsZWRKb2Iuam9iLmxhc3REYXRlKCk7XG5cdFx0Y29uc3Qgc2NoZWR1bGVkVGltZSA9IGxhc3REYXRlID8gbmV3IERhdGUobGFzdERhdGUgYXMgdW5rbm93biBhcyBzdHJpbmcgfCBudW1iZXIpIDogbmV3IERhdGUoKTtcblx0XHRjb25zdCBleGVjdXRpb25UaW1lID0gbmV3IERhdGUoKTtcblxuXHRcdC8vIEFwcGx5IHRoZSBzY2hlbWEgZGVmYXVsdCDigJQgc2VlIGV4cGxhbmF0aW9uIGluIGBsaXN0ZW4oKWAuXG5cdFx0Y29uc3QgdGltZXpvbmUgPSBjb25maWcudGltZXpvbmUgPz8gXCJVVENcIjtcblxuXHRcdGNvbnN0IGRlZmF1bHRNZXRlciA9IG1ldHJpY3MuZ2V0TWV0ZXIoXCJkZWZhdWx0XCIpO1xuXHRcdGNvbnN0IGNyb25FeGVjdXRpb25zID0gZGVmYXVsdE1ldGVyLmNyZWF0ZUNvdW50ZXIoXCJjcm9uX2V4ZWN1dGlvbnNcIiwge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ3JvbiBqb2IgZXhlY3V0aW9uc1wiLFxuXHRcdH0pO1xuXHRcdGNvbnN0IGNyb25FcnJvcnMgPSBkZWZhdWx0TWV0ZXIuY3JlYXRlQ291bnRlcihcImNyb25fZXJyb3JzXCIsIHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNyb24gam9iIGV4ZWN1dGlvbiBlcnJvcnNcIixcblx0XHR9KTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGhpcy50cmFjZXIuc3RhcnRBY3RpdmVTcGFuKGBjcm9uOiR7d29ya2Zsb3cucGF0aH1gLCBhc3luYyAoc3BhbjogU3BhbikgPT4ge1xuXHRcdFx0XHRzY2hlZHVsZWRKb2IucnVubmluZyA9IHRydWU7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cdFx0XHRcdFx0Ly8gSW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHdvcmtmbG93XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmluaXQod29ya2Zsb3cucGF0aCwgdGhpcy5ub2RlTWFwKTtcblxuXHRcdFx0XHRcdC8vIENyZWF0ZSBjb250ZXh0XG5cdFx0XHRcdFx0Y29uc3QgY3R4OiBDb250ZXh0ID0gdGhpcy5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCwgd29ya2Zsb3cucGF0aCwgZXhlY3V0aW9uSWQpO1xuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGV4ZWN1dGlvbiBjb250ZXh0XG5cdFx0XHRcdFx0Y29uc3QgY3JvbkNvbnRleHQ6IENyb25FeGVjdXRpb25Db250ZXh0ID0ge1xuXHRcdFx0XHRcdFx0am9iSWQsXG5cdFx0XHRcdFx0XHRzY2hlZHVsZWRUaW1lLFxuXHRcdFx0XHRcdFx0ZXhlY3V0aW9uVGltZSxcblx0XHRcdFx0XHRcdHNjaGVkdWxlOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0XHR0aW1lem9uZSxcblx0XHRcdFx0XHRcdG1hbnVhbCxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Ly8gUG9wdWxhdGUgcmVxdWVzdCB3aXRoIGNyb24gY29udGV4dFxuXHRcdFx0XHRcdGN0eC5yZXF1ZXN0ID0ge1xuXHRcdFx0XHRcdFx0Ym9keTogY3JvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRcdFwieC1jcm9uLWpvYi1pZFwiOiBqb2JJZCxcblx0XHRcdFx0XHRcdFx0XCJ4LWNyb24tc2NoZWR1bGVcIjogY29uZmlnLnNjaGVkdWxlLFxuXHRcdFx0XHRcdFx0XHRcIngtY3Jvbi10aW1lem9uZVwiOiBjb25maWcudGltZXpvbmUsXG5cdFx0XHRcdFx0XHRcdFwieC1jcm9uLW1hbnVhbFwiOiBTdHJpbmcobWFudWFsKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRxdWVyeToge30sXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0am9iSWQsXG5cdFx0XHRcdFx0XHRcdHNjaGVkdWxlOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0gYXMgdW5rbm93biBhcyBSZXF1ZXN0Q29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNyb24gY29udGV4dCBpbiB2YXJzXG5cdFx0XHRcdFx0aWYgKCFjdHgudmFycykgY3R4LnZhcnMgPSB7fTtcblx0XHRcdFx0XHRjdHgudmFycy5fY3Jvbl9jb250ZXh0ID0ge1xuXHRcdFx0XHRcdFx0am9iSWQsXG5cdFx0XHRcdFx0XHRzY2hlZHVsZWRUaW1lOiBzY2hlZHVsZWRUaW1lLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRleGVjdXRpb25UaW1lOiBleGVjdXRpb25UaW1lLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRzY2hlZHVsZTogY29uZmlnLnNjaGVkdWxlLFxuXHRcdFx0XHRcdFx0dGltZXpvbmU6IGNvbmZpZy50aW1lem9uZSxcblx0XHRcdFx0XHRcdG1hbnVhbDogU3RyaW5nKG1hbnVhbCksXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGN0eC5sb2dnZXIubG9nKGBFeGVjdXRpbmcgY3JvbiBqb2I6ICR7am9iSWR9ICgke21hbnVhbCA/IFwibWFudWFsXCIgOiBcInNjaGVkdWxlZFwifSlgKTtcblxuXHRcdFx0XHRcdC8vIHYwLjYgwrcgYXBwbHkgdGhlIG1lcmdlZCBtaWRkbGV3YXJlIGNoYWluIChwcm9jZXNzLWdsb2JhbCDihpJcblx0XHRcdFx0XHQvLyB3b3JrZmxvdy1sZXZlbCDihpIgdHJpZ2dlci1sZXZlbCkgYmVmb3JlIHRoZSBtYWluIHdvcmtmbG93XG5cdFx0XHRcdFx0Ly8gYm9keS4gTGV0cyBjcm9uIHdvcmtmbG93cyBjb21wb3NlIGF1dGgtY2hlY2sgKyBhdWRpdC1sb2dcblx0XHRcdFx0XHQvLyBjaGFpbnMgZXhhY3RseSBsaWtlIEhUVFAgdHJpZ2dlcnMuIEEgdGhyb3dpbmcgbWlkZGxld2FyZVxuXHRcdFx0XHRcdC8vIHByb3BhZ2F0ZXMgdG8gdGhlIG91dGVyIGNhdGNoIGFuZCBzdXJmYWNlcyBhcyBhIGNyb24gam9iXG5cdFx0XHRcdFx0Ly8gZmFpbHVyZS5cblx0XHRcdFx0XHRhd2FpdCB0aGlzLmFwcGx5TWlkZGxld2FyZUNoYWluKGN0eCwgdGhpcy5ub2RlTWFwKTtcblxuXHRcdFx0XHRcdC8vIEV4ZWN1dGUgd29ya2Zsb3dcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZTogVHJpZ2dlclJlc3BvbnNlID0gYXdhaXQgdGhpcy5ydW4oY3R4KTtcblx0XHRcdFx0XHRjb25zdCBlbmQgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBqb2Igc3RhdGVcblx0XHRcdFx0XHRzY2hlZHVsZWRKb2IubGFzdFJ1biA9IGV4ZWN1dGlvblRpbWU7XG5cdFx0XHRcdFx0c2NoZWR1bGVkSm9iLm5leHRSdW4gPSB0aGlzLnRvRGF0ZShzY2hlZHVsZWRKb2Iuam9iLm5leHREYXRlKCkpO1xuXG5cdFx0XHRcdFx0Ly8gU2V0IHNwYW4gYXR0cmlidXRlc1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCB0cnVlKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcImpvYl9pZFwiLCBqb2JJZCk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJ3b3JrZmxvd19wYXRoXCIsIHdvcmtmbG93LnBhdGgpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic2NoZWR1bGVcIiwgY29uZmlnLnNjaGVkdWxlKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInRpbWV6b25lXCIsIHRpbWV6b25lKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcIm1hbnVhbFwiLCBtYW51YWwpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZWxhcHNlZF9tc1wiLCBlbmQgLSBzdGFydCk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcblxuXHRcdFx0XHRcdC8vIFJlY29yZCBtZXRyaWNzXG5cdFx0XHRcdFx0Y3JvbkV4ZWN1dGlvbnMuYWRkKDEsIHtcblx0XHRcdFx0XHRcdGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0XHRqb2JfaWQ6IGpvYklkLFxuXHRcdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogdGhpcy5jb25maWd1cmF0aW9uLm5hbWUsXG5cdFx0XHRcdFx0XHRtYW51YWw6IFN0cmluZyhtYW51YWwpLFxuXHRcdFx0XHRcdFx0c3VjY2VzczogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRjdHgubG9nZ2VyLmxvZyhgQ3JvbiBqb2IgY29tcGxldGVkIGluICR7KGVuZCAtIHN0YXJ0KS50b0ZpeGVkKDIpfW1zOiAke2pvYklkfWApO1xuXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0Ly8gRjUgwrcgYSBjcm9uIHdvcmtmbG93IHdpdGggYSBgd2FpdGAgc3RlcCAob3IgYSBzY2hlZHVsaW5nXG5cdFx0XHRcdFx0Ly8gZ2F0ZSkgdGhyb3dzIERlZmVycmVkRGlzcGF0Y2hTaWduYWwgLyBXYWl0RGlzcGF0Y2hSZXF1ZXN0XG5cdFx0XHRcdFx0Ly8gdG8gZGVmZXIgdGhlIHJ1biDigJQgdGhhdCdzIGEgc3VjY2Vzc2Z1bCBkZWZlcnJhbCwgTk9UIGFcblx0XHRcdFx0XHQvLyBmYWlsdXJlLiBUcmlnZ2VyQmFzZS5ydW4gYWxyZWFkeSBtYXJrZWQgdGhlIHJ1blxuXHRcdFx0XHRcdC8vIGRlbGF5ZWQvcXVldWVkL2RlYm91bmNlZCBhbmQgKGZvciBIVFRQKSBwZXJzaXN0ZWQgdGhlXG5cdFx0XHRcdFx0Ly8gZGlzcGF0Y2guIENyb24ncyBpbi1wcm9jZXNzIHNjaGVkdWxlciBvd25zIHRoZSBldmVudHVhbFxuXHRcdFx0XHRcdC8vIHJlLWZpcmUsIHNvIHdlIGp1c3QgcmVjb3JkIHN1Y2Nlc3MgYW5kIGRvbid0IGJ1bXBcblx0XHRcdFx0XHQvLyBgY3Jvbl9lcnJvcnNgLlxuXHRcdFx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIERlZmVycmVkRGlzcGF0Y2hTaWduYWwgfHwgZXJyb3IgaW5zdGFuY2VvZiBXYWl0RGlzcGF0Y2hSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInN1Y2Nlc3NcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcImRlZmVycmVkXCIsIHRydWUpO1xuXHRcdFx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcblxuXHRcdFx0XHRcdFx0Y3JvbkV4ZWN1dGlvbnMuYWRkKDEsIHtcblx0XHRcdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRcdFx0am9iX2lkOiBqb2JJZCxcblx0XHRcdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogdGhpcy5jb25maWd1cmF0aW9uLm5hbWUsXG5cdFx0XHRcdFx0XHRcdG1hbnVhbDogU3RyaW5nKG1hbnVhbCksXG5cdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgQ3JvbiBqb2IgZGVmZXJyZWQgJHtqb2JJZH06ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh7IGN0eDoge30gYXMgQ29udGV4dCwgbWV0cmljczoge30gYXMgTWV0cmljc1R5cGUgfSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlO1xuXG5cdFx0XHRcdFx0Ly8gU2V0IHNwYW4gZXJyb3Jcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInN1Y2Nlc3NcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yIGFzIEVycm9yKTtcblx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSk7XG5cblx0XHRcdFx0XHQvLyBSZWNvcmQgZXJyb3IgbWV0cmljc1xuXHRcdFx0XHRcdGNyb25FcnJvcnMuYWRkKDEsIHtcblx0XHRcdFx0XHRcdGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0XHRqb2JfaWQ6IGpvYklkLFxuXHRcdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogdGhpcy5jb25maWd1cmF0aW9uPy5uYW1lIHx8IFwidW5rbm93blwiLFxuXHRcdFx0XHRcdFx0bWFudWFsOiBTdHJpbmcobWFudWFsKSxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBDcm9uIGpvYiBmYWlsZWQgJHtqb2JJZH06ICR7ZXJyb3JNZXNzYWdlfWAsIChlcnJvciBhcyBFcnJvcikuc3RhY2spO1xuXG5cdFx0XHRcdFx0cmVzb2x2ZSh7IGN0eDoge30gYXMgQ29udGV4dCwgbWV0cmljczoge30gYXMgTWV0cmljc1R5cGUgfSk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0c2NoZWR1bGVkSm9iLnJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRzcGFuLmVuZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBDcm9uVHJpZ2dlcjtcbiJdfQ==
|
|
406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JvblRyaWdnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ3JvblRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUdILE9BQU8sRUFFTixhQUFhLEVBQ2Isc0JBQXNCLEVBRXRCLE9BQU8sRUFDUCxXQUFXLEVBRVgsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBYSxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUE0RGxDOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixXQUFZLFNBQVEsV0FBVztJQUMxQyxPQUFPLEdBQWtCLEVBQW1CLENBQUM7SUFDcEMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLHVCQUF1QixFQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQ3RDLENBQUM7SUFDaUIsTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDdEMsSUFBSSxHQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3RELDBGQUEwRjtJQUNsRixlQUFlLEdBQWlDLElBQUksQ0FBQztJQU03RCx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsZ0RBQWdEO0lBQ2hELHFGQUFxRjtJQUNyRixzRUFBc0U7SUFDdEUscUNBQXFDO0lBRXJDOztPQUVHO0lBQ0gsU0FBUztRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcs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QUksRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO29CQUV0RSx1QkFBdUI7b0JBQ3ZCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUNqQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRO3dCQUN6QixNQUFNLEVBQUUsS0FBSzt3QkFDYixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksU0FBUzt3QkFDcEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7cUJBQ3RCLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLFlBQVksRUFBRSxFQUFHLEtBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFdkYsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQWEsRUFBRSxPQUFPLEVBQUUsRUFBaUIsRUFBRSxDQUFDLENBQUM7Z0JBQzdELENBQUM7d0JBQVMsQ0FBQztvQkFDVixZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNaLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNEO0FBRUQsZUFBZSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyb25UcmlnZ2VyIC0gU2NoZWR1bGVkIHdvcmtmbG93IGV4ZWN1dGlvbiBiYXNlZCBvbiBjcm9uIGV4cHJlc3Npb25zXG4gKlxuICogRXh0ZW5kcyBUcmlnZ2VyQmFzZSB0byBzdXBwb3J0IHNjaGVkdWxlZCB0cmlnZ2VyczpcbiAqIC0gQ3JvbiBleHByZXNzaW9ucyAoZS5nLiwgXCIwICogKiAqICpcIiBmb3IgaG91cmx5KVxuICogLSBUaW1lem9uZS1hd2FyZSBzY2hlZHVsaW5nXG4gKiAtIE92ZXJsYXAgcHJldmVudGlvblxuICogLSBNYW51YWwgdHJpZ2dlciBzdXBwb3J0XG4gKlxuICogVXNlcyB0aGUgJ2Nyb24nIHBhY2thZ2UgZm9yIGNyb24gcGFyc2luZyBhbmQgc2NoZWR1bGluZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENyb25UcmlnZ2VyT3B0cywgV29ya2Zsb3dWMkJ1aWxkZXIgfSBmcm9tIFwiQGJsb2tqcy9oZWxwZXJcIjtcbmltcG9ydCB7XG5cdHR5cGUgQmxva1NlcnZpY2UsXG5cdERlZmF1bHRMb2dnZXIsXG5cdERlZmVycmVkRGlzcGF0Y2hTaWduYWwsXG5cdHR5cGUgR2xvYmFsT3B0aW9ucyxcblx0Tm9kZU1hcCxcblx0VHJpZ2dlckJhc2UsXG5cdHR5cGUgVHJpZ2dlclJlc3BvbnNlLFxuXHRXYWl0RGlzcGF0Y2hSZXF1ZXN0LFxuXHRib290c3RyYXBUcmFjaW5nLFxufSBmcm9tIFwiQGJsb2tqcy9ydW5uZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCwgTWV0cmljc1R5cGUsIFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBibG9ranMvc2hhcmVkXCI7XG5pbXBvcnQgeyB0eXBlIFNwYW4sIFNwYW5TdGF0dXNDb2RlLCBtZXRyaWNzLCB0cmFjZSB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmltcG9ydCB7IENyb25Kb2IgfSBmcm9tIFwiY3JvblwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbi8qKlxuICogU2NoZWR1bGVkIGpvYiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlZEpvYiB7XG5cdC8qKiBVbmlxdWUgam9iIElEICovXG5cdGlkOiBzdHJpbmc7XG5cdC8qKiBXb3JrZmxvdyBwYXRoICovXG5cdHdvcmtmbG93UGF0aDogc3RyaW5nO1xuXHQvKiogQ3JvbiBleHByZXNzaW9uICovXG5cdHNjaGVkdWxlOiBzdHJpbmc7XG5cdC8qKiBUaW1lem9uZSAqL1xuXHR0aW1lem9uZTogc3RyaW5nO1xuXHQvKiogQWxsb3cgb3ZlcmxhcHBpbmcgZXhlY3V0aW9ucyAqL1xuXHRvdmVybGFwOiBib29sZWFuO1xuXHQvKiogV2hldGhlciB0aGUgam9iIGlzIGN1cnJlbnRseSBydW5uaW5nICovXG5cdHJ1bm5pbmc6IGJvb2xlYW47XG5cdC8qKiBMYXN0IGV4ZWN1dGlvbiB0aW1lICovXG5cdGxhc3RSdW4/OiBEYXRlO1xuXHQvKiogTmV4dCBzY2hlZHVsZWQgdGltZSAqL1xuXHRuZXh0UnVuPzogRGF0ZTtcblx0LyoqIEludGVybmFsIENyb25Kb2IgaW5zdGFuY2UgKi9cblx0am9iOiBDcm9uSm9iO1xufVxuXG4vKipcbiAqIEV4ZWN1dGlvbiBjb250ZXh0IHBhc3NlZCB0byB0aGUgd29ya2Zsb3dcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcm9uRXhlY3V0aW9uQ29udGV4dCB7XG5cdC8qKiBKb2IgSUQgKi9cblx0am9iSWQ6IHN0cmluZztcblx0LyoqIFNjaGVkdWxlZCB0aW1lICh3aGVuIGl0IHdhcyBzdXBwb3NlZCB0byBydW4pICovXG5cdHNjaGVkdWxlZFRpbWU6IERhdGU7XG5cdC8qKiBBY3R1YWwgZXhlY3V0aW9uIHRpbWUgKi9cblx0ZXhlY3V0aW9uVGltZTogRGF0ZTtcblx0LyoqIENyb24gZXhwcmVzc2lvbiAqL1xuXHRzY2hlZHVsZTogc3RyaW5nO1xuXHQvKiogVGltZXpvbmUgKi9cblx0dGltZXpvbmU6IHN0cmluZztcblx0LyoqIFdoZXRoZXIgdGhpcyBpcyBhIG1hbnVhbCB0cmlnZ2VyICovXG5cdG1hbnVhbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBtb2RlbCB3aXRoIGNyb24gdHJpZ2dlciBjb25maWd1cmF0aW9uXG4gKi9cbmludGVyZmFjZSBDcm9uV29ya2Zsb3dNb2RlbCB7XG5cdHBhdGg6IHN0cmluZztcblx0Y29uZmlnOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdHZlcnNpb246IHN0cmluZztcblx0XHR0cmlnZ2VyPzoge1xuXHRcdFx0Y3Jvbj86IENyb25UcmlnZ2VyT3B0cztcblx0XHRcdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdFx0fTtcblx0XHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xuXHR9O1xufVxuXG4vKipcbiAqIENyb25UcmlnZ2VyIC0gU2NoZWR1bGVkIHdvcmtmbG93IGV4ZWN1dGlvblxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3JvblRyaWdnZXIgZXh0ZW5kcyBUcmlnZ2VyQmFzZSB7XG5cdHByb3RlY3RlZCBub2RlTWFwOiBHbG9iYWxPcHRpb25zID0ge30gYXMgR2xvYmFsT3B0aW9ucztcblx0cHJvdGVjdGVkIHJlYWRvbmx5IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX05BTUUgfHwgXCJ0cmlnZ2VyLWNyb24td29ya2Zsb3dcIixcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04gfHwgXCIwLjAuMVwiLFxuXHQpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nZ2VyID0gbmV3IERlZmF1bHRMb2dnZXIoKTtcblx0cHJvdGVjdGVkIGpvYnM6IE1hcDxzdHJpbmcsIFNjaGVkdWxlZEpvYj4gPSBuZXcgTWFwKCk7XG5cdC8qKiBPQlMtMDIgVDQg4oCUIGdyYWNlZnVsIHNodXRkb3duIGZvciB0aGUgT1RlbCB0cmFjZXIgcHJvdmlkZXIsIGlmIHRyYWNpbmcgd2FzIGVuYWJsZWQuICovXG5cdHByaXZhdGUgdHJhY2luZ1NodXRkb3duOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsID0gbnVsbDtcblxuXHQvLyBTdWJjbGFzc2VzIHByb3ZpZGUgdGhlc2Vcblx0cHJvdGVjdGVkIGFic3RyYWN0IG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBCbG9rU2VydmljZTx1bmtub3duPj47XG5cdHByb3RlY3RlZCBhYnN0cmFjdCB3b3JrZmxvd3M6IFJlY29yZDxzdHJpbmcsIFdvcmtmbG93VjJCdWlsZGVyPjtcblxuXHQvLyBDb25zdHJ1Y3RvciByZW1vdmVkIChtaXJyb3JzIFdvcmtlclRyaWdnZXIncyB2MC42LjMgZml4KSDigJQgcHJlLWZpeCBpdFxuXHQvLyBjYWxsZWQgYGxvYWROb2RlcygpYCArIGBsb2FkV29ya2Zsb3dzKClgLCBidXQgc3ViY2xhc3NlcyB1c2UgY2xhc3MtZmllbGRcblx0Ly8gYXNzaWdubWVudHMgZm9yIGBub2Rlc2AgLyBgd29ya2Zsb3dzYCAodGhlIGNhbm9uaWNhbCBUeXBlU2NyaXB0IHBhdHRlcm4pLlxuXHQvLyBUaG9zZSBmaWVsZHMgcnVuIEFGVEVSIHN1cGVyKCksIHNvIGFjY2Vzc2luZyBgdGhpcy5ub2Rlc2AgZnJvbSB0aGUgcGFyZW50XG5cdC8vIGNvbnN0cnVjdG9yIHJlYWQgYHVuZGVmaW5lZGAgYW5kIGNyYXNoZWQgd2l0aFxuXHQvLyBgVHlwZUVycm9yOiBDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RgIChPYmplY3Qua2V5cyh0aGlzLm5vZGVzKSkuXG5cdC8vIFRoZSByZWdpc3RyeSBpbml0IG5vdyBoYXBwZW5zIGF0IHRoZSBzdGFydCBvZiBgbGlzdGVuKClgLCBhZnRlciB0aGVcblx0Ly8gc3ViY2xhc3MncyBmaWVsZHMgYXJlIGluaXRpYWxpemVkLlxuXG5cdC8qKlxuXHQgKiBMb2FkIG5vZGVzIGludG8gdGhlIG5vZGUgbWFwXG5cdCAqL1xuXHRsb2FkTm9kZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5ub2RlTWFwLm5vZGVzID0gbmV3IE5vZGVNYXAoKTtcblx0XHRjb25zdCBub2RlS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubm9kZXMpO1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIG5vZGVLZXlzKSB7XG5cdFx0XHR0aGlzLm5vZGVNYXAubm9kZXMuYWRkTm9kZShrZXksIHRoaXMubm9kZXNba2V5XSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIExvYWQgd29ya2Zsb3dzIGludG8gdGhlIHdvcmtmbG93IG1hcFxuXHQgKi9cblx0bG9hZFdvcmtmbG93cygpOiB2b2lkIHtcblx0XHR0aGlzLm5vZGVNYXAud29ya2Zsb3dzID0gdGhpcy53b3JrZmxvd3M7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCBjcm9uIERhdGVUaW1lIHRvIERhdGVcblx0ICogVGhlIGNyb24gcGFja2FnZSB1c2VzIGx1eG9uIERhdGVUaW1lIHdoaWNoIGhhcyB0b0pTRGF0ZSgpXG5cdCAqL1xuXHRwcm90ZWN0ZWQgdG9EYXRlKGRhdGVUaW1lOiB1bmtub3duKTogRGF0ZSB7XG5cdFx0aWYgKGRhdGVUaW1lICYmIHR5cGVvZiBkYXRlVGltZSA9PT0gXCJvYmplY3RcIiAmJiBcInRvSlNEYXRlXCIgaW4gZGF0ZVRpbWUpIHtcblx0XHRcdHJldHVybiAoZGF0ZVRpbWUgYXMgeyB0b0pTRGF0ZTogKCkgPT4gRGF0ZSB9KS50b0pTRGF0ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0ZVRpbWUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVRpbWUgOiBuZXcgRGF0ZShkYXRlVGltZSBhcyBzdHJpbmcgfCBudW1iZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSBjcm9uIHNjaGVkdWxlciAtIG1haW4gZW50cnkgcG9pbnRcblx0ICovXG5cdGFzeW5jIGxpc3RlbigpOiBQcm9taXNlPG51bWJlcj4ge1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhcnRDb3VudGVyKCk7XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gT0JTLTAyIFQ0IOKAlCBvcHQtaW4gZGlzdHJpYnV0ZWQgdHJhY2luZyBmb3Igc2NoZWR1bGVkIGV4ZWN1dGlvbnMuXG5cdFx0XHQvLyBXaGVuIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBpcyBzZXQsIGluc3RhbGwgYW4gT1RlbCBTREsgc28gdGhlXG5cdFx0XHQvLyBzcGFucyB0aGUgcnVubmVyIGNyZWF0ZXMgcGVyIGNyb24gcnVuL3N0ZXAgZXhwb3J0IHRvIGEgYmFja2VuZC5cblx0XHRcdC8vIE1pcnJvcnMgSHR0cFRyaWdnZXIncyBCMSB3aXJpbmc7IG5vLW9wIHdoZW4gdGhlIGVudiB2YXIgaXMgdW5zZXQuXG5cdFx0XHRhd2FpdCB0aGlzLm1heWJlQm9vdHN0cmFwVHJhY2luZygpO1xuXG5cdFx0XHQvLyBQb3B1bGF0ZSB0aGUgdHJpZ2dlcidzIG5vZGUgKyB3b3JrZmxvdyByZWdpc3RyaWVzIGZyb20gdGhlXG5cdFx0XHQvLyBzdWJjbGFzcydzIGBub2Rlc2AgLyBgd29ya2Zsb3dzYCBmaWVsZHMuIE1pcnJvcnMgV29ya2VyVHJpZ2dlcidzXG5cdFx0XHQvLyB2MC42LjMgZml4IOKAlCBwcmUtZml4IHRoZXNlIGNhbGxzIGxpdmVkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmRcblx0XHRcdC8vIGNyYXNoZWQgYmVjYXVzZSBjbGFzcyBmaWVsZHMgaGF2ZW4ndCBydW4geWV0IGF0IHN1cGVyLWNvbnN0cnVjdG9yXG5cdFx0XHQvLyB0aW1lLiBNdXN0IHJ1biBiZWZvcmUgYHJlZ2lzdGVyV29ya2Zsb3dzRnJvbU5vZGVNYXBgLFxuXHRcdFx0Ly8gd2hpY2ggcmVhZHMgYHRoaXMubm9kZU1hcC53b3JrZmxvd3NgLlxuXHRcdFx0dGhpcy5sb2FkTm9kZXMoKTtcblx0XHRcdHRoaXMubG9hZFdvcmtmbG93cygpO1xuXG5cdFx0XHQvLyBGNSDCtyBpbnN0YWxsIGNyYXNoL29ycGhhbi9qYW5pdG9yL3NodXRkb3duIGhhbmRsZXJzIHNvIGFcblx0XHRcdC8vIGNyb24tb25seSBwcm9jZXNzIGdldHMgdGhlIHNhbWUgcnVuLXN0YXRlIGludGVncml0eSArIHN0b3JhZ2Vcblx0XHRcdC8vIGh5Z2llbmUgZ3VhcmFudGVlcyBhcyBIVFRQL1dvcmtlci4gRWFjaCBoYW5kbGVyIGlzIGlkZW1wb3RlbnRcblx0XHRcdC8vICsgaW5kaXZpZHVhbGx5IGtpbGwtc3dpdGNoZWQuXG5cdFx0XHR0aGlzLmluc3RhbGxPcGVyYXRpb25hbEhhbmRsZXJzKHRoaXMubG9nZ2VyKTtcblxuXHRcdFx0Ly8gRjYgwrcgZmVlZCB0aGUgV29ya2Zsb3dSZWdpc3RyeSBmcm9tIHRoZSBub2RlTWFwIHNvIGBzdWJ3b3JrZmxvdzpgXG5cdFx0XHQvLyBzdGVwcyArIHRyaWdnZXIvd29ya2Zsb3cvcHJvY2Vzcy1nbG9iYWwgbWlkZGxld2FyZSByZXNvbHZlIGluIGFcblx0XHRcdC8vIGNyb24tb25seSBkZXBsb3ltZW50IChubyBIVFRQIHRyaWdnZXIgdG8gcG9wdWxhdGUgdGhlIHJlZ2lzdHJ5KS5cblx0XHRcdHRoaXMucmVnaXN0ZXJXb3JrZmxvd3NGcm9tTm9kZU1hcCh0aGlzLmxvZ2dlcik7XG5cblx0XHRcdC8vIEYxNCDCtyBzZWVkIHRoZSBwcm9jZXNzLWdsb2JhbCBtaWRkbGV3YXJlIGNoYWluIGZyb21cblx0XHRcdC8vIGBCTE9LX0dMT0JBTF9NSURETEVXQVJFYCAoaWRlbXBvdGVudCDigJQgcHJvZ3JhbW1hdGljXG5cdFx0XHQvLyBzZXRHbG9iYWxNaWRkbGV3YXJlIHRha2VzIHByZWNlZGVuY2UpLlxuXHRcdFx0dGhpcy5zZWVkR2xvYmFsTWlkZGxld2FyZUZyb21FbnYodGhpcy5sb2dnZXIpO1xuXG5cdFx0XHQvLyBGaW5kIGFsbCB3b3JrZmxvd3Mgd2l0aCBjcm9uIHRyaWdnZXJzXG5cdFx0XHRjb25zdCBjcm9uV29ya2Zsb3dzID0gdGhpcy5nZXRDcm9uV29ya2Zsb3dzKCk7XG5cblx0XHRcdGlmIChjcm9uV29ya2Zsb3dzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coXCJObyB3b3JrZmxvd3Mgd2l0aCBjcm9uIHRyaWdnZXJzIGZvdW5kXCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbmRDb3VudGVyKHN0YXJ0VGltZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBhbmQgc3RhcnQgY3JvbiBqb2JzIGZvciBlYWNoIHdvcmtmbG93XG5cdFx0XHRmb3IgKGNvbnN0IHdvcmtmbG93IG9mIGNyb25Xb3JrZmxvd3MpIHtcblx0XHRcdFx0Y29uc3QgY29uZmlnID0gd29ya2Zsb3cuY29uZmlnLnRyaWdnZXI/LmNyb24gYXMgQ3JvblRyaWdnZXJPcHRzO1xuXHRcdFx0XHRjb25zdCBqb2JJZCA9IGBjcm9uLSR7d29ya2Zsb3cucGF0aH0tJHt1dWlkKCkuc2xpY2UoMCwgOCl9YDtcblxuXHRcdFx0XHQvLyBgQ3JvblRyaWdnZXJPcHRzYCBpcyBgei5pbnB1dDzigKY+YCBzbyBgdGltZXpvbmVgIGlzIGBzdHJpbmcgfCB1bmRlZmluZWRgXG5cdFx0XHRcdC8vIGV2ZW4gdGhvdWdoIHRoZSBzY2hlbWEgZGVjbGFyZXMgYC5kZWZhdWx0KFwiVVRDXCIpYC4gQXBwbHkgdGhlXG5cdFx0XHRcdC8vIGRlZmF1bHQgb25jZSBoZXJlIHNvIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIChhbmQgdGhlIGNyb24gbGliJ3Ncblx0XHRcdFx0Ly8gY29uc3RydWN0b3IpIHNlZXMgYSBndWFyYW50ZWVkIHN0cmluZy5cblx0XHRcdFx0Y29uc3QgdGltZXpvbmUgPSBjb25maWcudGltZXpvbmUgPz8gXCJVVENcIjtcblxuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coYFNjaGVkdWxpbmcgd29ya2Zsb3c6ICR7d29ya2Zsb3cucGF0aH0gd2l0aCBzY2hlZHVsZTogJHtjb25maWcuc2NoZWR1bGV9ICgke3RpbWV6b25lfSlgKTtcblxuXHRcdFx0XHRjb25zdCBqb2IgPSBuZXcgQ3JvbkpvYihcblx0XHRcdFx0XHRjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0YXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3coam9iSWQsIHdvcmtmbG93LCBjb25maWcsIGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsIC8vIG9uQ29tcGxldGVcblx0XHRcdFx0XHRmYWxzZSwgLy8gc3RhcnRcblx0XHRcdFx0XHR0aW1lem9uZSxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBzY2hlZHVsZWRKb2I6IFNjaGVkdWxlZEpvYiA9IHtcblx0XHRcdFx0XHRpZDogam9iSWQsXG5cdFx0XHRcdFx0d29ya2Zsb3dQYXRoOiB3b3JrZmxvdy5wYXRoLFxuXHRcdFx0XHRcdHNjaGVkdWxlOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0dGltZXpvbmUsXG5cdFx0XHRcdFx0b3ZlcmxhcDogY29uZmlnLm92ZXJsYXAgPz8gZmFsc2UsXG5cdFx0XHRcdFx0cnVubmluZzogZmFsc2UsXG5cdFx0XHRcdFx0bmV4dFJ1bjogdGhpcy50b0RhdGUoam9iLm5leHREYXRlKCkpLFxuXHRcdFx0XHRcdGpvYixcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLmpvYnMuc2V0KGpvYklkLCBzY2hlZHVsZWRKb2IpO1xuXG5cdFx0XHRcdC8vIFN0YXJ0IHRoZSBqb2Jcblx0XHRcdFx0am9iLnN0YXJ0KCk7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgSm9iICR7am9iSWR9IHN0YXJ0ZWQuIE5leHQgcnVuOiAke3NjaGVkdWxlZEpvYi5uZXh0UnVufWApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYENyb24gdHJpZ2dlciBzdGFydGVkLiAke3RoaXMuam9icy5zaXplfSBqb2Iocykgc2NoZWR1bGVkYCk7XG5cblx0XHRcdC8vIEVuYWJsZSBITVIgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuXHRcdFx0aWYgKHByb2Nlc3MuZW52LkJMT0tfSE1SID09PSBcInRydWVcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZW5hYmxlSG90UmVsb2FkKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzdGFydCBjcm9uIHRyaWdnZXI6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3AgYWxsIGNyb24gam9ic1xuXHQgKi9cblx0LyoqXG5cdCAqIE9CUy0wMiBUNCDigJQgaW5zdGFsbCB0aGUgT3BlblRlbGVtZXRyeSBTREsgYXQgYm9vdCB3aGVuIGFuIE9UTFAgZW5kcG9pbnQgaXNcblx0ICogY29uZmlndXJlZCwgc28gdGhlIHNwYW5zIHRoZSBydW5uZXIgYWxyZWFkeSBjcmVhdGVzIGZvciBzY2hlZHVsZWQgcnVuc1xuXHQgKiBleHBvcnQgdG8gYSBiYWNrZW5kIChUZW1wby9KYWVnZXIv4oCmKS4gTm8tb3Agd2hlbiBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYFxuXHQgKiBpcyB1bnNldCBvciBgQkxPS19UUkFDSU5HX0RJU0FCTEVEPTFgLiBTdG9yZXMgdGhlIHNodXRkb3duIHNvIGBzdG9wKClgIGZsdXNoZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG1heWJlQm9vdHN0cmFwVHJhY2luZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAocHJvY2Vzcy5lbnYuQkxPS19UUkFDSU5HX0RJU0FCTEVEID09PSBcIjFcIikgcmV0dXJuO1xuXHRcdGNvbnN0IGJhc2UgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UIHx8IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVDtcblx0XHRpZiAoIWJhc2UpIHJldHVybjtcblx0XHRjb25zdCBlbmRwb2ludCA9IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQgPyBiYXNlIDogYCR7YmFzZS5yZXBsYWNlKC9cXC8kLywgXCJcIil9L3YxL3RyYWNlc2A7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3RzdHJhcFRyYWNpbmcoe1xuXHRcdFx0XHRzZXJ2aWNlTmFtZTogcHJvY2Vzcy5lbnYuQVBQX05BTUUgfHwgcHJvY2Vzcy5lbnYuUFJPSkVDVF9OQU1FIHx8IFwiYmxvay1jcm9uXCIsXG5cdFx0XHRcdHNlcnZpY2VWZXJzaW9uOiBwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04sXG5cdFx0XHRcdGV4cG9ydGVyOiBcIm90bHBcIixcblx0XHRcdFx0ZW5kcG9pbnQsXG5cdFx0XHR9KTtcblx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0dGhpcy50cmFjaW5nU2h1dGRvd24gPSByZXN1bHQuc2h1dGRvd247XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgW2Jsb2tdW3RyYWNpbmddIE9UTFAgZGlzdHJpYnV0ZWQgdHJhY2luZyBlbmFibGVkIOKGkiAke2VuZHBvaW50fWApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoXG5cdFx0XHRcdFx0XCJbYmxva11bdHJhY2luZ10gT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIGlzIHNldCBidXQgdGhlIE9UZWwgdHJhY2UgU0RLIGlzbid0IGluc3RhbGxlZCDigJQgdHJhY2luZyBpcyBPRkYuXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3RyYWNpbmddIGZhaWxlZCB0byBpbml0aWFsaXplOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBPQlMtMDIgVDQg4oCUIGZsdXNoIHBlbmRpbmcgc3BhbnMgYmVmb3JlIHRoZSBwcm9jZXNzIGV4aXRzLlxuXHRcdGlmICh0aGlzLnRyYWNpbmdTaHV0ZG93bikge1xuXHRcdFx0YXdhaXQgdGhpcy50cmFjaW5nU2h1dGRvd24oKS5jYXRjaCgoZXJyKSA9PlxuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3RyYWNpbmddIHNodXRkb3duIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMudHJhY2luZ1NodXRkb3duID0gbnVsbDtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBbam9iSWQsIHNjaGVkdWxlZEpvYl0gb2YgdGhpcy5qb2JzKSB7XG5cdFx0XHRzY2hlZHVsZWRKb2Iuam9iLnN0b3AoKTtcblx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgSm9iICR7am9iSWR9IHN0b3BwZWRgKTtcblx0XHR9XG5cdFx0dGhpcy5qb2JzLmNsZWFyKCk7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFwiQ3JvbiB0cmlnZ2VyIHN0b3BwZWRcIik7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgb25IbXJXb3JrZmxvd0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmxvZ2dlci5sb2coXCJbSE1SXSBDcm9uIHdvcmtmbG93IGNoYW5nZWQsIHJlbG9hZGluZy4uLlwiKTtcblx0XHRhd2FpdCB0aGlzLndhaXRGb3JJbkZsaWdodFJlcXVlc3RzKCk7XG5cdFx0YXdhaXQgdGhpcy5zdG9wKCk7XG5cdFx0dGhpcy5sb2FkV29ya2Zsb3dzKCk7XG5cdFx0YXdhaXQgdGhpcy5saXN0ZW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW51YWxseSB0cmlnZ2VyIGEgc3BlY2lmaWMgam9iXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySm9iKGpvYklkOiBzdHJpbmcpOiBQcm9taXNlPFRyaWdnZXJSZXNwb25zZSB8IG51bGw+IHtcblx0XHRjb25zdCBzY2hlZHVsZWRKb2IgPSB0aGlzLmpvYnMuZ2V0KGpvYklkKTtcblx0XHRpZiAoIXNjaGVkdWxlZEpvYikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEpvYiBub3QgZm91bmQ6ICR7am9iSWR9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHdvcmtmbG93XG5cdFx0Y29uc3Qgd29ya2Zsb3cgPSB0aGlzLmdldFdvcmtmbG93QnlQYXRoKHNjaGVkdWxlZEpvYi53b3JrZmxvd1BhdGgpO1xuXHRcdGlmICghd29ya2Zsb3cpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBXb3JrZmxvdyBub3QgZm91bmQ6ICR7c2NoZWR1bGVkSm9iLndvcmtmbG93UGF0aH1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbmZpZyA9IHdvcmtmbG93LmNvbmZpZy50cmlnZ2VyPy5jcm9uIGFzIENyb25UcmlnZ2VyT3B0cztcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlV29ya2Zsb3coam9iSWQsIHdvcmtmbG93LCBjb25maWcsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbGwgc2NoZWR1bGVkIGpvYnNcblx0ICovXG5cdGdldEpvYnMoKTogU2NoZWR1bGVkSm9iW10ge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuam9icy52YWx1ZXMoKSkubWFwKChqb2IpID0+ICh7XG5cdFx0XHQuLi5qb2IsXG5cdFx0XHRuZXh0UnVuOiB0aGlzLnRvRGF0ZShqb2Iuam9iLm5leHREYXRlKCkpLFxuXHRcdH0pKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIHdvcmtmbG93cyB0aGF0IGhhdmUgY3JvbiB0cmlnZ2Vyc1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldENyb25Xb3JrZmxvd3MoKTogQ3JvbldvcmtmbG93TW9kZWxbXSB7XG5cdFx0Y29uc3Qgd29ya2Zsb3dzOiBDcm9uV29ya2Zsb3dNb2RlbFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IFtwYXRoLCB3b3JrZmxvd10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ub2RlTWFwLndvcmtmbG93cyB8fCB7fSkpIHtcblx0XHRcdGNvbnN0IHdvcmtmbG93Q29uZmlnID0gKHdvcmtmbG93IGFzIHVua25vd24gYXMgeyBfY29uZmlnOiBDcm9uV29ya2Zsb3dNb2RlbFtcImNvbmZpZ1wiXSB9KS5fY29uZmlnO1xuXG5cdFx0XHRpZiAod29ya2Zsb3dDb25maWc/LnRyaWdnZXIpIHtcblx0XHRcdFx0Y29uc3QgdHJpZ2dlclR5cGUgPSBPYmplY3Qua2V5cyh3b3JrZmxvd0NvbmZpZy50cmlnZ2VyKVswXTtcblxuXHRcdFx0XHRpZiAodHJpZ2dlclR5cGUgPT09IFwiY3JvblwiICYmIHdvcmtmbG93Q29uZmlnLnRyaWdnZXIuY3Jvbikge1xuXHRcdFx0XHRcdHdvcmtmbG93cy5wdXNoKHtcblx0XHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0XHRjb25maWc6IHdvcmtmbG93Q29uZmlnLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdvcmtmbG93cztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgd29ya2Zsb3cgYnkgcGF0aFxuXHQgKi9cblx0cHJvdGVjdGVkIGdldFdvcmtmbG93QnlQYXRoKHBhdGg6IHN0cmluZyk6IENyb25Xb3JrZmxvd01vZGVsIHwgbnVsbCB7XG5cdFx0Y29uc3Qgd29ya2Zsb3cgPSB0aGlzLm5vZGVNYXAud29ya2Zsb3dzPy5bcGF0aF07XG5cdFx0aWYgKCF3b3JrZmxvdykgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCB3b3JrZmxvd0NvbmZpZyA9ICh3b3JrZmxvdyBhcyB1bmtub3duIGFzIHsgX2NvbmZpZzogQ3JvbldvcmtmbG93TW9kZWxbXCJjb25maWdcIl0gfSkuX2NvbmZpZztcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0aCxcblx0XHRcdGNvbmZpZzogd29ya2Zsb3dDb25maWcsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlIGEgd29ya2Zsb3dcblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBleGVjdXRlV29ya2Zsb3coXG5cdFx0am9iSWQ6IHN0cmluZyxcblx0XHR3b3JrZmxvdzogQ3JvbldvcmtmbG93TW9kZWwsXG5cdFx0Y29uZmlnOiBDcm9uVHJpZ2dlck9wdHMsXG5cdFx0bWFudWFsOiBib29sZWFuLFxuXHQpOiBQcm9taXNlPFRyaWdnZXJSZXNwb25zZT4ge1xuXHRcdGNvbnN0IHNjaGVkdWxlZEpvYiA9IHRoaXMuam9icy5nZXQoam9iSWQpO1xuXHRcdGlmICghc2NoZWR1bGVkSm9iKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEpvYiBub3QgZm91bmQ6ICR7am9iSWR9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZm9yIG92ZXJsYXBcblx0XHRpZiAoc2NoZWR1bGVkSm9iLnJ1bm5pbmcgJiYgIXNjaGVkdWxlZEpvYi5vdmVybGFwKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYFNraXBwaW5nICR7am9iSWR9OiBwcmV2aW91cyBleGVjdXRpb24gc3RpbGwgcnVubmluZyAob3ZlcmxhcCBkaXNhYmxlZClgKTtcblx0XHRcdHJldHVybiB7IGN0eDoge30gYXMgQ29udGV4dCwgbWV0cmljczoge30gYXMgTWV0cmljc1R5cGUgfTtcblx0XHR9XG5cblx0XHRjb25zdCBleGVjdXRpb25JZCA9IHV1aWQoKTtcblx0XHRjb25zdCBsYXN0RGF0ZSA9IHNjaGVkdWxlZEpvYi5qb2IubGFzdERhdGUoKTtcblx0XHRjb25zdCBzY2hlZHVsZWRUaW1lID0gbGFzdERhdGUgPyBuZXcgRGF0ZShsYXN0RGF0ZSBhcyB1bmtub3duIGFzIHN0cmluZyB8IG51bWJlcikgOiBuZXcgRGF0ZSgpO1xuXHRcdGNvbnN0IGV4ZWN1dGlvblRpbWUgPSBuZXcgRGF0ZSgpO1xuXG5cdFx0Ly8gQXBwbHkgdGhlIHNjaGVtYSBkZWZhdWx0IOKAlCBzZWUgZXhwbGFuYXRpb24gaW4gYGxpc3RlbigpYC5cblx0XHRjb25zdCB0aW1lem9uZSA9IGNvbmZpZy50aW1lem9uZSA/PyBcIlVUQ1wiO1xuXG5cdFx0Y29uc3QgZGVmYXVsdE1ldGVyID0gbWV0cmljcy5nZXRNZXRlcihcImRlZmF1bHRcIik7XG5cdFx0Y29uc3QgY3JvbkV4ZWN1dGlvbnMgPSBkZWZhdWx0TWV0ZXIuY3JlYXRlQ291bnRlcihcImNyb25fZXhlY3V0aW9uc1wiLCB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDcm9uIGpvYiBleGVjdXRpb25zXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgY3JvbkVycm9ycyA9IGRlZmF1bHRNZXRlci5jcmVhdGVDb3VudGVyKFwiY3Jvbl9lcnJvcnNcIiwge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ3JvbiBqb2IgZXhlY3V0aW9uIGVycm9yc1wiLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLnRyYWNlci5zdGFydEFjdGl2ZVNwYW4oYGNyb246JHt3b3JrZmxvdy5wYXRofWAsIGFzeW5jIChzcGFuOiBTcGFuKSA9PiB7XG5cdFx0XHRcdHNjaGVkdWxlZEpvYi5ydW5uaW5nID0gdHJ1ZTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cblx0XHRcdFx0XHQvLyBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgd29ya2Zsb3dcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uaW5pdCh3b3JrZmxvdy5wYXRoLCB0aGlzLm5vZGVNYXApO1xuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGNvbnRleHRcblx0XHRcdFx0XHRjb25zdCBjdHg6IENvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkLCB3b3JrZmxvdy5wYXRoLCBleGVjdXRpb25JZCk7XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgZXhlY3V0aW9uIGNvbnRleHRcblx0XHRcdFx0XHRjb25zdCBjcm9uQ29udGV4dDogQ3JvbkV4ZWN1dGlvbkNvbnRleHQgPSB7XG5cdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdHNjaGVkdWxlZFRpbWUsXG5cdFx0XHRcdFx0XHRleGVjdXRpb25UaW1lLFxuXHRcdFx0XHRcdFx0c2NoZWR1bGU6IGNvbmZpZy5zY2hlZHVsZSxcblx0XHRcdFx0XHRcdHRpbWV6b25lLFxuXHRcdFx0XHRcdFx0bWFudWFsLFxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHQvLyBQb3B1bGF0ZSByZXF1ZXN0IHdpdGggY3JvbiBjb250ZXh0XG5cdFx0XHRcdFx0Y3R4LnJlcXVlc3QgPSB7XG5cdFx0XHRcdFx0XHRib2R5OiBjcm9uQ29udGV4dCxcblx0XHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdFx0XCJ4LWNyb24tam9iLWlkXCI6IGpvYklkLFxuXHRcdFx0XHRcdFx0XHRcIngtY3Jvbi1zY2hlZHVsZVwiOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0XHRcdFwieC1jcm9uLXRpbWV6b25lXCI6IGNvbmZpZy50aW1lem9uZSxcblx0XHRcdFx0XHRcdFx0XCJ4LWNyb24tbWFudWFsXCI6IFN0cmluZyhtYW51YWwpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHF1ZXJ5OiB7fSxcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdFx0c2NoZWR1bGU6IGNvbmZpZy5zY2hlZHVsZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSBhcyB1bmtub3duIGFzIFJlcXVlc3RDb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY3JvbiBjb250ZXh0IGluIHZhcnNcblx0XHRcdFx0XHRpZiAoIWN0eC52YXJzKSBjdHgudmFycyA9IHt9O1xuXHRcdFx0XHRcdGN0eC52YXJzLl9jcm9uX2NvbnRleHQgPSB7XG5cdFx0XHRcdFx0XHRqb2JJZCxcblx0XHRcdFx0XHRcdHNjaGVkdWxlZFRpbWU6IHNjaGVkdWxlZFRpbWUudG9JU09TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGV4ZWN1dGlvblRpbWU6IGV4ZWN1dGlvblRpbWUudG9JU09TdHJpbmcoKSxcblx0XHRcdFx0XHRcdHNjaGVkdWxlOiBjb25maWcuc2NoZWR1bGUsXG5cdFx0XHRcdFx0XHR0aW1lem9uZTogY29uZmlnLnRpbWV6b25lLFxuXHRcdFx0XHRcdFx0bWFudWFsOiBTdHJpbmcobWFudWFsKSxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Y3R4LmxvZ2dlci5sb2coYEV4ZWN1dGluZyBjcm9uIGpvYjogJHtqb2JJZH0gKCR7bWFudWFsID8gXCJtYW51YWxcIiA6IFwic2NoZWR1bGVkXCJ9KWApO1xuXG5cdFx0XHRcdFx0Ly8gdjAuNiDCtyBhcHBseSB0aGUgbWVyZ2VkIG1pZGRsZXdhcmUgY2hhaW4gKHByb2Nlc3MtZ2xvYmFsIOKGklxuXHRcdFx0XHRcdC8vIHdvcmtmbG93LWxldmVsIOKGkiB0cmlnZ2VyLWxldmVsKSBiZWZvcmUgdGhlIG1haW4gd29ya2Zsb3dcblx0XHRcdFx0XHQvLyBib2R5LiBMZXRzIGNyb24gd29ya2Zsb3dzIGNvbXBvc2UgYXV0aC1jaGVjayArIGF1ZGl0LWxvZ1xuXHRcdFx0XHRcdC8vIGNoYWlucyBleGFjdGx5IGxpa2UgSFRUUCB0cmlnZ2Vycy4gQSB0aHJvd2luZyBtaWRkbGV3YXJlXG5cdFx0XHRcdFx0Ly8gcHJvcGFnYXRlcyB0byB0aGUgb3V0ZXIgY2F0Y2ggYW5kIHN1cmZhY2VzIGFzIGEgY3JvbiBqb2Jcblx0XHRcdFx0XHQvLyBmYWlsdXJlLlxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuYXBwbHlNaWRkbGV3YXJlQ2hhaW4oY3R4LCB0aGlzLm5vZGVNYXApO1xuXG5cdFx0XHRcdFx0Ly8gRXhlY3V0ZSB3b3JrZmxvd1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlOiBUcmlnZ2VyUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJ1bihjdHgpO1xuXHRcdFx0XHRcdGNvbnN0IGVuZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGpvYiBzdGF0ZVxuXHRcdFx0XHRcdHNjaGVkdWxlZEpvYi5sYXN0UnVuID0gZXhlY3V0aW9uVGltZTtcblx0XHRcdFx0XHRzY2hlZHVsZWRKb2IubmV4dFJ1biA9IHRoaXMudG9EYXRlKHNjaGVkdWxlZEpvYi5qb2IubmV4dERhdGUoKSk7XG5cblx0XHRcdFx0XHQvLyBTZXQgc3BhbiBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIHRydWUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiam9iX2lkXCIsIGpvYklkKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcIndvcmtmbG93X3BhdGhcIiwgd29ya2Zsb3cucGF0aCk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzY2hlZHVsZVwiLCBjb25maWcuc2NoZWR1bGUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwidGltZXpvbmVcIiwgdGltZXpvbmUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwibWFudWFsXCIsIG1hbnVhbCk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJlbGFwc2VkX21zXCIsIGVuZCAtIHN0YXJ0KTtcblx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXG5cdFx0XHRcdFx0Ly8gUmVjb3JkIG1ldHJpY3Ncblx0XHRcdFx0XHRjcm9uRXhlY3V0aW9ucy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRcdGpvYl9pZDogam9iSWQsXG5cdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ubmFtZSxcblx0XHRcdFx0XHRcdG1hbnVhbDogU3RyaW5nKG1hbnVhbCksXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiBcInRydWVcIixcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGN0eC5sb2dnZXIubG9nKGBDcm9uIGpvYiBjb21wbGV0ZWQgaW4gJHsoZW5kIC0gc3RhcnQpLnRvRml4ZWQoMil9bXM6ICR7am9iSWR9YCk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHQvLyBGNSDCtyBhIGNyb24gd29ya2Zsb3cgd2l0aCBhIGB3YWl0YCBzdGVwIChvciBhIHNjaGVkdWxpbmdcblx0XHRcdFx0XHQvLyBnYXRlKSB0aHJvd3MgRGVmZXJyZWREaXNwYXRjaFNpZ25hbCAvIFdhaXREaXNwYXRjaFJlcXVlc3Rcblx0XHRcdFx0XHQvLyB0byBkZWZlciB0aGUgcnVuIOKAlCB0aGF0J3MgYSBzdWNjZXNzZnVsIGRlZmVycmFsLCBOT1QgYVxuXHRcdFx0XHRcdC8vIGZhaWx1cmUuIFRyaWdnZXJCYXNlLnJ1biBhbHJlYWR5IG1hcmtlZCB0aGUgcnVuXG5cdFx0XHRcdFx0Ly8gZGVsYXllZC9xdWV1ZWQvZGVib3VuY2VkIGFuZCAoZm9yIEhUVFApIHBlcnNpc3RlZCB0aGVcblx0XHRcdFx0XHQvLyBkaXNwYXRjaC4gQ3JvbidzIGluLXByb2Nlc3Mgc2NoZWR1bGVyIG93bnMgdGhlIGV2ZW50dWFsXG5cdFx0XHRcdFx0Ly8gcmUtZmlyZSwgc28gd2UganVzdCByZWNvcmQgc3VjY2VzcyBhbmQgZG9uJ3QgYnVtcFxuXHRcdFx0XHRcdC8vIGBjcm9uX2Vycm9yc2AuXG5cdFx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgRGVmZXJyZWREaXNwYXRjaFNpZ25hbCB8fCBlcnJvciBpbnN0YW5jZW9mIFdhaXREaXNwYXRjaFJlcXVlc3QpIHtcblx0XHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCB0cnVlKTtcblx0XHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZGVmZXJyZWRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXG5cdFx0XHRcdFx0XHRjcm9uRXhlY3V0aW9ucy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0XHRlbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuXHRcdFx0XHRcdFx0XHRqb2JfaWQ6IGpvYklkLFxuXHRcdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ubmFtZSxcblx0XHRcdFx0XHRcdFx0bWFudWFsOiBTdHJpbmcobWFudWFsKSxcblx0XHRcdFx0XHRcdFx0c3VjY2VzczogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKGBDcm9uIGpvYiBkZWZlcnJlZCAke2pvYklkfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHsgY3R4OiB7fSBhcyBDb250ZXh0LCBtZXRyaWNzOiB7fSBhcyBNZXRyaWNzVHlwZSB9KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2U7XG5cblx0XHRcdFx0XHQvLyBTZXQgc3BhbiBlcnJvclxuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0c3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuXHRcdFx0XHRcdHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9KTtcblxuXHRcdFx0XHRcdC8vIFJlY29yZCBlcnJvciBtZXRyaWNzXG5cdFx0XHRcdFx0Y3JvbkVycm9ycy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRcdGpvYl9pZDogam9iSWQsXG5cdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24/Lm5hbWUgfHwgXCJ1bmtub3duXCIsXG5cdFx0XHRcdFx0XHRtYW51YWw6IFN0cmluZyhtYW51YWwpLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYENyb24gam9iIGZhaWxlZCAke2pvYklkfTogJHtlcnJvck1lc3NhZ2V9YCwgKGVycm9yIGFzIEVycm9yKS5zdGFjayk7XG5cblx0XHRcdFx0XHRyZXNvbHZlKHsgY3R4OiB7fSBhcyBDb250ZXh0LCBtZXRyaWNzOiB7fSBhcyBNZXRyaWNzVHlwZSB9KTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRzY2hlZHVsZWRKb2IucnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHNwYW4uZW5kKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENyb25UcmlnZ2VyO1xuIl19
|
package/dist/index.d.ts
CHANGED
|
@@ -32,13 +32,18 @@
|
|
|
32
32
|
*
|
|
33
33
|
* Workflow Definition:
|
|
34
34
|
* ```typescript
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
35
|
+
* workflow({
|
|
36
|
+
* name: "daily-cleanup",
|
|
37
|
+
* version: "1.0.0",
|
|
38
|
+
* trigger: {
|
|
39
|
+
* cron: {
|
|
40
|
+
* schedule: "0 2 * * *", // Run at 2 AM daily
|
|
41
|
+
* timezone: "America/New_York",
|
|
42
|
+
* overlap: false,
|
|
43
|
+
* },
|
|
44
|
+
* },
|
|
45
|
+
* steps: [ ... ],
|
|
46
|
+
* });
|
|
42
47
|
* ```
|
|
43
48
|
*
|
|
44
49
|
* Cron Expression Format:
|
package/dist/index.js
CHANGED
|
@@ -32,13 +32,18 @@
|
|
|
32
32
|
*
|
|
33
33
|
* Workflow Definition:
|
|
34
34
|
* ```typescript
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
35
|
+
* workflow({
|
|
36
|
+
* name: "daily-cleanup",
|
|
37
|
+
* version: "1.0.0",
|
|
38
|
+
* trigger: {
|
|
39
|
+
* cron: {
|
|
40
|
+
* schedule: "0 2 * * *", // Run at 2 AM daily
|
|
41
|
+
* timezone: "America/New_York",
|
|
42
|
+
* overlap: false,
|
|
43
|
+
* },
|
|
44
|
+
* },
|
|
45
|
+
* steps: [ ... ],
|
|
46
|
+
* });
|
|
42
47
|
* ```
|
|
43
48
|
*
|
|
44
49
|
* Cron Expression Format:
|
|
@@ -62,4 +67,4 @@
|
|
|
62
67
|
*/
|
|
63
68
|
// Core exports
|
|
64
69
|
export { CronTrigger, } from "./CronTrigger";
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtFRztBQUVILGVBQWU7QUFDZixPQUFPLEVBQ04sV0FBVyxHQUdYLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAYmxva2pzL3RyaWdnZXItY3JvblxuICpcbiAqIENyb24vc2NoZWR1bGVkIHRyaWdnZXIgZm9yIEJsb2sgd29ya2Zsb3dzLlxuICogRXhlY3V0ZSB3b3JrZmxvd3Mgb24gYSBzY2hlZHVsZSB1c2luZyBjcm9uIGV4cHJlc3Npb25zLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBTdGFuZGFyZCBjcm9uIGV4cHJlc3Npb24gc3ludGF4XG4gKiAtIFRpbWV6b25lLWF3YXJlIHNjaGVkdWxpbmdcbiAqIC0gT3ZlcmxhcCBwcmV2ZW50aW9uXG4gKiAtIE1hbnVhbCB0cmlnZ2VyIHN1cHBvcnRcbiAqIC0gSm9iIG1hbmFnZW1lbnQgQVBJXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENyb25UcmlnZ2VyIH0gZnJvbSBcIkBibG9ranMvdHJpZ2dlci1jcm9uXCI7XG4gKlxuICogY2xhc3MgTXlDcm9uVHJpZ2dlciBleHRlbmRzIENyb25UcmlnZ2VyIHtcbiAqICAgcHJvdGVjdGVkIG5vZGVzID0gbXlOb2RlcztcbiAqICAgcHJvdGVjdGVkIHdvcmtmbG93cyA9IG15V29ya2Zsb3dzO1xuICogfVxuICpcbiAqIGNvbnN0IHRyaWdnZXIgPSBuZXcgTXlDcm9uVHJpZ2dlcigpO1xuICogYXdhaXQgdHJpZ2dlci5saXN0ZW4oKTtcbiAqXG4gKiAvLyBMaXN0IGFsbCBzY2hlZHVsZWQgam9ic1xuICogY29uc3Qgam9icyA9IHRyaWdnZXIuZ2V0Sm9icygpO1xuICpcbiAqIC8vIE1hbnVhbGx5IHRyaWdnZXIgYSBqb2JcbiAqIGF3YWl0IHRyaWdnZXIudHJpZ2dlckpvYihcImNyb24tbXktd29ya2Zsb3ctYWJjMTIzXCIpO1xuICogYGBgXG4gKlxuICogV29ya2Zsb3cgRGVmaW5pdGlvbjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHdvcmtmbG93KHtcbiAqICAgbmFtZTogXCJkYWlseS1jbGVhbnVwXCIsXG4gKiAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAqICAgdHJpZ2dlcjoge1xuICogICAgIGNyb246IHtcbiAqICAgICAgIHNjaGVkdWxlOiBcIjAgMiAqICogKlwiLCAgLy8gUnVuIGF0IDIgQU0gZGFpbHlcbiAqICAgICAgIHRpbWV6b25lOiBcIkFtZXJpY2EvTmV3X1lvcmtcIixcbiAqICAgICAgIG92ZXJsYXA6IGZhbHNlLFxuICogICAgIH0sXG4gKiAgIH0sXG4gKiAgIHN0ZXBzOiBbIC4uLiBdLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBDcm9uIEV4cHJlc3Npb24gRm9ybWF0OlxuICogYGBgXG4gKiAqICogKiAqICogKlxuICog4pSCIOKUgiDilIIg4pSCIOKUgiDilIJcbiAqIOKUgiDilIIg4pSCIOKUgiDilIIg4pSU4pSA4pSAIERheSBvZiB3ZWVrICgwLTcsIFN1bj0wLDcpXG4gKiDilIIg4pSCIOKUgiDilIIg4pSU4pSA4pSA4pSA4pSAIE1vbnRoICgxLTEyKVxuICog4pSCIOKUgiDilIIg4pSU4pSA4pSA4pSA4pSA4pSA4pSAIERheSBvZiBtb250aCAoMS0zMSlcbiAqIOKUgiDilIIg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIEhvdXIgKDAtMjMpXG4gKiDilIIg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIE1pbnV0ZSAoMC01OSlcbiAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBTZWNvbmQgKDAtNTksIG9wdGlvbmFsKVxuICogYGBgXG4gKlxuICogQ29tbW9uIHNjaGVkdWxlczpcbiAqIC0gXCIqICogKiAqICpcIiAtIEV2ZXJ5IG1pbnV0ZVxuICogLSBcIjAgKiAqICogKlwiIC0gRXZlcnkgaG91clxuICogLSBcIjAgMCAqICogKlwiIC0gRXZlcnkgZGF5IGF0IG1pZG5pZ2h0XG4gKiAtIFwiMCAwICogKiAwXCIgLSBFdmVyeSBTdW5kYXkgYXQgbWlkbmlnaHRcbiAqIC0gXCIwIDAgMSAqICpcIiAtIEZpcnN0IGRheSBvZiBldmVyeSBtb250aFxuICovXG5cbi8vIENvcmUgZXhwb3J0c1xuZXhwb3J0IHtcblx0Q3JvblRyaWdnZXIsXG5cdHR5cGUgU2NoZWR1bGVkSm9iLFxuXHR0eXBlIENyb25FeGVjdXRpb25Db250ZXh0LFxufSBmcm9tIFwiLi9Dcm9uVHJpZ2dlclwiO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZnJvbSBoZWxwZXIgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IENyb25UcmlnZ2VyT3B0cyB9IGZyb20gXCJAYmxva2pzL2hlbHBlclwiO1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blokjs/trigger-cron",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"files": ["dist"],
|
|
5
5
|
"description": "Cron/scheduled trigger for Blok workflows - supports cron expressions and interval-based scheduling",
|
|
6
6
|
"type": "module",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"author": "Deskree Technologies Inc.",
|
|
16
16
|
"license": "Apache-2.0",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@blokjs/helper": "^0.
|
|
19
|
-
"@blokjs/runner": "^0.
|
|
20
|
-
"@blokjs/shared": "^0.
|
|
18
|
+
"@blokjs/helper": "^0.7.0",
|
|
19
|
+
"@blokjs/runner": "^0.7.0",
|
|
20
|
+
"@blokjs/shared": "^0.7.0",
|
|
21
21
|
"@opentelemetry/api": "^1.9.0",
|
|
22
22
|
"cron": "^4.4.0",
|
|
23
23
|
"uuid": "^11.1.0"
|