@workflow/core 5.0.0-beta.15 → 5.0.0-beta.17

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.
@@ -1,6 +1,6 @@
1
1
  import { types } from 'node:util';
2
2
  import { EntityConflictError, FatalError, RetryableError, RunExpiredError, ThrottleError, TooEarlyError, WorkflowRuntimeError, } from '@workflow/errors';
3
- import { pluralize } from '@workflow/utils';
3
+ import { pluralize, stepDisplayName } from '@workflow/utils';
4
4
  import { SPEC_VERSION_CURRENT } from '@workflow/world';
5
5
  import { runtimeLogger, stepLogger } from '../logger.js';
6
6
  import { getStepFunction } from '../private.js';
@@ -23,7 +23,8 @@ const DEFAULT_STEP_MAX_RETRIES = 3;
23
23
  export async function executeStep(params) {
24
24
  const { world, workflowRunId, workflowName, workflowStartedAt, stepId, stepName, } = params;
25
25
  const isVercel = process.env.VERCEL_URL !== undefined;
26
- return trace(`STEP ${stepName}`, {}, async (span) => {
26
+ const spanName = `step.execute ${stepDisplayName(stepName)}`;
27
+ return trace(spanName, {}, async (span) => {
27
28
  span?.setAttributes({
28
29
  ...Attribute.StepName(stepName),
29
30
  ...Attribute.WorkflowName(workflowName),
@@ -504,4 +505,4 @@ export async function executeStep(params) {
504
505
  }
505
506
  });
506
507
  }
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3N0ZXAtZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2Isb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixHQUNqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssU0FBUyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsd0JBQXdCLEdBQ3pCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxD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dCI6WyJpbXBvcnQgeyB0eXBlcyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQge1xuICBFbnRpdHlDb25mbGljdEVycm9yLFxuICBGYXRhbEVycm9yLFxuICBSZXRyeWFibGVFcnJvcixcbiAgUnVuRXhwaXJlZEVycm9yLFxuICBUaHJvdHRsZUVycm9yLFxuICBUb29FYXJseUVycm9yLFxuICBXb3JrZmxvd1J1bnRpbWVFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBXb3JsZCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBTUEVDX1ZFUlNJT05fQ1VSUkVOVCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0tleSB9IGZyb20gJy4uL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciwgc3RlcExvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBnZXRTdGVwRnVuY3Rpb24gfSBmcm9tICcuLi9wcml2YXRlLmpzJztcbmltcG9ydCB7XG4gIGRlaHlkcmF0ZVN0ZXBFcnJvcixcbiAgZGVoeWRyYXRlU3RlcFJldHVyblZhbHVlLFxuICBoeWRyYXRlU3RlcEFyZ3VtZW50cyxcbiAgaHlkcmF0ZVN0ZXBFcnJvcixcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4uL3N0ZXAvY29udGV4dC1zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIEF0dHJpYnV0ZSBmcm9tICcuLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuaW1wb3J0IHsgdHJhY2UgfSBmcm9tICcuLi90ZWxlbWV0cnkuanMnO1xuaW1wb3J0IHtcbiAgZ2V0RXJyb3JOYW1lLFxuICBnZXRFcnJvclN0YWNrLFxuICBub3JtYWxpemVVbmtub3duRXJyb3IsXG4gIHByb21vdGVBYm9ydEVycm9yVG9GYXRhbCxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5pbXBvcnQgeyBnZXRQb3J0TGF6eSB9IGZyb20gJy4vZ2V0LXBvcnQtbGF6eS5qcyc7XG5pbXBvcnQgeyBtZW1vaXplRW5jcnlwdGlvbktleSB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBzYWZlV2FpdFVudGlsIH0gZnJvbSAnLi93YWl0LXVudGlsLmpzJztcblxuY29uc3QgREVGQVVMVF9TVEVQX01BWF9SRVRSSUVTID0gMztcblxuZXhwb3J0IGludGVyZmFjZSBTdGVwRXhlY3V0b3JQYXJhbXMge1xuICB3b3JsZDogV29ybGQ7XG4gIHdvcmtmbG93UnVuSWQ6IHN0cmluZztcbiAgLyoqIERlcGxveW1lbnQgdGhhdCBvd25zIHRoZSB3b3JrZmxvdyBydW4sIGZvciBmb3J3YXJkZWQgd3JpdGFibGUgc3RyZWFtcy4gKi9cbiAgd29ya2Zsb3dEZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xuICB3b3JrZmxvd1N0YXJ0ZWRBdDogbnVtYmVyO1xuICBzdGVwSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgZW5jcnlwdGlvbktleT86IENyeXB0b0tleTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBzdGVwIGV4ZWN1dGlvbiBhdHRlbXB0LiBUaGUgY2FsbGVyIGRlY2lkZXMgd2hhdCB0byBkb1xuICogYmFzZWQgb24gdGhlIHJlc3VsdCB0eXBlIChlLmcuLCBxdWV1ZSB3b3JrZmxvdyBjb250aW51YXRpb24sIHJlcGxheSBpbmxpbmUsIGV0Yy4pLlxuICovXG5leHBvcnQgdHlwZSBTdGVwRXhlY3V0aW9uUmVzdWx0ID1cbiAgfCB7IHR5cGU6ICdjb21wbGV0ZWQnOyBoYXNQZW5kaW5nT3BzPzogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnZmFpbGVkJyB9XG4gIHwgeyB0eXBlOiAncmV0cnknOyB0aW1lb3V0U2Vjb25kczogbnVtYmVyIH1cbiAgfCB7IHR5cGU6ICdza2lwcGVkJyB9XG4gIHwgeyB0eXBlOiAnZ29uZScgfVxuICB8IHsgdHlwZTogJ3Rocm90dGxlZCc7IHRpbWVvdXRTZWNvbmRzOiBudW1iZXIgfTtcblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBzdGVwOiBjcmVhdGVzIHN0ZXBfc3RhcnRlZCBldmVudCwgaHlkcmF0ZXMgaW5wdXQsXG4gKiBydW5zIHRoZSBzdGVwIGZ1bmN0aW9uLCBjcmVhdGVzIHN0ZXBfY29tcGxldGVkL3N0ZXBfZmFpbGVkL3N0ZXBfcmV0cnlpbmcgZXZlbnRzLlxuICpcbiAqIERvZXMgTk9UIHF1ZXVlIHdvcmtmbG93IGNvbnRpbnVhdGlvbiBtZXNzYWdlcyDigJQgdGhlIGNhbGxlciBkZWNpZGVzIHdoYXQgdG8gZG8gbmV4dC5cbiAqIFVzZWQgYnkgYm90aCB0aGUgVjEgc3RlcCBoYW5kbGVyIGFuZCB0aGUgVjIgY29tYmluZWQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTdGVwKFxuICBwYXJhbXM6IFN0ZXBFeGVjdXRvclBhcmFtc1xuKTogUHJvbWlzZTxTdGVwRXhlY3V0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICB3b3JsZCxcbiAgICB3b3JrZmxvd1J1bklkLFxuICAgIHdvcmtmbG93TmFtZSxcbiAgICB3b3JrZmxvd1N0YXJ0ZWRBdCxcbiAgICBzdGVwSWQsXG4gICAgc3RlcE5hbWUsXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGlzVmVyY2VsID0gcHJvY2Vzcy5lbnYuVkVSQ0VMX1VSTCAhPT0gdW5kZWZpbmVkO1xuXG4gIHJldHVybiB0cmFjZShgU1RFUCAke3N0ZXBOYW1lfWAsIHt9LCBhc3luYyAoc3BhbikgPT4ge1xuICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBOYW1lKHN0ZXBOYW1lKSxcbiAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lKSxcbiAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd1J1bklkKHdvcmtmbG93UnVuSWQpLFxuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBJZChzdGVwSWQpLFxuICAgIH0pO1xuXG4gICAgLy8gTWVtb2l6ZWQgYWNjZXNzb3IgZm9yIHRoZSBwZXItcnVuIGVuY3J5cHRpb24ga2V5LiBUaGUgZmlyc3QgY2FsbGVyXG4gICAgLy8gKGlucHV0IGh5ZHJhdGlvbiBvbiB0aGUgc3VjY2VzcyBwYXRoLCBvciBvbmUgb2YgdGhlIGVhcmx5LXJldHVyblxuICAgIC8vIGRlaHlkcmF0ZVN0ZXBFcnJvciBwYXRocyBpZiBzdGVwX3N0YXJ0ZWQgZmFpbHMpIHRyaWdnZXJzIHRoZSBhY3R1YWxcbiAgICAvLyBmZXRjaCAvIEhLREYgZGVyaXZhdGlvbjsgc3Vic2VxdWVudCBjYWxsZXJzIGF3YWl0IHRoZSBjYWNoZWQgcHJvbWlzZS5cbiAgICBjb25zdCBnZXRFbmNyeXB0aW9uS2V5ID0gbWVtb2l6ZUVuY3J5cHRpb25LZXkod29ybGQsIHdvcmtmbG93UnVuSWQpO1xuXG4gICAgY29uc3Qgc3RlcEZuID0gZ2V0U3RlcEZ1bmN0aW9uKHN0ZXBOYW1lKTtcbiAgICBpZiAoIXN0ZXBGbiB8fCB0eXBlb2Ygc3RlcEZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBTdGVwIGZ1bmN0aW9uIG5vdCByZWdpc3RlcmVkIOKAlCBmYWlsIHRoZSBzdGVwIGltbWVkaWF0ZWx5IChub3QgdGhlIHJ1bikuXG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIFYxIHN0ZXAgaGFuZGxlciBwYXR0ZXJuOiBjcmVhdGUgc3RlcF9mYWlsZWQgZXZlbnQgc29cbiAgICAgIC8vIHRoZSB3b3JrZmxvdyBjYW4gaGFuZGxlIGl0IGdyYWNlZnVsbHkgdmlhIHRyeS9jYXRjaCBpbiB1c2VyIGNvZGUuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU3RlcCBcIiR7c3RlcE5hbWV9XCIgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGN1cnJlbnQgZGVwbG95bWVudC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGJ1aWxkIG9yIGJ1bmRsaW5nIGlzc3VlIHRoYXQgY2F1c2VkIHRoZSBzdGVwIHRvIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZGVwbG95bWVudC5gO1xuICAgICAgcnVudGltZUxvZ2dlci5lcnJvcignU3RlcCBmdW5jdGlvbiBub3QgcmVnaXN0ZXJlZCwgZmFpbGluZyBzdGVwJywge1xuICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgc3RlcElkLFxuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX2ZhaWxlZCcsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgZXJyb3I6IGF3YWl0IGRlaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgICAgbmV3IEZhdGFsRXJyb3IoZXJyb3JNZXNzYWdlKSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgYXdhaXQgZ2V0RW5jcnlwdGlvbktleSgpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoc3RlcEZhaWxFcnIpIHtcbiAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoc3RlcEZhaWxFcnIpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3NraXBwZWQnIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgc3RlcEZhaWxFcnI7XG4gICAgICB9XG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2ZhaWxlZCcpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcEZhdGFsRXJyb3IodHJ1ZSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlsZWQnIH07XG4gICAgfVxuXG4gICAgY29uc3QgbWF4UmV0cmllcyA9IHN0ZXBGbi5tYXhSZXRyaWVzID8/IERFRkFVTFRfU1RFUF9NQVhfUkVUUklFUztcblxuICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBNYXhSZXRyaWVzKG1heFJldHJpZXMpLFxuICAgIH0pO1xuXG4gICAgLy8gc3RlcF9zdGFydGVkIHZhbGlkYXRlcyBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgc3RlcCBlbnRpdHlcbiAgICBsZXQgc3RlcDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnRSZXN1bHQgPSBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9zdGFydGVkJyxcbiAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBzdGVwSWQsXG4gICAgICAgIGV2ZW50RGF0YTogeyBzdGVwTmFtZSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghc3RhcnRSZXN1bHQuc3RlcCkge1xuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgYHN0ZXBfc3RhcnRlZCBldmVudCBmb3IgXCIke3N0ZXBJZH1cIiBkaWQgbm90IHJldHVybiBzdGVwIGVudGl0eWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHN0ZXAgPSBzdGFydFJlc3VsdC5zdGVwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKFRocm90dGxlRXJyb3IuaXMoZXJyKSkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTWF0aC5tYXgoXG4gICAgICAgICAgMSxcbiAgICAgICAgICB0eXBlb2YgZXJyLnJldHJ5QWZ0ZXIgPT09ICdudW1iZXInID8gZXJyLnJldHJ5QWZ0ZXIgOiAxXG4gICAgICAgICk7XG4gICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbygnVGhyb3R0bGVkIG9uIHN0ZXBfc3RhcnRlZCwgZGVmZXJyaW5nJywge1xuICAgICAgICAgIHJldHJ5QWZ0ZXJTZWNvbmRzOiByZXRyeUFmdGVyLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3Rocm90dGxlZCcsIHRpbWVvdXRTZWNvbmRzOiByZXRyeUFmdGVyIH07XG4gICAgICB9XG4gICAgICBpZiAoUnVuRXhwaXJlZEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgcnVudGltZUxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBXb3JrZmxvdyBydW4gXCIke3dvcmtmbG93UnVuSWR9XCIgaGFzIGFscmVhZHkgY29tcGxldGVkLCBza2lwcGluZyBzdGVwIFwiJHtzdGVwSWR9XCI6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnZ29uZScgfTtcbiAgICAgIH1cbiAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgcnVudGltZUxvZ2dlci5kZWJ1ZygnU3RlcCBpbiB0ZXJtaW5hbCBzdGF0ZSwgc2tpcHBpbmcnLCB7XG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgc3RlcElkLFxuICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgZXJyb3I6IGVyci5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTa2lwcGVkKHRydWUpLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwU2tpcFJlYXNvbignY29tcGxldGVkJyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgIH1cbiAgICAgIGlmIChUb29FYXJseUVycm9yLmlzKGVycikpIHtcbiAgICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBNYXRoLm1heCgxLCBlcnIucmV0cnlBZnRlciA/PyAxKTtcbiAgICAgICAgcnVudGltZUxvZ2dlci5kZWJ1ZygnU3RlcCByZXRyeUFmdGVyIHRpbWVzdGFtcCBub3QgeWV0IHJlYWNoZWQnLCB7XG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgc3RlcElkLFxuICAgICAgICAgIHRpbWVvdXRTZWNvbmRzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3JldHJ5JywgdGltZW91dFNlY29uZHMgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBydW50aW1lTG9nZ2VyLmRlYnVnKCdTdGVwIGV4ZWN1dGlvbiBkZXRhaWxzJywge1xuICAgICAgc3RlcE5hbWUsXG4gICAgICBzdGVwSWQ6IHN0ZXAuc3RlcElkLFxuICAgICAgc3RhdHVzOiBzdGVwLnN0YXR1cyxcbiAgICAgIGF0dGVtcHQ6IHN0ZXAuYXR0ZW1wdCxcbiAgICB9KTtcblxuICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoc3RlcC5zdGF0dXMpLFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdDogdW5rbm93bjtcblxuICAgIC8vIENoZWNrIG1heCByZXRyaWVzIEFGVEVSIHN0ZXBfc3RhcnRlZCAoYXR0ZW1wdCB3YXMganVzdCBpbmNyZW1lbnRlZCkuXG4gICAgLy8gT25seSBlbmZvcmNlIHdoZW4gdGhlIHN0ZXAgaGFzIGEgcHJldmlvdXMgZXJyb3Ig4oCUIHRoaXMgZGlzdGluZ3Vpc2hlc1xuICAgIC8vIGFjdHVhbCByZXRyaWVzIChmYWlsZWQg4oaSIHJldHJ5KSBmcm9tIGNvbmN1cnJlbnQgc3RhcnRzIChWMiBpbmxpbmVcbiAgICAvLyBleGVjdXRpb24gbG9vcCBjYW4gY2F1c2UgbXVsdGlwbGUgaGFuZGxlcnMgdG8gc3RlcF9zdGFydGVkIHRoZSBzYW1lXG4gICAgLy8gc3RlcCBzaW11bHRhbmVvdXNseSwgaW5mbGF0aW5nIHRoZSBhdHRlbXB0IGNvdW50ZXIgd2l0aG91dCBhbnkgZmFpbHVyZSkuXG4gICAgaWYgKHN0ZXAuYXR0ZW1wdCA+IG1heFJldHJpZXMgKyAxICYmIHN0ZXAuZXJyb3IpIHtcbiAgICAgIGNvbnN0IHJldHJ5Q291bnQgPSBzdGVwLmF0dGVtcHQgLSAxO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFN0ZXAgXCIke3N0ZXBOYW1lfVwiIGV4Y2VlZGVkIG1heCByZXRyaWVzICgke3JldHJ5Q291bnR9ICR7cGx1cmFsaXplKCdyZXRyeScsICdyZXRyaWVzJywgcmV0cnlDb3VudCl9KWA7XG4gICAgICBzdGVwTG9nZ2VyLmVycm9yKCdTdGVwIGV4Y2VlZGVkIG1heCByZXRyaWVzJywge1xuICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgcmV0cnlDb3VudCxcbiAgICAgIH0pO1xuICAgICAgLy8gUHJlc2VydmUgdGhlIHByaW9yIGF0dGVtcHQncyBzZXJpYWxpemVkIGVycm9yIGFzIHRoZSBjYXVzZSBzbyB0aGVcbiAgICAgIC8vIHVuZGVybHlpbmcgZmFpbHVyZSBpcyByZWNvdmVyYWJsZSBmcm9tIGBzdGVwLmVycm9yLmNhdXNlYCBhZnRlclxuICAgICAgLy8gaHlkcmF0aW9uLCB3aXRob3V0IGZvcmNpbmcgY29uc3VtZXJzIHRvIHdhbGsgdGhlIHN0ZXBfcmV0cnlpbmdcbiAgICAgIC8vIGV2ZW50IGhpc3RvcnkuIEJlc3QtZWZmb3J0OiBpZiBoeWRyYXRpb24gb2YgdGhlIHByaW9yIGBzdGVwLmVycm9yYFxuICAgICAgLy8gdGhyb3dzLCBmYWxsIGJhY2sgdG8gYSBGYXRhbEVycm9yIHdpdGhvdXQgY2F1c2UuXG4gICAgICBjb25zdCB3cmFwcGVkRXJyb3IgPSBuZXcgRmF0YWxFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgaWYgKHN0ZXAuZXJyb3IgIT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICh3cmFwcGVkRXJyb3IgYXMgRXJyb3IpLmNhdXNlID0gYXdhaXQgaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgIHN0ZXAuZXJyb3IsXG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgYXdhaXQgZ2V0RW5jcnlwdGlvbktleSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlIOKAlCBiZXN0LWVmZm9ydCBjYXVzZSBhdHRhY2htZW50LlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX2ZhaWxlZCcsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgZXJyb3I6IGF3YWl0IGRlaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgICAgd3JhcHBlZEVycm9yLFxuICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICdUcmllZCBmYWlsaW5nIHN0ZXAsIGJ1dCBzdGVwIGhhcyBhbHJlYWR5IGZpbmlzaGVkLicsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3NraXBwZWQnIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwU3RhdHVzKCdmYWlsZWQnKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBSZXRyeUV4aGF1c3RlZCh0cnVlKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxlZCcgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYXR0ZW1wdCA9IHN0ZXAuYXR0ZW1wdDtcblxuICAgICAgaWYgKCFzdGVwLnN0YXJ0ZWRBdCkge1xuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgYFN0ZXAgXCIke3N0ZXBJZH1cIiBoYXMgbm8gXCJzdGFydGVkQXRcIiB0aW1lc3RhbXBgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGVwU3RhcnRlZEF0ID0gc3RlcC5zdGFydGVkQXQ7XG4gICAgICBjb25zdCBvcHM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgLy8gVXNlIHRoZSBwcm92aWRlZCBlbmNyeXB0aW9uIGtleSB3aGVuIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHJlc29sdmVcbiAgICAgIC8vIHRocm91Z2ggdGhlIG1lbW9pemVkIGFjY2Vzc29yIGRlY2xhcmVkIGF0IHRoZSB0b3Agb2YgdGhpcyB0cmFjZS5cbiAgICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBwYXJhbXMuZW5jcnlwdGlvbktleSA/PyAoYXdhaXQgZ2V0RW5jcnlwdGlvbktleSgpKTtcbiAgICAgIGNvbnN0IGh5ZHJhdGVkSW5wdXQgPSBhd2FpdCB0cmFjZShcbiAgICAgICAgJ3N0ZXAuaHlkcmF0ZScsXG4gICAgICAgIHt9LFxuICAgICAgICBhc3luYyAoaHlkcmF0ZVNwYW4pID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gYXdhaXQgaHlkcmF0ZVN0ZXBBcmd1bWVudHMoXG4gICAgICAgICAgICBzdGVwLmlucHV0LFxuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICBvcHMsXG4gICAgICAgICAgICBnbG9iYWxUaGlzLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBwYXJhbXMud29ya2Zsb3dEZXBsb3ltZW50SWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAgIGh5ZHJhdGVTcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwQXJndW1lbnRzQ291bnQoaHlkcmF0ZWQuYXJncy5sZW5ndGgpLFxuICAgICAgICAgICAgLi4uQXR0cmlidXRlLlF1ZXVlRGVzZXJpYWxpemVUaW1lTXMoZHVyYXRpb25NcyksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGh5ZHJhdGVkO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBhcmdzID0gaHlkcmF0ZWRJbnB1dC5hcmdzO1xuICAgICAgY29uc3QgdGhpc1ZhbCA9IGh5ZHJhdGVkSW5wdXQudGhpc1ZhbCA/PyBudWxsO1xuICAgICAgY29uc3QgcG9ydCA9IGlzVmVyY2VsID8gdW5kZWZpbmVkIDogYXdhaXQgZ2V0UG9ydExhenkoKTtcblxuICAgICAgY29uc3QgZXhlY3V0aW9uU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRyYWNlKCdzdGVwLmV4ZWN1dGUnLCB7fSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgY29udGV4dFN0b3JhZ2UucnVuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXBNZXRhZGF0YToge1xuICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgICBzdGVwU3RhcnRlZEF0OiBuZXcgRGF0ZSgrc3RlcFN0YXJ0ZWRBdCksXG4gICAgICAgICAgICAgIGF0dGVtcHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd29ya2Zsb3dNZXRhZGF0YToge1xuICAgICAgICAgICAgICB3b3JrZmxvd05hbWUsXG4gICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgIHdvcmtmbG93U3RhcnRlZEF0OiBuZXcgRGF0ZSgrd29ya2Zsb3dTdGFydGVkQXQpLFxuICAgICAgICAgICAgICB1cmw6IGlzVmVyY2VsXG4gICAgICAgICAgICAgICAgPyBgaHR0cHM6Ly8ke3Byb2Nlc3MuZW52LlZFUkNFTF9VUkx9YFxuICAgICAgICAgICAgICAgIDogYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0ID8/IDMwMDB9YCxcbiAgICAgICAgICAgICAgZmVhdHVyZXM6IHsgZW5jcnlwdGlvbjogISFlbmNyeXB0aW9uS2V5IH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd29ya2Zsb3dEZXBsb3ltZW50SWQ6IHBhcmFtcy53b3JrZmxvd0RlcGxveW1lbnRJZCxcbiAgICAgICAgICAgIG9wcyxcbiAgICAgICAgICAgIGNsb3N1cmVWYXJzOiBoeWRyYXRlZElucHV0LmNsb3N1cmVWYXJzLFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHN0ZXBGbi5hcHBseSh0aGlzVmFsLCBhcmdzKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBleGVjdXRpb25UaW1lTXMgPSBEYXRlLm5vdygpIC0gZXhlY3V0aW9uU3RhcnRUaW1lO1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLlF1ZXVlRXhlY3V0aW9uVGltZU1zKGV4ZWN1dGlvblRpbWVNcyksXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgdHJhY2UoJ3N0ZXAuZGVoeWRyYXRlJywge30sIGFzeW5jIChkZWh5ZHJhdGVTcGFuKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRlaHlkcmF0ZWQgPSBhd2FpdCBkZWh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgICBvcHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZHVyYXRpb25NcyA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGRlaHlkcmF0ZVNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5RdWV1ZVNlcmlhbGl6ZVRpbWVNcyhkdXJhdGlvbk1zKSxcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJlc3VsdFR5cGUodHlwZW9mIGRlaHlkcmF0ZWQpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRlaHlkcmF0ZWQ7XG4gICAgICB9KTtcblxuICAgICAgLy8gRmx1c2ggcGVuZGluZyBvcHMgKHN0cmVhbSB3cml0ZXMsIGV0Yy4pIHdpdGggYSBzaG9ydCBpbmxpbmUgd2FpdC5cbiAgICAgIC8vIE5vdyB0aGF0IFdvcmtmbG93U2VydmVyV3JpdGFibGVTdHJlYW0gZmx1c2hlcyBzeW5jaHJvbm91c2x5IG9uXG4gICAgICAvLyBlYWNoIHdyaXRlIChub3QgdmlhIHNldFRpbWVvdXQpLCB0aGUgZmx1c2hhYmxlUGlwZSdzIHBlbmRpbmdPcHNcbiAgICAgIC8vIGFjY3VyYXRlbHkgcmVmbGVjdHMgd2hldGhlciBkYXRhIGhhcyByZWFjaGVkIHRoZSBzZXJ2ZXIuIE1vc3Qgb3BzXG4gICAgICAvLyBzZXR0bGUgd2l0aGluIH4yMDBtcyAoMTAwbXMgbG9jay1yZWxlYXNlIHBvbGxpbmcgKyBIVFRQIGZsdXNoKS5cbiAgICAgIC8vIElmIG9wcyBkb24ndCBzZXR0bGUgaW4gNTAwbXMgKGUuZy4sIFdyaXRhYmxlU3RyZWFtIGtlcHQgb3BlblxuICAgICAgLy8gYWNyb3NzIHN0ZXBzKSwgd2FpdFVudGlsIGhhbmRsZXMgdGhlIHJlc3QuXG4gICAgICBsZXQgb3BzU2V0dGxlZCA9IHRydWU7XG4gICAgICBpZiAob3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgb3BzUHJvbWlzZSA9IFByb21pc2UuYWxsKG9wcyk7XG4gICAgICAgIC8vIFRoZSByYWNlIGJlbG93IHN1cmZhY2VzIGZhaWx1cmVzIGlubGluZSB3aGVuIG9wcyBzZXR0bGUgcXVpY2tseTtcbiAgICAgICAgLy8gaWYgdGhlIDUwMG1zIHRpbWVvdXQgd2lucywgdGhlIGZhaWx1cmUgaXMgb25seSBvYnNlcnZlZCBoZXJlLiBUaGVcbiAgICAgICAgLy8gcHJvbWlzZSBoYW5kZWQgdG8gd2FpdFVudGlsIG11c3QgbmV2ZXIgcmVqZWN0IChhbiB1bmNvbnN1bWVkXG4gICAgICAgIC8vIHdhaXRVbnRpbCByZWplY3Rpb24gY3Jhc2hlcyB0aGUgcHJvY2VzcyBhcyB1bmhhbmRsZWRSZWplY3Rpb24pLFxuICAgICAgICAvLyBzbyB1bmV4cGVjdGVkIGZhaWx1cmVzIGFyZSBsb2dnZWQgaW5zdGVhZC5cbiAgICAgICAgc2FmZVdhaXRVbnRpbChvcHNQcm9taXNlLCAoZXJyKSA9PiB7XG4gICAgICAgICAgcnVudGltZUxvZ2dlci53YXJuKCdCYWNrZ3JvdW5kIGZsdXNoIG9mIHN0ZXAgc3RyZWFtIG9wcyBmYWlsZWQnLCB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9wc1NldHRsZWQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgIG9wc1Byb21pc2UudGhlbihcbiAgICAgICAgICAgICgpID0+IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBleHBlY3RlZCBjbGllbnQgZGlzY29ubmVjdCBlcnJvcnMgKGUuZy4sIGJyb3dzZXJcbiAgICAgICAgICAgICAgLy8gcmVmcmVzaCBkdXJpbmcgc3RyZWFtaW5nKVxuICAgICAgICAgICAgICBjb25zdCBpc0Fib3J0RXJyb3IgPVxuICAgICAgICAgICAgICAgIGVycj8ubmFtZSA9PT0gJ0Fib3J0RXJyb3InIHx8IGVycj8ubmFtZSA9PT0gJ1Jlc3BvbnNlQWJvcnRlZCc7XG4gICAgICAgICAgICAgIGlmIChpc0Fib3J0RXJyb3IpIHJldHVybiB0cnVlIGFzIGNvbnN0O1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgUHJvbWlzZTxmYWxzZT4oKHIpID0+IHNldFRpbWVvdXQoKCkgPT4gcihmYWxzZSksIDUwMCkpLFxuICAgICAgICBdKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHN0ZXBfY29tcGxldGVkIGV2ZW50XG4gICAgICBsZXQgc3RlcENvbXBsZXRlZDQwOSA9IGZhbHNlO1xuICAgICAgYXdhaXQgd29ybGQuZXZlbnRzXG4gICAgICAgIC5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfY29tcGxldGVkJyxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCBhcyBVaW50OEFycmF5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICAgICAgcnVudGltZUxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAnVHJpZWQgY29tcGxldGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzdGVwQ29tcGxldGVkNDA5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKHN0ZXBDb21wbGV0ZWQ0MDkpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3NraXBwZWQnIH07XG4gICAgICB9XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnY29tcGxldGVkJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwUmVzdWx0VHlwZSh0eXBlb2YgcmVzdWx0KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RlcExvZ2dlci5kZWJ1ZygnU3RlcCBoYXMgcGVuZGluZyBvcHMnLCB7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICBvcHNDb3VudDogb3BzLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBoYXNQZW5kaW5nT3BzIHNpZ25hbHMgdGhlIFYyIGhhbmRsZXIgdG8gYnJlYWsgdGhlIGxvb3BcbiAgICAgIC8vIGFuZCBxdWV1ZSBhIGNvbnRpbnVhdGlvbiBzbyB3YWl0VW50aWwgY2FuIGZsdXNoIHRoZW0uXG4gICAgICByZXR1cm4geyB0eXBlOiAnY29tcGxldGVkJywgaGFzUGVuZGluZ09wczogIW9wc1NldHRsZWQgfTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUVyciA9IHByb21vdGVBYm9ydEVycm9yVG9GYXRhbChlcnIpO1xuXG4gICAgICBjb25zdCBub3JtYWxpemVkRXJyb3IgPSBhd2FpdCBub3JtYWxpemVVbmtub3duRXJyb3IoZWZmZWN0aXZlRXJyKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGFjayA9XG4gICAgICAgIG5vcm1hbGl6ZWRFcnJvci5zdGFjayB8fCBnZXRFcnJvclN0YWNrKGVmZmVjdGl2ZUVycikgfHwgJyc7XG5cbiAgICAgIGlmIChlZmZlY3RpdmVFcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBzcGFuPy5yZWNvcmRFeGNlcHRpb24/LihlZmZlY3RpdmVFcnIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0ZhdGFsID0gRmF0YWxFcnJvci5pcyhlZmZlY3RpdmVFcnIpO1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBFcnJvck5hbWUoZ2V0RXJyb3JOYW1lKGVmZmVjdGl2ZUVycikpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcEVycm9yTWVzc2FnZShub3JtYWxpemVkRXJyb3IubWVzc2FnZSksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5FcnJvclR5cGUoZ2V0RXJyb3JOYW1lKGVmZmVjdGl2ZUVycikpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuRXJyb3JDYXRlZ29yeShcbiAgICAgICAgICBpc0ZhdGFsXG4gICAgICAgICAgICA/ICdmYXRhbCdcbiAgICAgICAgICAgIDogUmV0cnlhYmxlRXJyb3IuaXMoZWZmZWN0aXZlRXJyKVxuICAgICAgICAgICAgICA/ICdyZXRyeWFibGUnXG4gICAgICAgICAgICAgIDogJ3RyYW5zaWVudCdcbiAgICAgICAgKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLkVycm9yUmV0cnlhYmxlKCFpc0ZhdGFsKSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoUnVuRXhwaXJlZEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgc3RlcExvZ2dlci5pbmZvKCdXb3JrZmxvdyBydW4gYWxyZWFkeSBjb21wbGV0ZWQsIHNraXBwaW5nIHN0ZXAnLCB7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnZ29uZScgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRmF0YWwpIHtcbiAgICAgICAgc3RlcExvZ2dlci5lcnJvcihcbiAgICAgICAgICAnRW5jb3VudGVyZWQgRmF0YWxFcnJvciB3aGlsZSBleGVjdXRpbmcgc3RlcCwgYnViYmxpbmcgdXAgdG8gcGFyZW50IHdvcmtmbG93JyxcbiAgICAgICAgICB7IHdvcmtmbG93UnVuSWQsIHN0ZXBOYW1lLCBlcnJvclN0YWNrOiBub3JtYWxpemVkU3RhY2sgfVxuICAgICAgICApO1xuICAgICAgICAvLyBBcHBseSB0aGUgbm9ybWFsaXplZCBzdGFjayB0byB0aGUgdGhyb3duIHZhbHVlIHNvIHRoZSBzZXJpYWxpemVkXG4gICAgICAgIC8vIGVycm9yIHByZXNlcnZlcyBpdCBmb3IgY29uc3VtZXJzLiBgdHlwZXMuaXNOYXRpdmVFcnJvcigpYCB3b3Jrc1xuICAgICAgICAvLyBhY3Jvc3MgVk0gcmVhbG1zIChhIHdvcmtmbG93LXRocm93biBlcnJvciBpcyBhbiBpbnN0YW5jZSBvZiB0aGVcbiAgICAgICAgLy8gVk0ncyBFcnJvciBjbGFzcywgbm90IHRoZSBob3N0J3MpLlxuICAgICAgICBpZiAodHlwZXMuaXNOYXRpdmVFcnJvcihlZmZlY3RpdmVFcnIpICYmIG5vcm1hbGl6ZWRTdGFjaykge1xuICAgICAgICAgIChlZmZlY3RpdmVFcnIgYXMgRXJyb3IpLnN0YWNrID0gbm9ybWFsaXplZFN0YWNrO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh3b3JrZmxvd1J1bklkLCB7XG4gICAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX2ZhaWxlZCcsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBzdGVwSWQsXG4gICAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICAgIGVycm9yOiBhd2FpdCBkZWh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICAgICAgZWZmZWN0aXZlRXJyLFxuICAgICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgYXdhaXQgZ2V0RW5jcnlwdGlvbktleSgpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChzdGVwRmFpbEVycikge1xuICAgICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKHN0ZXBGYWlsRXJyKSkge1xuICAgICAgICAgICAgcnVudGltZUxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAnVHJpZWQgZmFpbGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogc3RlcEZhaWxFcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBzdGVwRmFpbEVycjtcbiAgICAgICAgfVxuICAgICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnZmFpbGVkJyksXG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBGYXRhbEVycm9yKHRydWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxlZCcgfTtcbiAgICAgIH1cblxuICAgICAgLy8gTm9uLWZhdGFsIGVycm9yOiBjaGVjayBpZiByZXRyaWVzIHJlbWFpbmluZ1xuICAgICAgY29uc3QgY3VycmVudEF0dGVtcHQgPSBzdGVwLmF0dGVtcHQ7XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcEF0dGVtcHQoY3VycmVudEF0dGVtcHQpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcE1heFJldHJpZXMobWF4UmV0cmllcyksXG4gICAgICB9KTtcblxuICAgICAgaWYgKGN1cnJlbnRBdHRlbXB0ID49IG1heFJldHJpZXMgKyAxKSB7XG4gICAgICAgIC8vIE1heCByZXRyaWVzIHJlYWNoZWRcbiAgICAgICAgY29uc3QgcmV0cnlDb3VudCA9IHN0ZXAuYXR0ZW1wdCAtIDE7XG4gICAgICAgIHN0ZXBMb2dnZXIuZXJyb3IoXG4gICAgICAgICAgJ01heCByZXRyaWVzIHJlYWNoZWQsIGJ1YmJsaW5nIGVycm9yIHRvIHBhcmVudCB3b3JrZmxvdycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgYXR0ZW1wdDogc3RlcC5hdHRlbXB0LFxuICAgICAgICAgICAgcmV0cnlDb3VudCxcbiAgICAgICAgICAgIGVycm9yU3RhY2s6IG5vcm1hbGl6ZWRTdGFjayxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBTdGVwIFwiJHtzdGVwTmFtZX1cIiBmYWlsZWQgYWZ0ZXIgJHttYXhSZXRyaWVzfSAke3BsdXJhbGl6ZSgncmV0cnknLCAncmV0cmllcycsIG1heFJldHJpZXMpfTogJHtub3JtYWxpemVkRXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAvLyBXcmFwIHRoZSBvcmlnaW5hbCB0aHJvd24gdmFsdWUgYXMgYGNhdXNlYCBvbiBhIGZyZXNoIEZhdGFsRXJyb3JcbiAgICAgICAgLy8gc28gdGhlIHdyYXBwaW5nIG1lc3NhZ2UgKyByZXRyeS1jb3VudCBmcmFtaW5nIGlzIHRoZSB1c2VyLWZhY2luZ1xuICAgICAgICAvLyBlcnJvciB3aGlsZSB0aGUgb3JpZ2luYWwgZmFpbHVyZSByZW1haW5zIHJlY292ZXJhYmxlIGZyb21cbiAgICAgICAgLy8gYGVyci5jYXVzZWAgYWZ0ZXIgaHlkcmF0aW9uLlxuICAgICAgICBjb25zdCB3cmFwcGVkRXJyb3IgPSBuZXcgRmF0YWxFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICAod3JhcHBlZEVycm9yIGFzIEVycm9yKS5jYXVzZSA9IGVycjtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRTdGFjaykgd3JhcHBlZEVycm9yLnN0YWNrID0gbm9ybWFsaXplZFN0YWNrO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9mYWlsZWQnLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICAgIHdyYXBwZWRFcnJvcixcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoc3RlcEZhaWxFcnIpIHtcbiAgICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGVwRmFpbEVycikpIHtcbiAgICAgICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgJ1RyaWVkIGZhaWxpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHN0ZXBGYWlsRXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgc3RlcEZhaWxFcnI7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2ZhaWxlZCcpLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwUmV0cnlFeGhhdXN0ZWQodHJ1ZSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnZmFpbGVkJyB9O1xuICAgICAgfVxuXG4gICAgICAvLyBSZXRyaWVzIHJlbWFpbmluZ1xuICAgICAgaWYgKFJldHJ5YWJsZUVycm9yLmlzKGVycikpIHtcbiAgICAgICAgc3RlcExvZ2dlci5pbmZvKCdFbmNvdW50ZXJlZCBSZXRyeWFibGVFcnJvciwgc3RlcCB3aWxsIGJlIHJldHJpZWQnLCB7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICBhdHRlbXB0OiBjdXJyZW50QXR0ZW1wdCxcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGVwTG9nZ2VyLmluZm8oJ0VuY291bnRlcmVkIEVycm9yLCBzdGVwIHdpbGwgYmUgcmV0cmllZCcsIHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgIGF0dGVtcHQ6IGN1cnJlbnRBdHRlbXB0LFxuICAgICAgICAgIGVycm9yU3RhY2s6IG5vcm1hbGl6ZWRTdGFjayxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IHRoZSBub3JtYWxpemVkIHN0YWNrIHRvIHRoZSB0aHJvd24gdmFsdWUgc28gaXQgc3Vydml2ZXNcbiAgICAgIC8vIHNlcmlhbGl6YXRpb24uIFNlZSB0aGUgRmF0YWxFcnJvciBzaXRlIGFib3ZlIGZvciB3aHkgd2UgdXNlXG4gICAgICAvLyBgdHlwZXMuaXNOYXRpdmVFcnJvcmAgaW5zdGVhZCBvZiBgZXJyIGluc3RhbmNlb2YgRXJyb3JgLlxuICAgICAgaWYgKHR5cGVzLmlzTmF0aXZlRXJyb3IoZXJyKSAmJiBub3JtYWxpemVkU3RhY2spIHtcbiAgICAgICAgKGVyciBhcyBFcnJvcikuc3RhY2sgPSBub3JtYWxpemVkU3RhY2s7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX3JldHJ5aW5nJyxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC4uLihSZXRyeWFibGVFcnJvci5pcyhlcnIpICYmIHsgcmV0cnlBZnRlcjogZXJyLnJldHJ5QWZ0ZXIgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChzdGVwUmV0cnlFcnIpIHtcbiAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoc3RlcFJldHJ5RXJyKSkge1xuICAgICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICdUcmllZCByZXRyeWluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBzdGVwUmV0cnlFcnIubWVzc2FnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IHN0ZXBSZXRyeUVycjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBNYXRoLm1heChcbiAgICAgICAgMSxcbiAgICAgICAgUmV0cnlhYmxlRXJyb3IuaXMoZXJyKVxuICAgICAgICAgID8gTWF0aC5jZWlsKCgrZXJyLnJldHJ5QWZ0ZXIuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSkgLyAxMDAwKVxuICAgICAgICAgIDogMVxuICAgICAgKTtcblxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwUmV0cnlUaW1lb3V0U2Vjb25kcyh0aW1lb3V0U2Vjb25kcyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwUmV0cnlXaWxsUmV0cnkodHJ1ZSksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3JldHJ5JywgdGltZW91dFNlY29uZHMgfTtcbiAgICB9XG4gIH0pO1xufVxuIl19
508
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3N0ZXAtZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2Isb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixnQkFBZ0IsR0FDakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUNMLFlBQVksRUFDWixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUN6QixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQTBCbkM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLE1BQTBCO0lBRTFCLE1BQU0sRUFDSixLQUFLLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFFBQVEsR0FDVCxHQUFHLE1BQU0sQ0FBQztJQUNYLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQztJQUV0RCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDN0QsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUNsQixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQy9CLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDdkMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztZQUN6QyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQzVCLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxtRUFBbUU7UUFDbkUsc0VBQXNFO1FBQ3RFLHdFQUF3RTtRQUN4RSxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVwRSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM1QywwRUFBMEU7WUFDMUUsd0VBQXdFO1lBQ3hFLG9FQUFvRTtZQUNwRSxNQUFNLFlBQVksR0FBRyxTQUFTLFFBQVEsNEpBQTRKLENBQUM7WUFDbk0sYUFBYSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRTtnQkFDaEUsYUFBYTtnQkFDYixRQUFRO2dCQUNSLE1BQU07YUFDUCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUU7b0JBQ3ZDLFNBQVMsRUFBRSxhQUFhO29CQUN4QixXQUFXLEVBQUUsb0JBQW9CO29CQUNqQyxhQUFhLEVBQUUsTUFBTTtvQkFDckIsU0FBUyxFQUFFO3dCQUNULFFBQVE7d0JBQ1IsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQzdCLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUM1QixhQUFhLEVBQ2IsTUFBTSxnQkFBZ0IsRUFBRSxDQUN6QjtxQkFDRjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQztnQkFDRCxNQUFNLFdBQVcsQ0FBQztZQUNwQixDQUFDO1lBQ0QsSUFBSSxFQUFFLGFBQWEsQ0FBQztnQkFDbEIsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDakMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQzthQUNsQyxDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLHdCQUF3QixDQUFDO1FBRWpFLElBQUksRUFBRSxhQUFhLENBQUM7WUFDbEIsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtnQkFDM0QsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLGFBQWEsRUFBRSxNQUFNO2dCQUNyQixTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUU7YUFDeEIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLG9CQUFvQixDQUM1QiwyQkFBMkIsTUFBTSw4QkFBOEIsQ0FDaEUsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUMxQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN6QixDQUFDLEVBQ0QsT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO2dCQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEVBQUU7b0JBQ3pELGlCQUFpQixFQUFFLFVBQVU7aUJBQzlCLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QixhQUFhLENBQUMsSUFBSSxDQUNoQixpQkFBaUIsYUFBYSwyQ0FBMkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FDbkcsQ0FBQztnQkFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxhQUFhLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFO29CQUN0RCxRQUFRO29CQUNSLE1BQU07b0JBQ04sYUFBYTtvQkFDYixLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQU87aUJBQ25CLENBQUMsQ0FBQztnQkFDSCxJQUFJLEVBQUUsYUFBYSxDQUFDO29CQUNsQixHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO29CQUM5QixHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO2lCQUN6QyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELGFBQWEsQ0FBQyxLQUFLLENBQUMsMkNBQTJDLEVBQUU7b0JBQy9ELFFBQVE7b0JBQ1IsTUFBTTtvQkFDTixjQUFjO2lCQUNmLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRTtZQUM1QyxRQUFRO1lBQ1IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUNsQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNyQyxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQWUsQ0FBQztRQUVwQix1RUFBdUU7UUFDdkUsdUVBQXVFO1FBQ3ZFLG9FQUFvRTtRQUNwRSxzRUFBc0U7UUFDdEUsMkVBQTJFO1FBQzNFLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNwQyxNQUFNLFlBQVksR0FBRyxTQUFTLFFBQVEsMkJBQTJCLFVBQVUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQzVILFVBQVUsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUU7Z0JBQzVDLGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixVQUFVO2FBQ1gsQ0FBQyxDQUFDO1lBQ0gsb0VBQW9FO1lBQ3BFLGtFQUFrRTtZQUNsRSxpRUFBaUU7WUFDakUscUVBQXFFO1lBQ3JFLG1EQUFtRDtZQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQztvQkFDRixZQUFzQixDQUFDLEtBQUssR0FBRyxNQUFNLGdCQUFnQixDQUNwRCxJQUFJLENBQUMsS0FBSyxFQUNWLGFBQWEsRUFDYixNQUFNLGdCQUFnQixFQUFFLENBQ3pCLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AseUNBQXlDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtvQkFDdkMsU0FBUyxFQUFFLGFBQWE7b0JBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7b0JBQ2pDLGFBQWEsRUFBRSxNQUFNO29CQUNyQixTQUFTLEVBQUU7d0JBQ1QsUUFBUTt3QkFDUixLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FDN0IsWUFBWSxFQUNaLGFBQWEsRUFDYixNQUFNLGdCQUFnQixFQUFFLENBQ3pCO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2hDLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLG9EQUFvRCxFQUNwRDt3QkFDRSxhQUFhO3dCQUNiLE1BQU07d0JBQ04sUUFBUTt3QkFDUixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87cUJBQ3JCLENBQ0YsQ0FBQztvQkFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixDQUFDO2dCQUNELE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQztZQUNELElBQUksRUFBRSxhQUFhLENBQUM7Z0JBQ2xCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUN0QyxDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRTdCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsU0FBUyxNQUFNLGdDQUFnQyxDQUNoRCxDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDckMsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztZQUNoQyxvRUFBb0U7WUFDcEUsbUVBQW1FO1lBQ25FLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLElBQUksQ0FBQyxNQUFNLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUN6RSxNQUFNLGFBQWEsR0FBRyxNQUFNLEtBQUssQ0FDL0IsY0FBYyxFQUNkLEVBQUUsRUFDRixLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7Z0JBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxvQkFBb0IsQ0FDekMsSUFBSSxDQUFDLEtBQUssRUFDVixhQUFhLEVBQ2IsYUFBYSxFQUNiLEdBQUcsRUFDSCxVQUFVLEVBQ1YsRUFBRSxFQUNGLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDNUIsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO2dCQUMxQyxXQUFXLEVBQUUsYUFBYSxDQUFDO29CQUN6QixHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDckQsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDO2lCQUNoRCxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQyxDQUNGLENBQUM7WUFFRixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ2hDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1lBQzlDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLFdBQVcsRUFBRSxDQUFDO1lBRXhELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNsRCxPQUFPLE1BQU0sY0FBYyxDQUFDLEdBQUcsQ0FDN0I7b0JBQ0UsWUFBWSxFQUFFO3dCQUNaLFFBQVE7d0JBQ1IsTUFBTTt3QkFDTixhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUM7d0JBQ3ZDLE9BQU87cUJBQ1I7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixpQkFBaUIsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLGlCQUFpQixDQUFDO3dCQUMvQyxHQUFHLEVBQUUsUUFBUTs0QkFDWCxDQUFDLENBQUMsV0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTs0QkFDckMsQ0FBQyxDQUFDLG9CQUFvQixJQUFJLElBQUksSUFBSSxFQUFFO3dCQUN0QyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLGFBQWEsRUFBRTtxQkFDMUM7b0JBQ0Qsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtvQkFDakQsR0FBRztvQkFDSCxXQUFXLEVBQUUsYUFBYSxDQUFDLFdBQVc7b0JBQ3RDLGFBQWE7aUJBQ2QsRUFDRCxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FDbEMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixDQUFDO1lBRXhELElBQUksRUFBRSxhQUFhLENBQUM7Z0JBQ2xCLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQzthQUNuRCxDQUFDLENBQUM7WUFFSCxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRTtnQkFDakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixNQUFNLFVBQVUsR0FBRyxNQUFNLHdCQUF3QixDQUMvQyxNQUFNLEVBQ04sYUFBYSxFQUNiLGFBQWEsRUFDYixHQUFHLENBQ0osQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO2dCQUMxQyxhQUFhLEVBQUUsYUFBYSxDQUFDO29CQUMzQixHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7b0JBQzdDLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxPQUFPLFVBQVUsQ0FBQztpQkFDL0MsQ0FBQyxDQUFDO2dCQUNILE9BQU8sVUFBVSxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUFDO1lBRUgsb0VBQW9FO1lBQ3BFLGlFQUFpRTtZQUNqRSxrRUFBa0U7WUFDbEUsb0VBQW9FO1lBQ3BFLGtFQUFrRTtZQUNsRSwrREFBK0Q7WUFDL0QsNkNBQTZDO1lBQzdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLG1FQUFtRTtnQkFDbkUsb0VBQW9FO2dCQUNwRSwrREFBK0Q7Z0JBQy9ELGtFQUFrRTtnQkFDbEUsNkNBQTZDO2dCQUM3QyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ2hDLGFBQWEsQ0FBQyxJQUFJLENBQUMsNENBQTRDLEVBQUU7d0JBQy9ELGFBQWE7d0JBQ2IsTUFBTTt3QkFDTixLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztxQkFDeEQsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQ2IsR0FBRyxFQUFFLENBQUMsSUFBYSxFQUNuQixDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNOLDBEQUEwRDt3QkFDMUQsNEJBQTRCO3dCQUM1QixNQUFNLFlBQVksR0FDaEIsR0FBRyxFQUFFLElBQUksS0FBSyxZQUFZLElBQUksR0FBRyxFQUFFLElBQUksS0FBSyxpQkFBaUIsQ0FBQzt3QkFDaEUsSUFBSSxZQUFZOzRCQUFFLE9BQU8sSUFBYSxDQUFDO3dCQUN2QyxNQUFNLEdBQUcsQ0FBQztvQkFDWixDQUFDLENBQ0Y7b0JBQ0QsSUFBSSxPQUFPLENBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQzNELENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCw4QkFBOEI7WUFDOUIsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDN0IsTUFBTSxLQUFLLENBQUMsTUFBTTtpQkFDZixNQUFNLENBQUMsYUFBYSxFQUFFO2dCQUNyQixTQUFTLEVBQUUsZ0JBQWdCO2dCQUMzQixXQUFXLEVBQUUsb0JBQW9CO2dCQUNqQyxhQUFhLEVBQUUsTUFBTTtnQkFDckIsU0FBUyxFQUFFO29CQUNULFFBQVE7b0JBQ1IsTUFBTSxFQUFFLE1BQW9CO2lCQUM3QjthQUNGLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsYUFBYSxDQUFDLElBQUksQ0FDaEIsdURBQXVELEVBQ3ZEO3dCQUNFLGFBQWE7d0JBQ2IsTUFBTTt3QkFDTixRQUFRO3dCQUNSLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztxQkFDckIsQ0FDRixDQUFDO29CQUNGLGdCQUFnQixHQUFHLElBQUksQ0FBQztvQkFDeEIsT0FBTztnQkFDVCxDQUFDO2dCQUNELE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDN0IsQ0FBQztZQUVELElBQUksRUFBRSxhQUFhLENBQUM7Z0JBQ2xCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQ3BDLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxPQUFPLE1BQU0sQ0FBQzthQUMzQyxDQUFDLENBQUM7WUFFSCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLFVBQVUsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7b0JBQ3ZDLGFBQWE7b0JBQ2IsUUFBUTtvQkFDUixRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU07aUJBQ3JCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCx5REFBeUQ7WUFDekQsd0RBQXdEO1lBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNELENBQUM7UUFBQyxPQUFPLEdBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5ELE1BQU0sZUFBZSxHQUFHLE1BQU0scUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEUsTUFBTSxlQUFlLEdBQ25CLGVBQWUsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUU3RCxJQUFJLFlBQVksWUFBWSxLQUFLLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTVDLElBQUksRUFBRSxhQUFhLENBQUM7Z0JBQ2xCLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3RELEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3RELEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2xELEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FDeEIsT0FBTztvQkFDTCxDQUFDLENBQUMsT0FBTztvQkFDVCxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUM7d0JBQy9CLENBQUMsQ0FBQyxXQUFXO3dCQUNiLENBQUMsQ0FBQyxXQUFXLENBQ2xCO2dCQUNELEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzthQUN0QyxDQUFDLENBQUM7WUFFSCxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQywrQ0FBK0MsRUFBRTtvQkFDL0QsYUFBYTtvQkFDYixNQUFNO29CQUNOLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztpQkFDckIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUVELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osVUFBVSxDQUFDLEtBQUssQ0FDZCw2RUFBNkUsRUFDN0UsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsQ0FDekQsQ0FBQztnQkFDRixtRUFBbUU7Z0JBQ25FLGtFQUFrRTtnQkFDbEUsa0VBQWtFO2dCQUNsRSxxQ0FBcUM7Z0JBQ3JDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDeEQsWUFBc0IsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELElBQUksQ0FBQztvQkFDSCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTt3QkFDdkMsU0FBUyxFQUFFLGFBQWE7d0JBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7d0JBQ2pDLGFBQWEsRUFBRSxNQUFNO3dCQUNyQixTQUFTLEVBQUU7NEJBQ1QsUUFBUTs0QkFDUixLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FDN0IsWUFBWSxFQUNaLGFBQWEsRUFDYixNQUFNLGdCQUFnQixFQUFFLENBQ3pCO3lCQUNGO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUFDLE9BQU8sV0FBVyxFQUFFLENBQUM7b0JBQ3JCLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQ3hDLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLG9EQUFvRCxFQUNwRDs0QkFDRSxhQUFhOzRCQUNiLE1BQU07NEJBQ04sUUFBUTs0QkFDUixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87eUJBQzdCLENBQ0YsQ0FBQzt3QkFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUM3QixDQUFDO29CQUNELE1BQU0sV0FBVyxDQUFDO2dCQUNwQixDQUFDO2dCQUNELElBQUksRUFBRSxhQUFhLENBQUM7b0JBQ2xCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7b0JBQ2pDLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7aUJBQ2xDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzVCLENBQUM7WUFFRCw4Q0FBOEM7WUFDOUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUVwQyxJQUFJLEVBQUUsYUFBYSxDQUFDO2dCQUNsQixHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO2dCQUN4QyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2FBQ3hDLENBQUMsQ0FBQztZQUVILElBQUksY0FBYyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsc0JBQXNCO2dCQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsVUFBVSxDQUFDLEtBQUssQ0FDZCx3REFBd0QsRUFDeEQ7b0JBQ0UsYUFBYTtvQkFDYixRQUFRO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsVUFBVTtvQkFDVixVQUFVLEVBQUUsZUFBZTtpQkFDNUIsQ0FDRixDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLFNBQVMsUUFBUSxrQkFBa0IsVUFBVSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDOUksa0VBQWtFO2dCQUNsRSxtRUFBbUU7Z0JBQ25FLDREQUE0RDtnQkFDNUQsK0JBQStCO2dCQUMvQixNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDakQsWUFBc0IsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUNwQyxJQUFJLGVBQWU7b0JBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7Z0JBQzFELElBQUksQ0FBQztvQkFDSCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTt3QkFDdkMsU0FBUyxFQUFFLGFBQWE7d0JBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7d0JBQ2pDLGFBQWEsRUFBRSxNQUFNO3dCQUNyQixTQUFTLEVBQUU7NEJBQ1QsUUFBUTs0QkFDUixLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FDN0IsWUFBWSxFQUNaLGFBQWEsRUFDYixNQUFNLGdCQUFnQixFQUFFLENBQ3pCO3lCQUNGO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUFDLE9BQU8sV0FBVyxFQUFFLENBQUM7b0JBQ3JCLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQ3hDLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLG9EQUFvRCxFQUNwRDs0QkFDRSxhQUFhOzRCQUNiLE1BQU07NEJBQ04sUUFBUTs0QkFDUixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87eUJBQzdCLENBQ0YsQ0FBQzt3QkFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUM3QixDQUFDO29CQUNELE1BQU0sV0FBVyxDQUFDO2dCQUNwQixDQUFDO2dCQUNELElBQUksRUFBRSxhQUFhLENBQUM7b0JBQ2xCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7b0JBQ2pDLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztpQkFDdEMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUVELG9CQUFvQjtZQUNwQixJQUFJLGNBQWMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsVUFBVSxDQUFDLElBQUksQ0FBQyxrREFBa0QsRUFBRTtvQkFDbEUsYUFBYTtvQkFDYixRQUFRO29CQUNSLE9BQU8sRUFBRSxjQUFjO29CQUN2QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87aUJBQ3JCLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFO29CQUN6RCxhQUFhO29CQUNiLFFBQVE7b0JBQ1IsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFVBQVUsRUFBRSxlQUFlO2lCQUM1QixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsZ0VBQWdFO1lBQ2hFLDhEQUE4RDtZQUM5RCwyREFBMkQ7WUFDM0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUMvQyxHQUFhLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO29CQUN2QyxTQUFTLEVBQUUsZUFBZTtvQkFDMUIsV0FBVyxFQUFFLG9CQUFvQjtvQkFDakMsYUFBYSxFQUFFLE1BQU07b0JBQ3JCLFNBQVMsRUFBRTt3QkFDVCxRQUFRO3dCQUNSLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUM3QixHQUFHLEVBQ0gsYUFBYSxFQUNiLE1BQU0sZ0JBQWdCLEVBQUUsQ0FDekI7d0JBQ0QsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO3FCQUM5RDtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztvQkFDekMsYUFBYSxDQUFDLElBQUksQ0FDaEIscURBQXFELEVBQ3JEO3dCQUNFLGFBQWE7d0JBQ2IsTUFBTTt3QkFDTixRQUFRO3dCQUNSLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTztxQkFDOUIsQ0FDRixDQUFDO29CQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsTUFBTSxZQUFZLENBQUM7WUFDckIsQ0FBQztZQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQzdCLENBQUMsRUFDRCxjQUFjLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUM1RCxDQUFDLENBQUMsQ0FBQyxDQUNOLENBQUM7WUFFRixJQUFJLEVBQUUsYUFBYSxDQUFDO2dCQUNsQixHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQ3BELEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUN0QyxDQUFDLENBQUM7WUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHtcbiAgRW50aXR5Q29uZmxpY3RFcnJvcixcbiAgRmF0YWxFcnJvcixcbiAgUmV0cnlhYmxlRXJyb3IsXG4gIFJ1bkV4cGlyZWRFcnJvcixcbiAgVGhyb3R0bGVFcnJvcixcbiAgVG9vRWFybHlFcnJvcixcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGx1cmFsaXplLCBzdGVwRGlzcGxheU5hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBXb3JsZCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBTUEVDX1ZFUlNJT05fQ1VSUkVOVCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0tleSB9IGZyb20gJy4uL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciwgc3RlcExvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBnZXRTdGVwRnVuY3Rpb24gfSBmcm9tICcuLi9wcml2YXRlLmpzJztcbmltcG9ydCB7XG4gIGRlaHlkcmF0ZVN0ZXBFcnJvcixcbiAgZGVoeWRyYXRlU3RlcFJldHVyblZhbHVlLFxuICBoeWRyYXRlU3RlcEFyZ3VtZW50cyxcbiAgaHlkcmF0ZVN0ZXBFcnJvcixcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4uL3N0ZXAvY29udGV4dC1zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIEF0dHJpYnV0ZSBmcm9tICcuLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuaW1wb3J0IHsgdHJhY2UgfSBmcm9tICcuLi90ZWxlbWV0cnkuanMnO1xuaW1wb3J0IHtcbiAgZ2V0RXJyb3JOYW1lLFxuICBnZXRFcnJvclN0YWNrLFxuICBub3JtYWxpemVVbmtub3duRXJyb3IsXG4gIHByb21vdGVBYm9ydEVycm9yVG9GYXRhbCxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5pbXBvcnQgeyBnZXRQb3J0TGF6eSB9IGZyb20gJy4vZ2V0LXBvcnQtbGF6eS5qcyc7XG5pbXBvcnQgeyBtZW1vaXplRW5jcnlwdGlvbktleSB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBzYWZlV2FpdFVudGlsIH0gZnJvbSAnLi93YWl0LXVudGlsLmpzJztcblxuY29uc3QgREVGQVVMVF9TVEVQX01BWF9SRVRSSUVTID0gMztcblxuZXhwb3J0IGludGVyZmFjZSBTdGVwRXhlY3V0b3JQYXJhbXMge1xuICB3b3JsZDogV29ybGQ7XG4gIHdvcmtmbG93UnVuSWQ6IHN0cmluZztcbiAgLyoqIERlcGxveW1lbnQgdGhhdCBvd25zIHRoZSB3b3JrZmxvdyBydW4sIGZvciBmb3J3YXJkZWQgd3JpdGFibGUgc3RyZWFtcy4gKi9cbiAgd29ya2Zsb3dEZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xuICB3b3JrZmxvd1N0YXJ0ZWRBdDogbnVtYmVyO1xuICBzdGVwSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgZW5jcnlwdGlvbktleT86IENyeXB0b0tleTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBzdGVwIGV4ZWN1dGlvbiBhdHRlbXB0LiBUaGUgY2FsbGVyIGRlY2lkZXMgd2hhdCB0byBkb1xuICogYmFzZWQgb24gdGhlIHJlc3VsdCB0eXBlIChlLmcuLCBxdWV1ZSB3b3JrZmxvdyBjb250aW51YXRpb24sIHJlcGxheSBpbmxpbmUsIGV0Yy4pLlxuICovXG5leHBvcnQgdHlwZSBTdGVwRXhlY3V0aW9uUmVzdWx0ID1cbiAgfCB7IHR5cGU6ICdjb21wbGV0ZWQnOyBoYXNQZW5kaW5nT3BzPzogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnZmFpbGVkJyB9XG4gIHwgeyB0eXBlOiAncmV0cnknOyB0aW1lb3V0U2Vjb25kczogbnVtYmVyIH1cbiAgfCB7IHR5cGU6ICdza2lwcGVkJyB9XG4gIHwgeyB0eXBlOiAnZ29uZScgfVxuICB8IHsgdHlwZTogJ3Rocm90dGxlZCc7IHRpbWVvdXRTZWNvbmRzOiBudW1iZXIgfTtcblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBzdGVwOiBjcmVhdGVzIHN0ZXBfc3RhcnRlZCBldmVudCwgaHlkcmF0ZXMgaW5wdXQsXG4gKiBydW5zIHRoZSBzdGVwIGZ1bmN0aW9uLCBjcmVhdGVzIHN0ZXBfY29tcGxldGVkL3N0ZXBfZmFpbGVkL3N0ZXBfcmV0cnlpbmcgZXZlbnRzLlxuICpcbiAqIERvZXMgTk9UIHF1ZXVlIHdvcmtmbG93IGNvbnRpbnVhdGlvbiBtZXNzYWdlcyDigJQgdGhlIGNhbGxlciBkZWNpZGVzIHdoYXQgdG8gZG8gbmV4dC5cbiAqIFVzZWQgYnkgYm90aCB0aGUgVjEgc3RlcCBoYW5kbGVyIGFuZCB0aGUgVjIgY29tYmluZWQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTdGVwKFxuICBwYXJhbXM6IFN0ZXBFeGVjdXRvclBhcmFtc1xuKTogUHJvbWlzZTxTdGVwRXhlY3V0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICB3b3JsZCxcbiAgICB3b3JrZmxvd1J1bklkLFxuICAgIHdvcmtmbG93TmFtZSxcbiAgICB3b3JrZmxvd1N0YXJ0ZWRBdCxcbiAgICBzdGVwSWQsXG4gICAgc3RlcE5hbWUsXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGlzVmVyY2VsID0gcHJvY2Vzcy5lbnYuVkVSQ0VMX1VSTCAhPT0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNwYW5OYW1lID0gYHN0ZXAuZXhlY3V0ZSAke3N0ZXBEaXNwbGF5TmFtZShzdGVwTmFtZSl9YDtcbiAgcmV0dXJuIHRyYWNlKHNwYW5OYW1lLCB7fSwgYXN5bmMgKHNwYW4pID0+IHtcbiAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwTmFtZShzdGVwTmFtZSksXG4gICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dOYW1lKHdvcmtmbG93TmFtZSksXG4gICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dSdW5JZCh3b3JrZmxvd1J1bklkKSxcbiAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwSWQoc3RlcElkKSxcbiAgICB9KTtcblxuICAgIC8vIE1lbW9pemVkIGFjY2Vzc29yIGZvciB0aGUgcGVyLXJ1biBlbmNyeXB0aW9uIGtleS4gVGhlIGZpcnN0IGNhbGxlclxuICAgIC8vIChpbnB1dCBoeWRyYXRpb24gb24gdGhlIHN1Y2Nlc3MgcGF0aCwgb3Igb25lIG9mIHRoZSBlYXJseS1yZXR1cm5cbiAgICAvLyBkZWh5ZHJhdGVTdGVwRXJyb3IgcGF0aHMgaWYgc3RlcF9zdGFydGVkIGZhaWxzKSB0cmlnZ2VycyB0aGUgYWN0dWFsXG4gICAgLy8gZmV0Y2ggLyBIS0RGIGRlcml2YXRpb247IHN1YnNlcXVlbnQgY2FsbGVycyBhd2FpdCB0aGUgY2FjaGVkIHByb21pc2UuXG4gICAgY29uc3QgZ2V0RW5jcnlwdGlvbktleSA9IG1lbW9pemVFbmNyeXB0aW9uS2V5KHdvcmxkLCB3b3JrZmxvd1J1bklkKTtcblxuICAgIGNvbnN0IHN0ZXBGbiA9IGdldFN0ZXBGdW5jdGlvbihzdGVwTmFtZSk7XG4gICAgaWYgKCFzdGVwRm4gfHwgdHlwZW9mIHN0ZXBGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gU3RlcCBmdW5jdGlvbiBub3QgcmVnaXN0ZXJlZCDigJQgZmFpbCB0aGUgc3RlcCBpbW1lZGlhdGVseSAobm90IHRoZSBydW4pLlxuICAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBWMSBzdGVwIGhhbmRsZXIgcGF0dGVybjogY3JlYXRlIHN0ZXBfZmFpbGVkIGV2ZW50IHNvXG4gICAgICAvLyB0aGUgd29ya2Zsb3cgY2FuIGhhbmRsZSBpdCBncmFjZWZ1bGx5IHZpYSB0cnkvY2F0Y2ggaW4gdXNlciBjb2RlLlxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFN0ZXAgXCIke3N0ZXBOYW1lfVwiIGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IGRlcGxveW1lbnQuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBidWlsZCBvciBidW5kbGluZyBpc3N1ZSB0aGF0IGNhdXNlZCB0aGUgc3RlcCB0byBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGRlcGxveW1lbnQuYDtcbiAgICAgIHJ1bnRpbWVMb2dnZXIuZXJyb3IoJ1N0ZXAgZnVuY3Rpb24gbm90IHJlZ2lzdGVyZWQsIGZhaWxpbmcgc3RlcCcsIHtcbiAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgIHN0ZXBJZCxcbiAgICAgIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh3b3JrZmxvd1J1bklkLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9mYWlsZWQnLFxuICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICBjb3JyZWxhdGlvbklkOiBzdGVwSWQsXG4gICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgIGVycm9yOiBhd2FpdCBkZWh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBGYXRhbEVycm9yKGVycm9yTWVzc2FnZSksXG4gICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKHN0ZXBGYWlsRXJyKSB7XG4gICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKHN0ZXBGYWlsRXJyKSkge1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IHN0ZXBGYWlsRXJyO1xuICAgICAgfVxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwU3RhdHVzKCdmYWlsZWQnKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBGYXRhbEVycm9yKHRydWUpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnZmFpbGVkJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IG1heFJldHJpZXMgPSBzdGVwRm4ubWF4UmV0cmllcyA/PyBERUZBVUxUX1NURVBfTUFYX1JFVFJJRVM7XG5cbiAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwTWF4UmV0cmllcyhtYXhSZXRyaWVzKSxcbiAgICB9KTtcblxuICAgIC8vIHN0ZXBfc3RhcnRlZCB2YWxpZGF0ZXMgc3RhdGUgYW5kIHJldHVybnMgdGhlIHN0ZXAgZW50aXR5XG4gICAgbGV0IHN0ZXA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0UmVzdWx0ID0gYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh3b3JrZmxvd1J1bklkLCB7XG4gICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfc3RhcnRlZCcsXG4gICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICBldmVudERhdGE6IHsgc3RlcE5hbWUgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXN0YXJ0UmVzdWx0LnN0ZXApIHtcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgIGBzdGVwX3N0YXJ0ZWQgZXZlbnQgZm9yIFwiJHtzdGVwSWR9XCIgZGlkIG5vdCByZXR1cm4gc3RlcCBlbnRpdHlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzdGVwID0gc3RhcnRSZXN1bHQuc3RlcDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChUaHJvdHRsZUVycm9yLmlzKGVycikpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE1hdGgubWF4KFxuICAgICAgICAgIDEsXG4gICAgICAgICAgdHlwZW9mIGVyci5yZXRyeUFmdGVyID09PSAnbnVtYmVyJyA/IGVyci5yZXRyeUFmdGVyIDogMVxuICAgICAgICApO1xuICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oJ1Rocm90dGxlZCBvbiBzdGVwX3N0YXJ0ZWQsIGRlZmVycmluZycsIHtcbiAgICAgICAgICByZXRyeUFmdGVyU2Vjb25kczogcmV0cnlBZnRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICd0aHJvdHRsZWQnLCB0aW1lb3V0U2Vjb25kczogcmV0cnlBZnRlciB9O1xuICAgICAgfVxuICAgICAgaWYgKFJ1bkV4cGlyZWRFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICBgV29ya2Zsb3cgcnVuIFwiJHt3b3JrZmxvd1J1bklkfVwiIGhhcyBhbHJlYWR5IGNvbXBsZXRlZCwgc2tpcHBpbmcgc3RlcCBcIiR7c3RlcElkfVwiOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2dvbmUnIH07XG4gICAgICB9XG4gICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIHJ1bnRpbWVMb2dnZXIuZGVidWcoJ1N0ZXAgaW4gdGVybWluYWwgc3RhdGUsIHNraXBwaW5nJywge1xuICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgIGVycm9yOiBlcnIubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwU2tpcHBlZCh0cnVlKSxcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFNraXBSZWFzb24oJ2NvbXBsZXRlZCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3NraXBwZWQnIH07XG4gICAgICB9XG4gICAgICBpZiAoVG9vRWFybHlFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gTWF0aC5tYXgoMSwgZXJyLnJldHJ5QWZ0ZXIgPz8gMSk7XG4gICAgICAgIHJ1bnRpbWVMb2dnZXIuZGVidWcoJ1N0ZXAgcmV0cnlBZnRlciB0aW1lc3RhbXAgbm90IHlldCByZWFjaGVkJywge1xuICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICB0aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdyZXRyeScsIHRpbWVvdXRTZWNvbmRzIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgcnVudGltZUxvZ2dlci5kZWJ1ZygnU3RlcCBleGVjdXRpb24gZGV0YWlscycsIHtcbiAgICAgIHN0ZXBOYW1lLFxuICAgICAgc3RlcElkOiBzdGVwLnN0ZXBJZCxcbiAgICAgIHN0YXR1czogc3RlcC5zdGF0dXMsXG4gICAgICBhdHRlbXB0OiBzdGVwLmF0dGVtcHQsXG4gICAgfSk7XG5cbiAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwU3RhdHVzKHN0ZXAuc3RhdHVzKSxcbiAgICB9KTtcblxuICAgIGxldCByZXN1bHQ6IHVua25vd247XG5cbiAgICAvLyBDaGVjayBtYXggcmV0cmllcyBBRlRFUiBzdGVwX3N0YXJ0ZWQgKGF0dGVtcHQgd2FzIGp1c3QgaW5jcmVtZW50ZWQpLlxuICAgIC8vIE9ubHkgZW5mb3JjZSB3aGVuIHRoZSBzdGVwIGhhcyBhIHByZXZpb3VzIGVycm9yIOKAlCB0aGlzIGRpc3Rpbmd1aXNoZXNcbiAgICAvLyBhY3R1YWwgcmV0cmllcyAoZmFpbGVkIOKGkiByZXRyeSkgZnJvbSBjb25jdXJyZW50IHN0YXJ0cyAoVjIgaW5saW5lXG4gICAgLy8gZXhlY3V0aW9uIGxvb3AgY2FuIGNhdXNlIG11bHRpcGxlIGhhbmRsZXJzIHRvIHN0ZXBfc3RhcnRlZCB0aGUgc2FtZVxuICAgIC8vIHN0ZXAgc2ltdWx0YW5lb3VzbHksIGluZmxhdGluZyB0aGUgYXR0ZW1wdCBjb3VudGVyIHdpdGhvdXQgYW55IGZhaWx1cmUpLlxuICAgIGlmIChzdGVwLmF0dGVtcHQgPiBtYXhSZXRyaWVzICsgMSAmJiBzdGVwLmVycm9yKSB7XG4gICAgICBjb25zdCByZXRyeUNvdW50ID0gc3RlcC5hdHRlbXB0IC0gMTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBTdGVwIFwiJHtzdGVwTmFtZX1cIiBleGNlZWRlZCBtYXggcmV0cmllcyAoJHtyZXRyeUNvdW50fSAke3BsdXJhbGl6ZSgncmV0cnknLCAncmV0cmllcycsIHJldHJ5Q291bnQpfSlgO1xuICAgICAgc3RlcExvZ2dlci5lcnJvcignU3RlcCBleGNlZWRlZCBtYXggcmV0cmllcycsIHtcbiAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgIHJldHJ5Q291bnQsXG4gICAgICB9KTtcbiAgICAgIC8vIFByZXNlcnZlIHRoZSBwcmlvciBhdHRlbXB0J3Mgc2VyaWFsaXplZCBlcnJvciBhcyB0aGUgY2F1c2Ugc28gdGhlXG4gICAgICAvLyB1bmRlcmx5aW5nIGZhaWx1cmUgaXMgcmVjb3ZlcmFibGUgZnJvbSBgc3RlcC5lcnJvci5jYXVzZWAgYWZ0ZXJcbiAgICAgIC8vIGh5ZHJhdGlvbiwgd2l0aG91dCBmb3JjaW5nIGNvbnN1bWVycyB0byB3YWxrIHRoZSBzdGVwX3JldHJ5aW5nXG4gICAgICAvLyBldmVudCBoaXN0b3J5LiBCZXN0LWVmZm9ydDogaWYgaHlkcmF0aW9uIG9mIHRoZSBwcmlvciBgc3RlcC5lcnJvcmBcbiAgICAgIC8vIHRocm93cywgZmFsbCBiYWNrIHRvIGEgRmF0YWxFcnJvciB3aXRob3V0IGNhdXNlLlxuICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IEZhdGFsRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIGlmIChzdGVwLmVycm9yICE9IG51bGwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAod3JhcHBlZEVycm9yIGFzIEVycm9yKS5jYXVzZSA9IGF3YWl0IGh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICBzdGVwLmVycm9yLFxuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIElnbm9yZSDigJQgYmVzdC1lZmZvcnQgY2F1c2UgYXR0YWNobWVudC5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh3b3JrZmxvd1J1bklkLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9mYWlsZWQnLFxuICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICBjb3JyZWxhdGlvbklkOiBzdGVwSWQsXG4gICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgIGVycm9yOiBhd2FpdCBkZWh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICAgIHdyYXBwZWRFcnJvcixcbiAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgYXdhaXQgZ2V0RW5jcnlwdGlvbktleSgpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAnVHJpZWQgZmFpbGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnZmFpbGVkJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwUmV0cnlFeGhhdXN0ZWQodHJ1ZSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlsZWQnIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGF0dGVtcHQgPSBzdGVwLmF0dGVtcHQ7XG5cbiAgICAgIGlmICghc3RlcC5zdGFydGVkQXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgIGBTdGVwIFwiJHtzdGVwSWR9XCIgaGFzIG5vIFwic3RhcnRlZEF0XCIgdGltZXN0YW1wYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RlcFN0YXJ0ZWRBdCA9IHN0ZXAuc3RhcnRlZEF0O1xuICAgICAgY29uc3Qgb3BzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcbiAgICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgZW5jcnlwdGlvbiBrZXkgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZSByZXNvbHZlXG4gICAgICAvLyB0aHJvdWdoIHRoZSBtZW1vaXplZCBhY2Nlc3NvciBkZWNsYXJlZCBhdCB0aGUgdG9wIG9mIHRoaXMgdHJhY2UuXG4gICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcGFyYW1zLmVuY3J5cHRpb25LZXkgPz8gKGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKSk7XG4gICAgICBjb25zdCBoeWRyYXRlZElucHV0ID0gYXdhaXQgdHJhY2UoXG4gICAgICAgICdzdGVwLmh5ZHJhdGUnLFxuICAgICAgICB7fSxcbiAgICAgICAgYXN5bmMgKGh5ZHJhdGVTcGFuKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IGF3YWl0IGh5ZHJhdGVTdGVwQXJndW1lbnRzKFxuICAgICAgICAgICAgc3RlcC5pbnB1dCxcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgb3BzLFxuICAgICAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgcGFyYW1zLndvcmtmbG93RGVwbG95bWVudElkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgICBoeWRyYXRlU3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcEFyZ3VtZW50c0NvdW50KGh5ZHJhdGVkLmFyZ3MubGVuZ3RoKSxcbiAgICAgICAgICAgIC4uLkF0dHJpYnV0ZS5RdWV1ZURlc2VyaWFsaXplVGltZU1zKGR1cmF0aW9uTXMpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBoeWRyYXRlZDtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgYXJncyA9IGh5ZHJhdGVkSW5wdXQuYXJncztcbiAgICAgIGNvbnN0IHRoaXNWYWwgPSBoeWRyYXRlZElucHV0LnRoaXNWYWwgPz8gbnVsbDtcbiAgICAgIGNvbnN0IHBvcnQgPSBpc1ZlcmNlbCA/IHVuZGVmaW5lZCA6IGF3YWl0IGdldFBvcnRMYXp5KCk7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvblN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICByZXN1bHQgPSBhd2FpdCB0cmFjZSgnc3RlcC5leGVjdXRlJywge30sIGFzeW5jICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNvbnRleHRTdG9yYWdlLnJ1bihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGVwTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICAgICAgc3RlcFN0YXJ0ZWRBdDogbmV3IERhdGUoK3N0ZXBTdGFydGVkQXQpLFxuICAgICAgICAgICAgICBhdHRlbXB0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtmbG93TWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICB3b3JrZmxvd1N0YXJ0ZWRBdDogbmV3IERhdGUoK3dvcmtmbG93U3RhcnRlZEF0KSxcbiAgICAgICAgICAgICAgdXJsOiBpc1ZlcmNlbFxuICAgICAgICAgICAgICAgID8gYGh0dHBzOi8vJHtwcm9jZXNzLmVudi5WRVJDRUxfVVJMfWBcbiAgICAgICAgICAgICAgICA6IGBodHRwOi8vbG9jYWxob3N0OiR7cG9ydCA/PyAzMDAwfWAsXG4gICAgICAgICAgICAgIGZlYXR1cmVzOiB7IGVuY3J5cHRpb246ICEhZW5jcnlwdGlvbktleSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtmbG93RGVwbG95bWVudElkOiBwYXJhbXMud29ya2Zsb3dEZXBsb3ltZW50SWQsXG4gICAgICAgICAgICBvcHMsXG4gICAgICAgICAgICBjbG9zdXJlVmFyczogaHlkcmF0ZWRJbnB1dC5jbG9zdXJlVmFycyxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiBzdGVwRm4uYXBwbHkodGhpc1ZhbCwgYXJncylcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXhlY3V0aW9uVGltZU1zID0gRGF0ZS5ub3coKSAtIGV4ZWN1dGlvblN0YXJ0VGltZTtcblxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5RdWV1ZUV4ZWN1dGlvblRpbWVNcyhleGVjdXRpb25UaW1lTXMpLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRyYWNlKCdzdGVwLmRlaHlkcmF0ZScsIHt9LCBhc3luYyAoZGVoeWRyYXRlU3BhbikgPT4ge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBkZWh5ZHJhdGVkID0gYXdhaXQgZGVoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgICAgb3BzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBkZWh5ZHJhdGVTcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuUXVldWVTZXJpYWxpemVUaW1lTXMoZHVyYXRpb25NcyksXG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBSZXN1bHRUeXBlKHR5cGVvZiBkZWh5ZHJhdGVkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkZWh5ZHJhdGVkO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEZsdXNoIHBlbmRpbmcgb3BzIChzdHJlYW0gd3JpdGVzLCBldGMuKSB3aXRoIGEgc2hvcnQgaW5saW5lIHdhaXQuXG4gICAgICAvLyBOb3cgdGhhdCBXb3JrZmxvd1NlcnZlcldyaXRhYmxlU3RyZWFtIGZsdXNoZXMgc3luY2hyb25vdXNseSBvblxuICAgICAgLy8gZWFjaCB3cml0ZSAobm90IHZpYSBzZXRUaW1lb3V0KSwgdGhlIGZsdXNoYWJsZVBpcGUncyBwZW5kaW5nT3BzXG4gICAgICAvLyBhY2N1cmF0ZWx5IHJlZmxlY3RzIHdoZXRoZXIgZGF0YSBoYXMgcmVhY2hlZCB0aGUgc2VydmVyLiBNb3N0IG9wc1xuICAgICAgLy8gc2V0dGxlIHdpdGhpbiB+MjAwbXMgKDEwMG1zIGxvY2stcmVsZWFzZSBwb2xsaW5nICsgSFRUUCBmbHVzaCkuXG4gICAgICAvLyBJZiBvcHMgZG9uJ3Qgc2V0dGxlIGluIDUwMG1zIChlLmcuLCBXcml0YWJsZVN0cmVhbSBrZXB0IG9wZW5cbiAgICAgIC8vIGFjcm9zcyBzdGVwcyksIHdhaXRVbnRpbCBoYW5kbGVzIHRoZSByZXN0LlxuICAgICAgbGV0IG9wc1NldHRsZWQgPSB0cnVlO1xuICAgICAgaWYgKG9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG9wc1Byb21pc2UgPSBQcm9taXNlLmFsbChvcHMpO1xuICAgICAgICAvLyBUaGUgcmFjZSBiZWxvdyBzdXJmYWNlcyBmYWlsdXJlcyBpbmxpbmUgd2hlbiBvcHMgc2V0dGxlIHF1aWNrbHk7XG4gICAgICAgIC8vIGlmIHRoZSA1MDBtcyB0aW1lb3V0IHdpbnMsIHRoZSBmYWlsdXJlIGlzIG9ubHkgb2JzZXJ2ZWQgaGVyZS4gVGhlXG4gICAgICAgIC8vIHByb21pc2UgaGFuZGVkIHRvIHdhaXRVbnRpbCBtdXN0IG5ldmVyIHJlamVjdCAoYW4gdW5jb25zdW1lZFxuICAgICAgICAvLyB3YWl0VW50aWwgcmVqZWN0aW9uIGNyYXNoZXMgdGhlIHByb2Nlc3MgYXMgdW5oYW5kbGVkUmVqZWN0aW9uKSxcbiAgICAgICAgLy8gc28gdW5leHBlY3RlZCBmYWlsdXJlcyBhcmUgbG9nZ2VkIGluc3RlYWQuXG4gICAgICAgIHNhZmVXYWl0VW50aWwob3BzUHJvbWlzZSwgKGVycikgPT4ge1xuICAgICAgICAgIHJ1bnRpbWVMb2dnZXIud2FybignQmFja2dyb3VuZCBmbHVzaCBvZiBzdGVwIHN0cmVhbSBvcHMgZmFpbGVkJywge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcHNTZXR0bGVkID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICBvcHNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgICAoKSA9PiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgZXhwZWN0ZWQgY2xpZW50IGRpc2Nvbm5lY3QgZXJyb3JzIChlLmcuLCBicm93c2VyXG4gICAgICAgICAgICAgIC8vIHJlZnJlc2ggZHVyaW5nIHN0cmVhbWluZylcbiAgICAgICAgICAgICAgY29uc3QgaXNBYm9ydEVycm9yID1cbiAgICAgICAgICAgICAgICBlcnI/Lm5hbWUgPT09ICdBYm9ydEVycm9yJyB8fCBlcnI/Lm5hbWUgPT09ICdSZXNwb25zZUFib3J0ZWQnO1xuICAgICAgICAgICAgICBpZiAoaXNBYm9ydEVycm9yKSByZXR1cm4gdHJ1ZSBhcyBjb25zdDtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgbmV3IFByb21pc2U8ZmFsc2U+KChyKSA9PiBzZXRUaW1lb3V0KCgpID0+IHIoZmFsc2UpLCA1MDApKSxcbiAgICAgICAgXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBzdGVwX2NvbXBsZXRlZCBldmVudFxuICAgICAgbGV0IHN0ZXBDb21wbGV0ZWQ0MDkgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHdvcmxkLmV2ZW50c1xuICAgICAgICAuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX2NvbXBsZXRlZCcsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQgYXMgVWludDhBcnJheSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgJ1RyaWVkIGNvbXBsZXRpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3RlcENvbXBsZXRlZDQwOSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmIChzdGVwQ29tcGxldGVkNDA5KSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgfVxuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2NvbXBsZXRlZCcpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJlc3VsdFR5cGUodHlwZW9mIHJlc3VsdCksXG4gICAgICB9KTtcblxuICAgICAgaWYgKG9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0ZXBMb2dnZXIuZGVidWcoJ1N0ZXAgaGFzIHBlbmRpbmcgb3BzJywge1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgb3BzQ291bnQ6IG9wcy5sZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gaGFzUGVuZGluZ09wcyBzaWduYWxzIHRoZSBWMiBoYW5kbGVyIHRvIGJyZWFrIHRoZSBsb29wXG4gICAgICAvLyBhbmQgcXVldWUgYSBjb250aW51YXRpb24gc28gd2FpdFVudGlsIGNhbiBmbHVzaCB0aGVtLlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ2NvbXBsZXRlZCcsIGhhc1BlbmRpbmdPcHM6ICFvcHNTZXR0bGVkIH07XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBlZmZlY3RpdmVFcnIgPSBwcm9tb3RlQWJvcnRFcnJvclRvRmF0YWwoZXJyKTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZEVycm9yID0gYXdhaXQgbm9ybWFsaXplVW5rbm93bkVycm9yKGVmZmVjdGl2ZUVycik7XG4gICAgICBjb25zdCBub3JtYWxpemVkU3RhY2sgPVxuICAgICAgICBub3JtYWxpemVkRXJyb3Iuc3RhY2sgfHwgZ2V0RXJyb3JTdGFjayhlZmZlY3RpdmVFcnIpIHx8ICcnO1xuXG4gICAgICBpZiAoZWZmZWN0aXZlRXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgc3Bhbj8ucmVjb3JkRXhjZXB0aW9uPy4oZWZmZWN0aXZlRXJyKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNGYXRhbCA9IEZhdGFsRXJyb3IuaXMoZWZmZWN0aXZlRXJyKTtcblxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwRXJyb3JOYW1lKGdldEVycm9yTmFtZShlZmZlY3RpdmVFcnIpKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBFcnJvck1lc3NhZ2Uobm9ybWFsaXplZEVycm9yLm1lc3NhZ2UpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuRXJyb3JUeXBlKGdldEVycm9yTmFtZShlZmZlY3RpdmVFcnIpKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLkVycm9yQ2F0ZWdvcnkoXG4gICAgICAgICAgaXNGYXRhbFxuICAgICAgICAgICAgPyAnZmF0YWwnXG4gICAgICAgICAgICA6IFJldHJ5YWJsZUVycm9yLmlzKGVmZmVjdGl2ZUVycilcbiAgICAgICAgICAgICAgPyAncmV0cnlhYmxlJ1xuICAgICAgICAgICAgICA6ICd0cmFuc2llbnQnXG4gICAgICAgICksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5FcnJvclJldHJ5YWJsZSghaXNGYXRhbCksXG4gICAgICB9KTtcblxuICAgICAgaWYgKFJ1bkV4cGlyZWRFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIHN0ZXBMb2dnZXIuaW5mbygnV29ya2Zsb3cgcnVuIGFscmVhZHkgY29tcGxldGVkLCBza2lwcGluZyBzdGVwJywge1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgc3RlcElkLFxuICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2dvbmUnIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0ZhdGFsKSB7XG4gICAgICAgIHN0ZXBMb2dnZXIuZXJyb3IoXG4gICAgICAgICAgJ0VuY291bnRlcmVkIEZhdGFsRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHN0ZXAsIGJ1YmJsaW5nIHVwIHRvIHBhcmVudCB3b3JrZmxvdycsXG4gICAgICAgICAgeyB3b3JrZmxvd1J1bklkLCBzdGVwTmFtZSwgZXJyb3JTdGFjazogbm9ybWFsaXplZFN0YWNrIH1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gQXBwbHkgdGhlIG5vcm1hbGl6ZWQgc3RhY2sgdG8gdGhlIHRocm93biB2YWx1ZSBzbyB0aGUgc2VyaWFsaXplZFxuICAgICAgICAvLyBlcnJvciBwcmVzZXJ2ZXMgaXQgZm9yIGNvbnN1bWVycy4gYHR5cGVzLmlzTmF0aXZlRXJyb3IoKWAgd29ya3NcbiAgICAgICAgLy8gYWNyb3NzIFZNIHJlYWxtcyAoYSB3b3JrZmxvdy10aHJvd24gZXJyb3IgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlXG4gICAgICAgIC8vIFZNJ3MgRXJyb3IgY2xhc3MsIG5vdCB0aGUgaG9zdCdzKS5cbiAgICAgICAgaWYgKHR5cGVzLmlzTmF0aXZlRXJyb3IoZWZmZWN0aXZlRXJyKSAmJiBub3JtYWxpemVkU3RhY2spIHtcbiAgICAgICAgICAoZWZmZWN0aXZlRXJyIGFzIEVycm9yKS5zdGFjayA9IG5vcm1hbGl6ZWRTdGFjaztcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9mYWlsZWQnLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUVycixcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoc3RlcEZhaWxFcnIpIHtcbiAgICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGVwRmFpbEVycikpIHtcbiAgICAgICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgJ1RyaWVkIGZhaWxpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHN0ZXBGYWlsRXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgc3RlcEZhaWxFcnI7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2ZhaWxlZCcpLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwRmF0YWxFcnJvcih0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlsZWQnIH07XG4gICAgICB9XG5cbiAgICAgIC8vIE5vbi1mYXRhbCBlcnJvcjogY2hlY2sgaWYgcmV0cmllcyByZW1haW5pbmdcbiAgICAgIGNvbnN0IGN1cnJlbnRBdHRlbXB0ID0gc3RlcC5hdHRlbXB0O1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBBdHRlbXB0KGN1cnJlbnRBdHRlbXB0KSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBNYXhSZXRyaWVzKG1heFJldHJpZXMpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjdXJyZW50QXR0ZW1wdCA+PSBtYXhSZXRyaWVzICsgMSkge1xuICAgICAgICAvLyBNYXggcmV0cmllcyByZWFjaGVkXG4gICAgICAgIGNvbnN0IHJldHJ5Q291bnQgPSBzdGVwLmF0dGVtcHQgLSAxO1xuICAgICAgICBzdGVwTG9nZ2VyLmVycm9yKFxuICAgICAgICAgICdNYXggcmV0cmllcyByZWFjaGVkLCBidWJibGluZyBlcnJvciB0byBwYXJlbnQgd29ya2Zsb3cnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgIGF0dGVtcHQ6IHN0ZXAuYXR0ZW1wdCxcbiAgICAgICAgICAgIHJldHJ5Q291bnQsXG4gICAgICAgICAgICBlcnJvclN0YWNrOiBub3JtYWxpemVkU3RhY2ssXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU3RlcCBcIiR7c3RlcE5hbWV9XCIgZmFpbGVkIGFmdGVyICR7bWF4UmV0cmllc30gJHtwbHVyYWxpemUoJ3JldHJ5JywgJ3JldHJpZXMnLCBtYXhSZXRyaWVzKX06ICR7bm9ybWFsaXplZEVycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgLy8gV3JhcCB0aGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlIGFzIGBjYXVzZWAgb24gYSBmcmVzaCBGYXRhbEVycm9yXG4gICAgICAgIC8vIHNvIHRoZSB3cmFwcGluZyBtZXNzYWdlICsgcmV0cnktY291bnQgZnJhbWluZyBpcyB0aGUgdXNlci1mYWNpbmdcbiAgICAgICAgLy8gZXJyb3Igd2hpbGUgdGhlIG9yaWdpbmFsIGZhaWx1cmUgcmVtYWlucyByZWNvdmVyYWJsZSBmcm9tXG4gICAgICAgIC8vIGBlcnIuY2F1c2VgIGFmdGVyIGh5ZHJhdGlvbi5cbiAgICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IEZhdGFsRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgKHdyYXBwZWRFcnJvciBhcyBFcnJvcikuY2F1c2UgPSBlcnI7XG4gICAgICAgIGlmIChub3JtYWxpemVkU3RhY2spIHdyYXBwZWRFcnJvci5zdGFjayA9IG5vcm1hbGl6ZWRTdGFjaztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfZmFpbGVkJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGF3YWl0IGRlaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgICAgICB3cmFwcGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKHN0ZXBGYWlsRXJyKSB7XG4gICAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoc3RlcEZhaWxFcnIpKSB7XG4gICAgICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICdUcmllZCBmYWlsaW5nIHN0ZXAsIGJ1dCBzdGVwIGhhcyBhbHJlYWR5IGZpbmlzaGVkLicsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdGVwRmFpbEVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3NraXBwZWQnIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IHN0ZXBGYWlsRXJyO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwU3RhdHVzKCdmYWlsZWQnKSxcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJldHJ5RXhoYXVzdGVkKHRydWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxlZCcgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUmV0cmllcyByZW1haW5pbmdcbiAgICAgIGlmIChSZXRyeWFibGVFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIHN0ZXBMb2dnZXIuaW5mbygnRW5jb3VudGVyZWQgUmV0cnlhYmxlRXJyb3IsIHN0ZXAgd2lsbCBiZSByZXRyaWVkJywge1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgYXR0ZW1wdDogY3VycmVudEF0dGVtcHQsXG4gICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcExvZ2dlci5pbmZvKCdFbmNvdW50ZXJlZCBFcnJvciwgc3RlcCB3aWxsIGJlIHJldHJpZWQnLCB7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICBhdHRlbXB0OiBjdXJyZW50QXR0ZW1wdCxcbiAgICAgICAgICBlcnJvclN0YWNrOiBub3JtYWxpemVkU3RhY2ssXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSB0aGUgbm9ybWFsaXplZCBzdGFjayB0byB0aGUgdGhyb3duIHZhbHVlIHNvIGl0IHN1cnZpdmVzXG4gICAgICAvLyBzZXJpYWxpemF0aW9uLiBTZWUgdGhlIEZhdGFsRXJyb3Igc2l0ZSBhYm92ZSBmb3Igd2h5IHdlIHVzZVxuICAgICAgLy8gYHR5cGVzLmlzTmF0aXZlRXJyb3JgIGluc3RlYWQgb2YgYGVyciBpbnN0YW5jZW9mIEVycm9yYC5cbiAgICAgIGlmICh0eXBlcy5pc05hdGl2ZUVycm9yKGVycikgJiYgbm9ybWFsaXplZFN0YWNrKSB7XG4gICAgICAgIChlcnIgYXMgRXJyb3IpLnN0YWNrID0gbm9ybWFsaXplZFN0YWNrO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh3b3JrZmxvd1J1bklkLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9yZXRyeWluZycsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgZXJyb3I6IGF3YWl0IGRlaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAuLi4oUmV0cnlhYmxlRXJyb3IuaXMoZXJyKSAmJiB7IHJldHJ5QWZ0ZXI6IGVyci5yZXRyeUFmdGVyIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoc3RlcFJldHJ5RXJyKSB7XG4gICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKHN0ZXBSZXRyeUVycikpIHtcbiAgICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAnVHJpZWQgcmV0cnlpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogc3RlcFJldHJ5RXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBzdGVwUmV0cnlFcnI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gTWF0aC5tYXgoXG4gICAgICAgIDEsXG4gICAgICAgIFJldHJ5YWJsZUVycm9yLmlzKGVycilcbiAgICAgICAgICA/IE1hdGguY2VpbCgoK2Vyci5yZXRyeUFmdGVyLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMClcbiAgICAgICAgICA6IDFcbiAgICAgICk7XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJldHJ5VGltZW91dFNlY29uZHModGltZW91dFNlY29uZHMpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJldHJ5V2lsbFJldHJ5KHRydWUpLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IHR5cGU6ICdyZXRyeScsIHRpbWVvdXRTZWNvbmRzIH07XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"step-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/step-handler.ts"],"names":[],"mappings":"AA+jCA,eAAO,MAAM,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAM3D,CAAC"}
1
+ {"version":3,"file":"step-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/step-handler.ts"],"names":[],"mappings":"AA8lCA,eAAO,MAAM,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAM3D,CAAC"}