@workflow/core 4.3.1 → 4.5.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.
Files changed (49) hide show
  1. package/dist/classify-error.d.ts.map +1 -1
  2. package/dist/classify-error.js +7 -2
  3. package/dist/create-hook.d.ts +39 -0
  4. package/dist/create-hook.d.ts.map +1 -1
  5. package/dist/create-hook.js +1 -1
  6. package/dist/encryption.d.ts +15 -0
  7. package/dist/encryption.d.ts.map +1 -1
  8. package/dist/encryption.js +59 -21
  9. package/dist/global.d.ts +2 -0
  10. package/dist/global.d.ts.map +1 -1
  11. package/dist/global.js +1 -1
  12. package/dist/runtime/helpers.d.ts +12 -2
  13. package/dist/runtime/helpers.d.ts.map +1 -1
  14. package/dist/runtime/helpers.js +9 -7
  15. package/dist/runtime/resume-hook.d.ts.map +1 -1
  16. package/dist/runtime/resume-hook.js +18 -8
  17. package/dist/runtime/run.d.ts +7 -0
  18. package/dist/runtime/run.d.ts.map +1 -1
  19. package/dist/runtime/run.js +14 -4
  20. package/dist/runtime/start.d.ts.map +1 -1
  21. package/dist/runtime/start.js +12 -9
  22. package/dist/runtime/step-handler.d.ts.map +1 -1
  23. package/dist/runtime/step-handler.js +26 -19
  24. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  25. package/dist/runtime/suspension-handler.js +80 -40
  26. package/dist/runtime/wait-until.d.ts +18 -0
  27. package/dist/runtime/wait-until.d.ts.map +1 -0
  28. package/dist/runtime/wait-until.js +42 -0
  29. package/dist/runtime.d.ts +3 -1
  30. package/dist/runtime.d.ts.map +1 -1
  31. package/dist/runtime.js +34 -6
  32. package/dist/serialization.d.ts +49 -4
  33. package/dist/serialization.d.ts.map +1 -1
  34. package/dist/serialization.js +241 -16
  35. package/dist/util.d.ts +0 -5
  36. package/dist/util.d.ts.map +1 -1
  37. package/dist/util.js +1 -15
  38. package/dist/version.d.ts +1 -1
  39. package/dist/version.js +2 -2
  40. package/dist/workflow/hook.d.ts.map +1 -1
  41. package/dist/workflow/hook.js +93 -4
  42. package/docs/api-reference/create-hook.mdx +32 -0
  43. package/docs/api-reference/create-webhook.mdx +1 -0
  44. package/docs/foundations/hooks.mdx +29 -0
  45. package/docs/foundations/streaming.mdx +7 -1
  46. package/docs/foundations/versioning.mdx +1 -1
  47. package/docs/how-it-works/encryption.mdx +2 -2
  48. package/docs/how-it-works/event-sourcing.mdx +2 -2
  49. package/package.json +9 -9
@@ -1,4 +1,3 @@
1
- import { waitUntil } from '@vercel/functions';
2
1
  import { EntityConflictError, ThrottleError, WorkflowRuntimeError, WorkflowWorldError, } from '@workflow/errors';
3
2
  import { isLegacySpecVersion, SPEC_VERSION_SUPPORTS_CBOR_QUEUE_TRANSPORT, SPEC_VERSION_SUPPORTS_EVENT_SOURCING, } from '@workflow/world';
4
3
  import { monotonicFactory } from 'ulid';
@@ -7,10 +6,10 @@ import { runtimeLogger } from '../logger.js';
7
6
  import { dehydrateWorkflowArguments } from '../serialization.js';
8
7
  import * as Attribute from '../telemetry/semantic-conventions.js';
9
8
  import { serializeTraceCarrier, trace } from '../telemetry.js';
10
- import { waitedUntil } from '../util.js';
11
9
  import { version as workflowCoreVersion } from '../version.js';
12
10
  import { getWorkflowQueueName } from './helpers.js';
13
11
  import { Run } from './run.js';
12
+ import { safeWaitUntil, waitedUntil } from './wait-until.js';
14
13
  import { getWorld } from './world.js';
15
14
  /** ULID generator for client-side runId generation */
16
15
  const ulid = monotonicFactory();
@@ -152,12 +151,16 @@ export async function start(workflow, argsOrOptions, options) {
152
151
  throw new WorkflowRuntimeError(`Server returned different runId than requested: expected ${runId}, got ${result.run.runId}`);
153
152
  }
154
153
  }
