@workflow/core 5.0.0-beta.40 → 5.0.0-beta.42
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/events-consumer.d.ts +224 -6
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +497 -50
- package/dist/private.d.ts +87 -18
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +118 -47
- package/dist/runtime/constants.d.ts +50 -1
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +59 -3
- package/dist/runtime/helpers.d.ts +212 -70
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +275 -86
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -1
- package/dist/runtime/quickjs-assets.generated.js +2 -2
- package/dist/runtime/quickjs-entrypoint.d.ts +8 -9
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
- package/dist/runtime/quickjs-entrypoint.js +172 -41
- package/dist/runtime/quickjs-runtime.d.ts +36 -1
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
- package/dist/runtime/quickjs-runtime.js +613 -185
- package/dist/runtime/quickjs-serde.d.ts +107 -0
- package/dist/runtime/quickjs-serde.d.ts.map +1 -0
- package/dist/runtime/quickjs-serde.js +2098 -0
- package/dist/runtime/replay-budget.d.ts +13 -14
- package/dist/runtime/replay-budget.d.ts.map +1 -1
- package/dist/runtime/replay-budget.js +20 -73
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +57 -13
- package/dist/runtime/resume-latency.d.ts +143 -0
- package/dist/runtime/resume-latency.d.ts.map +1 -0
- package/dist/runtime/resume-latency.js +153 -0
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +3 -4
- package/dist/runtime/start.js +2 -7
- package/dist/runtime/step-executor.d.ts +27 -12
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +105 -15
- package/dist/runtime/suspension-handler.d.ts +46 -8
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +173 -15
- package/dist/runtime/world-compatibility.d.ts +16 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -1
- package/dist/runtime/world-compatibility.js +26 -5
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +911 -524
- package/dist/serialization/codec-devalue-vm.d.ts +7 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -1
- package/dist/serialization/codec-devalue-vm.js +12 -1
- package/dist/serialization/codec-devalue.d.ts.map +1 -1
- package/dist/serialization/codec-devalue.js +15 -4
- package/dist/serialization/workflow-vm.d.ts +8 -3
- package/dist/serialization/workflow-vm.d.ts.map +1 -1
- package/dist/serialization/workflow-vm.js +9 -4
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +8 -3
- package/dist/step.js +2 -2
- package/dist/telemetry/semantic-conventions.d.ts +104 -0
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +84 -1
- package/dist/test-support/orchestrator-context.d.ts +25 -0
- package/dist/test-support/orchestrator-context.d.ts.map +1 -0
- package/dist/test-support/orchestrator-context.js +91 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +9 -6
- package/dist/workflow/abort-controller.d.ts.map +1 -1
- package/dist/workflow/abort-controller.js +4 -6
- package/dist/workflow/attribute-dispatcher.js +2 -2
- package/dist/workflow/hook.js +2 -2
- package/dist/workflow/sleep.js +2 -2
- package/dist/workflow.d.ts +10 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +94 -20
- package/docs/how-it-works/event-sourcing.mdx +11 -3
- package/package.json +7 -7
- package/dist/correlation-id.d.ts +0 -109
- package/dist/correlation-id.d.ts.map +0 -1
- package/dist/correlation-id.js +0 -139
- package/dist/serialization/vm-bundle-entry.d.ts +0 -12
- package/dist/serialization/vm-bundle-entry.d.ts.map +0 -1
- package/dist/serialization/vm-bundle-entry.js +0 -58
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type SlotSnapshotParams } from './helpers.js';
|
|
1
2
|
/**
|
|
2
3
|
* Per-invocation accounting of the *non-step* portion of a workflow
|
|
3
4
|
* handler run: deterministic event-log replay, workflow-VM execution
|
|
@@ -72,21 +73,12 @@ export declare class ReplayBudget {
|
|
|
72
73
|
*/
|
|
73
74
|
isExhausted(): boolean;
|
|
74
75
|
}
|
|
76
|
+
export declare class ReplayTimeoutRetryError extends Error {
|
|
77
|
+
readonly name = "ReplayTimeoutRetryError";
|
|
78
|
+
}
|
|
75
79
|
/**
|
|
76
|
-
*
|
|
77
|
-
* exhausted
|
|
78
|
-
* supports `process.exit(1)` as a queue redelivery signal (see
|
|
79
|
-
* `World.processExitTriggersQueueRedelivery`):
|
|
80
|
-
*
|
|
81
|
-
* - **Managed-platform Worlds** (`world-vercel`): on attempts <=
|
|
82
|
-
* `REPLAY_TIMEOUT_MAX_RETRIES` exit the process so the platform fails
|
|
83
|
-
* the invocation and the queue redelivers; on the next attempt write
|
|
84
|
-
* `run_failed` with `RUN_ERROR_CODES.REPLAY_TIMEOUT` and exit.
|
|
85
|
-
*
|
|
86
|
-
* - **In-process Worlds** (`world-local`, dev servers): calling
|
|
87
|
-
* `process.exit()` would terminate the host (e.g. `pnpm dev`), so
|
|
88
|
-
* instead log a warning, write `run_failed` best-effort, and return.
|
|
89
|
-
* The framework completes the request normally.
|
|
80
|
+
* Reject the current delivery while replay-timeout retries remain. Once
|
|
81
|
+
* exhausted, fail the run and let the queue acknowledge the delivery.
|
|
90
82
|
*/
|
|
91
83
|
export declare function handleReplayBudgetExhausted(args: {
|
|
92
84
|
runId: string;
|
|
@@ -94,5 +86,12 @@ export declare function handleReplayBudgetExhausted(args: {
|
|
|
94
86
|
requestId: string | undefined;
|
|
95
87
|
attempt: number;
|
|
96
88
|
limitMs: number;
|
|
89
|
+
/**
|
|
90
|
+
* How much of the log the replay that ran out of budget had loaded. Carried
|
|
91
|
+
* onto the terminal write for the same reason every other write from that
|
|
92
|
+
* replay carries it: the run is being failed on a view of the log, and the
|
|
93
|
+
* World should be told which view.
|
|
94
|
+
*/
|
|
95
|
+
slotSnapshot?: SlotSnapshotParams;
|
|
97
96
|
}): Promise<void>;
|
|
98
97
|
//# sourceMappingURL=replay-budget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay-budget.d.ts","sourceRoot":"","sources":["../../src/runtime/replay-budget.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replay-budget.d.ts","sourceRoot":"","sources":["../../src/runtime/replay-budget.ts"],"names":[],"mappings":"AAMA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAG7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,aAAa,CAAgB;gBAEzB,OAAO,GAAE,MAA6B;IAKlD;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;;OAGG;IACH,OAAO,IAAI,MAAM;IAMjB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAMb;;;;;OAKG;IACH,MAAM,IAAI,IAAI;IAId;;;;OAIG;IACH,WAAW,IAAI,OAAO;CAGvB;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA6B;CACpD;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDhB"}
|
|
@@ -97,63 +97,26 @@ export class ReplayBudget {
|
|
|
97
97
|
return this.elapsed() >= this.limitMs;
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
+
export class ReplayTimeoutRetryError extends Error {
|
|
101
|
+
name = 'ReplayTimeoutRetryError';
|
|
102
|
+
}
|
|
100
103
|
/**
|
|
101
|
-
*
|
|
102
|
-
* exhausted
|
|
103
|
-
* supports `process.exit(1)` as a queue redelivery signal (see
|
|
104
|
-
* `World.processExitTriggersQueueRedelivery`):
|
|
105
|
-
*
|
|
106
|
-
* - **Managed-platform Worlds** (`world-vercel`): on attempts <=
|
|
107
|
-
* `REPLAY_TIMEOUT_MAX_RETRIES` exit the process so the platform fails
|
|
108
|
-
* the invocation and the queue redelivers; on the next attempt write
|
|
109
|
-
* `run_failed` with `RUN_ERROR_CODES.REPLAY_TIMEOUT` and exit.
|
|
110
|
-
*
|
|
111
|
-
* - **In-process Worlds** (`world-local`, dev servers): calling
|
|
112
|
-
* `process.exit()` would terminate the host (e.g. `pnpm dev`), so
|
|
113
|
-
* instead log a warning, write `run_failed` best-effort, and return.
|
|
114
|
-
* The framework completes the request normally.
|
|
104
|
+
* Reject the current delivery while replay-timeout retries remain. Once
|
|
105
|
+
* exhausted, fail the run and let the queue acknowledge the delivery.
|
|
115
106
|
*/
|
|
116
107
|
export async function handleReplayBudgetExhausted(args) {
|
|
117
|
-
const { runId, workflowName, requestId, attempt, limitMs } = args;
|
|
108
|
+
const { runId, workflowName, requestId, attempt, limitMs, slotSnapshot } = args;
|
|
118
109
|
const runLogger = runtimeLogger.forRun(runId, workflowName);
|
|
119
|
-
const world = await getWorld();
|
|
120
|
-
const canExitForRedelivery = world.processExitTriggersQueueRedelivery === true;
|
|
121
|
-
// Worlds without managed-platform redelivery (e.g. world-local, custom
|
|
122
|
-
// in-process worlds) must not have us exit the process — that would
|
|
123
|
-
// kill the user's host (`pnpm dev`, CLI, etc.) without producing a
|
|
124
|
-
// retry. Surface the failure via the event log if we can, then return.
|
|
125
|
-
if (!canExitForRedelivery) {
|
|
126
|
-
runLogger.warn('Workflow replay exceeded timeout; current World does not support process exit for redelivery — failing the run and returning', { timeoutMs: limitMs, attempt });
|
|
127
|
-
try {
|
|
128
|
-
const getEncryptionKey = memoizeEncryptionKey(world, runId);
|
|
129
|
-
const timeoutErr = new FatalError(`Workflow replay exceeded maximum duration (${limitMs / 1000}s)`);
|
|
130
|
-
await world.events.create(runId, {
|
|
131
|
-
eventType: 'run_failed',
|
|
132
|
-
specVersion: SPEC_VERSION_CURRENT,
|
|
133
|
-
eventData: {
|
|
134
|
-
error: await dehydrateRunError(timeoutErr, runId, await getEncryptionKey()),
|
|
135
|
-
errorCode: RUN_ERROR_CODES.REPLAY_TIMEOUT,
|
|
136
|
-
},
|
|
137
|
-
}, { requestId });
|
|
138
|
-
}
|
|
139
|
-
catch (err) {
|
|
140
|
-
runLogger.warn('Unable to mark run as failed', {
|
|
141
|
-
attempt,
|
|
142
|
-
errorName: err instanceof Error ? err.name : 'UnknownError',
|
|
143
|
-
errorMessage: err instanceof Error ? err.message : String(err),
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
110
|
const maxRetries = getReplayTimeoutMaxRetries();
|
|
149
111
|
if (attempt <= maxRetries) {
|
|
150
|
-
runLogger.warn('Workflow replay exceeded timeout
|
|
112
|
+
runLogger.warn('Workflow replay exceeded timeout; retrying delivery', {
|
|
151
113
|
timeoutMs: limitMs,
|
|
152
114
|
attempt,
|
|
153
115
|
maxRetries,
|
|
154
116
|
});
|
|
155
|
-
|
|
117
|
+
throw new ReplayTimeoutRetryError(`Workflow replay exceeded maximum duration (${limitMs / 1000}s)`);
|
|
156
118
|
}
|
|
119
|
+
const world = await getWorld();
|
|
157
120
|
const replayTimeoutDescription = describeError(undefined, RUN_ERROR_CODES.REPLAY_TIMEOUT);
|
|
158
121
|
runLogger.error('Workflow replay exceeded timeout and max retries exceeded. Failing the run', {
|
|
159
122
|
timeoutMs: limitMs,
|
|
@@ -162,31 +125,15 @@ export async function handleReplayBudgetExhausted(args) {
|
|
|
162
125
|
errorCode: replayTimeoutDescription.errorCode,
|
|
163
126
|
errorAttribution: replayTimeoutDescription.attribution,
|
|
164
127
|
});
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}, { requestId });
|
|
176
|
-
}
|
|
177
|
-
catch (err) {
|
|
178
|
-
// Best effort — process exits regardless. Surface why so operators
|
|
179
|
-
// can diagnose repeat timeouts against the backend.
|
|
180
|
-
runLogger.warn('Unable to mark run as failed. The queue will continue to retry', {
|
|
181
|
-
attempt,
|
|
182
|
-
errorName: err instanceof Error ? err.name : 'UnknownError',
|
|
183
|
-
errorMessage: err instanceof Error ? err.message : String(err),
|
|
184
|
-
errorStack: err instanceof Error ? err.stack : undefined,
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
// Note that this also prevents the runtime from acking the queue
|
|
188
|
-
// message, so the queue will call back once, after which a 410 will
|
|
189
|
-
// get it to exit early.
|
|
190
|
-
process.exit(1);
|
|
128
|
+
const getEncryptionKey = memoizeEncryptionKey(world, runId);
|
|
129
|
+
const timeoutErr = new FatalError(`Workflow replay exceeded maximum duration (${limitMs / 1000}s) after ${attempt} attempts`);
|
|
130
|
+
await world.events.create(runId, {
|
|
131
|
+
eventType: 'run_failed',
|
|
132
|
+
specVersion: SPEC_VERSION_CURRENT,
|
|
133
|
+
eventData: {
|
|
134
|
+
error: await dehydrateRunError(timeoutErr, runId, await getEncryptionKey()),
|
|
135
|
+
errorCode: RUN_ERROR_CODES.REPLAY_TIMEOUT,
|
|
136
|
+
},
|
|
137
|
+
}, { requestId, ...slotSnapshot });
|
|
191
138
|
}
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5LWJ1ZGdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3JlcGxheS1idWRnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFDTixPQUFPLENBQVM7SUFDekIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLGFBQWEsQ0FBZ0I7SUFFckMsWUFBWSxVQUFrQixrQkFBa0IsRUFBRTtRQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxNQUFNLElBQUksR0FDUixJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMs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QUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWM7WUFDM0QsWUFBWSxFQUFFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDOUQsVUFBVSxFQUFFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDekQsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNELGlFQUFpRTtJQUNqRSxvRUFBb0U7SUFDcEUsd0JBQXdCO0lBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IsIFJVTl9FUlJPUl9DT0RFUyB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgU1BFQ19WRVJTSU9OX0NVUlJFTlQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZGVzY3JpYmVFcnJvciB9IGZyb20gJy4uL2Rlc2NyaWJlLWVycm9yLmpzJztcbmltcG9ydCB7IHJ1bnRpbWVMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZGVoeWRyYXRlUnVuRXJyb3IgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFJlcGxheVRpbWVvdXRNYXhSZXRyaWVzLCBnZXRSZXBsYXlUaW1lb3V0TXMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBtZW1vaXplRW5jcnlwdGlvbktleSB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBnZXRXb3JsZCB9IGZyb20gJy4vd29ybGQuanMnO1xuXG4vKipcbiAqIFBlci1pbnZvY2F0aW9uIGFjY291bnRpbmcgb2YgdGhlICpub24tc3RlcCogcG9ydGlvbiBvZiBhIHdvcmtmbG93XG4gKiBoYW5kbGVyIHJ1bjogZGV0ZXJtaW5pc3RpYyBldmVudC1sb2cgcmVwbGF5LCB3b3JrZmxvdy1WTSBleGVjdXRpb25cbiAqIGJldHdlZW4gc3RlcCBib3VuZGFyaWVzLCBzdXNwZW5zaW9uIGhhbmRsaW5nLCBxdWV1ZSByb3VuZC10cmlwcywgZXRjLlxuICogSW5saW5lIHN0ZXAgYm9kaWVzIChgXCJ1c2Ugc3RlcFwiYCBmdW5jdGlvbnMgaW52b2tlZCB2aWEgYGV4ZWN1dGVTdGVwYClcbiAqIGFyZSBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVkIOKAlCB0aGV5IGFyZSBib3VuZGVkIGJ5IHRoZSBwbGF0Zm9ybSdzXG4gKiBmdW5jdGlvbiBgbWF4RHVyYXRpb25gIGFuZCB0aGUgYE5PX0lOTElORV9SRVBMQVlfQUZURVJfTVNgIGVhcmx5LXJldHVyblxuICogZ3VhcmQuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGJ1ZGdldCA9IG5ldyBSZXBsYXlCdWRnZXQoKTtcbiAqIC8vIOKApm5vbi1zdGVwIHdvcmsgaGFwcGVucyBoZXJlLCBhY2N1bXVsYXRlcyBhZ2FpbnN0IHRoZSBidWRnZXTigKZcbiAqIGJ1ZGdldC5wYXVzZSgpO1xuICogdHJ5IHtcbiAqICAgYXdhaXQgZXhlY3V0ZVN0ZXAoLi4uKTsgLy8gbm90IGNoYXJnZWRcbiAqIH0gZmluYWxseSB7XG4gKiAgIGJ1ZGdldC5yZXN1bWUoKTtcbiAqIH1cbiAqIC8vIGJhY2sgdG8gY2hhcmdpbmdcbiAqIGlmIChidWRnZXQuaXNFeGhhdXN0ZWQoKSkgeyAuLi4gfVxuICogYGBgXG4gKlxuICogSW1wbGVtZW50YXRpb24gbm90ZXM6XG4gKlxuICogLSBgcGF1c2UoKWAgYW5kIGByZXN1bWUoKWAgYXJlIGlkZW1wb3RlbnQ6IGNhbGxpbmcgYHBhdXNlKClgIHdoaWxlXG4gKiAgIGFscmVhZHkgcGF1c2VkIChvciBgcmVzdW1lKClgIHdoaWxlIGFscmVhZHkgcmVzdW1lZCkgaXMgYSBuby1vcC5cbiAqICAgVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IGRvdWJsZS1jb3VudGluZyBpbiBmdXR1cmUgcmVmYWN0b3JzIHRoYXQgbmVzdFxuICogICBzdGVwIGV4ZWN1dGlvbiBvciB0YWtlIGFuIGVhcmx5LXJldHVybiBwYXRoIGJldHdlZW4gYSBgcGF1c2UoKWAgYW5kXG4gKiAgIHRoZSBtYXRjaGluZyBgcmVzdW1lKClgLlxuICogLSBgaXNFeGhhdXN0ZWQoKWAgaXMgY2hlY2tlZCBhdCBsb29wIGJvdW5kYXJpZXMgYnkgdGhlIGNhbGxlciDigJQgdGhlXG4gKiAgIGJ1ZGdldCBpdHNlbGYgZG9lcyBub3QgYXJtIGFueSB0aW1lcnMuIFRoaXMgbWVhbnMgYW4gaW4tZmxpZ2h0XG4gKiAgIHBhdGhvbG9naWNhbCBgcnVuV29ya2Zsb3dgIGNhbGwgKGUuZy4gYSBodWdlIGV2ZW50LWxvZyByZXBsYXkpIGNhblxuICogICBvdmVyc2hvb3QgdGhlIGJ1ZGdldCBieSB1cCB0byBvbmUgaXRlcmF0aW9uJ3Mgd29ydGggb2Ygd29yayBiZWZvcmVcbiAqICAgdGhlIG5leHQgY2hlY2sgZmlyZXMuIEluIHByYWN0aWNlIHRoZSAyMHMgaGVhZHJvb20gYnVpbHQgaW50b1xuICogICBgTUFYX1JFUExBWV9USU1FT1VUX01TYCAoYW5kIHRoZSBmdW5jdGlvbiBgbWF4RHVyYXRpb25gIGNlaWxpbmcpXG4gKiAgIGdpdmVzIHVzIHNsYWNrOyB0aGUgb2xkIGBzZXRUaW1lb3V0YC1iYXNlZCBhcHByb2FjaCBhbHNvIHVsdGltYXRlbHlcbiAqICAgcmVsaWVkIG9uIHRoZSBwbGF0Zm9ybSBTSUdURVJNIGFzIHRoZSBoYXJkIGJhY2tzdG9wLlxuICovXG5leHBvcnQgY2xhc3MgUmVwbGF5QnVkZ2V0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsaW1pdE1zOiBudW1iZXI7XG4gIHByaXZhdGUgZWxhcHNlZE1zID0gMDtcbiAgcHJpdmF0ZSBpbnRlcnZhbFN0YXJ0OiBudW1iZXIgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGxpbWl0TXM6IG51bWJlciA9IGdldFJlcGxheVRpbWVvdXRNcygpKSB7XG4gICAgdGhpcy5saW1pdE1zID0gbGltaXRNcztcbiAgICB0aGlzLmludGVydmFsU3RhcnQgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmVkIHJlcGxheS10aW1lb3V0IGxpbWl0LCBpbiBtcy4gVXNlZnVsIGZvciBsb2cgbWVzc2FnZXMuXG4gICAqL1xuICBnZXQgY29uZmlndXJlZExpbWl0TXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5saW1pdE1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvdGFsIG5vbi1zdGVwIHRpbWUgYWNjdW11bGF0ZWQgc28gZmFyLCBpbiBtcy4gSW5jbHVkZXMgdGhlXG4gICAqIGN1cnJlbnRseS1hY3RpdmUgaW50ZXJ2YWwgaWYgdGhlIGJ1ZGdldCBpcyBub3QgcGF1c2VkLlxuICAgKi9cbiAgZWxhcHNlZCgpOiBudW1iZXIge1xuICAgIGNvbnN0IG9wZW4gPVxuICAgICAgdGhpcy5pbnRlcnZhbFN0YXJ0ID09PSBudWxsID8gMCA6IERhdGUubm93KCkgLSB0aGlzLmludGVydmFsU3RhcnQ7XG4gICAgcmV0dXJuIHRoaXMuZWxhcHNlZE1zICsgb3BlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGNvdW50aW5nIGVsYXBzZWQgdGltZSB0b3dhcmQgdGhlIGJ1ZGdldC4gSWRlbXBvdGVudCDigJQgc2FmZSB0b1xuICAgKiBjYWxsIG11bHRpcGxlIHRpbWVzIGluIGEgcm93OyBzdWJzZXF1ZW50IGNhbGxzIGFyZSBuby1vcHMgdW50aWxcbiAgICogYHJlc3VtZSgpYCByZW9wZW5zIGFuIGludGVydmFsLlxuICAgKi9cbiAgcGF1c2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxTdGFydCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMuZWxhcHNlZE1zICs9IERhdGUubm93KCkgLSB0aGlzLmludGVydmFsU3RhcnQ7XG4gICAgdGhpcy5pbnRlcnZhbFN0YXJ0ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgY291bnRpbmcgZWxhcHNlZCB0aW1lIHRvd2FyZCB0aGUgYnVkZ2V0LiBJZGVtcG90ZW50IOKAlCBzYWZlIHRvXG4gICAqIGNhbGwgbXVsdGlwbGUgdGltZXMgaW4gYSByb3c7IHN1YnNlcXVlbnQgY2FsbHMgcmUtYW5jaG9yIHRoZVxuICAgKiBpbnRlcnZhbCBzdGFydCB0byBgbm93KClgLCB3aGljaCBpcyBmaW5lIGJlY2F1c2Ugbm8gdGltZSBhY2NydWVzXG4gICAqIGJldHdlZW4gYmFjay10by1iYWNrIGByZXN1bWUoKWAgY2FsbHMuXG4gICAqL1xuICByZXN1bWUoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcnZhbFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnVlIGlmIHRoZSBidWRnZXQgaGFzIGJlZW4gZXhoYXVzdGVkIChgZWxhcHNlZCgpID49IGxpbWl0TXNgKS5cbiAgICogQ2FsbGVycyBzaG91bGQgaW52b2tlIGBoYW5kbGVFeGhhdXN0ZWQoLi4uKWAgYWZ0ZXJ3YXJkIGFuZCByZXR1cm5cbiAgICogZnJvbSB0aGUgaGFuZGxlci5cbiAgICovXG4gIGlzRXhoYXVzdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVsYXBzZWQoKSA+PSB0aGlzLmxpbWl0TXM7XG4gIH1cbn1cblxuLyoqXG4gKiBGYWlsIHRoZSBydW4gKG9yIHJldHJ5LCBvbiBlYXJseSBhdHRlbXB0cykgd2hlbiB0aGUgcmVwbGF5IGJ1ZGdldCBpc1xuICogZXhoYXVzdGVkLiBUaGUgaGFuZGxpbmcgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIFdvcmxkXG4gKiBzdXBwb3J0cyBgcHJvY2Vzcy5leGl0KDEpYCBhcyBhIHF1ZXVlIHJlZGVsaXZlcnkgc2lnbmFsIChzZWVcbiAqIGBXb3JsZC5wcm9jZXNzRXhpdFRyaWdnZXJzUXVldWVSZWRlbGl2ZXJ5YCk6XG4gKlxuICogLSAqKk1hbmFnZWQtcGxhdGZvcm0gV29ybGRzKiogKGB3b3JsZC12ZXJjZWxgKTogb24gYXR0ZW1wdHMgPD1cbiAqICAgYFJFUExBWV9USU1FT1VUX01BWF9SRVRSSUVTYCBleGl0IHRoZSBwcm9jZXNzIHNvIHRoZSBwbGF0Zm9ybSBmYWlsc1xuICogICB0aGUgaW52b2NhdGlvbiBhbmQgdGhlIHF1ZXVlIHJlZGVsaXZlcnM7IG9uIHRoZSBuZXh0IGF0dGVtcHQgd3JpdGVcbiAqICAgYHJ1bl9mYWlsZWRgIHdpdGggYFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVGAgYW5kIGV4aXQuXG4gKlxuICogLSAqKkluLXByb2Nlc3MgV29ybGRzKiogKGB3b3JsZC1sb2NhbGAsIGRldiBzZXJ2ZXJzKTogY2FsbGluZ1xuICogICBgcHJvY2Vzcy5leGl0KClgIHdvdWxkIHRlcm1pbmF0ZSB0aGUgaG9zdCAoZS5nLiBgcG5wbSBkZXZgKSwgc29cbiAqICAgaW5zdGVhZCBsb2cgYSB3YXJuaW5nLCB3cml0ZSBgcnVuX2ZhaWxlZGAgYmVzdC1lZmZvcnQsIGFuZCByZXR1cm4uXG4gKiAgIFRoZSBmcmFtZXdvcmsgY29tcGxldGVzIHRoZSByZXF1ZXN0IG5vcm1hbGx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVwbGF5QnVkZ2V0RXhoYXVzdGVkKGFyZ3M6IHtcbiAgcnVuSWQ6IHN0cmluZztcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmc7XG4gIHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIGxpbWl0TXM6IG51bWJlcjtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBydW5JZCwgd29ya2Zsb3dOYW1lLCByZXF1ZXN0SWQsIGF0dGVtcHQsIGxpbWl0TXMgfSA9IGFyZ3M7XG4gIGNvbnN0IHJ1bkxvZ2dlciA9IHJ1bnRpbWVMb2dnZXIuZm9yUnVuKHJ1bklkLCB3b3JrZmxvd05hbWUpO1xuXG4gIGNvbnN0IHdvcmxkID0gYXdhaXQgZ2V0V29ybGQoKTtcbiAgY29uc3QgY2FuRXhpdEZvclJlZGVsaXZlcnkgPVxuICAgIHdvcmxkLnByb2Nlc3NFeGl0VHJpZ2dlcnNRdWV1ZVJlZGVsaXZlcnkgPT09IHRydWU7XG5cbiAgLy8gV29ybGRzIHdpdGhvdXQgbWFuYWdlZC1wbGF0Zm9ybSByZWRlbGl2ZXJ5IChlLmcuIHdvcmxkLWxvY2FsLCBjdXN0b21cbiAgLy8gaW4tcHJvY2VzcyB3b3JsZHMpIG11c3Qgbm90IGhhdmUgdXMgZXhpdCB0aGUgcHJvY2VzcyDigJQgdGhhdCB3b3VsZFxuICAvLyBraWxsIHRoZSB1c2VyJ3MgaG9zdCAoYHBucG0gZGV2YCwgQ0xJLCBldGMuKSB3aXRob3V0IHByb2R1Y2luZyBhXG4gIC8vIHJldHJ5LiBTdXJmYWNlIHRoZSBmYWlsdXJlIHZpYSB0aGUgZXZlbnQgbG9nIGlmIHdlIGNhbiwgdGhlbiByZXR1cm4uXG4gIGlmICghY2FuRXhpdEZvclJlZGVsaXZlcnkpIHtcbiAgICBydW5Mb2dnZXIud2FybihcbiAgICAgICdXb3JrZmxvdyByZXBsYXkgZXhjZWVkZWQgdGltZW91dDsgY3VycmVudCBXb3JsZCBkb2VzIG5vdCBzdXBwb3J0IHByb2Nlc3MgZXhpdCBmb3IgcmVkZWxpdmVyeSDigJQgZmFpbGluZyB0aGUgcnVuIGFuZCByZXR1cm5pbmcnLFxuICAgICAgeyB0aW1lb3V0TXM6IGxpbWl0TXMsIGF0dGVtcHQgfVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdldEVuY3J5cHRpb25LZXkgPSBtZW1vaXplRW5jcnlwdGlvbktleSh3b3JsZCwgcnVuSWQpO1xuICAgICAgY29uc3QgdGltZW91dEVyciA9IG5ldyBGYXRhbEVycm9yKFxuICAgICAgICBgV29ya2Zsb3cgcmVwbGF5IGV4Y2VlZGVkIG1heGltdW0gZHVyYXRpb24gKCR7bGltaXRNcyAvIDEwMDB9cylgXG4gICAgICApO1xuICAgICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdydW5fZmFpbGVkJyxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlUnVuRXJyb3IoXG4gICAgICAgICAgICAgIHRpbWVvdXRFcnIsXG4gICAgICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBlcnJvckNvZGU6IFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IHJlcXVlc3RJZCB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcnVuTG9nZ2VyLndhcm4oJ1VuYWJsZSB0byBtYXJrIHJ1biBhcyBmYWlsZWQnLCB7XG4gICAgICAgIGF0dGVtcHQsXG4gICAgICAgIGVycm9yTmFtZTogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubmFtZSA6ICdVbmtub3duRXJyb3InLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYXhSZXRyaWVzID0gZ2V0UmVwbGF5VGltZW91dE1heFJldHJpZXMoKTtcbiAgaWYgKGF0dGVtcHQgPD0gbWF4UmV0cmllcykge1xuICAgIHJ1bkxvZ2dlci53YXJuKFxuICAgICAgJ1dvcmtmbG93IHJlcGxheSBleGNlZWRlZCB0aW1lb3V0IGJ1dCB3aWxsIGJlIHJlLWF0dGVtcHRlZCAoYXR0ZW1wdCA8IG1heFJldHJpZXMpJyxcbiAgICAgIHtcbiAgICAgICAgdGltZW91dE1zOiBsaW1pdE1zLFxuICAgICAgICBhdHRlbXB0LFxuICAgICAgICBtYXhSZXRyaWVzLFxuICAgICAgfVxuICAgICk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgY29uc3QgcmVwbGF5VGltZW91dERlc2NyaXB0aW9uID0gZGVzY3JpYmVFcnJvcihcbiAgICB1bmRlZmluZWQsXG4gICAgUlVOX0VSUk9SX0NPREVTLlJFUExBWV9USU1FT1VUXG4gICk7XG4gIHJ1bkxvZ2dlci5lcnJvcihcbiAgICAnV29ya2Zsb3cgcmVwbGF5IGV4Y2VlZGVkIHRpbWVvdXQgYW5kIG1heCByZXRyaWVzIGV4Y2VlZGVkLiBGYWlsaW5nIHRoZSBydW4nLFxuICAgIHtcbiAgICAgIHRpbWVvdXRNczogbGltaXRNcyxcbiAgICAgIGF0dGVtcHQsXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgZXJyb3JDb2RlOiByZXBsYXlUaW1lb3V0RGVzY3JpcHRpb24uZXJyb3JDb2RlLFxuICAgICAgZXJyb3JBdHRyaWJ1dGlvbjogcmVwbGF5VGltZW91dERlc2NyaXB0aW9uLmF0dHJpYnV0aW9uLFxuICAgIH1cbiAgKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGdldEVuY3J5cHRpb25LZXkgPSBtZW1vaXplRW5jcnlwdGlvbktleSh3b3JsZCwgcnVuSWQpO1xuICAgIGNvbnN0IHRpbWVvdXRFcnIgPSBuZXcgRmF0YWxFcnJvcihcbiAgICAgIGBXb3JrZmxvdyByZXBsYXkgZXhjZWVkZWQgbWF4aW11bSBkdXJhdGlvbiAoJHtsaW1pdE1zIC8gMTAwMH1zKSBhZnRlciAke2F0dGVtcHR9IGF0dGVtcHRzYFxuICAgICk7XG4gICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShcbiAgICAgIHJ1bklkLFxuICAgICAge1xuICAgICAgICBldmVudFR5cGU6ICdydW5fZmFpbGVkJyxcbiAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlUnVuRXJyb3IoXG4gICAgICAgICAgICB0aW1lb3V0RXJyLFxuICAgICAgICAgICAgcnVuSWQsXG4gICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KClcbiAgICAgICAgICApLFxuICAgICAgICAgIGVycm9yQ29kZTogUlVOX0VSUk9SX0NPREVTLlJFUExBWV9USU1FT1VULFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgcmVxdWVzdElkIH1cbiAgICApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBCZXN0IGVmZm9ydCDigJQgcHJvY2VzcyBleGl0cyByZWdhcmRsZXNzLiBTdXJmYWNlIHdoeSBzbyBvcGVyYXRvcnNcbiAgICAvLyBjYW4gZGlhZ25vc2UgcmVwZWF0IHRpbWVvdXRzIGFnYWluc3QgdGhlIGJhY2tlbmQuXG4gICAgcnVuTG9nZ2VyLndhcm4oXG4gICAgICAnVW5hYmxlIHRvIG1hcmsgcnVuIGFzIGZhaWxlZC4gVGhlIHF1ZXVlIHdpbGwgY29udGludWUgdG8gcmV0cnknLFxuICAgICAge1xuICAgICAgICBhdHRlbXB0LFxuICAgICAgICBlcnJvck5hbWU6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm5hbWUgOiAnVW5rbm93bkVycm9yJyxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgIGVycm9yU3RhY2s6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLy8gTm90ZSB0aGF0IHRoaXMgYWxzbyBwcmV2ZW50cyB0aGUgcnVudGltZSBmcm9tIGFja2luZyB0aGUgcXVldWVcbiAgLy8gbWVzc2FnZSwgc28gdGhlIHF1ZXVlIHdpbGwgY2FsbCBiYWNrIG9uY2UsIGFmdGVyIHdoaWNoIGEgNDEwIHdpbGxcbiAgLy8gZ2V0IGl0IHRvIGV4aXQgZWFybHkuXG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbiJdfQ==
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5LWJ1ZGdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3JlcGxheS1idWRnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsb0JBQW9CLEVBQTJCLE1BQU0sY0FBYyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ04sT0FBTyxDQUFTO0lBQ3pCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDZCxhQUFhLENBQWdCO0lBRXJDLFlBQVksVUFBa0Isa0JBQWtCLEVBQUU7UUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPO1FBQ0wsTUFBTSxJQUFJLEdBQ1IsSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDcEUsT0FBTyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSTtZQUFFLE9BQU87UUFDeEMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsS0FBSztJQUM5QixJQUFJLEdBQUcseUJBQXlCLENBQUM7Q0FDcEQ7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDJCQUEyQixDQUFDLElBYWpEO0lBQ0MsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQ3RFLElBQUksQ0FBQztJQUNQLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTVELE1BQU0sVUFBVSxHQUFHLDBCQUEwQixFQUFFLENBQUM7SUFDaEQsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7UUFDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxxREFBcUQsRUFBRTtZQUNwRSxTQUFTLEVBQUUsT0FBTztZQUNsQixPQUFPO1lBQ1AsVUFBVTtTQUNYLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSx1QkFBdUIsQ0FDL0IsOENBQThDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO0lBRS9CLE1BQU0sd0JBQXdCLEdBQUcsYUFBYSxDQUM1QyxTQUFTLEVBQ1QsZUFBZSxDQUFDLGNBQWMsQ0FDL0IsQ0FBQztJQUNGLFNBQVMsQ0FBQyxLQUFLLENBQ2IsNEVBQTRFLEVBQzVFO1FBQ0UsU0FBUyxFQUFFLE9BQU87UUFDbEIsT0FBTztRQUNQLFVBQVU7UUFDVixTQUFTLEVBQUUsd0JBQXdCLENBQUMsU0FBUztRQUM3QyxnQkFBZ0IsRUFBRSx3QkFBd0IsQ0FBQyxXQUFXO0tBQ3ZELENBQ0YsQ0FBQztJQUVGLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVELE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUMvQiw4Q0FBOEMsT0FBTyxHQUFHLElBQUksWUFBWSxPQUFPLFdBQVcsQ0FDM0YsQ0FBQztJQUNGLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ3ZCLEtBQUssRUFDTDtRQUNFLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsU0FBUyxFQUFFO1lBQ1QsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQzVCLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxnQkFBZ0IsRUFBRSxDQUN6QjtZQUNELFNBQVMsRUFBRSxlQUFlLENBQUMsY0FBYztTQUMxQztLQUNGLEVBQ0QsRUFBRSxTQUFTLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FDL0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYXRhbEVycm9yLCBSVU5fRVJST1JfQ09ERVMgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IFNQRUNfVkVSU0lPTl9DVVJSRU5UIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IGRlc2NyaWJlRXJyb3IgfSBmcm9tICcuLi9kZXNjcmliZS1lcnJvci5qcyc7XG5pbXBvcnQgeyBydW50aW1lTG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IGRlaHlkcmF0ZVJ1bkVycm9yIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBnZXRSZXBsYXlUaW1lb3V0TWF4UmV0cmllcywgZ2V0UmVwbGF5VGltZW91dE1zIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgbWVtb2l6ZUVuY3J5cHRpb25LZXksIHR5cGUgU2xvdFNuYXBzaG90UGFyYW1zIH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IGdldFdvcmxkIH0gZnJvbSAnLi93b3JsZC5qcyc7XG5cbi8qKlxuICogUGVyLWludm9jYXRpb24gYWNjb3VudGluZyBvZiB0aGUgKm5vbi1zdGVwKiBwb3J0aW9uIG9mIGEgd29ya2Zsb3dcbiAqIGhhbmRsZXIgcnVuOiBkZXRlcm1pbmlzdGljIGV2ZW50LWxvZyByZXBsYXksIHdvcmtmbG93LVZNIGV4ZWN1dGlvblxuICogYmV0d2VlbiBzdGVwIGJvdW5kYXJpZXMsIHN1c3BlbnNpb24gaGFuZGxpbmcsIHF1ZXVlIHJvdW5kLXRyaXBzLCBldGMuXG4gKiBJbmxpbmUgc3RlcCBib2RpZXMgKGBcInVzZSBzdGVwXCJgIGZ1bmN0aW9ucyBpbnZva2VkIHZpYSBgZXhlY3V0ZVN0ZXBgKVxuICogYXJlIGludGVudGlvbmFsbHkgZXhjbHVkZWQg4oCUIHRoZXkgYXJlIGJvdW5kZWQgYnkgdGhlIHBsYXRmb3JtJ3NcbiAqIGZ1bmN0aW9uIGBtYXhEdXJhdGlvbmAgYW5kIHRoZSBgTk9fSU5MSU5FX1JFUExBWV9BRlRFUl9NU2AgZWFybHktcmV0dXJuXG4gKiBndWFyZC5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgYnVkZ2V0ID0gbmV3IFJlcGxheUJ1ZGdldCgpO1xuICogLy8g4oCmbm9uLXN0ZXAgd29yayBoYXBwZW5zIGhlcmUsIGFjY3VtdWxhdGVzIGFnYWluc3QgdGhlIGJ1ZGdldOKAplxuICogYnVkZ2V0LnBhdXNlKCk7XG4gKiB0cnkge1xuICogICBhd2FpdCBleGVjdXRlU3RlcCguLi4pOyAvLyBub3QgY2hhcmdlZFxuICogfSBmaW5hbGx5IHtcbiAqICAgYnVkZ2V0LnJlc3VtZSgpO1xuICogfVxuICogLy8gYmFjayB0byBjaGFyZ2luZ1xuICogaWYgKGJ1ZGdldC5pc0V4aGF1c3RlZCgpKSB7IC4uLiB9XG4gKiBgYGBcbiAqXG4gKiBJbXBsZW1lbnRhdGlvbiBub3RlczpcbiAqXG4gKiAtIGBwYXVzZSgpYCBhbmQgYHJlc3VtZSgpYCBhcmUgaWRlbXBvdGVudDogY2FsbGluZyBgcGF1c2UoKWAgd2hpbGVcbiAqICAgYWxyZWFkeSBwYXVzZWQgKG9yIGByZXN1bWUoKWAgd2hpbGUgYWxyZWFkeSByZXN1bWVkKSBpcyBhIG5vLW9wLlxuICogICBUaGlzIHByb3RlY3RzIGFnYWluc3QgZG91YmxlLWNvdW50aW5nIGluIGZ1dHVyZSByZWZhY3RvcnMgdGhhdCBuZXN0XG4gKiAgIHN0ZXAgZXhlY3V0aW9uIG9yIHRha2UgYW4gZWFybHktcmV0dXJuIHBhdGggYmV0d2VlbiBhIGBwYXVzZSgpYCBhbmRcbiAqICAgdGhlIG1hdGNoaW5nIGByZXN1bWUoKWAuXG4gKiAtIGBpc0V4aGF1c3RlZCgpYCBpcyBjaGVja2VkIGF0IGxvb3AgYm91bmRhcmllcyBieSB0aGUgY2FsbGVyIOKAlCB0aGVcbiAqICAgYnVkZ2V0IGl0c2VsZiBkb2VzIG5vdCBhcm0gYW55IHRpbWVycy4gVGhpcyBtZWFucyBhbiBpbi1mbGlnaHRcbiAqICAgcGF0aG9sb2dpY2FsIGBydW5Xb3JrZmxvd2AgY2FsbCAoZS5nLiBhIGh1Z2UgZXZlbnQtbG9nIHJlcGxheSkgY2FuXG4gKiAgIG92ZXJzaG9vdCB0aGUgYnVkZ2V0IGJ5IHVwIHRvIG9uZSBpdGVyYXRpb24ncyB3b3J0aCBvZiB3b3JrIGJlZm9yZVxuICogICB0aGUgbmV4dCBjaGVjayBmaXJlcy4gSW4gcHJhY3RpY2UgdGhlIDIwcyBoZWFkcm9vbSBidWlsdCBpbnRvXG4gKiAgIGBNQVhfUkVQTEFZX1RJTUVPVVRfTVNgIChhbmQgdGhlIGZ1bmN0aW9uIGBtYXhEdXJhdGlvbmAgY2VpbGluZylcbiAqICAgZ2l2ZXMgdXMgc2xhY2s7IHRoZSBvbGQgYHNldFRpbWVvdXRgLWJhc2VkIGFwcHJvYWNoIGFsc28gdWx0aW1hdGVseVxuICogICByZWxpZWQgb24gdGhlIHBsYXRmb3JtIFNJR1RFUk0gYXMgdGhlIGhhcmQgYmFja3N0b3AuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXBsYXlCdWRnZXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGxpbWl0TXM6IG51bWJlcjtcbiAgcHJpdmF0ZSBlbGFwc2VkTXMgPSAwO1xuICBwcml2YXRlIGludGVydmFsU3RhcnQ6IG51bWJlciB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IobGltaXRNczogbnVtYmVyID0gZ2V0UmVwbGF5VGltZW91dE1zKCkpIHtcbiAgICB0aGlzLmxpbWl0TXMgPSBsaW1pdE1zO1xuICAgIHRoaXMuaW50ZXJ2YWxTdGFydCA9IERhdGUubm93KCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyZWQgcmVwbGF5LXRpbWVvdXQgbGltaXQsIGluIG1zLiBVc2VmdWwgZm9yIGxvZyBtZXNzYWdlcy5cbiAgICovXG4gIGdldCBjb25maWd1cmVkTGltaXRNcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmxpbWl0TXM7XG4gIH1cblxuICAvKipcbiAgICogVG90YWwgbm9uLXN0ZXAgdGltZSBhY2N1bXVsYXRlZCBzbyBmYXIsIGluIG1zLiBJbmNsdWRlcyB0aGVcbiAgICogY3VycmVudGx5LWFjdGl2ZSBpbnRlcnZhbCBpZiB0aGUgYnVkZ2V0IGlzIG5vdCBwYXVzZWQuXG4gICAqL1xuICBlbGFwc2VkKCk6IG51bWJlciB7XG4gICAgY29uc3Qgb3BlbiA9XG4gICAgICB0aGlzLmludGVydmFsU3RhcnQgPT09IG51bGwgPyAwIDogRGF0ZS5ub3coKSAtIHRoaXMuaW50ZXJ2YWxTdGFydDtcbiAgICByZXR1cm4gdGhpcy5lbGFwc2VkTXMgKyBvcGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgY291bnRpbmcgZWxhcHNlZCB0aW1lIHRvd2FyZCB0aGUgYnVkZ2V0LiBJZGVtcG90ZW50IOKAlCBzYWZlIHRvXG4gICAqIGNhbGwgbXVsdGlwbGUgdGltZXMgaW4gYSByb3c7IHN1YnNlcXVlbnQgY2FsbHMgYXJlIG5vLW9wcyB1bnRpbFxuICAgKiBgcmVzdW1lKClgIHJlb3BlbnMgYW4gaW50ZXJ2YWwuXG4gICAqL1xuICBwYXVzZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnRlcnZhbFN0YXJ0ID09PSBudWxsKSByZXR1cm47XG4gICAgdGhpcy5lbGFwc2VkTXMgKz0gRGF0ZS5ub3coKSAtIHRoaXMuaW50ZXJ2YWxTdGFydDtcbiAgICB0aGlzLmludGVydmFsU3RhcnQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBjb3VudGluZyBlbGFwc2VkIHRpbWUgdG93YXJkIHRoZSBidWRnZXQuIElkZW1wb3RlbnQg4oCUIHNhZmUgdG9cbiAgICogY2FsbCBtdWx0aXBsZSB0aW1lcyBpbiBhIHJvdzsgc3Vic2VxdWVudCBjYWxscyByZS1hbmNob3IgdGhlXG4gICAqIGludGVydmFsIHN0YXJ0IHRvIGBub3coKWAsIHdoaWNoIGlzIGZpbmUgYmVjYXVzZSBubyB0aW1lIGFjY3J1ZXNcbiAgICogYmV0d2VlbiBiYWNrLXRvLWJhY2sgYHJlc3VtZSgpYCBjYWxscy5cbiAgICovXG4gIHJlc3VtZSgpOiB2b2lkIHtcbiAgICB0aGlzLmludGVydmFsU3RhcnQgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydWUgaWYgdGhlIGJ1ZGdldCBoYXMgYmVlbiBleGhhdXN0ZWQgKGBlbGFwc2VkKCkgPj0gbGltaXRNc2ApLlxuICAgKiBDYWxsZXJzIHNob3VsZCBpbnZva2UgYGhhbmRsZUV4aGF1c3RlZCguLi4pYCBhZnRlcndhcmQgYW5kIHJldHVyblxuICAgKiBmcm9tIHRoZSBoYW5kbGVyLlxuICAgKi9cbiAgaXNFeGhhdXN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWxhcHNlZCgpID49IHRoaXMubGltaXRNcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVwbGF5VGltZW91dFJldHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG92ZXJyaWRlIHJlYWRvbmx5IG5hbWUgPSAnUmVwbGF5VGltZW91dFJldHJ5RXJyb3InO1xufVxuXG4vKipcbiAqIFJlamVjdCB0aGUgY3VycmVudCBkZWxpdmVyeSB3aGlsZSByZXBsYXktdGltZW91dCByZXRyaWVzIHJlbWFpbi4gT25jZVxuICogZXhoYXVzdGVkLCBmYWlsIHRoZSBydW4gYW5kIGxldCB0aGUgcXVldWUgYWNrbm93bGVkZ2UgdGhlIGRlbGl2ZXJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVwbGF5QnVkZ2V0RXhoYXVzdGVkKGFyZ3M6IHtcbiAgcnVuSWQ6IHN0cmluZztcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmc7XG4gIHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIGxpbWl0TXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvdyBtdWNoIG9mIHRoZSBsb2cgdGhlIHJlcGxheSB0aGF0IHJhbiBvdXQgb2YgYnVkZ2V0IGhhZCBsb2FkZWQuIENhcnJpZWRcbiAgICogb250byB0aGUgdGVybWluYWwgd3JpdGUgZm9yIHRoZSBzYW1lIHJlYXNvbiBldmVyeSBvdGhlciB3cml0ZSBmcm9tIHRoYXRcbiAgICogcmVwbGF5IGNhcnJpZXMgaXQ6IHRoZSBydW4gaXMgYmVpbmcgZmFpbGVkIG9uIGEgdmlldyBvZiB0aGUgbG9nLCBhbmQgdGhlXG4gICAqIFdvcmxkIHNob3VsZCBiZSB0b2xkIHdoaWNoIHZpZXcuXG4gICAqL1xuICBzbG90U25hcHNob3Q/OiBTbG90U25hcHNob3RQYXJhbXM7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcnVuSWQsIHdvcmtmbG93TmFtZSwgcmVxdWVzdElkLCBhdHRlbXB0LCBsaW1pdE1zLCBzbG90U25hcHNob3QgfSA9XG4gICAgYXJncztcbiAgY29uc3QgcnVuTG9nZ2VyID0gcnVudGltZUxvZ2dlci5mb3JSdW4ocnVuSWQsIHdvcmtmbG93TmFtZSk7XG5cbiAgY29uc3QgbWF4UmV0cmllcyA9IGdldFJlcGxheVRpbWVvdXRNYXhSZXRyaWVzKCk7XG4gIGlmIChhdHRlbXB0IDw9IG1heFJldHJpZXMpIHtcbiAgICBydW5Mb2dnZXIud2FybignV29ya2Zsb3cgcmVwbGF5IGV4Y2VlZGVkIHRpbWVvdXQ7IHJldHJ5aW5nIGRlbGl2ZXJ5Jywge1xuICAgICAgdGltZW91dE1zOiBsaW1pdE1zLFxuICAgICAgYXR0ZW1wdCxcbiAgICAgIG1heFJldHJpZXMsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFJlcGxheVRpbWVvdXRSZXRyeUVycm9yKFxuICAgICAgYFdvcmtmbG93IHJlcGxheSBleGNlZWRlZCBtYXhpbXVtIGR1cmF0aW9uICgke2xpbWl0TXMgLyAxMDAwfXMpYFxuICAgICk7XG4gIH1cblxuICBjb25zdCB3b3JsZCA9IGF3YWl0IGdldFdvcmxkKCk7XG5cbiAgY29uc3QgcmVwbGF5VGltZW91dERlc2NyaXB0aW9uID0gZGVzY3JpYmVFcnJvcihcbiAgICB1bmRlZmluZWQsXG4gICAgUlVOX0VSUk9SX0NPREVTLlJFUExBWV9USU1FT1VUXG4gICk7XG4gIHJ1bkxvZ2dlci5lcnJvcihcbiAgICAnV29ya2Zsb3cgcmVwbGF5IGV4Y2VlZGVkIHRpbWVvdXQgYW5kIG1heCByZXRyaWVzIGV4Y2VlZGVkLiBGYWlsaW5nIHRoZSBydW4nLFxuICAgIHtcbiAgICAgIHRpbWVvdXRNczogbGltaXRNcyxcbiAgICAgIGF0dGVtcHQsXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgZXJyb3JDb2RlOiByZXBsYXlUaW1lb3V0RGVzY3JpcHRpb24uZXJyb3JDb2RlLFxuICAgICAgZXJyb3JBdHRyaWJ1dGlvbjogcmVwbGF5VGltZW91dERlc2NyaXB0aW9uLmF0dHJpYnV0aW9uLFxuICAgIH1cbiAgKTtcblxuICBjb25zdCBnZXRFbmNyeXB0aW9uS2V5ID0gbWVtb2l6ZUVuY3J5cHRpb25LZXkod29ybGQsIHJ1bklkKTtcbiAgY29uc3QgdGltZW91dEVyciA9IG5ldyBGYXRhbEVycm9yKFxuICAgIGBXb3JrZmxvdyByZXBsYXkgZXhjZWVkZWQgbWF4aW11bSBkdXJhdGlvbiAoJHtsaW1pdE1zIC8gMTAwMH1zKSBhZnRlciAke2F0dGVtcHR9IGF0dGVtcHRzYFxuICApO1xuICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKFxuICAgIHJ1bklkLFxuICAgIHtcbiAgICAgIGV2ZW50VHlwZTogJ3J1bl9mYWlsZWQnLFxuICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgIGVycm9yOiBhd2FpdCBkZWh5ZHJhdGVSdW5FcnJvcihcbiAgICAgICAgICB0aW1lb3V0RXJyLFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKVxuICAgICAgICApLFxuICAgICAgICBlcnJvckNvZGU6IFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IHJlcXVlc3RJZCwgLi4uc2xvdFNuYXBzaG90IH1cbiAgKTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-hook.d.ts","sourceRoot":"","sources":["../../src/runtime/resume-hook.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,KAAK,IAAI,EAUV,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAGL,KAAK,UAAU,EAGhB,MAAM,qBAAqB,CAAC;AAwJ7B;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,GAAG,EACtC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,OAAO,EAAE,CAAC,EACV,qBAAqB,CAAC,EAAE,UAAU,GACjC,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"resume-hook.d.ts","sourceRoot":"","sources":["../../src/runtime/resume-hook.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,KAAK,IAAI,EAUV,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAGL,KAAK,UAAU,EAGhB,MAAM,qBAAqB,CAAC;AAwJ7B;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,GAAG,EACtC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,OAAO,EAAE,CAAC,EACV,qBAAqB,CAAC,EAAE,UAAU,GACjC,OAAO,CAAC,WAAW,CAAC,CAmBtB;AAkcD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,QAAQ,CAAC,CAqEnB"}
|