155
- waitUntil(Promise.all(ops).catch((err) => {
156
- // Ignore expected client disconnect errors (e.g., browser refresh during streaming)
157
- const isAbortError = err?.name === 'AbortError' || err?.name === 'ResponseAborted';
158
- if (!isAbortError)
159
- throw err;
160
- }));
154
+ // These argument-stream ops are flushed in the background; the promise
155
+ // handed to waitUntil must never reject (an unconsumed waitUntil
156
+ // rejection crashes the process as unhandledRejection), so unexpected
157
+ // failures are logged instead.
158
+ safeWaitUntil(Promise.all(ops), (err) => {
159
+ runtimeLogger.warn('Background flush of workflow argument streams failed', {
160
+ workflowRunId: runId,
161
+ error: err instanceof Error ? err.message : String(err),
162
+ });
163
+ });
161
164
  span?.setAttributes({
162
165
  ...Attribute.WorkflowRunId(runId),
163
166
  ...Attribute.DeploymentId(deploymentId),
@@ -183,4 +186,4 @@ function isRetryableStartError(err) {
183
186
  return true;
184
187
  return false;
185
188
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9zdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsMENBQTBDLEVBQzFDLG9DQUFvQyxHQUNyQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssU0FBUyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLElBQUksbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxzREFBc0Q7QUFDdEQsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztBQXlGaEMsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQ3pCLFFBQTZELEVBQzdELGFBQW9DLEVB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SSxHQUFHO1FBQy9ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2FpdFVudGlsIH0gZnJvbSAnQHZlcmNlbC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtcbiAgRW50aXR5Q29uZmxpY3RFcnJvcixcbiAgVGhyb3R0bGVFcnJvcixcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IsXG4gIFdvcmtmbG93V29ybGRFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93SW52b2tlUGF5bG9hZCwgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHtcbiAgaXNMZWdhY3lTcGVjVmVyc2lvbixcbiAgU1BFQ19WRVJTSU9OX1NVUFBPUlRTX0NCT1JfUVVFVUVfVFJBTlNQT1JULFxuICBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfRVZFTlRfU09VUkNJTkcsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBtb25vdG9uaWNGYWN0b3J5IH0gZnJvbSAndWxpZCc7XG5pbXBvcnQgeyBpbXBvcnRLZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7IHJ1bnRpbWVMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemFibGUgfSBmcm9tICcuLi9zY2hlbWFzLmpzJztcbmltcG9ydCB7IGRlaHlkcmF0ZVdvcmtmbG93QXJndW1lbnRzIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBBdHRyaWJ1dGUgZnJvbSAnLi4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVRyYWNlQ2FycmllciwgdHJhY2UgfSBmcm9tICcuLi90ZWxlbWV0cnkuanMnO1xuaW1wb3J0IHsgd2FpdGVkVW50aWwgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7IHZlcnNpb24gYXMgd29ya2Zsb3dDb3JlVmVyc2lvbiB9IGZyb20gJy4uL3ZlcnNpb24uanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dRdWV1ZU5hbWUgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgUnVuIH0gZnJvbSAnLi9ydW4uanMnO1xuaW1wb3J0IHsgZ2V0V29ybGQgfSBmcm9tICcuL3dvcmxkLmpzJztcblxuLyoqIFVMSUQgZ2VuZXJhdG9yIGZvciBjbGllbnQtc2lkZSBydW5JZCBnZW5lcmF0aW9uICovXG5jb25zdCB1bGlkID0gbW9ub3RvbmljRmFjdG9yeSgpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0T3B0aW9uc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIHdvcmxkIHRvIHVzZSBmb3IgdGhlIHdvcmtmbG93IHJ1biBjcmVhdGlvbixcbiAgICogYnkgZGVmYXVsdCB0aGUgd29ybGQgaXMgaW5mZXJyZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKi9cbiAgd29ybGQ/OiBXb3JsZDtcblxuICAvKipcbiAgICogVGhlIHNwZWMgdmVyc2lvbiB0byB1c2UgZm9yIHRoZSB3b3JrZmxvdyBydW4uIERlZmF1bHRzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbi5cbiAgICovXG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0T3B0aW9uc1dpdGhEZXBsb3ltZW50SWQgZXh0ZW5kcyBTdGFydE9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXBsb3ltZW50IElEIHRvIHVzZSBmb3IgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyBpcyBhdXRvbWF0aWNhbGx5IGluZmVycmVkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIHdoZW4gZGVwbG95aW5nIHRvIFZlcmNlbC5cbiAgICpcbiAgICogU2V0IHRvIGAnbGF0ZXN0J2AgdG8gYXV0b21hdGljYWxseSByZXNvbHZlIHRoZSBtb3N0IHJlY2VudCBkZXBsb3ltZW50XG4gICAqIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCAoc2FtZSBwcm9kdWN0aW9uIHRhcmdldCBvciBnaXQgYnJhbmNoKS5cbiAgICogVGhpcyBpcyBjdXJyZW50bHkgYSBWZXJjZWwtc3BlY2lmaWMgZmVhdHVyZS5cbiAgICpcbiAgICogKipOb3RlOioqIFdoZW4gYGRlcGxveW1lbnRJZGAgaXMgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCBhbmQgcmV0dXJuIHR5cGVzIGJlY29tZSBgdW5rbm93bmBcbiAgICogc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoZSB0eXBlcyB3aWxsIGJlIGNvbnNpc3RlbnQgYWNyb3NzIGRlcGxveW1lbnRzLlxuICAgKi9cbiAgZGVwbG95bWVudElkOiAnbGF0ZXN0JyB8IChzdHJpbmcgJiB7fSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRPcHRpb25zV2l0aG91dERlcGxveW1lbnRJZCBleHRlbmRzIFN0YXJ0T3B0aW9uc0Jhc2Uge1xuICBkZXBsb3ltZW50SWQ/OiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgYSB3b3JrZmxvdyBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIFN0YXJ0T3B0aW9ucyA9XG4gIHwgU3RhcnRPcHRpb25zV2l0aERlcGxveW1lbnRJZFxuICB8IFN0YXJ0T3B0aW9uc1dpdGhvdXREZXBsb3ltZW50SWQ7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBpbXBvcnRlZCB3b3JrZmxvdyBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dGdW5jdGlvbjxUQXJncyBleHRlbmRzIHVua25vd25bXSwgVFJlc3VsdD4gPSAoXG4gIC4uLmFyZ3M6IFRBcmdzXG4pID0+IFByb21pc2U8VFJlc3VsdD47XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZ2VuZXJhdGVkIG1ldGFkYXRhIG9mIGEgd29ya2Zsb3cgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93TWV0YWRhdGEgPSB7IHdvcmtmbG93SWQ6IHN0cmluZyB9O1xuXG4vKipcbiAqIFN0YXJ0cyBhIHdvcmtmbG93IHJ1bi5cbiAqXG4gKiBAcGFyYW0gd29ya2Zsb3cgLSBUaGUgaW1wb3J0ZWQgd29ya2Zsb3cgZnVuY3Rpb24gdG8gc3RhcnQuXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgd29ya2Zsb3cgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSB3b3JrZmxvdyBydW4gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIFRoZSB1bmlxdWUgcnVuIElEIGZvciB0aGUgbmV3bHkgc3RhcnRlZCB3b3JrZmxvdyBpbnZvY2F0aW9uLlxuICovXG4vLyBPdmVybG9hZHMgd2l0aCBkZXBsb3ltZW50SWQgLSBhcmdzIGFuZCByZXR1cm4gdHlwZSBiZWNvbWUgdW5rbm93blxuLy8gVXNlcyBnZW5lcmljcyBzbyB0eXBlZCB3b3JrZmxvd3MgYXJlIGFzc2lnbmFibGUgKGF2b2lkcyBjb250cmF2YXJpYW5jZSBpc3N1ZXMpLFxuLy8gYnV0IHRoZSByZXR1cm4gdHlwZSBhbmQgYXJncyBhcmUgc3RpbGwgdW5rbm93biBzaW5jZSB0aGUgZGVwbG95ZWQgdmVyc2lvbiBtYXkgZGlmZmVyLlxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0PFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248VEFyZ3MsIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgYXJnczogdW5rbm93bltdLFxuICBvcHRpb25zOiBTdGFydE9wdGlvbnNXaXRoRGVwbG95bWVudElkXG4pOiBQcm9taXNlPFJ1bjx1bmtub3duPj47XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydDxUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248W10sIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgb3B0aW9uczogU3RhcnRPcHRpb25zV2l0aERlcGxveW1lbnRJZFxuKTogUHJvbWlzZTxSdW48dW5rbm93bj4+O1xuXG4vLyBPdmVybG9hZHMgd2l0aG91dCBkZXBsb3ltZW50SWQgLSBwcmVzZXJ2ZSB0eXBlIGluZmVyZW5jZVxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0PFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248VEFyZ3MsIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgYXJnczogVEFyZ3MsXG4gIG9wdGlvbnM/OiBTdGFydE9wdGlvbnNXaXRob3V0RGVwbG95bWVudElkXG4pOiBQcm9taXNlPFJ1bjxUUmVzdWx0Pj47XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydDxUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248W10sIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgb3B0aW9ucz86IFN0YXJ0T3B0aW9uc1dpdGhvdXREZXBsb3ltZW50SWRcbik6IFByb21pc2U8UnVuPFRSZXN1bHQ+PjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0PFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248VEFyZ3MsIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgYXJnc09yT3B0aW9ucz86IFRBcmdzIHwgU3RhcnRPcHRpb25zLFxuICBvcHRpb25zPzogU3RhcnRPcHRpb25zXG4pIHtcbiAgcmV0dXJuIGF3YWl0IHdhaXRlZFVudGlsKCgpID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgZmllbGQgaXMgYWRkZWQgYnkgb3VyIGNsaWVudCB0cmFuc2Zvcm1cbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSB3b3JrZmxvdz8ud29ya2Zsb3dJZDtcblxuICAgIGlmICghd29ya2Zsb3dOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgIGAnc3RhcnQnIHJlY2VpdmVkIGFuIGludmFsaWQgd29ya2Zsb3cgZnVuY3Rpb24uIEVuc3VyZSB0aGUgV29ya2Zsb3cgU0RLIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCB0aGUgZnVuY3Rpb24gaW5jbHVkZXMgYSAndXNlIHdvcmtmbG93JyBkaXJlY3RpdmUuYCxcbiAgICAgICAgeyBzbHVnOiAnc3RhcnQtaW52YWxpZC13b3JrZmxvdy1mdW5jdGlvbicgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2UoYHdvcmtmbG93LnN0YXJ0ICR7d29ya2Zsb3dOYW1lfWAsIGFzeW5jIChzcGFuKSA9PiB7XG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLldvcmtmbG93TmFtZSh3b3JrZmxvd05hbWUpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dPcGVyYXRpb24oJ3N0YXJ0JyksXG4gICAgICB9KTtcblxuICAgICAgbGV0IGFyZ3M6IFNlcmlhbGl6YWJsZVtdID0gW107XG4gICAgICBsZXQgb3B0czogU3RhcnRPcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NPck9wdGlvbnMpKSB7XG4gICAgICAgIGFyZ3MgPSBhcmdzT3JPcHRpb25zIGFzIFNlcmlhbGl6YWJsZVtdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnc09yT3B0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb3B0cyA9IGFyZ3NPck9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dBcmd1bWVudHNDb3VudChhcmdzLmxlbmd0aCksXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd29ybGQgPSBvcHRzPy53b3JsZCA/PyBnZXRXb3JsZCgpO1xuICAgICAgbGV0IGRlcGxveW1lbnRJZCA9IG9wdHMuZGVwbG95bWVudElkID8/IChhd2FpdCB3b3JsZC5nZXREZXBsb3ltZW50SWQoKSk7XG5cbiAgICAgIC8vIFdoZW4gJ2xhdGVzdCcgaXMgcmVxdWVzdGVkLCByZXNvbHZlIHRoZSBhY3R1YWwgbGF0ZXN0IGRlcGxveW1lbnQgSURcbiAgICAgIC8vIGZvciB0aGUgY3VycmVudCBkZXBsb3ltZW50J3MgZW52aXJvbm1lbnQgKHNhbWUgcHJvZHVjdGlvbiB0YXJnZXQgb3JcbiAgICAgIC8vIHNhbWUgZ2l0IGJyYW5jaCBmb3IgcHJldmlldyBkZXBsb3ltZW50cykuXG4gICAgICBpZiAoZGVwbG95bWVudElkID09PSAnbGF0ZXN0Jykge1xuICAgICAgICBpZiAoIXdvcmxkLnJlc29sdmVMYXRlc3REZXBsb3ltZW50SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICBcImRlcGxveW1lbnRJZCAnbGF0ZXN0JyByZXF1aXJlcyBhIFdvcmxkIHRoYXQgaW1wbGVtZW50cyByZXNvbHZlTGF0ZXN0RGVwbG95bWVudElkKClcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZGVwbG95bWVudElkID0gYXdhaXQgd29ybGQucmVzb2x2ZUxhdGVzdERlcGxveW1lbnRJZCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gICAgICAvLyBHZW5lcmF0ZSBydW5JZCBjbGllbnQtc2lkZSBzbyB3ZSBoYXZlIGl0IGJlZm9yZSBzZXJpYWxpemF0aW9uXG4gICAgICAvLyAocmVxdWlyZWQgZm9yIGZ1dHVyZSBFMkUgZW5jcnlwdGlvbiB3aGVyZSBydW5JZCBpcyBwYXJ0IG9mIHRoZSBlbmNyeXB0aW9uIGNvbnRleHQpXG4gICAgICBjb25zdCBydW5JZCA9IGB3cnVuXyR7dWxpZCgpfWA7XG5cbiAgICAgIC8vIFNlcmlhbGl6ZSBjdXJyZW50IHRyYWNlIGNvbnRleHQgdG8gcHJvcGFnYXRlIGFjcm9zcyBxdWV1ZSBib3VuZGFyeVxuICAgICAgY29uc3QgdHJhY2VDYXJyaWVyID0gYXdhaXQgc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk7XG5cbiAgICAgIC8vIFVzZSB3b3JsZC1kZWNsYXJlZCBzcGVjVmVyc2lvbiB3aGVuIGF2YWlsYWJsZSAob3VyIHdvcmxkcyBzZXQgdGhpcyksXG4gICAgICAvLyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIHRoZSBzYWZlIGJhc2VsaW5lIHRoYXQgY29tbXVuaXR5IHdvcmxkcyBoYW5kbGUuXG4gICAgICAvLyBDb21tdW5pdHkgd29ybGRzIGJ1aWx0IGFnYWluc3Qgb2xkZXIgQHdvcmtmbG93L3dvcmxkIHJlamVjdCBydW5zIHdpdGhcbiAgICAgIC8vIHNwZWNWZXJzaW9uID4gdGhlaXIgU1BFQ19WRVJTSU9OX0NVUlJFTlQgdmlhIHJlcXVpcmVzTmV3ZXJXb3JsZCgpLlxuICAgICAgY29uc3Qgc3BlY1ZlcnNpb24gPVxuICAgICAgICBvcHRzLnNwZWNWZXJzaW9uID8/XG4gICAgICAgIHdvcmxkLnNwZWNWZXJzaW9uID8/XG4gICAgICAgIFNQRUNfVkVSU0lPTl9TVVBQT1JUU19FVkVOVF9TT1VSQ0lORztcbiAgICAgIGNvbnN0IHYxQ29tcGF0ID0gaXNMZWdhY3lTcGVjVmVyc2lvbihzcGVjVmVyc2lvbik7XG5cbiAgICAgIC8vIFJlc29sdmUgZW5jcnlwdGlvbiBrZXkgZm9yIHRoZSBuZXcgcnVuLiBUaGUgcnVuSWQgaGFzIGFscmVhZHkgYmVlblxuICAgICAgLy8gZ2VuZXJhdGVkIGFib3ZlIChjbGllbnQtZ2VuZXJhdGVkIFVMSUQpIGFuZCB3aWxsIGJlIHVzZWQgZm9yIGJvdGhcbiAgICAgIC8vIGtleSBkZXJpdmF0aW9uIGFuZCB0aGUgcnVuX2NyZWF0ZWQgZXZlbnQuIFRoZSBXb3JsZCBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gdXNlcyB0aGUgcnVuSWQgZm9yIHBlci1ydW4gSEtERiBrZXkgZGVyaXZhdGlvbi4gV2UgcGFzcyB0aGUgcmVzb2x2ZWRcbiAgICAgIC8vIGRlcGxveW1lbnRJZCAobm90IGp1c3QgdGhlIHJhdyBvcHRzKSBzbyB0aGUgV29ybGQgY2FuIHVzZSBpdCBmb3JcbiAgICAgIC8vIGtleSByZXNvbHV0aW9uIGV2ZW4gd2hlbiBkZXBsb3ltZW50SWQgd2FzIGluZmVycmVkIGZyb20gdGhlIGVudmlyb25tZW50XG4gICAgICAvLyByYXRoZXIgdGhhbiBleHBsaWNpdGx5IHByb3ZpZGVkIGluIG9wdHMgKGUuZy4sIGluIGUyZSB0ZXN0IHJ1bm5lcnMpLlxuICAgICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bklkLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIGRlcGxveW1lbnRJZCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGlvbktleSA9IHJhd0tleSA/IGF3YWl0IGltcG9ydEtleShyYXdLZXkpIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBDcmVhdGUgcnVuIHZpYSBydW5fY3JlYXRlZCBldmVudCAoZXZlbnQtc291cmNlZCBhcmNoaXRlY3R1cmUpXG4gICAgICAvLyBQYXNzIGNsaWVudC1nZW5lcmF0ZWQgcnVuSWQgLSBzZXJ2ZXIgd2lsbCBhY2NlcHQgYW5kIHVzZSBpdFxuICAgICAgY29uc3Qgd29ya2Zsb3dBcmd1bWVudHMgPSBhd2FpdCBkZWh5ZHJhdGVXb3JrZmxvd0FyZ3VtZW50cyhcbiAgICAgICAgYXJncyxcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIG9wcyxcbiAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgdjFDb21wYXRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIHRyYWNlQ2FycmllcixcbiAgICAgICAgd29ya2Zsb3dDb3JlVmVyc2lvbixcbiAgICAgICAgZmVhdHVyZXM6IHsgZW5jcnlwdGlvbjogISFlbmNyeXB0aW9uS2V5IH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBDYWxsIGV2ZW50cy5jcmVhdGUgKHJ1bl9jcmVhdGVkKSBhbmQgcXVldWUgaW4gcGFyYWxsZWwuXG4gICAgICAvLyBJZiBldmVudHMuY3JlYXRlIGZhaWxzIHdpdGggNDI5LzV4eCwgdGhlIHJ1biB3YXMgc3RpbGwgYWNjZXB0ZWRcbiAgICAgIC8vIHZpYSB0aGUgcXVldWUgYW5kIGNyZWF0aW9uIHdpbGwgYmUgcmUtdHJpZWQgYXN5bmMgYnkgdGhlIHJ1bnRpbWUuXG4gICAgICBjb25zdCBbcnVuQ3JlYXRlZFJlc3VsdCwgcXVldWVSZXN1bHRdID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgd29ybGQuZXZlbnRzLmNyZWF0ZShcbiAgICAgICAgICBydW5JZCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBldmVudFR5cGU6ICdydW5fY3JlYXRlZCcsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbixcbiAgICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgICBkZXBsb3ltZW50SWQ6IGRlcGxveW1lbnRJZCxcbiAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lOiB3b3JrZmxvd05hbWUsXG4gICAgICAgICAgICAgIGlucHV0OiB3b3JrZmxvd0FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHYxQ29tcGF0IH1cbiAgICAgICAgKSxcbiAgICAgICAgd29ybGQucXVldWUoXG4gICAgICAgICAgZ2V0V29ya2Zsb3dRdWV1ZU5hbWUod29ya2Zsb3dOYW1lKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBydW5JZCxcbiAgICAgICAgICAgIHRyYWNlQ2FycmllcixcbiAgICAgICAgICAgIC4uLihzcGVjVmVyc2lvbiA+PSBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ0JPUl9RVUVVRV9UUkFOU1BPUlRcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBydW5JbnB1dDoge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dDogd29ya2Zsb3dBcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgICAgICAgICBzcGVjVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICB9IHNhdGlzZmllcyBXb3JrZmxvd0ludm9rZVBheWxvYWQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVwbG95bWVudElkLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb24sXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgXSk7XG5cbiAgICAgIC8vIFF1ZXVlIGZhaWx1cmUgaXMgYWx3YXlzIGZhdGFsIOKAlCB0aGUgcnVuIHdhcyBub3QgZW5xdWV1ZWRcbiAgICAgIGlmIChxdWV1ZVJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgICAgdGhyb3cgcXVldWVSZXN1bHQucmVhc29uO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZXZlbnRzLmNyZWF0ZSByZXN1bHRcbiAgICAgIGxldCByZXNpbGllbnRTdGFydCA9IGZhbHNlO1xuICAgICAgaWYgKHJ1bkNyZWF0ZWRSZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IHJ1bkNyZWF0ZWRSZXN1bHQucmVhc29uO1xuICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgICAgLy8gNDA5OiBUaGUgcnVuIGFscmVhZHkgZXhpc3RzLiBUaGlzIGNhbiBoYXBwZW4gaW4gZXh0cmVtZSBjYXNlcyB3aGVyZVxuICAgICAgICAgIC8vIHRoZSBydW4gY3JlYXRpb24gY2FsbCBnZXRzIGEgY29sZCBzdGFydCBvciBvdGhlciBzbG93ZG93biwgYW5kIHRoZSBxdWV1ZVxuICAgICAgICAgIC8vICsgcnVuX3N0YXJ0ZWQgY2FsbCBjb21wbGV0ZXMgZmFzdGVyLiBXZSBleHBlY3QgdGhpcyB0byBiZSA8PTElIG9mIGNhc2VzLlxuICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIHNhZmVseSByZXR1cm4uXG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZXRyeWFibGVTdGFydEVycm9yKGVycikpIHtcbiAgICAgICAgICAvLyA0MjkgKFRocm90dGxlRXJyb3IpIGFuZCA1eHggKFdvcmtmbG93V29ybGRFcnJvciB3aXRoIHN0YXR1cyA+PSA1MDApXG4gICAgICAgICAgLy8gYXJlIHJldHJ5YWJsZSDigJQgdGhlIHJ1biB3YXMgYWNjZXB0ZWQgdmlhIHRoZSBxdWV1ZSBhbmQgY3JlYXRpb25cbiAgICAgICAgICAvLyB3aWxsIGJlIHJlLXRyaWVkIGJ5IHRoZSBydW50aW1lIHdoZW4gaXQgY2FsbHMgcnVuX3N0YXJ0ZWQuXG4gICAgICAgICAgcmVzaWxpZW50U3RhcnQgPSB0cnVlO1xuICAgICAgICAgIHJ1bnRpbWVMb2dnZXIud2FybihcbiAgICAgICAgICAgICdSdW4gY3JlYXRpb24gZXZlbnQgZmFpbGVkLCBidXQgdGhlIHJ1biB3YXMgYWNjZXB0ZWQgdmlhIHRoZSBxdWV1ZS4gJyArXG4gICAgICAgICAgICAgICdUaGUgcnVuX2NyZWF0ZWQgZXZlbnQgd2lsbCBiZSByZS10cmllZCBhc3luYyBieSB0aGUgcnVudGltZS4nLFxuICAgICAgICAgICAgeyB3b3JrZmxvd1J1bklkOiBydW5JZCwgZXJyb3I6IGVyci5tZXNzYWdlIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcnVuQ3JlYXRlZFJlc3VsdC52YWx1ZTtcbiAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHJ1biB3YXMgY3JlYXRlZFxuICAgICAgICBpZiAoIXJlc3VsdC5ydW4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICBcIk1pc3NpbmcgJ3J1bicgaW4gc2VydmVyIHJlc3BvbnNlIGZvciAncnVuX2NyZWF0ZWQnIGV2ZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmVyaWZ5IHNlcnZlciBhY2NlcHRlZCBvdXIgcnVuSWRcbiAgICAgICAgaWYgKCF2MUNvbXBhdCAmJiByZXN1bHQucnVuLnJ1bklkICE9PSBydW5JZCkge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIGBTZXJ2ZXIgcmV0dXJuZWQgZGlmZmVyZW50IHJ1bklkIHRoYW4gcmVxdWVzdGVkOiBleHBlY3RlZCAke3J1bklkfSwgZ290ICR7cmVzdWx0LnJ1bi5ydW5JZH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3YWl0VW50aWwoXG4gICAgICAgIFByb21pc2UuYWxsKG9wcykuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIC8vIElnbm9yZSBleHBlY3RlZCBjbGllbnQgZGlzY29ubmVjdCBlcnJvcnMgKGUuZy4sIGJyb3dzZXIgcmVmcmVzaCBkdXJpbmcgc3RyZWFtaW5nKVxuICAgICAgICAgIGNvbnN0IGlzQWJvcnRFcnJvciA9XG4gICAgICAgICAgICBlcnI/Lm5hbWUgPT09ICdBYm9ydEVycm9yJyB8fCBlcnI/Lm5hbWUgPT09ICdSZXNwb25zZUFib3J0ZWQnO1xuICAgICAgICAgIGlmICghaXNBYm9ydEVycm9yKSB0aHJvdyBlcnI7XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLldvcmtmbG93UnVuSWQocnVuSWQpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuRGVwbG95bWVudElkKGRlcGxveW1lbnRJZCksXG4gICAgICAgIC4uLihydW5DcmVhdGVkUmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiZcbiAgICAgICAgcnVuQ3JlYXRlZFJlc3VsdC52YWx1ZS5ydW5cbiAgICAgICAgICA/IEF0dHJpYnV0ZS5Xb3JrZmxvd1J1blN0YXR1cyhydW5DcmVhdGVkUmVzdWx0LnZhbHVlLnJ1bi5zdGF0dXMpXG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBSdW48VFJlc3VsdD4ocnVuSWQsIHsgcmVzaWxpZW50U3RhcnQgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBlcnJvciBmcm9tIGV2ZW50cy5jcmVhdGUgKHJ1bl9jcmVhdGVkKSBpcyByZXRyeWFibGUsXG4gKiBtZWFuaW5nIHRoZSBxdWV1ZSBjYW4gcmUtdHJ5IGNyZWF0aW9uIGxhdGVyIHZpYSB0aGUgcnVuX3N0YXJ0ZWQgcGF0aC5cbiAqIC0gVGhyb3R0bGVFcnJvciAoNDI5KTogcmF0ZSBsaW1pdGVkLCB3aWxsIHN1Y2NlZWQgbGF0ZXJcbiAqIC0gV29ya2Zsb3dXb3JsZEVycm9yIHdpdGggc3RhdHVzID49IDUwMDogc2VydmVyIGVycm9yLCB3aWxsIHN1Y2NlZWQgbGF0ZXJcbiAqL1xuZnVuY3Rpb24gaXNSZXRyeWFibGVTdGFydEVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoVGhyb3R0bGVFcnJvci5pcyhlcnIpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdvcmtmbG93V29ybGRFcnJvci5pcyhlcnIpICYmIGVyci5zdGF0dXMgJiYgZXJyLnN0YXR1cyA+PSA1MDApXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9zdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUNMLG1CQUFtQixFQUNuQiwwQ0FBMEMsRUFDMUMsb0NBQW9DLEdBQ3JDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxTQUFTLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLElBQUksbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXRDLHNEQUFzRDtBQUN0RCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0FBeUZoQyxNQUFNLENBQUMsS0FBSyxVQUFVLEtBQUssQ0FDekIsUUFBNkQsRUFDN0QsYUFBb0MsRUFDcEMsT0FBc0I7SUFFdEIsT0FBTyxNQUFNLFdBQVcs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LEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHO1FBQy9ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW50aXR5Q29uZmxpY3RFcnJvcixcbiAgVGhyb3R0bGVFcnJvcixcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IsXG4gIFdvcmtmbG93V29ybGRFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93SW52b2tlUGF5bG9hZCwgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHtcbiAgaXNMZWdhY3lTcGVjVmVyc2lvbixcbiAgU1BFQ19WRVJTSU9OX1NVUFBPUlRTX0NCT1JfUVVFVUVfVFJBTlNQT1JULFxuICBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfRVZFTlRfU09VUkNJTkcsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBtb25vdG9uaWNGYWN0b3J5IH0gZnJvbSAndWxpZCc7XG5pbXBvcnQgeyBpbXBvcnRLZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7IHJ1bnRpbWVMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemFibGUgfSBmcm9tICcuLi9zY2hlbWFzLmpzJztcbmltcG9ydCB7IGRlaHlkcmF0ZVdvcmtmbG93QXJndW1lbnRzIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBBdHRyaWJ1dGUgZnJvbSAnLi4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVRyYWNlQ2FycmllciwgdHJhY2UgfSBmcm9tICcuLi90ZWxlbWV0cnkuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiBhcyB3b3JrZmxvd0NvcmVWZXJzaW9uIH0gZnJvbSAnLi4vdmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1F1ZXVlTmFtZSB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBSdW4gfSBmcm9tICcuL3J1bi5qcyc7XG5pbXBvcnQgeyBzYWZlV2FpdFVudGlsLCB3YWl0ZWRVbnRpbCB9IGZyb20gJy4vd2FpdC11bnRpbC5qcyc7XG5pbXBvcnQgeyBnZXRXb3JsZCB9IGZyb20gJy4vd29ybGQuanMnO1xuXG4vKiogVUxJRCBnZW5lcmF0b3IgZm9yIGNsaWVudC1zaWRlIHJ1bklkIGdlbmVyYXRpb24gKi9cbmNvbnN0IHVsaWQgPSBtb25vdG9uaWNGYWN0b3J5KCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRPcHRpb25zQmFzZSB7XG4gIC8qKlxuICAgKiBUaGUgd29ybGQgdG8gdXNlIGZvciB0aGUgd29ya2Zsb3cgcnVuIGNyZWF0aW9uLFxuICAgKiBieSBkZWZhdWx0IHRoZSB3b3JsZCBpcyBpbmZlcnJlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqL1xuICB3b3JsZD86IFdvcmxkO1xuXG4gIC8qKlxuICAgKiBUaGUgc3BlYyB2ZXJzaW9uIHRvIHVzZSBmb3IgdGhlIHdvcmtmbG93IHJ1bi4gRGVmYXVsdHMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLlxuICAgKi9cbiAgc3BlY1ZlcnNpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRPcHRpb25zV2l0aERlcGxveW1lbnRJZCBleHRlbmRzIFN0YXJ0T3B0aW9uc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIGRlcGxveW1lbnQgSUQgdG8gdXNlIGZvciB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogd2hlbiBkZXBsb3lpbmcgdG8gVmVyY2VsLlxuICAgKlxuICAgKiBTZXQgdG8gYCdsYXRlc3QnYCB0byBhdXRvbWF0aWNhbGx5IHJlc29sdmUgdGhlIG1vc3QgcmVjZW50IGRlcGxveW1lbnRcbiAgICogZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50IChzYW1lIHByb2R1Y3Rpb24gdGFyZ2V0IG9yIGdpdCBicmFuY2gpLlxuICAgKiBUaGlzIGlzIGN1cnJlbnRseSBhIFZlcmNlbC1zcGVjaWZpYyBmZWF0dXJlLlxuICAgKlxuICAgKiAqKk5vdGU6KiogV2hlbiBgZGVwbG95bWVudElkYCBpcyBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4gdHlwZXMgYmVjb21lIGB1bmtub3duYFxuICAgKiBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhlIHR5cGVzIHdpbGwgYmUgY29uc2lzdGVudCBhY3Jvc3MgZGVwbG95bWVudHMuXG4gICAqL1xuICBkZXBsb3ltZW50SWQ6ICdsYXRlc3QnIHwgKHN0cmluZyAmIHt9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydE9wdGlvbnNXaXRob3V0RGVwbG95bWVudElkIGV4dGVuZHMgU3RhcnRPcHRpb25zQmFzZSB7XG4gIGRlcGxveW1lbnRJZD86IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhcnRPcHRpb25zID1cbiAgfCBTdGFydE9wdGlvbnNXaXRoRGVwbG95bWVudElkXG4gIHwgU3RhcnRPcHRpb25zV2l0aG91dERlcGxveW1lbnRJZDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGltcG9ydGVkIHdvcmtmbG93IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZmxvd0Z1bmN0aW9uPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PiA9IChcbiAgLi4uYXJnczogVEFyZ3NcbikgPT4gUHJvbWlzZTxUUmVzdWx0PjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBnZW5lcmF0ZWQgbWV0YWRhdGEgb2YgYSB3b3JrZmxvdyBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dNZXRhZGF0YSA9IHsgd29ya2Zsb3dJZDogc3RyaW5nIH07XG5cbi8qKlxuICogU3RhcnRzIGEgd29ya2Zsb3cgcnVuLlxuICpcbiAqIEBwYXJhbSB3b3JrZmxvdyAtIFRoZSBpbXBvcnRlZCB3b3JrZmxvdyBmdW5jdGlvbiB0byBzdGFydC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSB3b3JrZmxvdyAob3B0aW9uYWwpLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHdvcmtmbG93IHJ1biAob3B0aW9uYWwpLlxuICogQHJldHVybnMgVGhlIHVuaXF1ZSBydW4gSUQgZm9yIHRoZSBuZXdseSBzdGFydGVkIHdvcmtmbG93IGludm9jYXRpb24uXG4gKi9cbi8vIE92ZXJsb2FkcyB3aXRoIGRlcGxveW1lbnRJZCAtIGFyZ3MgYW5kIHJldHVybiB0eXBlIGJlY29tZSB1bmtub3duXG4vLyBVc2VzIGdlbmVyaWNzIHNvIHR5cGVkIHdvcmtmbG93cyBhcmUgYXNzaWduYWJsZSAoYXZvaWRzIGNvbnRyYXZhcmlhbmNlIGlzc3VlcyksXG4vLyBidXQgdGhlIHJldHVybiB0eXBlIGFuZCBhcmdzIGFyZSBzdGlsbCB1bmtub3duIHNpbmNlIHRoZSBkZXBsb3llZCB2ZXJzaW9uIG1heSBkaWZmZXIuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnQ8VEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBhcmdzOiB1bmtub3duW10sXG4gIG9wdGlvbnM6IFN0YXJ0T3B0aW9uc1dpdGhEZXBsb3ltZW50SWRcbik6IFByb21pc2U8UnVuPHVua25vd24+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0PFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxbXSwgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBvcHRpb25zOiBTdGFydE9wdGlvbnNXaXRoRGVwbG95bWVudElkXG4pOiBQcm9taXNlPFJ1bjx1bmtub3duPj47XG5cbi8vIE92ZXJsb2FkcyB3aXRob3V0IGRlcGxveW1lbnRJZCAtIHByZXNlcnZlIHR5cGUgaW5mZXJlbmNlXG5leHBvcnQgZnVuY3Rpb24gc3RhcnQ8VEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBhcmdzOiBUQXJncyxcbiAgb3B0aW9ucz86IFN0YXJ0T3B0aW9uc1dpdGhvdXREZXBsb3ltZW50SWRcbik6IFByb21pc2U8UnVuPFRSZXN1bHQ+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0PFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxbXSwgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBvcHRpb25zPzogU3RhcnRPcHRpb25zV2l0aG91dERlcGxveW1lbnRJZFxuKTogUHJvbWlzZTxSdW48VFJlc3VsdD4+O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnQ8VEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBhcmdzT3JPcHRpb25zPzogVEFyZ3MgfCBTdGFydE9wdGlvbnMsXG4gIG9wdGlvbnM/OiBTdGFydE9wdGlvbnNcbikge1xuICByZXR1cm4gYXdhaXQgd2FpdGVkVW50aWwoKCkgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBmaWVsZCBpcyBhZGRlZCBieSBvdXIgY2xpZW50IHRyYW5zZm9ybVxuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IHdvcmtmbG93Py53b3JrZmxvd0lkO1xuXG4gICAgaWYgKCF3b3JrZmxvd05hbWUpIHtcbiAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgYCdzdGFydCcgcmVjZWl2ZWQgYW4gaW52YWxpZCB3b3JrZmxvdyBmdW5jdGlvbi4gRW5zdXJlIHRoZSBXb3JrZmxvdyBTREsgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIHRoZSBmdW5jdGlvbiBpbmNsdWRlcyBhICd1c2Ugd29ya2Zsb3cnIGRpcmVjdGl2ZS5gLFxuICAgICAgICB7IHNsdWc6ICdzdGFydC1pbnZhbGlkLXdvcmtmbG93LWZ1bmN0aW9uJyB9XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFjZShgd29ya2Zsb3cuc3RhcnQgJHt3b3JrZmxvd05hbWV9YCwgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dOYW1lKHdvcmtmbG93TmFtZSksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd09wZXJhdGlvbignc3RhcnQnKSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgYXJnczogU2VyaWFsaXphYmxlW10gPSBbXTtcbiAgICAgIGxldCBvcHRzOiBTdGFydE9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc09yT3B0aW9ucykpIHtcbiAgICAgICAgYXJncyA9IGFyZ3NPck9wdGlvbnMgYXMgU2VyaWFsaXphYmxlW107XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmdzT3JPcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvcHRzID0gYXJnc09yT3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd0FyZ3VtZW50c0NvdW50KGFyZ3MubGVuZ3RoKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB3b3JsZCA9IG9wdHM/LndvcmxkID8/IGdldFdvcmxkKCk7XG4gICAgICBsZXQgZGVwbG95bWVudElkID0gb3B0cy5kZXBsb3ltZW50SWQgPz8gKGF3YWl0IHdvcmxkLmdldERlcGxveW1lbnRJZCgpKTtcblxuICAgICAgLy8gV2hlbiAnbGF0ZXN0JyBpcyByZXF1ZXN0ZWQsIHJlc29sdmUgdGhlIGFjdHVhbCBsYXRlc3QgZGVwbG95bWVudCBJRFxuICAgICAgLy8gZm9yIHRoZSBjdXJyZW50IGRlcGxveW1lbnQncyBlbnZpcm9ubWVudCAoc2FtZSBwcm9kdWN0aW9uIHRhcmdldCBvclxuICAgICAgLy8gc2FtZSBnaXQgYnJhbmNoIGZvciBwcmV2aWV3IGRlcGxveW1lbnRzKS5cbiAgICAgIGlmIChkZXBsb3ltZW50SWQgPT09ICdsYXRlc3QnKSB7XG4gICAgICAgIGlmICghd29ybGQucmVzb2x2ZUxhdGVzdERlcGxveW1lbnRJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIFwiZGVwbG95bWVudElkICdsYXRlc3QnIHJlcXVpcmVzIGEgV29ybGQgdGhhdCBpbXBsZW1lbnRzIHJlc29sdmVMYXRlc3REZXBsb3ltZW50SWQoKVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBkZXBsb3ltZW50SWQgPSBhd2FpdCB3b3JsZC5yZXNvbHZlTGF0ZXN0RGVwbG95bWVudElkKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgICAgIC8vIEdlbmVyYXRlIHJ1bklkIGNsaWVudC1zaWRlIHNvIHdlIGhhdmUgaXQgYmVmb3JlIHNlcmlhbGl6YXRpb25cbiAgICAgIC8vIChyZXF1aXJlZCBmb3IgZnV0dXJlIEUyRSBlbmNyeXB0aW9uIHdoZXJlIHJ1bklkIGlzIHBhcnQgb2YgdGhlIGVuY3J5cHRpb24gY29udGV4dClcbiAgICAgIGNvbnN0IHJ1bklkID0gYHdydW5fJHt1bGlkKCl9YDtcblxuICAgICAgLy8gU2VyaWFsaXplIGN1cnJlbnQgdHJhY2UgY29udGV4dCB0byBwcm9wYWdhdGUgYWNyb3NzIHF1ZXVlIGJvdW5kYXJ5XG4gICAgICBjb25zdCB0cmFjZUNhcnJpZXIgPSBhd2FpdCBzZXJpYWxpemVUcmFjZUNhcnJpZXIoKTtcblxuICAgICAgLy8gVXNlIHdvcmxkLWRlY2xhcmVkIHNwZWNWZXJzaW9uIHdoZW4gYXZhaWxhYmxlIChvdXIgd29ybGRzIHNldCB0aGlzKSxcbiAgICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdGhlIHNhZmUgYmFzZWxpbmUgdGhhdCBjb21tdW5pdHkgd29ybGRzIGhhbmRsZS5cbiAgICAgIC8vIENvbW11bml0eSB3b3JsZHMgYnVpbHQgYWdhaW5zdCBvbGRlciBAd29ya2Zsb3cvd29ybGQgcmVqZWN0IHJ1bnMgd2l0aFxuICAgICAgLy8gc3BlY1ZlcnNpb24gPiB0aGVpciBTUEVDX1ZFUlNJT05fQ1VSUkVOVCB2aWEgcmVxdWlyZXNOZXdlcldvcmxkKCkuXG4gICAgICBjb25zdCBzcGVjVmVyc2lvbiA9XG4gICAgICAgIG9wdHMuc3BlY1ZlcnNpb24gPz9cbiAgICAgICAgd29ybGQuc3BlY1ZlcnNpb24gPz9cbiAgICAgICAgU1BFQ19WRVJTSU9OX1NVUFBPUlRTX0VWRU5UX1NPVVJDSU5HO1xuICAgICAgY29uc3QgdjFDb21wYXQgPSBpc0xlZ2FjeVNwZWNWZXJzaW9uKHNwZWNWZXJzaW9uKTtcblxuICAgICAgLy8gUmVzb2x2ZSBlbmNyeXB0aW9uIGtleSBmb3IgdGhlIG5ldyBydW4uIFRoZSBydW5JZCBoYXMgYWxyZWFkeSBiZWVuXG4gICAgICAvLyBnZW5lcmF0ZWQgYWJvdmUgKGNsaWVudC1nZW5lcmF0ZWQgVUxJRCkgYW5kIHdpbGwgYmUgdXNlZCBmb3IgYm90aFxuICAgICAgLy8ga2V5IGRlcml2YXRpb24gYW5kIHRoZSBydW5fY3JlYXRlZCBldmVudC4gVGhlIFdvcmxkIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyB1c2VzIHRoZSBydW5JZCBmb3IgcGVyLXJ1biBIS0RGIGtleSBkZXJpdmF0aW9uLiBXZSBwYXNzIHRoZSByZXNvbHZlZFxuICAgICAgLy8gZGVwbG95bWVudElkIChub3QganVzdCB0aGUgcmF3IG9wdHMpIHNvIHRoZSBXb3JsZCBjYW4gdXNlIGl0IGZvclxuICAgICAgLy8ga2V5IHJlc29sdXRpb24gZXZlbiB3aGVuIGRlcGxveW1lbnRJZCB3YXMgaW5mZXJyZWQgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICAgIC8vIHJhdGhlciB0aGFuIGV4cGxpY2l0bHkgcHJvdmlkZWQgaW4gb3B0cyAoZS5nLiwgaW4gZTJlIHRlc3QgcnVubmVycykuXG4gICAgICBjb25zdCByYXdLZXkgPSBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuSWQsIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgZGVwbG95bWVudElkLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcmF3S2V5ID8gYXdhaXQgaW1wb3J0S2V5KHJhd0tleSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIENyZWF0ZSBydW4gdmlhIHJ1bl9jcmVhdGVkIGV2ZW50IChldmVudC1zb3VyY2VkIGFyY2hpdGVjdHVyZSlcbiAgICAgIC8vIFBhc3MgY2xpZW50LWdlbmVyYXRlZCBydW5JZCAtIHNlcnZlciB3aWxsIGFjY2VwdCBhbmQgdXNlIGl0XG4gICAgICBjb25zdCB3b3JrZmxvd0FyZ3VtZW50cyA9IGF3YWl0IGRlaHlkcmF0ZVdvcmtmbG93QXJndW1lbnRzKFxuICAgICAgICBhcmdzLFxuICAgICAgICBydW5JZCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgb3BzLFxuICAgICAgICBnbG9iYWxUaGlzLFxuICAgICAgICB2MUNvbXBhdFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgdHJhY2VDYXJyaWVyLFxuICAgICAgICB3b3JrZmxvd0NvcmVWZXJzaW9uLFxuICAgICAgICBmZWF0dXJlczogeyBlbmNyeXB0aW9uOiAhIWVuY3J5cHRpb25LZXkgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIENhbGwgZXZlbnRzLmNyZWF0ZSAocnVuX2NyZWF0ZWQpIGFuZCBxdWV1ZSBpbiBwYXJhbGxlbC5cbiAgICAgIC8vIElmIGV2ZW50cy5jcmVhdGUgZmFpbHMgd2l0aCA0MjkvNXh4LCB0aGUgcnVuIHdhcyBzdGlsbCBhY2NlcHRlZFxuICAgICAgLy8gdmlhIHRoZSBxdWV1ZSBhbmQgY3JlYXRpb24gd2lsbCBiZSByZS10cmllZCBhc3luYyBieSB0aGUgcnVudGltZS5cbiAgICAgIGNvbnN0IFtydW5DcmVhdGVkUmVzdWx0LCBxdWV1ZVJlc3VsdF0gPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgICB3b3JsZC5ldmVudHMuY3JlYXRlKFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3J1bl9jcmVhdGVkJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIGRlcGxveW1lbnRJZDogZGVwbG95bWVudElkLFxuICAgICAgICAgICAgICB3b3JrZmxvd05hbWU6IHdvcmtmbG93TmFtZSxcbiAgICAgICAgICAgICAgaW5wdXQ6IHdvcmtmbG93QXJndW1lbnRzLFxuICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgdjFDb21wYXQgfVxuICAgICAgICApLFxuICAgICAgICB3b3JsZC5xdWV1ZShcbiAgICAgICAgICBnZXRXb3JrZmxvd1F1ZXVlTmFtZSh3b3JrZmxvd05hbWUpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgICAgdHJhY2VDYXJyaWVyLFxuICAgICAgICAgICAgLi4uKHNwZWNWZXJzaW9uID49IFNQRUNfVkVSU0lPTl9TVVBQT1JUU19DQk9SX1FVRVVFX1RSQU5TUE9SVFxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHJ1bklucHV0OiB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiB3b3JrZmxvd0FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudElkLFxuICAgICAgICAgICAgICAgICAgICB3b3JrZmxvd05hbWUsXG4gICAgICAgICAgICAgICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0gc2F0aXNmaWVzIFdvcmtmbG93SW52b2tlUGF5bG9hZCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXBsb3ltZW50SWQsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbixcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICBdKTtcblxuICAgICAgLy8gUXVldWUgZmFpbHVyZSBpcyBhbHdheXMgZmF0YWwg4oCUIHRoZSBydW4gd2FzIG5vdCBlbnF1ZXVlZFxuICAgICAgaWYgKHF1ZXVlUmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICB0aHJvdyBxdWV1ZVJlc3VsdC5yZWFzb247XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBldmVudHMuY3JlYXRlIHJlc3VsdFxuICAgICAgbGV0IHJlc2lsaWVudFN0YXJ0ID0gZmFsc2U7XG4gICAgICBpZiAocnVuQ3JlYXRlZFJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgICAgY29uc3QgZXJyID0gcnVuQ3JlYXRlZFJlc3VsdC5yZWFzb247XG4gICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgICAvLyA0MDk6IFRoZSBydW4gYWxyZWFkeSBleGlzdHMuIFRoaXMgY2FuIGhhcHBlbiBpbiBleHRyZW1lIGNhc2VzIHdoZXJlXG4gICAgICAgICAgLy8gdGhlIHJ1biBjcmVhdGlvbiBjYWxsIGdldHMgYSBjb2xkIHN0YXJ0IG9yIG90aGVyIHNsb3dkb3duLCBhbmQgdGhlIHF1ZXVlXG4gICAgICAgICAgLy8gKyBydW5fc3RhcnRlZCBjYWxsIGNvbXBsZXRlcyBmYXN0ZXIuIFdlIGV4cGVjdCB0aGlzIHRvIGJlIDw9MSUgb2YgY2FzZXMuXG4gICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gc2FmZWx5IHJldHVybi5cbiAgICAgICAgfSBlbHNlIGlmIChpc1JldHJ5YWJsZVN0YXJ0RXJyb3IoZXJyKSkge1xuICAgICAgICAgIC8vIDQyOSAoVGhyb3R0bGVFcnJvcikgYW5kIDV4eCAoV29ya2Zsb3dXb3JsZEVycm9yIHdpdGggc3RhdHVzID49IDUwMClcbiAgICAgICAgICAvLyBhcmUgcmV0cnlhYmxlIOKAlCB0aGUgcnVuIHdhcyBhY2NlcHRlZCB2aWEgdGhlIHF1ZXVlIGFuZCBjcmVhdGlvblxuICAgICAgICAgIC8vIHdpbGwgYmUgcmUtdHJpZWQgYnkgdGhlIHJ1bnRpbWUgd2hlbiBpdCBjYWxscyBydW5fc3RhcnRlZC5cbiAgICAgICAgICByZXNpbGllbnRTdGFydCA9IHRydWU7XG4gICAgICAgICAgcnVudGltZUxvZ2dlci53YXJuKFxuICAgICAgICAgICAgJ1J1biBjcmVhdGlvbiBldmVudCBmYWlsZWQsIGJ1dCB0aGUgcnVuIHdhcyBhY2NlcHRlZCB2aWEgdGhlIHF1ZXVlLiAnICtcbiAgICAgICAgICAgICAgJ1RoZSBydW5fY3JlYXRlZCBldmVudCB3aWxsIGJlIHJlLXRyaWVkIGFzeW5jIGJ5IHRoZSBydW50aW1lLicsXG4gICAgICAgICAgICB7IHdvcmtmbG93UnVuSWQ6IHJ1bklkLCBlcnJvcjogZXJyLm1lc3NhZ2UgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBydW5DcmVhdGVkUmVzdWx0LnZhbHVlO1xuICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgcnVuIHdhcyBjcmVhdGVkXG4gICAgICAgIGlmICghcmVzdWx0LnJ1bikge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIFwiTWlzc2luZyAncnVuJyBpbiBzZXJ2ZXIgcmVzcG9uc2UgZm9yICdydW5fY3JlYXRlZCcgZXZlbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWZXJpZnkgc2VydmVyIGFjY2VwdGVkIG91ciBydW5JZFxuICAgICAgICBpZiAoIXYxQ29tcGF0ICYmIHJlc3VsdC5ydW4ucnVuSWQgIT09IHJ1bklkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgICAgYFNlcnZlciByZXR1cm5lZCBkaWZmZXJlbnQgcnVuSWQgdGhhbiByZXF1ZXN0ZWQ6IGV4cGVjdGVkICR7cnVuSWR9LCBnb3QgJHtyZXN1bHQucnVuLnJ1bklkfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZXNlIGFyZ3VtZW50LXN0cmVhbSBvcHMgYXJlIGZsdXNoZWQgaW4gdGhlIGJhY2tncm91bmQ7IHRoZSBwcm9taXNlXG4gICAgICAvLyBoYW5kZWQgdG8gd2FpdFVudGlsIG11c3QgbmV2ZXIgcmVqZWN0IChhbiB1bmNvbnN1bWVkIHdhaXRVbnRpbFxuICAgICAgLy8gcmVqZWN0aW9uIGNyYXNoZXMgdGhlIHByb2Nlc3MgYXMgdW5oYW5kbGVkUmVqZWN0aW9uKSwgc28gdW5leHBlY3RlZFxuICAgICAgLy8gZmFpbHVyZXMgYXJlIGxvZ2dlZCBpbnN0ZWFkLlxuICAgICAgc2FmZVdhaXRVbnRpbChQcm9taXNlLmFsbChvcHMpLCAoZXJyKSA9PiB7XG4gICAgICAgIHJ1bnRpbWVMb2dnZXIud2FybihcbiAgICAgICAgICAnQmFja2dyb3VuZCBmbHVzaCBvZiB3b3JrZmxvdyBhcmd1bWVudCBzdHJlYW1zIGZhaWxlZCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZDogcnVuSWQsXG4gICAgICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLldvcmtmbG93UnVuSWQocnVuSWQpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuRGVwbG95bWVudElkKGRlcGxveW1lbnRJZCksXG4gICAgICAgIC4uLihydW5DcmVhdGVkUmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiZcbiAgICAgICAgcnVuQ3JlYXRlZFJlc3VsdC52YWx1ZS5ydW5cbiAgICAgICAgICA/IEF0dHJpYnV0ZS5Xb3JrZmxvd1J1blN0YXR1cyhydW5DcmVhdGVkUmVzdWx0LnZhbHVlLnJ1bi5zdGF0dXMpXG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBSdW48VFJlc3VsdD4ocnVuSWQsIHsgcmVzaWxpZW50U3RhcnQgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBlcnJvciBmcm9tIGV2ZW50cy5jcmVhdGUgKHJ1bl9jcmVhdGVkKSBpcyByZXRyeWFibGUsXG4gKiBtZWFuaW5nIHRoZSBxdWV1ZSBjYW4gcmUtdHJ5IGNyZWF0aW9uIGxhdGVyIHZpYSB0aGUgcnVuX3N0YXJ0ZWQgcGF0aC5cbiAqIC0gVGhyb3R0bGVFcnJvciAoNDI5KTogcmF0ZSBsaW1pdGVkLCB3aWxsIHN1Y2NlZWQgbGF0ZXJcbiAqIC0gV29ya2Zsb3dXb3JsZEVycm9yIHdpdGggc3RhdHVzID49IDUwMDogc2VydmVyIGVycm9yLCB3aWxsIHN1Y2NlZWQgbGF0ZXJcbiAqL1xuZnVuY3Rpb24gaXNSZXRyeWFibGVTdGFydEVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoVGhyb3R0bGVFcnJvci5pcyhlcnIpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdvcmtmbG93V29ybGRFcnJvci5pcyhlcnIpICYmIGVyci5zdGF0dXMgJiYgZXJyLnN0YXR1cyA+PSA1MDApXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"step-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/step-handler.ts"],"names":[],"mappings":"AAk3BA;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CACC,CAAC"}
1
+ {"version":3,"file":"step-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/step-handler.ts"],"names":[],"mappings":"AAu5BA;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CACC,CAAC"}